diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java index 5f5749ac7..d6bebeff3 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java @@ -73,6 +73,8 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam { //其他条件 private List otherConditions; + private boolean isSum; + @Data @NoArgsConstructor diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index b5342cdcb..43b5bcd38 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -69,6 +69,7 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.util.StopWatch; import weaver.general.BaseBean; import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; import weaver.wechat.util.Utils; import java.math.BigDecimal; @@ -1312,10 +1313,40 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .filter(NumberUtils::isCreatable) .map(Long::valueOf) .collect(Collectors.toList()); + + List needSumToFDepDepartmentIds = Arrays.stream(baseBean.getPropValue("wjztkjSalary", "need_sum_to_fdep_department_ids").split(",")) + .filter(NumberUtils::isCreatable) + .map(Long::valueOf) + .collect(Collectors.toList()); + // 获取父节点的下级部门id + List needSumDepIds = new ArrayList<>(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + Map> depRelationMap = new HashMap<>(); + if(CollectionUtils.isNotEmpty(needSumToFDepDepartmentIds)) { + needSumToFDepDepartmentIds.stream().forEach(depId -> { + // 获取所有下级部门id + try { + String allChildDepartId = departmentComInfo.getAllChildDepartId(depId.toString(), depId.toString()); + if (StringUtils.isNotBlank(allChildDepartId)) { + List subDepIds = Arrays.stream(allChildDepartId.split(",")) + .filter(NumberUtils::isCreatable) + .map(Long::valueOf) + .filter(id -> !id.equals(depId)) + .collect(Collectors.toList()); + depRelationMap.put(depId, subDepIds); + needSumDepIds.addAll(subDepIds); + needSumDepIds.add(depId); + } + } catch (Exception e) { + + } + }); + } salaryAcctEmployeePOList = salaryAcctEmployeePOList.stream() .filter(acctEmp -> acctEmp.getDepartmentName().contains("部") || needSumToLdbzDepartmentIds.contains(acctEmp.getDepartmentId()) - || acctEmp.getDepartmentId().equals(ldbzDepartmentId)) + || acctEmp.getDepartmentId().equals(ldbzDepartmentId) + || needSumDepIds.contains(acctEmp.getDepartmentId())) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(salaryAcctEmployeePOList)) { @@ -1341,6 +1372,18 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 查询薪资核算结果 List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, needSumItemIds); + if (queryParam.isSum()) { + Map sumMap = new HashMap<>(); + Map> acctResultMap = SalaryEntityUtil.group2Map(acctResultList, SalaryAcctResultPO::getSalaryItemId); + needSumItemIds.stream().forEach(item -> { + BigDecimal sum = Optional.ofNullable(acctResultMap.get(item)).orElse(new ArrayList<>()).stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtils::isCreatable).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add); + sumMap.put(item.toString(), sum.toString()); + }); + List acctEmpIds = acctResultList.stream().map(SalaryAcctResultPO::getSalaryAcctEmpId).distinct().collect(Collectors.toList()); + sumMap.put("empNums", acctEmpIds.size()); + map.put("sumRow", sumMap); + return map; + } // 查询薪资核算结果 List salarySobEmpFields = new ArrayList<>(); @@ -1362,6 +1405,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe resultMap.put("departmentName", ldbzDepartmentName); } } + for (Map.Entry> entry : depRelationMap.entrySet()) { + List subDepIds = entry.getValue(); + DeptInfo fartherDepartment = getSalaryEmployeeService(user).getDeptInfoById(entry.getKey()); + Long fartherDepartmentId = fartherDepartment == null ? 0L : fartherDepartment.getId(); + String fartherDepartmentName = fartherDepartment == null ? "" : fartherDepartment.getName(); + for (Map resultMap : acctResultMap) { + Long departmentId = NumberUtils.isCreatable(Utils.null2String(resultMap.get("departmentId"))) ? Long.valueOf(Utils.null2String(resultMap.get("departmentId"))) : null; + if (departmentId != null && subDepIds.contains(departmentId)) { + resultMap.put("departmentId", fartherDepartmentId); + resultMap.put("departmentName", fartherDepartmentName); + } + } + } // 根据部门分组 Map>> acctResultGroupMap = SalaryEntityUtil.group2Map(acctResultMap, resultMap -> resultMap.getOrDefault("departmentId", "").toString()); LinkedHashMap> sumResultByGroup = getSumResultByGroup(acctResultGroupMap, Collections.emptyList(), needSumItemList); diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index b219ffef9..11b003eaf 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -685,6 +685,24 @@ public class SalarySobController { @Produces(MediaType.APPLICATION_JSON) public String listSalaryApprovalDepartmentReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) { User user = HrmUserVarify.getUser(request, response); + param.setSum(false); + return new ResponseResult>(user).run(getSalaryApprovalWrapper(user)::listSalaryApprovalDepartmentReport, param); + } + + + /** + * 获取审批时薪资核算部门报表 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/salaryApproval/acctresult/departmentReportSum") + @Produces(MediaType.APPLICATION_JSON) + public String departmentReportSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + param.setSum(true); return new ResponseResult>(user).run(getSalaryApprovalWrapper(user)::listSalaryApprovalDepartmentReport, param); }