/**
  * 待审核查询分页
  *
  * @param filter
  * @return
  */
 public QueryResult<AmountAdjustmentForm> findAmountAdjustmentWaitApproveFilter(
     AmountAdjustmentFilter filter) {
   List<AmountAdjustmentForm> riskCustomers =
       amountAdjustmentDao.findAmountAdjustmentWaitApproveByFilter(filter);
   int size = amountAdjustmentDao.findAmountAdjustmentWaitApproveCountByFilter(filter);
   QueryResult<AmountAdjustmentForm> qs =
       new QueryResult<AmountAdjustmentForm>(size, riskCustomers);
   return qs;
 }
  /**
   * 把机构主管拒绝后超过指定天数的记录改为可直接上报卡中心
   *
   * @return
   */
  public void updateStatusToUnreportedCardcenter() {
    // System.out.println(riskReviewProcessMaxDay+"  == rrtt");
    riskReviewProcessService.updateStatusToUnreportedCardcenter(riskReviewProcessMaxDay);
    accountalilityDao.autoAccountalilityEnd(riskReviewProcessMaxDay);
    // 调额申请到的单据超过时间未审批释放掉
    amountAdjustmentDao.autoAfterApplyTimeReleaseApply(riskReviewProcessMaxDay);
    // 进件申请审批单据超过时间未审批释放掉
    customerApplicationIntopieceWaitDao.autoAfterApplyTimeReleaseApply(riskReviewProcessMaxDay);

    List<CustomerApplicationIntopieceWaitForm> intopieceWaitForms =
        customerApplicationIntopieceWaitDao.findNotEqualsActualAndFinalAmount();
    for (CustomerApplicationIntopieceWaitForm waitForm : intopieceWaitForms) {
      String content =
          "客户["
              + waitForm.getChineseName()
              + "]对应产品 ["
              + waitForm.getProductName()
              + "]的进件,审批额度为["
              + (Double.parseDouble(waitForm.getFinalApproval()) / 100)
              + "],但实际额度为["
              + (Double.parseDouble(waitForm.getActualQuote()) / 100)
              + "],两者不同请确认.";
      notificationService.insertNotification(
          NotificationEnum.qita, waitForm.getUserId(), "进件审批额度和实际额度不同", content, null);
    }
  }
  /**
   * 申请审核额度调整
   *
   * @param userId
   * @return
   */
  public int applayApproveAmountAdjustment(String userId) {
    // 判断自己是否有审核任务
    int i = 0;
    if (amountAdjustmentComdao.getWaitProcessAmountAdjustmentCountByUserId(userId) != 0) {
      return 0;
    }
    // 是否有审核的进件
    List<AmountAdjustmentProcessForm> adjustmentProcessForms =
        amountAdjustmentDao.findWaitProcessAmountAdjustmentAll();
    for (AmountAdjustmentProcessForm adjustmentProcessForm : adjustmentProcessForms) {
      List<NodeAudit> listNode =
          nodeAuditService.findByNodeAuditByUserId(
              NodeAuditTypeEnum.ProductAmountAdjust.toString(),
              userId,
              adjustmentProcessForm.getProductId());
      boolean flag = false;
      for (NodeAudit nodeAudit : listNode) {
        if (adjustmentProcessForm.getProductId().equals(nodeAudit.getProductId())
            && adjustmentProcessForm.getNextNodeId().equals(nodeAudit.getId())) {
          adjustmentProcessForm.setDelayAuditUser(userId);
          i = amountAdjustmentDao.updateWaitProcessAmountAdjustment(adjustmentProcessForm);

          AmountAdjustment adjustment =
              commonDao.findObjectById(
                  AmountAdjustment.class, adjustmentProcessForm.getAmountAdjustmentId());
          adjustment.setModifiedBy(userId);
          adjustment.setModifiedTime(new Date());
          commonDao.updateObject(adjustment);
          flag = true;
          break;
        }
      }
      if (flag) {
        break;
      }
    }
    return i;
  }
 public AmountAdjustmentForm findWaitApproveAmountAdjustById(String id) {
   return amountAdjustmentDao.findWaitApproveAmountAdjustById(id);
 }
  /**
   * 审核额度调整
   *
   * @param amountAdjustmentForm
   * @param request
   */
  public void approveAmountAdjustment(
      AmountAdjustmentForm amountAdjustmentForm, HttpServletRequest request) {
    User user = (User) Beans.get(LoginManager.class).getLoggedInUser(request);
    String approveStatus = amountAdjustmentForm.getApproveStatus();
    AmountAdjustment amountAdjustment =
        commonDao.findObjectById(AmountAdjustment.class, amountAdjustmentForm.getId());

    AmountAdjustmentProcess amountAdjustmentProcess =
        amountAdjustmentComdao.findAmountAdjustmentProcess(
            amountAdjustmentForm.getId(), amountAdjustmentForm.getSerialNumber());

    if (StringUtils.isNotEmpty(approveStatus)
        && approveStatus.equals(ApproveOperationTypeEnum.RETURNAPPROVE.toString())) {
      String fallbackReason = request.getParameter("reason");
      amountAdjustmentProcess.setFallbackReason(fallbackReason);
    } else if (StringUtils.isNotEmpty(approveStatus)
        && approveStatus.equals(ApproveOperationTypeEnum.REJECTAPPROVE.toString())) {
      amountAdjustmentProcess.setRefusalReason(amountAdjustmentForm.getReason());
    }
    String examineResutl =
        processService.examine(
            amountAdjustmentForm.getSerialNumber(),
            user.getId(),
            approveStatus,
            amountAdjustmentForm.getApprovalLimit());

    // 更新单据状态
    if (examineResutl.equals(ApproveOperationTypeEnum.REJECTAPPROVE.toString())
        || examineResutl.equals(ApproveOperationTypeEnum.RETURNAPPROVE.toString())
        || examineResutl.equals(ApproveOperationTypeEnum.NORMALEND.toString())) {
      if (examineResutl.equals(ApproveOperationTypeEnum.REJECTAPPROVE.toString())) {
        amountAdjustment.setApproval(AmountAdjustmentApproveStatusEnum.Refuse.toString());
      }
      if (examineResutl.equals(ApproveOperationTypeEnum.RETURNAPPROVE.toString())) {
        amountAdjustment.setApproval(AmountAdjustmentApproveStatusEnum.Back.toString());
      }
      if (examineResutl.equals(ApproveOperationTypeEnum.NORMALEND.toString())) {
        amountAdjustment.setApproval(AmountAdjustmentApproveStatusEnum.Success.toString());
      }
      amountAdjustment.setId(amountAdjustmentForm.getId());
      amountAdjustment.setModifiedBy(user.getId());
      amountAdjustment.setModifiedTime(new Date());
      commonDao.updateObject(amountAdjustment);

      amountAdjustmentProcess.setNextNodeId(null);
    } else {
      amountAdjustment.setApproval(AmountAdjustmentApproveStatusEnum.Audit.toString());
      amountAdjustment.setId(amountAdjustmentForm.getId());
      amountAdjustment.setModifiedBy(user.getId());
      amountAdjustment.setModifiedTime(new Date());
      commonDao.updateObject(amountAdjustment);

      amountAdjustmentProcess.setNextNodeId(examineResutl);
    }

    amountAdjustmentProcess.setProcessOpStatus(approveStatus);
    amountAdjustmentProcess.setExamineAmount(amountAdjustmentForm.getApprovalLimit());
    amountAdjustmentProcess.setAuditUser(user.getId());
    amountAdjustmentProcess.setAuditTime(new Date());

    amountAdjustmentDao.updateAmountAdjustmentProcess(amountAdjustmentProcess);
  }