/**
  * 报销审核
  *
  * @return
  */
 @RequestMapping(
     value = "expenseAudit",
     method = {RequestMethod.GET, RequestMethod.POST})
 public @ResponseBody Object expenseAudit(HttpServletRequest request) {
   ResponseResult responseResult = new ResponseResult();
   // 获取请假申请信息
   String expenseAuditInfo = HttpRequestUtil.getInst().getString("expenseAuditInfo");
   if (StringUtils.isEmpty(expenseAuditInfo)) {
     throw new VyiyunException("报销审核信息为空!");
   }
   try {
     JSONObject jsonExpenseAuditInfo =
         JSON.parseObject(URLDecoder.decode(expenseAuditInfo, "UTF-8"));
     expenseService.doAudit(jsonExpenseAuditInfo);
   } catch (Exception e) {
     e.printStackTrace();
     LOGGER.error("报销审核数据格式错误,data:" + expenseAuditInfo, e);
     responseResult.setStatus(-1);
     if (e instanceof VyiyunException) {
       responseResult.setErrorMsg(e.getMessage());
     } else {
       responseResult.setErrorMsg(SpringContextHolder.getI18n("1000000"));
     }
   }
   // 返回数据
   return responseResult;
 }
 /**
  * 报销申请
  *
  * @return
  */
 @RequestMapping(
     value = "expenseApply",
     method = {RequestMethod.GET, RequestMethod.POST})
 public @ResponseBody Object addExpense(HttpServletRequest request) {
   ResponseResult responseResult = new ResponseResult();
   // 获取请假申请信息
   String jsonExpenseApplyInfo = HttpRequestUtil.getInst().getString("expenseApplyInfo");
   if (StringUtils.isEmpty(jsonExpenseApplyInfo)) {
     throw new VyiyunException("报销申请信息为空!");
   }
   try {
     JSONObject jsonExpenseApplyInfoObj =
         JSON.parseObject(URLDecoder.decode(jsonExpenseApplyInfo, "UTF-8"));
     String id = jsonExpenseApplyInfoObj.getString("id");
     // 存在id说明是重新发起
     if (StringUtils.isNotEmpty(id)) {
       jsonExpenseApplyInfoObj.put("isAgain", true);
     } else if (StringUtils.isEmpty(id)) {
       id = CommonUtil.GeneGUID();
       jsonExpenseApplyInfoObj.put("id", id);
     }
     responseResult.setValue(id);
     expenseService.doApply(jsonExpenseApplyInfoObj);
   } catch (Exception e) {
     e.printStackTrace();
     responseResult.setErrorMsg("请联系系统管理员");
     responseResult.setStatus(-1);
   }
   // 返回数据
   return responseResult;
 }
 /**
  * 删除报销费用
  *
  * @return
  */
 @RequestMapping(
     value = "deleteExpenseFee",
     method = {RequestMethod.GET, RequestMethod.POST})
 public @ResponseBody Object deleteExpenseFee(HttpServletRequest request) {
   ResponseResult responseResult = new ResponseResult();
   // 获取请假申请信息
   String id = HttpRequestUtil.getInst().getString("id");
   if (StringUtils.isEmpty(id)) {
     responseResult.setStatus(-1);
     responseResult.setErrorMsg(SpringContextHolder.getI18n("1002002", new String[] {"id"}, null));
   }
   try {
     expenseFeeService.deleteExpenseFeeById(id);
   } catch (Exception e) {
     LOGGER.error("删除报销费用失败!", e);
     responseResult.setStatus(-1);
     responseResult.setErrorMsg(SpringContextHolder.getI18n("1000000"));
   }
   // 返回数据
   return responseResult;
 }
  /**
   * 获取报销记录
   *
   * @return
   */
  @RequestMapping(
      value = "getExpenseRecord",
      method = {RequestMethod.GET, RequestMethod.POST})
  public @ResponseBody Object getExpenseRecord(HttpServletRequest request) {

    ResponseResult responseResult = new ResponseResult();
    try {
      // 获取请假申请信息
      String operationType = HttpRequestUtil.getInst().getString("operationType");
      if (StringUtils.isEmpty(operationType)) {
        responseResult.setStatus(-1);
        responseResult.setErrorMsg("参数operationType不能为空!");
        throw new VyiyunException("无效的operationType值!");
      }
      int pageIndex = -1;
      int pageSize = -1;
      String sPageIndex = HttpRequestUtil.getInst().getString("pageIndex");
      String sPageSize = HttpRequestUtil.getInst().getString("pageSize");
      if (StringUtils.isNotEmpty(sPageIndex) && sPageIndex.matches("\\d+")) {
        pageIndex = Integer.parseInt(sPageIndex);
      }
      if (StringUtils.isNotEmpty(sPageSize) && sPageSize.matches("\\d+")) {
        pageSize = Integer.parseInt(sPageSize);
      }
      Expense expense = new Expense();
      expense.setUserId(HttpRequestUtil.getInst().getCurrentWeixinUser().getUserid());
      Map<String, Object> params = new HashMap<String, Object>();
      params.put("orderBy", "CreateTime desc");
      params.put("operationType", operationType);
      responseResult.setValue(
          expenseService.queryExpenseRecord(expense, params, pageIndex, pageSize).getData());
    } catch (Exception e) {
      LOGGER.debug("获取数据失败", e);
      responseResult.setStatus(-1);
      if (e instanceof VyiyunException) {
        responseResult.setErrorMsg(e.getMessage());
      } else {
        responseResult.setErrorMsg("获取数据记录失败,请联系统管理员!");
      }
    }
    return responseResult;
  }
  /**
   * 获取报销记录
   *
   * @return
   */
  @RequestMapping(
      value = "getAuditRecord",
      method = {RequestMethod.GET, RequestMethod.POST})
  public @ResponseBody Object getAuditRecord(HttpServletRequest request) {
    ResponseResult responseResult = new ResponseResult();
    try {
      // 获取请假申请信息
      String operationType = HttpRequestUtil.getInst().getString("operationType");
      if (StringUtils.isEmpty(operationType)) {
        responseResult.setStatus(-1);
        responseResult.setErrorMsg("参数operationType不能为空!");
        throw new VyiyunException("无效的operationType值!");
      }

      int pageIndex = -1;
      int pageSize = -1;
      String sPageIndex = HttpRequestUtil.getInst().getString("pageIndex");
      String sPageSize = HttpRequestUtil.getInst().getString("pageSize");
      if (StringUtils.isNotEmpty(sPageIndex) && sPageIndex.matches("\\d+")) {
        pageIndex = Integer.parseInt(sPageIndex);
      }
      if (StringUtils.isNotEmpty(sPageSize) && sPageSize.matches("\\d+")) {
        pageSize = Integer.parseInt(sPageSize);
      }
      WeixinUser weixinUser = HttpRequestUtil.getInst().getCurrentWeixinUser();
      Expense expense = new Expense();
      expense.setUserId(weixinUser.getUserid());
      Map<String, Object> params = new HashMap<String, Object>();
      params.put("orderBy", "CreateTime desc");

      String userName = HttpRequestUtil.getInst().getString("userName");
      String startDate = HttpRequestUtil.getInst().getString("startDate");
      String endDate = HttpRequestUtil.getInst().getString("endDate");
      String expenseNum = HttpRequestUtil.getInst().getString("expenseNum");

      String personType = HttpRequestUtil.getInst().getString("personType");

      if (StringUtils.isNotEmpty(userName)) {
        params.put("uNameLike", userName);
      }
      if (StringUtils.isNotEmpty(expenseNum)) {
        params.put("expenseNumLIke", expenseNum);
      }
      if (StringUtils.isNotEmpty(startDate)) {
        params.put("startDate", DateUtil.stringToDate(startDate, "yyyy-MM-dd"));
      }
      if (StringUtils.isNotEmpty(endDate)) {
        params.put("endDate", DateUtil.stringToDate(endDate, "yyyy-MM-dd"));
      }
      if (StringUtils.isNotEmpty(endDate)) {
        params.put("endDate", DateUtil.stringToDate(endDate, "yyyy-MM-dd"));
      }

      if ("0".equals(personType)) {
        if ("1".equals(operationType)) {
          params.put("operationType", "1");
          responseResult.setValue(
              expenseService.queryAuditRecord(expense, params, pageIndex, pageSize).getData());
        } else if ("2".equals(operationType)) {
          params.put("personType", "0");
          params.put("userId", weixinUser.getUserid());
          responseResult.setValue(
              entityAccountService
                  .queryEntityAccountExpense(params, pageIndex, pageSize)
                  .getData());
        }
      } else if ("2".equals(personType)) {
        if ("1".equals(operationType)) {
          params.put("operationType", "3");
          responseResult.setValue(
              expenseService.queryAuditRecord(expense, params, pageIndex, pageSize).getData());
        } else if ("2".equals(operationType)) {
          params.put("personType", "2");
          params.put("userId", weixinUser.getUserid());
          responseResult.setValue(
              entityAccountService
                  .queryEntityAccountExpense(params, pageIndex, pageSize)
                  .getData());
        }
      }

    } catch (Exception e) {
      LOGGER.debug("获取数据失败", e);
      responseResult.setStatus(-1);
      if (e instanceof VyiyunException) {
        responseResult.setErrorMsg(e.getMessage());
      } else {
        responseResult.setErrorMsg("获取数据记录失败,请联系统管理员!");
      }
    }
    return responseResult;
  }