diff --git a/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java index 23b7155b5..a1ab47f1a 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java @@ -142,4 +142,12 @@ public class SalaryStatisticsEmployeeController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalaryStatisticsEmployeeWrapper(user)::salaryReport, queryParam); } + + @POST + @Path("/salaryReportSum") + @Produces(MediaType.APPLICATION_JSON) + public String salaryReportSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEmployeeSalaryQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryStatisticsEmployeeWrapper(user)::salaryReportSum, queryParam); + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 5639b5c75..711ea69c6 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -427,8 +427,6 @@ public class SalaryStatisticsEmployeeWrapper extends Service { List weaTableColumns = new ArrayList<>(); weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), "salaryMonth")); weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "userName")); - weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "部门"), "department")); - weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "工号"), "workCode")); String salaryItemIds = new BaseBean().getPropValue("xbxtSalaryReport", "salaryItemIds"); List ids = Arrays.stream(salaryItemIds.split(",")).map(Long::valueOf).collect(Collectors.toList()); @@ -446,4 +444,74 @@ public class SalaryStatisticsEmployeeWrapper extends Service { resultMap.put("pageInfo", pageInfo); return resultMap; } + + public Map salaryReportSum(SalaryStatisticsEmployeeSalaryQueryParam queryParam) { + + Map resultMap = Maps.newHashMap(); + Map sumResultMap = Maps.newHashMap(); + resultMap.put("sumRow", sumResultMap); + if (StringUtils.isBlank(queryParam.getStartDateStr()) || StringUtils.isBlank(queryParam.getEndDateStr())) { + return resultMap; + } + + + // 获取发薪人员 + List dataParam = new ArrayList<>(); + if (StringUtils.isNotBlank(queryParam.getStartDateStr())) { + dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getStartDateStr() + "-01 00:00:00")); + } + if (StringUtils.isNotBlank(queryParam.getEndDateStr())) { + dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getEndDateStr() + "-01 00:00:00")); + } + Set salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(null, dataParam) + .stream() + .map(SalaryDateUtil::dateStrToLocalYearMonth) + .collect(Collectors.toSet()); + + //工资单数据,按照已发放的工资单分页 + SalarySendInfoPO build = SalarySendInfoPO.builder().salaryMonths(salaryMonths).employeeId((long) user.getUID()).build(); + List list = getSalarySendInfoMapper().listSome(build); + List recordIds = SalaryEntityUtil.properties(list, SalarySendInfoPO::getSalaryAcctRecordId, Collectors.toList()); + + SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder() + .salaryAcctRecordIds(recordIds) + .employeeIds(Collections.singletonList((long) user.getUID())) + .build(); + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam); + salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted((a,b)->-a.getSalaryMonth().compareTo(b.getSalaryMonth())).collect(Collectors.toList()); + + List> empParts = Lists.partition(salaryAcctEmployeeList, 500); + + for (int i = 0; i < empParts.size(); i++) { + // 获取薪资核算结果 + SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResultByAcctEmp(empParts.get(i)); + List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, null); + + if (CollectionUtils.isNotEmpty(records)) { + List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); + // 过滤只统计数值型薪资项目 + salaryItems = salaryItems.stream().filter(salaryItemPO -> salaryItemPO.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); + for (SalaryItemPO item : salaryItems) { + BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); + String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; + for (Map record : records) { + if (record.containsKey(itemKey)) { + if (Objects.nonNull(record.get(itemKey)) && NumberUtils.isCreatable(record.get(itemKey).toString())) { + sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); + } + } + } + Object o = sumResultMap.get(itemKey + "_n"); + if (o != null) { + sumBigDecimal = sumBigDecimal.add((BigDecimal) o); + } + sumResultMap.put(itemKey + "_n", sumBigDecimal); + // 薪资项目合计 + sumResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString())); + } + } + } + resultMap.put("sumRow", sumResultMap); + return resultMap; + } }