public Bill changeBillStatus(Bill bill) {
    Bill billInDB = this.getEntityById(Bill.class, bill.getId());
    // 如果超级管理员将状态从“已送达”变更为其他任何状态的时候,要删除其相应的厂商财务信息和农户财务信息。
    if (billInDB.getStatus() == WebConstants.BILL_STATUS_FINISH
        && bill.getStatus() != WebConstants.BILL_STATUS_FINISH) {
      billDao.deleteFinance(billInDB.getId());
    }

    String oldStatus = billInDB.getStatusTxt();
    String newStatus = bill.getStatusTxt();
    billInDB.setStatus(bill.getStatus());
    billInDB.setReason(bill.getReason());
    this.saveOrUpdateEntity(billInDB);
    // 保存日志
    BillLog log = Util.getBaseLog(BillLog.class, oldStatus + " -> " + newStatus);
    log.setBill(bill);
    log.setRemark(bill.getReason());

    // 发邮件
    sendEmail(billInDB, "单据状态改变(" + oldStatus + " -> " + newStatus + ")");

    this.saveOrUpdateEntity(log);
    return billInDB;
  }