From 17c89693142f4b3583e75fedea850f515744d7fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Dec 2025 18:09:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=94=E9=99=A2=EF=BC=8C=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=92=8C=E5=90=88=E8=AE=A1=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/datacollection/EmployMapper.java | 5 ++ .../mapper/datacollection/EmployMapper.xml | 13 +++++ .../salary/service/SalaryEmployeeService.java | 2 + .../impl/SalaryEmployeeServiceImpl.java | 5 ++ .../salary/web/SalaryAcctController.java | 8 +++ .../wrapper/SalaryAcctResultWrapper.java | 52 ++++++++++++++++++- 6 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.java b/src/com/engine/salary/mapper/datacollection/EmployMapper.java index 120c7a352..dc87deacf 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.java +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.java @@ -181,4 +181,9 @@ public interface EmployMapper { List listByDepartment(@Param("departmentIds") List departmentIds); List listByJob(@Param("jobIds") List jobIds); + + + List listDepartment(@Param("departmentIds") List departmentIds); + + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 39adedca3..4a31ab941 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -672,4 +672,17 @@ from hrmjobcall job where job.id = #{jobCallId} + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index 50cd67190..1803b7094 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -194,4 +194,6 @@ public interface SalaryEmployeeService { JobCallInfo getJobCallInfoById(Long jobCallId); List snapshot(List employeeIds, Date snapshotTime); + + List listDepartment(List departmentIds); } diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index 349a28d42..f2efd2b16 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -681,4 +681,9 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employees); } + + @Override + public List listDepartment(List departmentIds) { + return getEmployMapper().listDepartment(departmentIds); + } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 75a5338de..aee1250b8 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -462,6 +462,14 @@ public class SalaryAcctController { return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::departmentListPage, param); } + @POST + @Path("/acctresult/department/sum") + @Produces(MediaType.APPLICATION_JSON) + public String sumDepartmentListPage(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::sumDepartmentListPage, param); + } + //合计行 @POST @Path("/acctresult/sum") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 2987117a7..e81a5aa8e 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -8,6 +8,7 @@ import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.progress.ProgressDTO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; @@ -16,6 +17,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; @@ -26,6 +28,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; import com.engine.salary.wrapper.proxy.SalaryAcctResultWrapperProxy; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; @@ -156,7 +159,9 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult //按部门分组 List> result = new ArrayList<>(); Map> departmentEmpMap = SalaryEntityUtil.group2Map(employeePOS, SalaryAcctEmployeePO::getDepartmentId); - for (Long departmentId : departmentEmpMap.keySet()) { + + List departmentList = getSalaryEmployeeService(user).listDepartment(Lists.newArrayList(departmentEmpMap.keySet())); + for (Long departmentId : departmentList) { List departmentEmps = departmentEmpMap.get(departmentId); List departmentEmpIds = SalaryEntityUtil.properties(departmentEmps, SalaryAcctEmployeePO::getId, Collectors.toList()); Map> resultMap = acctEmpIdMap.keySet().stream().filter(departmentEmpIds::contains).map(acctEmpIdMap::get).flatMap(Collection::stream).collect(Collectors.groupingBy(SalaryAcctResultPO::getSalaryItemId)); @@ -179,6 +184,51 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult return datas; } + /** + * 合计行 + * + * @param queryParam 列表查询条件 + * @return + */ + public Map sumDepartmentListPage(SalaryAcctResultQueryParam queryParam) { + Map datas = new HashMap<>(); + + // 查询薪资核算记录 + Long salaryAcctRecordId = queryParam.getSalaryAcctRecordId(); + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + + //查询配置的薪资项目 + String salaryItemIdsStr = new BaseBean().getPropValue("hrmSalaryWuYuan", "departmentReportSalaryItemIds"); + if (StringUtils.isBlank(salaryItemIdsStr)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资项ID不能为空")); + } + List salaryItemIds = Arrays.stream(salaryItemIdsStr.split(",")).map(Long::valueOf).collect(Collectors.toList()); + List salaryItemPOList = getSalaryItemService(user).listByIds(salaryItemIds); + + + //核算内的人员 + List employeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId); + List salaryAcctEmpIds = SalaryEntityUtil.properties(employeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); + + //核算数据结果 + List list = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); + + Map map = new HashMap<>(); + Map> acctResultMap = SalaryEntityUtil.group2Map(list, SalaryAcctResultPO::getSalaryItemId); + salaryItemPOList.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { + BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())).orElse(new ArrayList<>()).stream().map(SalaryAcctResultPO::getResultValue).filter(org.apache.commons.lang3.math.NumberUtils::isCreatable).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add); + map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), new HashMap<>())); + }); + + Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); + datas.put("sumRow", sumRow); + return datas; + } + + /** * 合计行 *