/**
   * 审核处理
   *
   * @return
   */
  @RequestMapping(
      value = "auditDetailView",
      method = {RequestMethod.GET, RequestMethod.POST})
  public ModelAndView auditDetailView(HttpServletRequest request) {
    ModelAndView modelView = createModelAndViewWithSign("audit_detail", request);
    // 获取请假申请信息
    String id = HttpRequestUtil.getInst().getString("id");
    // 1、获取报销信息
    Expense expense = expenseService.getExpenseById(id);
    if (null == expense) {
      throw new VyiyunBusinessException("记录已被撤销或不存在!");
    }
    // 如果已审核
    if (CommonAppType.Status.已报销.value().equals(expense.getStatus())) {
      return expenseDetailView(request);
    }
    // 获取报销费用
    ExpenseFee expenseFee = new ExpenseFee();
    expenseFee.setExpenseId(id);
    List<ExpenseFee> listExpenseFee = expenseFeeService.getExpenseFee(expenseFee);
    if (!CollectionUtils.isEmpty(listExpenseFee)) {
      List<Map<String, Object>> dataMap = new ArrayList<Map<String, Object>>();
      Map<String, Object> temp = null;
      SystemStatusCache<Object> systemStatusCache =
          SystemCacheUtil.getInstance().getSystemStatusCache();
      for (ExpenseFee ex : listExpenseFee) {
        temp = ex.getPersistentState();
        temp.put(
            "categoryDisplay",
            systemStatusCache.getSystemStatusValue(
                HttpRequestUtil.getInst().getCurrentCorpId(), "CostCategory", ex.getCategory()));
        dataMap.add(temp);
      }
      modelView.addObject("listExpenseFee", dataMap);
    }
    // 获取当前审核人
    modelView.addObject("expenseInfo", expense);
    WeixinUser weixinUser = HttpRequestUtil.getInst().getCurrentWeixinUser();
    // 2、已审核人 报销人 待审核人 待带报销人
    // 获取当前审核人
    EntityAccount entityAccount = new EntityAccount();
    entityAccount.setEntityId(id);
    entityAccount.setEntityType(CommonAppType.EntityType.BX.value());
    entityAccount.setInvalid(false);
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("orderBy", "UpdateTime desc");
    // 判断当前报销审批是否完成
    List<EntityAccount> entityAccountList =
        (List<EntityAccount>) entityAccountService.getEntityAccount(entityAccount);
    // 待审核
    StringBuffer alreadyUser = new StringBuffer();
    // 权限用户
    List<EntityAccount> entityAccounts = new ArrayList<EntityAccount>();

    if (!CollectionUtils.isEmpty(entityAccountList)) {
      for (EntityAccount ea : entityAccountList) {
        // 获取有效数据
        if (!ea.getInvalid()) {
          if (CommonAppType.PersonType.SH.value().equals(ea.getPersonType())) {
            if (!ea.getDealResult().equals("0")) {
              alreadyUser.append(",").append(ea.getAccountName());
            } else if (ea.getDealResult().equals("0")) {
              entityAccounts.add(ea);
            }
          } else if (CommonAppType.PersonType.CW.value().equals(ea.getPersonType())) {
            if (!ea.getDealResult().equals("0")) {
              alreadyUser.append(",").append(ea.getAccountName());
            } else if (ea.getDealResult().equals("0")
                && CommonAppType.Status.待报销.value().equals(expense.getStatus())) {
              entityAccounts.add(ea);
            }
          }
        }
      }

      // 当前审核人必须是一位
      if (entityAccounts.size() == 1) {
        modelView.addObject("entityAccount", entityAccounts.get(0));
        modelView.addObject("auditor", entityAccounts.get(0).getAccountName());
      } else if (entityAccounts.size() > 1) {
        throw new VyiyunException("数据错误,当前审核人必须是一位!");
      } else if (entityAccounts.isEmpty()) {
        return expenseDetailView(request);
      }
      // 当前非审核人
      if (!entityAccounts.get(0).getAccountId().equals(weixinUser.getUserid())) {
        return expenseDetailView(request);
      }
      if (alreadyUser.length() > 0) {
        alreadyUser.deleteCharAt(0);
      }
      modelView.addObject("alreadyUser", alreadyUser);
      modelView.addObject("shList", entityAccountList);
    } else {
      return expenseDetailView(request);
    }
    // 3、获取报销附件
    // 处理附件信息
    List<Accessory> accessoryList = accessoryService.getAccessoryByEntityId(id);
    if (!CollectionUtils.isEmpty(accessoryList)) {
      modelView.addObject("accessoryInfor", accessoryList);
    }
    // BUG #62 修改 zb.shen 2015年12月25日 start.
    modelView.addObject("flag", HttpRequestUtil.getInst().getString("flag"));
    // BUG #62 修改 zb.shen 2015年12月25日 end.
    return modelView;
  }
  /**
   * 报销信息
   *
   * @return
   */
  @RequestMapping(
      value = "expenseDetailView",
      method = {RequestMethod.GET, RequestMethod.POST})
  public ModelAndView expenseDetailView(HttpServletRequest request) {
    ModelAndView modelView = createModelAndViewWithSign("expense_detail", request);
    // 获取请假申请信息
    String id = HttpRequestUtil.getInst().getString("id");
    String flag = HttpRequestUtil.getInst().getString("flag");
    // 这里给详情页面标示 页面来源路径 主要解决审批后退回问题
    if (StringUtils.isNotEmpty(flag)) {
      modelView.addObject("flag", flag);
    }
    // 1、获取报销信息
    Expense expense = expenseService.getExpenseById(id);
    if (null == expense) {
      throw new VyiyunBusinessException("记录已被撤销或不存在!");
    }
    modelView.addObject("expenseInfo", expense);
    modelView.addObject(
        "stautsDisplay",
        SystemCacheUtil.getInstance()
            .getSystemStatusCache()
            .getSystemStatusName("Status", expense.getStatus()));
    WeixinUser weixinUser = HttpRequestUtil.getInst().getCurrentWeixinUser();

    // 2、已审核人 报销人 待审核人 待带报销人
    String corpId = HttpRequestUtil.getInst().getCurrentCorpId();
    // 获取当前审核人
    EntityAccount entityAccount = new EntityAccount();
    entityAccount.setEntityId(id);
    entityAccount.setEntityType(CommonAppType.EntityType.BX.value());

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("orderBy", "UpdateTime desc");
    // 判断当前报销审批是否完成
    // 这里会有两条数据
    List<EntityAccount> entityAccountList =
        (List<EntityAccount>) entityAccountService.getEntityAccount(entityAccount);
    // 审核
    List<EntityAccount> auditorList = new ArrayList<EntityAccount>();
    // 财务
    List<EntityAccount> principalList = new ArrayList<EntityAccount>();
    // 权限用户
    List<String> permissionUsers = new ArrayList<String>();
    // 拒绝
    EntityAccount refuse = null;

    if (!CollectionUtils.isEmpty(entityAccountList)) {
      for (EntityAccount ea : entityAccountList) {
        // 获取有效数据
        if (!ea.getInvalid()) {
          if (CommonAppType.PersonType.CW.value().equals(ea.getPersonType())) {
            principalList.add(ea);
            if (CommonAppType.CommandType.退回.value().equals(ea.getDealResult())) {
              refuse = ea;
            }
          } else if (CommonAppType.PersonType.SH.value().equals(ea.getPersonType())) {
            auditorList.add(ea);
          }
        }
        // 后续考虑
        permissionUsers.add(ea.getAccountId());
      }

      modelView.addObject("auditorList", auditorList);
      modelView.addObject("principalList", principalList);
      modelView.addObject("shList", entityAccountList);
    }
    // 3、获取报销附件
    // 处理附件信息
    List<Accessory> accessoryList = accessoryService.getAccessoryByEntityId(id);
    if (!CollectionUtils.isEmpty(accessoryList)) {
      modelView.addObject("accessoryInfor", accessoryList);
    }

    if (weixinUser.getUserid().equals(expense.getUserId())) {
      // 4、判断当前人是否为报销者且报销状态审核中 即 报销人可以催办
      if (!CommonAppType.Status.已报销.value().equals(expense.getStatus())) {
        modelView.addObject("userType", "0");
      }
    }
    // 获取报销费用
    ExpenseFee expenseFee = new ExpenseFee();
    expenseFee.setExpenseId(id);
    List<ExpenseFee> listExpenseFee = expenseFeeService.getExpenseFee(expenseFee);
    if (!CollectionUtils.isEmpty(listExpenseFee)) {
      List<Map<String, Object>> dataMap = new ArrayList<Map<String, Object>>();
      Map<String, Object> temp = null;
      SystemStatusCache<Object> systemStatusCache =
          SystemCacheUtil.getInstance().getSystemStatusCache();
      for (ExpenseFee ex : listExpenseFee) {
        temp = ex.getPersistentState();
        temp.put(
            "categoryDisplay",
            systemStatusCache.getSystemStatusValue(corpId, "CostCategory", ex.getCategory()));
        dataMap.add(temp);
      }
      modelView.addObject("listExpenseFee", dataMap);
    }
    // 批复结果
    // 报销已完成
    if (CommonAppType.Status.已报销.value().equals(expense.getStatus())) {
      modelView.addObject("expenseStatus", CommonAppType.Status.已报销.value());
      // modelView.addObject("remark", principalList.get(0).getRemark());
    } else // 报销已完成
    if (CommonAppType.Status.报销退回.value().equals(expense.getStatus())) {
      // 获取最后审批结果
      modelView.addObject("expenseStatus", CommonAppType.Status.报销退回.value());
      if (null != refuse) {
        modelView.addObject("remark", refuse.getRemark());
      }
    }
    // BUG #62 修改 zb.shen 2015年12月25日 start.
    modelView.addObject("flag", HttpRequestUtil.getInst().getString("flag"));
    // BUG #62 修改 zb.shen 2015年12月25日 end.
    return modelView;
  }