diff --git a/src/com/engine/salary/service/SalaryApprovalRuleService.java b/src/com/engine/salary/service/SalaryApprovalRuleService.java index 21caa1c1d..957971422 100644 --- a/src/com/engine/salary/service/SalaryApprovalRuleService.java +++ b/src/com/engine/salary/service/SalaryApprovalRuleService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -10,6 +11,7 @@ import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO; import java.util.Collection; import java.util.List; +import java.util.Map; /** * @author Harryxzy @@ -114,4 +116,8 @@ public interface SalaryApprovalRuleService { void deleteBySalarySobIds(Collection ids); List listBySalarySobIds(Collection salarySobIds); + + + Map sumRow(SalaryAcctResultQueryParam queryParam); + } diff --git a/src/com/engine/salary/service/impl/SalaryApprovalRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalaryApprovalRuleServiceImpl.java index 648a08b79..295ccf985 100644 --- a/src/com/engine/salary/service/impl/SalaryApprovalRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryApprovalRuleServiceImpl.java @@ -2,7 +2,11 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; +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.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalaryApprovalBO; @@ -11,8 +15,11 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.param.ApprovalRequestSaveParam; import com.engine.salary.entity.salarysob.param.SalaryApprovalQueryParam; import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO; +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.enums.common.FilterEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.salarysob.SalaryApprovalRuleMapper; @@ -22,18 +29,19 @@ import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.valid.ValidUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; import weaver.hrm.User; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; /** @@ -72,6 +80,18 @@ public class SalaryApprovalRuleServiceImpl extends Service implements SalaryAppr return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalarySobBackItemService getSalarySobBackItemService(User user) { + return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); + } + @Override public List listAll() { return getSalaryApprovalRuleMapper().listAll(); @@ -245,4 +265,68 @@ public class SalaryApprovalRuleServiceImpl extends Service implements SalaryAppr } return getSalaryApprovalRuleMapper().listSome(SalaryApprovalRulePO.builder().salarySobIds(salarySobIds).build()); } + + @Override + public Map sumRow(SalaryAcctResultQueryParam queryParam) { + // 审批信息 + SalaryApprovalDTO approvalInfoByRecordId = getApprovalInfoByRecordId(queryParam.getSalaryAcctRecordId()); + List salaryItemIds = new ArrayList<>(); + for (SalaryApprovalDTO.approvalItemGroup groupDTO : approvalInfoByRecordId.getApprovalItemGroup()) { + salaryItemIds.addAll(groupDTO.getApprovalItems().stream().map(SalaryApprovalDTO.approvalItem::getSalaryItemId).collect(Collectors.toList())); + } + + //其他条件 + List otherConditions = queryParam.getOtherConditions(); + List salaryAcctEmployeePOList = new ArrayList<>(); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(otherConditions)) { + List items = SalaryEntityUtil.properties(otherConditions, SalaryAcctResultQueryParam.OtherCondition::getItemId, Collectors.toList()); + List list = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(queryParam.getSalaryAcctRecordId()), items); + for (int i = 0; i < otherConditions.size(); i++) { + SalaryAcctResultQueryParam.OtherCondition otherCondition = otherConditions.get(i); + Long itemId = otherCondition.getItemId(); + FilterEnum filter = otherCondition.getFilter(); + List params = otherCondition.getParams(); + list = list.stream().filter(a -> Objects.equals(a.getSalaryItemId(), itemId)).filter(a -> filter.filter(params).test(a.getResultValue())).collect(Collectors.toList()); + } + List salaryAcctEmpId = SalaryEntityUtil.properties(list, SalaryAcctResultPO::getSalaryAcctEmpId, Collectors.toList()); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(salaryAcctEmpId)) { + queryParam.setIds(salaryAcctEmpId); + } + } + + // 查询薪资核算人员(分页) + salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam); + if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOList)) { + 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()); + salarySobItemPOS = salarySobItemPOS.stream().filter(sobItem -> salaryItemIds.contains(sobItem.getSalaryItemId())).collect(Collectors.toList()); + Map salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(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 itemIds = salaryItemPOS.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + + // 查询薪资核算结果 + List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOList, SalaryAcctEmployeePO::getId, Collectors.toList()); + List salaryAcctResultPOS = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIds, itemIds); + + 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(), salaryItemIdKeySalarySobItemPOMap)); + }); + return map; + } + } diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 54168f25c..bc7b640a7 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -626,6 +626,22 @@ public class SalarySobController { return new ResponseResult>(user).run(getSalaryApprovalWrapper(user)::listSalaryApprovalAcctResult, param); } + /** + * 获取审批时薪资核算结果合计行 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/salaryApproval/acctresult/sum") + @Produces(MediaType.APPLICATION_JSON) + public String sumSalaryApprovalAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryApprovalWrapper(user)::sumSalaryApprovalAcctResult, param); + } + + /** * 保存审批流程id * @param request diff --git a/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java b/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java index 57c4e8227..9011662d2 100644 --- a/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java @@ -165,4 +165,13 @@ public class SalaryApprovalWrapper extends Service { public void saveApprovalRequestId(ApprovalRequestSaveParam saveParam) { getSalaryApprovalRuleService(user).saveApprovalRequestId(saveParam); } + + public Map sumSalaryApprovalAcctResult(SalaryAcctResultQueryParam queryParam) { + ValidUtil.doValidator(queryParam); + Map datas = new HashMap<>(); + + Map sumRow = getSalaryApprovalRuleService(user).sumRow(queryParam); + datas.put("sumRow", sumRow); + return datas; + } }