diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index a226e0f59..bcab4e6db 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -310,6 +310,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 查询薪资核算所用薪资账套的薪资项目 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ + // 是回算,获取回算项 + List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); + } List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); // 查询薪资核算结果 List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId,Collectors.toList()); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 1049664b7..fb7d138f2 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -18,6 +18,7 @@ import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -26,12 +27,15 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; +import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salarybill.SalarySendStatusEnum; import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper; @@ -149,6 +153,15 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalarySobBackItemService getSalarySobBackItemService(User user) { + return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); + } + + // @RpcReference // private FileDownloadClient fileDownloadClient; @@ -1320,14 +1333,59 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override - public Map sumRow(SalarySendInfoQueryParam queryParam) { - Long salarySendId = queryParam.getSalarySendId(); + public Map sumRow(SalarySendInfoQueryParam param) { + Long salarySendId = param.getSalarySendId(); // 获取薪资核算ID SalarySendPO salarySendPO = getById(salarySendId); if (Objects.isNull(salarySendPO)) { throw new SalaryRunTimeException("工资发放记录不存在或已被删除"); } - return getSalaryAcctResultService(user).sumRow(SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build()); +// return getSalaryAcctResultService(user).sumRow(); + + SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build(); + // 查询薪资核算人员 + List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user) + .listByResultQueryParam(queryParam); + + if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { + return null; + } + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + // 查询薪资核算所用薪资账套的薪资项目 + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + if(Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)){ + // 是回算,获取回算项 + List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList())); + } + List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); + + // 查询薪资核算结果 + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId, Collectors.toList()); + List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + // 是否是补发工资单 + List salarySendInfoPOS = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build()); + List sendEmployeeIds = salarySendInfoPOS.stream().map(SalarySendInfoPO::getEmployeeId).collect(Collectors.toList()); + salaryAcctResultPOS = salaryAcctResultPOS.stream().filter(PO -> sendEmployeeIds.contains(PO.getEmployeeId())).collect(Collectors.toList()); + + Map map = new HashMap<>(); + Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); + salaryItemPOS.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(NumberUtils::isCreatable) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap())); + }); + return map; } @Override