From cf1e1395f7eb4f0b24d252ef6ea7e31ce9e56016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 17 Oct 2023 14:24:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=93=E6=89=91=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salarysob/dto/SalaryItemTopologyDTO.java | 39 +----- .../param/SalaryItemTopologyQueryParam.java | 13 +- .../salary/service/SalarySobItemService.java | 12 +- .../impl/SalarySobItemServiceImpl.java | 127 ++++++++---------- .../salary/web/SalarySobController.java | 18 +-- .../salary/wrapper/SalarySobItemWrapper.java | 10 +- 6 files changed, 91 insertions(+), 128 deletions(-) diff --git a/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java index 8ed20b4c7..22a1a7a37 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java @@ -1,9 +1,6 @@ package com.engine.salary.entity.salarysob.dto; import com.engine.salary.entity.salaryformula.ExpressFormula; -import com.engine.salary.enums.SalaryRoundingModeEnum; -import com.engine.salary.enums.SalaryValueTypeEnum; -import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import lombok.Data; import java.util.List; @@ -21,42 +18,16 @@ public class SalaryItemTopologyDTO { */ private String salaryItemName; - /** - * 核算时隐藏 - */ - private Integer itemHide; - - /** - * 字段类型 - * - * @see SalaryDataTypeEnum - */ - private String dataType; - - /** - * 舍入规则 - * - * @see SalaryRoundingModeEnum - */ - private Integer roundingMode; - - /** - * 保留小数位 - */ - private Integer pattern; - - /** - * 取值方式 - * - * @see SalaryValueTypeEnum - */ - private Integer valueType; - /** * 公式 */ ExpressFormula formula; + /** + * 核算值 + */ + private String result; + private List children; } diff --git a/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java b/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java index 7b27e17d3..2db5e982e 100644 --- a/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java +++ b/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java @@ -20,10 +20,19 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class SalaryItemTopologyQueryParam { - //薪资账套id + /** + * 薪资账套id + */ @DataCheck(require = true, message = "薪资账套的ID不允许为空") private Long salarySobId; - //薪资项目id + /** + * 薪资项目id + */ private Long salaryItemId; + + /** + * 薪资核算人员id + */ + private Long acctEmpId; } diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index 62d0050e2..8106f4561 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -1,6 +1,5 @@ package com.engine.salary.service; -import com.engine.salary.entity.salaryacct.bo.SalaryCalcItem; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; @@ -130,9 +129,16 @@ public interface SalarySobItemService { */ SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param); + /** + * 更新 + * @param po + */ void update(SalarySobItemPO po); - List itemTopology(Long salarySobId); - + /** + * 拓扑图 + * @param param + * @return + */ SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param); } diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 181228d4f..f717c1850 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -7,8 +7,7 @@ import com.engine.salary.biz.SalarySobItemBiz; import com.engine.salary.biz.SalarySobItemGroupBiz; import com.engine.salary.biz.SalarySobItemHideBiz; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.entity.salaryacct.bo.SalaryCalcItem; -import com.engine.salary.entity.salaryacct.bo.SalaryCalcItemGraph; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -101,6 +100,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe private SalarySobDefaultItemMapper getSalarySobDefaultItemMapper() { return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class); } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } // private LoggerTemplate salarySobLoggerTemplate; @Override @@ -807,31 +810,15 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return salarySobItemFormDTO; } - - @Override - public List itemTopology(Long salarySobId) { - // 3、查询薪资核算记录所用薪资账套的薪资项目副本 - List salarySobItemPOS = listBySalarySobId(salarySobId); - if (CollectionUtils.isEmpty(salarySobItemPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算")); - } - // 4、查询当前租户的所有薪资项目 - List salaryItemPOS = getSalaryItemService(user).listAll(); - - // 8、查询公式详情 - Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); - formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); - List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); - // 9、计算薪资项目的运算优先级 - SalaryCalcItemGraph salaryCalcItemGraph = new SalaryCalcItemGraph(salarySobItemPOS, salaryItemPOS, expressFormulas); - List salaryCalcItems = salaryCalcItemGraph.sort(); - return salaryCalcItems; - } - + /** + * 拓扑图 + * + * @param param + * @return + */ @Override public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) { - // 查询薪资账套 SalarySobPO salarySobPO = salarySobBiz.getById(param.getSalarySobId()); if (Objects.isNull(salarySobPO)) { @@ -848,35 +835,30 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe //所有薪资项目 TopologyData topologyData = init(param); SalaryItemPO salaryItemPO = topologyData.getSalaryItemPO(); - Map salaryItemIdMap = topologyData.getSalaryItemIdMap(); - List hideItemIds = topologyData.getHideItemIds(); // 获取薪资项目公式 ExpressFormula expressFormula = getSalaryFormulaService(user).getExpressFormula(salarySobItemPO.getFormulaId()); SalaryItemTopologyDTO salaryItemTopologyDTO = new SalaryItemTopologyDTO(); - salaryItemTopologyDTO.setSalaryItemId(salarySobItemPO.getId()); + salaryItemTopologyDTO.setSalaryItemId(salaryItemPO.getId()); salaryItemTopologyDTO.setSalaryItemName(salaryItemPO.getName()); - salaryItemTopologyDTO.setItemHide(hideItemIds.contains(salaryItemPO.getId()) ? 1 : 0); - salaryItemTopologyDTO.setDataType(salaryItemPO.getDataType()); - salaryItemTopologyDTO.setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()); - salaryItemTopologyDTO.setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()); - salaryItemTopologyDTO.setValueType(salarySobItemPO.getValueType() == null ? salaryItemPO.getValueType() : salarySobItemPO.getValueType()); salaryItemTopologyDTO.setFormula(expressFormula); - + salaryItemTopologyDTO.setResult(topologyData.getResultItemMap().getOrDefault(salaryItemPO.getId(), "")); topology(salaryItemTopologyDTO, topologyData); - return salaryItemTopologyDTO; } + /** + * 递归拓扑 + * + * @param salaryItemTopologyDTO + * @param topologyData + */ private void topology(SalaryItemTopologyDTO salaryItemTopologyDTO, TopologyData topologyData) { - - List hideItemIds = topologyData.getHideItemIds(); Long salaryItemId = topologyData.getSalaryItemId(); Map salaryItemIdMap = topologyData.getSalaryItemIdMap(); - SalaryItemPO salaryItemPO = salaryItemIdMap.get(salaryItemId); Map salaryItemCodeMap = topologyData.getSalaryItemCodeMap(); Map salarySobItemCodeMap = topologyData.getSalarySobItemCodeMap(); Map expressFormulaIdMap = topologyData.getExpressFormulaIdMap(); @@ -891,7 +873,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe String source = formulaVar.getSource(); String fieldId = formulaVar.getFieldId().replace(source + "_", ""); String name = formulaVar.getName(); - + String fieldName = formulaVar.getFieldName(); //是否是薪资项目 boolean isSalaryItemVar; SalaryFormulaReferenceEnum salaryFormulaReferenceEnum = SalaryFormulaReferenceEnum.parseByValue(source); @@ -909,26 +891,20 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe ExpressFormula expressFormula; if (salarySobItemCodeMap.containsKey(fieldId)) { // 如果薪资账套下重新定义了薪资项目的公式,则使用薪资账套下的公式,否则使用薪资项目本身的公式 - expressFormula = expressFormulaIdMap.get(salarySobItemCodeMap.get(salaryItemPO.getCode()).getFormulaId()); + expressFormula = expressFormulaIdMap.get(salarySobItemCodeMap.get(fieldId).getFormulaId()); + } else if (salaryItemCodeMap.containsKey(fieldId)) { + expressFormula = expressFormulaIdMap.get(salaryItemCodeMap.get(fieldId).getFormulaId()); } else { - expressFormula = expressFormulaIdMap.get(salaryItemPO.getFormulaId()); + expressFormula = null; } - SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(fieldId) : new SalaryItemPO(); - SalarySobItemPO salarySobItemChild = salarySobItemCodeMap.get(fieldId); - if (salarySobItemChild == null) { - continue; - } + SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(fieldId) : new SalaryItemPO(); SalaryItemTopologyDTO salaryItemTopologyChild = new SalaryItemTopologyDTO(); - salaryItemTopologyChild.setSalaryItemId(salaryItemChild.getId()); - salaryItemTopologyChild.setSalaryItemName(salaryItemChild.getName()); - salaryItemTopologyChild.setItemHide(hideItemIds.contains(salaryItemChild.getId()) ? 1 : 0); - salaryItemTopologyChild.setDataType(salaryItemChild.getDataType()); - salaryItemTopologyChild.setRoundingMode(salarySobItemChild == null ? salaryItemChild.getRoundingMode() : salarySobItemChild.getRoundingMode()); - salaryItemTopologyChild.setPattern(salarySobItemChild == null ? salaryItemChild.getPattern() : salarySobItemChild.getPattern()); - salaryItemTopologyChild.setValueType(salarySobItemChild == null ? salaryItemChild.getValueType() : salarySobItemChild.getValueType()); + salaryItemTopologyChild.setSalaryItemId(isSalaryItemVar ? salaryItemChild.getId() : null); + salaryItemTopologyChild.setSalaryItemName(isSalaryItemVar ? salaryItemChild.getName() : fieldName); salaryItemTopologyChild.setFormula(expressFormula); + salaryItemTopologyChild.setResult(isSalaryItemVar ? topologyData.getResultItemMap().getOrDefault(salaryItemChild.getId(), "") : ""); salaryItemTopologyDTOChildren.add(salaryItemTopologyChild); if (isSalaryItemVar) { @@ -949,18 +925,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe private TopologyData init(SalaryItemTopologyQueryParam param) { TopologyData topologyData = new TopologyData(); + //薪资项目 topologyData.setSalaryItemId(param.getSalaryItemId()); - - // 获取核算时隐藏的薪资项目id - List hideItemIds = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder() - .salarySobId(param.getSalarySobId()) - .isGroup(new Integer(0)) - .salaryItemId(param.getSalaryItemId()) - .build()); - topologyData.setHideItemIds(hideItemIds); - List salaryItems = getSalaryItemService(user).listAll(); - topologyData.setSalaryItems(salaryItems); Map salaryItemIdMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); topologyData.setSalaryItemIdMap(salaryItemIdMap); @@ -973,38 +940,56 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe //账套项目 List salarySobItems = listBySalarySobId(param.getSalarySobId()); - topologyData.setSalarySobItems(salarySobItems); Map salarySobItemCodeMap = SalaryEntityUtil.convert2Map(salarySobItems, SalarySobItemPO::getSalaryItemCode); topologyData.setSalarySobItemCodeMap(salarySobItemCodeMap); //公式 List expressFormulas = getSalaryFormulaService(user).listAllExpressFormula(); - topologyData.setExpressFormulas(expressFormulas); Map expressFormulaIdMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId); topologyData.setExpressFormulaIdMap(expressFormulaIdMap); + + //薪资结果 + Long acctEmpId = param.getAcctEmpId(); + if (acctEmpId != null) { + List results = getSalaryAcctResultService(user).listBySalaryAcctEmployeeId(acctEmpId); + Map resultItemMap = SalaryEntityUtil.convert2Map(results, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); + topologyData.setResultItemMap(resultItemMap); + } else { + topologyData.setResultItemMap(new HashMap<>()); + } return topologyData; } @Data class TopologyData { + /** + * 薪资项目id + */ Long salaryItemId; - List hideItemIds; - - List salaryItems; + /** + * 薪资项目 + */ Map salaryItemIdMap; Map salaryItemCodeMap; - //账套项目 + /** + * 账套项目 + */ SalaryItemPO salaryItemPO; - List salarySobItems; Map salarySobItemCodeMap; - //公式 - List expressFormulas; + /** + * 公式 + */ Map expressFormulaIdMap; + + /** + * 核算结果 + */ + Map resultItemMap; } diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 8632dd4e1..951553ad0 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -2,7 +2,6 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.SalarySobExtRangePO; -import com.engine.salary.entity.salaryacct.bo.SalaryCalcItem; import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salarysob.dto.*; @@ -388,25 +387,18 @@ public class SalarySobController { /** * 账套项目拓扑图 + * * @param request * @param response - * @param salarySobId + * @param param * @return */ - @GET - @Path("/item/topology") - @Produces(MediaType.APPLICATION_JSON) - public String topology(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salarySobId") Long salarySobId) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalarySobItemWrapper(user)::itemTopology, salarySobId); - } - @POST @Path("/item/topology") @Produces(MediaType.APPLICATION_JSON) - public String getSalaryItemForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemTopologyQueryParam param) { + public String getSalaryItemForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemTopologyQueryParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalarySobItemWrapper(user)::topology, param); + return new ResponseResult(user).run(getSalarySobItemWrapper(user)::topology, param); } @@ -486,7 +478,7 @@ public class SalarySobController { @Produces(MediaType.APPLICATION_JSON) public String saveSalarySobAddUp(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySobAddUpRuleSaveParam saveParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalarySobAddUpRuleWrapper(user)::save, saveParam); + return new ResponseResult(user).run(getSalarySobAddUpRuleWrapper(user)::save, saveParam); } /**********************************薪资账套的累计字段对应关系 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index 4b2b1d8ce..8cc48d6fb 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -3,7 +3,6 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.annotation.SalaryFormulaVar; -import com.engine.salary.entity.salaryacct.bo.SalaryCalcItem; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; @@ -181,12 +180,13 @@ public class SalarySobItemWrapper extends Service { return getSalarySobItemService(user).getSalaryItemForm(param); } - public List itemTopology(Long salarySobId) { - return getSalarySobItemService(user).itemTopology(salarySobId); - } + /** + * 拓扑图 + * @param param + * @return + */ public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) { - return getSalarySobItemService(user).topology(param); }