From 895d3065e90304e200a7bebe1d132dff3dcd2901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 16 Oct 2023 10:45:19 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E8=B4=A6=E5=A5=97=E6=8B=93=E6=89=91?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/SalarySobItemService.java | 3 +++ .../impl/SalarySobItemServiceImpl.java | 24 +++++++++++++++++++ .../service/impl/SalarySobServiceImpl.java | 9 +++++++ .../salary/web/SalarySobController.java | 15 ++++++++++++ .../salary/wrapper/SalarySobItemWrapper.java | 5 ++++ .../salary/wrapper/SalarySobWrapper.java | 14 +++++------ 6 files changed, 63 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index b9d6c78db..9eeeb2424 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -1,5 +1,6 @@ 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.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; @@ -128,4 +129,6 @@ public interface SalarySobItemService { SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param); void update(SalarySobItemPO po); + + List itemTopology(Long salarySobId); } diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index def2cd40c..9b1542cc7 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -7,6 +7,8 @@ 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.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; @@ -799,4 +801,26 @@ 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; + } + + } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 20b0576be..007fb0d65 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -122,6 +122,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user); } + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalaryFormulaService getSalaryFormulaService(User user) { + return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + private SalarySobBackItemService getSalarySobBackItemService(User user) { return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } @@ -146,6 +154,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { return ServiceUtil.getService(SalarySobTaxReportRuleServiceImpl.class, user); } + @Override public SalarySobPO getById(Long id) { return salarySobMapper.getById(id); diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index aab9889e3..a6107e4c3 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -2,6 +2,7 @@ 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.*; @@ -385,6 +386,20 @@ public class SalarySobController { return new ResponseResult(user).run(getSalarySobItemWrapper(user)::getSalaryItemForm, param); } + /** + * 账套项目拓扑图 + * @param request + * @param response + * @param salarySobId + * @return + */ + @GET + @Path("/item/topology") + @Produces(MediaType.APPLICATION_JSON) + public String getSalaryItemForm(@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); + } /**********************************薪资账套的薪资项目 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index 1fbe0e0e0..8b0b815e0 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -3,6 +3,7 @@ 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; @@ -177,4 +178,8 @@ public class SalarySobItemWrapper extends Service { public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) { return getSalarySobItemService(user).getSalaryItemForm(param); } + + public List itemTopology(Long salarySobId) { + return getSalarySobItemService(user).itemTopology(salarySobId); + } } diff --git a/src/com/engine/salary/wrapper/SalarySobWrapper.java b/src/com/engine/salary/wrapper/SalarySobWrapper.java index c9f1ddd8e..7665ced9c 100644 --- a/src/com/engine/salary/wrapper/SalarySobWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobWrapper.java @@ -83,7 +83,7 @@ public class SalarySobWrapper extends Service { List taxAgentPOS = getTaxAgentService(user).listAll(); Map taxAgentIdTONameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName); - List salarySobListDTOS = SalarySobBO.convert2ListDTO(page.getList(),taxAgentIdTONameMap); + List salarySobListDTOS = SalarySobBO.convert2ListDTO(page.getList(), taxAgentIdTONameMap); PageInfo dtoPage = new PageInfo<>(salarySobListDTOS, SalarySobListDTO.class); dtoPage.setTotal(page.getTotal()); dtoPage.setPageNum(page.getPageNum()); @@ -97,10 +97,10 @@ public class SalarySobWrapper extends Service { private void handleSalarySobBackItemHistory(SalarySobListQueryParam queryParam) { queryParam.setPageSize(100000); List list = getSalarySobService(user).listPageByParam(queryParam).getList(); - if(list != null && list.size()>0){ + if (list != null && list.size() > 0) { List salarySobIds = list.stream().map(SalarySobPO::getId).collect(Collectors.toList()); Long count = getSalarySobBackItemService(user).getCountBySalarySobIdIn(salarySobIds); - if(count.equals(0L)){ + if (count.equals(0L)) { // 薪资账套的默认的回算薪资项目 Set SalarySobBackItemIds = SalaryEntityUtil.properties(SalarySobBackItemBO.getDefault(), SalarySobDefaultBackItemPO::getSysSalaryItemId); // 获取薪资项目中是否已经添加回算薪资项目 @@ -118,7 +118,7 @@ public class SalarySobWrapper extends Service { List salarySobBackItems = new ArrayList<>(); // 获取默认添加后的回算薪资项目 List salaryBackItemPOS = getSalaryItemService(user).listBySysSalaryItemIds(SalarySobBackItemIds); - for(Long id : salarySobIds){ + for (Long id : salarySobIds) { for (SalarySobDefaultBackItemPO salarySobDefaultBackItemPO : SalarySobBackItemBO.getDefault()) { Date now = new Date(); Map sysSalaryItemMap = SalaryEntityUtil.convert2Map(salaryBackItemPOS, SalaryItemPO::getSysSalaryItemId); @@ -134,7 +134,7 @@ public class SalarySobWrapper extends Service { .valueType(salaryItemPO.getValueType()) .formulaId(salarySobDefaultBackItemPO.getFormulaId()) .backCalcType(salarySobDefaultBackItemPO.getBackCalcType()) - .creator((long)user.getUID()) + .creator((long) user.getUID()) .createTime(now) .updateTime(now) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) @@ -174,7 +174,7 @@ public class SalarySobWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); } // 薪资装套po转换成薪资账套详情dto - basicForm = SalarySobBO.convert2FormDTO(basicForm,salarySobPO); + basicForm = SalarySobBO.convert2FormDTO(basicForm, salarySobPO); } // 转换成前端所需的数据格式 data.put("basicForm", basicForm); @@ -251,7 +251,7 @@ public class SalarySobWrapper extends Service { Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId); Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId); - return taxAgentIds.contains(salarySobPO.getTaxAgentId())||Objects.isNull(salarySobPO.getTaxAgentId()); + return taxAgentIds.contains(salarySobPO.getTaxAgentId()) || Objects.isNull(salarySobPO.getTaxAgentId()); } } From 72fbd5f33680cc7eb6493c0bbc7a9ac2bad695d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 16 Oct 2023 15:00:54 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E6=8B=93=E6=89=91=E5=9B=BE=E6=9A=82?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryItemTopologyQueryParam.java | 29 +++++++++ .../salary/service/SalarySobItemService.java | 3 + .../impl/SalarySobItemServiceImpl.java | 62 +++++++++++++++++++ .../salary/web/SalarySobController.java | 10 ++- .../salary/wrapper/SalarySobItemWrapper.java | 8 +++ 5 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java diff --git a/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java b/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java new file mode 100644 index 000000000..7b27e17d3 --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java @@ -0,0 +1,29 @@ +package com.engine.salary.entity.salarysob.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 薪资项目拓扑查询参数 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemTopologyQueryParam { + + //薪资账套id + @DataCheck(require = true, message = "薪资账套的ID不允许为空") + private Long salarySobId; + + //薪资项目id + private Long salaryItemId; +} diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index 9eeeb2424..7f10b1c45 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.salaryacct.bo.SalaryCalcItem; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; +import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -131,4 +132,6 @@ public interface SalarySobItemService { void update(SalarySobItemPO po); List itemTopology(Long salarySobId); + + Object topology(SalaryItemTopologyQueryParam param); } diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 9b1542cc7..6f40a25d7 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -14,6 +14,7 @@ import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; +import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -822,5 +823,66 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return salaryCalcItems; } + @Override + public Object topology(SalaryItemTopologyQueryParam param) { + SalarySobItemFormDTO salarySobItemFormDTO = new SalarySobItemFormDTO(); + salarySobItemFormDTO.setCanEdit(1); + // 默认可以编辑 + if (param.getSalarySobId() != null && param.getSalaryItemId() != null) { + // 查询薪资账套 + SalarySobPO salarySobPO = salarySobBiz.getById(param.getSalarySobId()); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); + } + // 查询薪资项目 + List salarySobItemPOS = getSalarySobItemMapper().listSome(SalarySobItemPO.builder().salarySobId(param.getSalarySobId()).salaryItemId(param.getSalaryItemId()).build()); + if (CollectionUtils.isEmpty(salarySobItemPOS)) { + throw new SalaryRunTimeException("账套中薪资项目不存在"); + } + SalarySobItemPO salarySobItemPO = salarySobItemPOS.get(0); + SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(salarySobItemPO.getSalaryItemId()); + if (salaryItemPO == null) { + throw new SalaryRunTimeException("薪资项目不存在或已被删除"); + } + //获取系统值 + List salarySobDefaultItemPOS = getSalarySobDefaultItemMapper().listAll(); + salarySobDefaultItemPOS = salarySobDefaultItemPOS.stream().filter(po -> po.getSysSalaryItemId() != 0).collect(Collectors.toList()); + Map longIntegerMap = SalaryEntityUtil.convert2Map(salarySobDefaultItemPOS, SalarySobDefaultItemPO::getSysSalaryItemId, SalarySobDefaultItemPO::getCanDelete); + if (salaryItemPO.getSysSalaryItemId() != null) { + salarySobItemPO.setCanDelete(longIntegerMap.getOrDefault(salaryItemPO.getSysSalaryItemId(), 1)); + } + // 获取薪资项目公式 + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(salarySobItemPO.getFormulaId())); + // 强制开启账套的公式配置 + BaseBean baseBean = new BaseBean(); + final Boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); + // 获取核算时隐藏的薪资项目id + List hideItemIds = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder() + .salarySobId(param.getSalarySobId()) + .isGroup(new Integer(0)) + .salaryItemId(param.getSalaryItemId()) + .build()); + + String formulaContent = CollectionUtils.isEmpty(expressFormulas) ? "" : expressFormulas.get(0).getFormula(); + Integer valueType = salarySobItemPO.getValueType() == null ? salaryItemPO.getValueType() : salarySobItemPO.getValueType(); + salarySobItemFormDTO + .setId(salarySobItemPO.getId()) + .setName(salaryItemPO.getName()) + .setItemHide(hideItemIds.contains(salaryItemPO.getId()) ? 1 : 0) + .setDataType(salaryItemPO.getDataType()) + .setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()) + .setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()) + .setValueType(valueType) + .setFormulaId(salarySobItemPO.getFormulaId()) + .setFormulaContent(CollectionUtils.isNotEmpty(expressFormulas) ? formulaContent : "") + .setOriginFormulaContent(valueType.equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : "") + .setOriginSqlContent(valueType.equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "") + .setUseInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) + .setDescription(salarySobItemPO.getDescription()) + .setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0); + } + return salarySobItemFormDTO; + } + } diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index a6107e4c3..e0456bca7 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -396,11 +396,19 @@ public class SalarySobController { @GET @Path("/item/topology") @Produces(MediaType.APPLICATION_JSON) - public String getSalaryItemForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salarySobId") Long salarySobId) { + 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) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySobItemWrapper(user)::topology, param); + } + /**********************************薪资账套的薪资项目 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index 8b0b815e0..712720c0b 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -13,6 +13,7 @@ import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; +import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -182,4 +183,11 @@ public class SalarySobItemWrapper extends Service { public List itemTopology(Long salarySobId) { return getSalarySobItemService(user).itemTopology(salarySobId); } + + public Object topology(SalaryItemTopologyQueryParam param) { + + getSalarySobItemService(user).topology(param); + return null; + + } } From 3443cd0dff597be0b6170a5e1066fc432ed72044 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 10:24:30 +0800 Subject: [PATCH 03/14] =?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 | 62 +++++ .../salary/service/SalaryFormulaService.java | 3 + .../salary/service/SalarySobItemService.java | 3 +- .../impl/SalaryFormulaServiceImpl.java | 13 + .../impl/SalarySobItemServiceImpl.java | 235 +++++++++++++----- .../salary/web/SalarySobController.java | 2 +- .../salary/wrapper/SalarySobItemWrapper.java | 6 +- 7 files changed, 263 insertions(+), 61 deletions(-) create mode 100644 src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java diff --git a/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java new file mode 100644 index 000000000..8ed20b4c7 --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java @@ -0,0 +1,62 @@ +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; + +@Data +public class SalaryItemTopologyDTO { + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 薪资项目名称 + */ + 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 List children; + +} diff --git a/src/com/engine/salary/service/SalaryFormulaService.java b/src/com/engine/salary/service/SalaryFormulaService.java index 618011426..493754f6b 100644 --- a/src/com/engine/salary/service/SalaryFormulaService.java +++ b/src/com/engine/salary/service/SalaryFormulaService.java @@ -27,6 +27,9 @@ public interface SalaryFormulaService { */ List listExpressFormula(Collection formulaIds); + + List listAllExpressFormula(); + /** * 根据公式id获取公式内容 * diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index 7f10b1c45..62d0050e2 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -2,6 +2,7 @@ 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; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; @@ -133,5 +134,5 @@ public interface SalarySobItemService { List itemTopology(Long salarySobId); - Object topology(SalaryItemTopologyQueryParam param); + SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param); } diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index 3e34a2715..6b2508558 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -85,6 +85,19 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe } } + @Override + public List listAllExpressFormula() { + List expressFormulas = getFormulaMapper().listAll(); + + return expressFormulas.stream().filter(Objects::nonNull).map(m -> { + ExpressFormula expressFormula = new ExpressFormula(); + BeanUtils.copyProperties(m, expressFormula); + List formulaVarPOS = getFormulaVarMapper().listSome(FormulaVar.builder().formulaId(m.getId()).build()); + expressFormula.setParameters(formulaVarPOS); + return expressFormula; + }).collect(Collectors.toList()); + } + @Override public ExpressFormula getExpressFormula(Long formulaId) { if (formulaId == null || formulaId <= 0) { diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 6f40a25d7..181228d4f 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -10,8 +10,10 @@ 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.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; +import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; @@ -19,6 +21,8 @@ import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; +import com.engine.salary.enums.salaryformula.SalarySQLReferenceEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobDefaultItemMapper; import com.engine.salary.mapper.salarysob.SalarySobEmpFieldMapper; @@ -29,6 +33,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.valid.ValidUtil; import dm.jdbc.util.IdGenerator; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -824,64 +829,182 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe } @Override - public Object topology(SalaryItemTopologyQueryParam param) { - SalarySobItemFormDTO salarySobItemFormDTO = new SalarySobItemFormDTO(); - salarySobItemFormDTO.setCanEdit(1); - // 默认可以编辑 - if (param.getSalarySobId() != null && param.getSalaryItemId() != null) { - // 查询薪资账套 - SalarySobPO salarySobPO = salarySobBiz.getById(param.getSalarySobId()); - if (Objects.isNull(salarySobPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); - } - // 查询薪资项目 - List salarySobItemPOS = getSalarySobItemMapper().listSome(SalarySobItemPO.builder().salarySobId(param.getSalarySobId()).salaryItemId(param.getSalaryItemId()).build()); - if (CollectionUtils.isEmpty(salarySobItemPOS)) { - throw new SalaryRunTimeException("账套中薪资项目不存在"); - } - SalarySobItemPO salarySobItemPO = salarySobItemPOS.get(0); - SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(salarySobItemPO.getSalaryItemId()); - if (salaryItemPO == null) { - throw new SalaryRunTimeException("薪资项目不存在或已被删除"); - } - //获取系统值 - List salarySobDefaultItemPOS = getSalarySobDefaultItemMapper().listAll(); - salarySobDefaultItemPOS = salarySobDefaultItemPOS.stream().filter(po -> po.getSysSalaryItemId() != 0).collect(Collectors.toList()); - Map longIntegerMap = SalaryEntityUtil.convert2Map(salarySobDefaultItemPOS, SalarySobDefaultItemPO::getSysSalaryItemId, SalarySobDefaultItemPO::getCanDelete); - if (salaryItemPO.getSysSalaryItemId() != null) { - salarySobItemPO.setCanDelete(longIntegerMap.getOrDefault(salaryItemPO.getSysSalaryItemId(), 1)); - } - // 获取薪资项目公式 - List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(salarySobItemPO.getFormulaId())); - // 强制开启账套的公式配置 - BaseBean baseBean = new BaseBean(); - final Boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); - // 获取核算时隐藏的薪资项目id - List hideItemIds = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder() - .salarySobId(param.getSalarySobId()) - .isGroup(new Integer(0)) - .salaryItemId(param.getSalaryItemId()) - .build()); + public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) { - String formulaContent = CollectionUtils.isEmpty(expressFormulas) ? "" : expressFormulas.get(0).getFormula(); - Integer valueType = salarySobItemPO.getValueType() == null ? salaryItemPO.getValueType() : salarySobItemPO.getValueType(); - salarySobItemFormDTO - .setId(salarySobItemPO.getId()) - .setName(salaryItemPO.getName()) - .setItemHide(hideItemIds.contains(salaryItemPO.getId()) ? 1 : 0) - .setDataType(salaryItemPO.getDataType()) - .setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode()) - .setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern()) - .setValueType(valueType) - .setFormulaId(salarySobItemPO.getFormulaId()) - .setFormulaContent(CollectionUtils.isNotEmpty(expressFormulas) ? formulaContent : "") - .setOriginFormulaContent(valueType.equals(SalaryValueTypeEnum.FORMULA.getValue()) ? formulaContent : "") - .setOriginSqlContent(valueType.equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "") - .setUseInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) - .setDescription(salarySobItemPO.getDescription()) - .setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0); + + // 查询薪资账套 + SalarySobPO salarySobPO = salarySobBiz.getById(param.getSalarySobId()); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); } - return salarySobItemFormDTO; + // 查询薪资项目 + List salarySobItemPOS = getSalarySobItemMapper().listSome(SalarySobItemPO.builder().salarySobId(param.getSalarySobId()).salaryItemId(param.getSalaryItemId()).build()); + if (CollectionUtils.isEmpty(salarySobItemPOS)) { + throw new SalaryRunTimeException("账套中薪资项目不存在"); + } + SalarySobItemPO salarySobItemPO = salarySobItemPOS.get(0); + + + //所有薪资项目 + 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.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); + + + topology(salaryItemTopologyDTO, topologyData); + + + return salaryItemTopologyDTO; + } + + 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(); + + ExpressFormula formula = salaryItemTopologyDTO.getFormula(); + if (formula != null) { + List parameters = formula.getParameters(); + if (CollectionUtils.isNotEmpty(parameters)) { + List salaryItemTopologyDTOChildren = new ArrayList<>(); + for (int i = 0; i < parameters.size(); i++) { + FormulaVar formulaVar = parameters.get(i); + String source = formulaVar.getSource(); + String fieldId = formulaVar.getFieldId().replace(source + "_", ""); + String name = formulaVar.getName(); + + //是否是薪资项目 + boolean isSalaryItemVar; + SalaryFormulaReferenceEnum salaryFormulaReferenceEnum = SalaryFormulaReferenceEnum.parseByValue(source); + if (salaryFormulaReferenceEnum == null) { + SalarySQLReferenceEnum referenceEnum = SalarySQLReferenceEnum.parseByValue(source); + if (referenceEnum == null) { + isSalaryItemVar = false; + } else { + isSalaryItemVar = referenceEnum == SalarySQLReferenceEnum.SALARY_ITEM; + } + } else { + isSalaryItemVar = salaryFormulaReferenceEnum == SalaryFormulaReferenceEnum.SALARY_ITEM; + } + + ExpressFormula expressFormula; + if (salarySobItemCodeMap.containsKey(fieldId)) { + // 如果薪资账套下重新定义了薪资项目的公式,则使用薪资账套下的公式,否则使用薪资项目本身的公式 + expressFormula = expressFormulaIdMap.get(salarySobItemCodeMap.get(salaryItemPO.getCode()).getFormulaId()); + } else { + expressFormula = expressFormulaIdMap.get(salaryItemPO.getFormulaId()); + } + SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(fieldId) : new SalaryItemPO(); + SalarySobItemPO salarySobItemChild = salarySobItemCodeMap.get(fieldId); + + if (salarySobItemChild == null) { + continue; + } + + 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.setFormula(expressFormula); + salaryItemTopologyDTOChildren.add(salaryItemTopologyChild); + + if (isSalaryItemVar) { + SalaryItemPO salaryItemChildChild = salaryItemCodeMap.get(fieldId); + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(salaryItemChildChild.getValueType()); + if (salaryValueTypeEnum != SalaryValueTypeEnum.INPUT) { + topologyData.setSalaryItemId(salaryItemChildChild.getId()); + topology(salaryItemTopologyChild, topologyData); + } + } + + } + salaryItemTopologyDTO.setChildren(salaryItemTopologyDTOChildren); + } + } + } + + 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); + + Map salaryItemCodeMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getCode); + topologyData.setSalaryItemCodeMap(salaryItemCodeMap); + + SalaryItemPO salaryItemPO = salaryItemIdMap.get(topologyData.salaryItemId); + topologyData.setSalaryItemPO(salaryItemPO); + + //账套项目 + 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); + return topologyData; + } + + @Data + class TopologyData { + Long salaryItemId; + + List hideItemIds; + + List salaryItems; + Map salaryItemIdMap; + Map salaryItemCodeMap; + + //账套项目 + SalaryItemPO salaryItemPO; + List salarySobItems; + Map salarySobItemCodeMap; + + //公式 + List expressFormulas; + Map expressFormulaIdMap; } diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index e0456bca7..8632dd4e1 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -406,7 +406,7 @@ public class SalarySobController { @Produces(MediaType.APPLICATION_JSON) 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); } diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index 712720c0b..4b2b1d8ce 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -11,6 +11,7 @@ import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; +import com.engine.salary.entity.salarysob.dto.SalaryItemTopologyDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; import com.engine.salary.entity.salarysob.param.SalaryItemTopologyQueryParam; @@ -184,10 +185,9 @@ public class SalarySobItemWrapper extends Service { return getSalarySobItemService(user).itemTopology(salarySobId); } - public Object topology(SalaryItemTopologyQueryParam param) { + public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) { - getSalarySobItemService(user).topology(param); - return null; + return getSalarySobItemService(user).topology(param); } } 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 04/14] =?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); } From 18527f745eadf984a1c6f5a511345eb261e8ace1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Oct 2023 14:21:22 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=A0=B8=E7=AE=97=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/enums/common/FilterEnum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/enums/common/FilterEnum.java b/src/com/engine/salary/enums/common/FilterEnum.java index 602bcadbd..ea90fa2c3 100644 --- a/src/com/engine/salary/enums/common/FilterEnum.java +++ b/src/com/engine/salary/enums/common/FilterEnum.java @@ -13,7 +13,7 @@ public enum FilterEnum implements BaseEnum { BT("BT", "包含", 1) { @Override public Predicate filter(List params) { - return a -> a.contentEquals(params.get(0)); + return a -> a.contains(params.get(0)); } }, EQ("EQ", "等于", 1) { From d0e0195709b752468703c477717693557f343876 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 19 Oct 2023 14:30:58 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=97=B6=E6=A1=A3=E6=A1=88=E4=B8=BB=E8=A1=A8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=97=B6=E4=BA=BA=E5=91=98ids=E5=88=86=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SISchemeServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 205c9d459..06a0bd09e 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -1441,7 +1441,11 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { // List> employeeIdPartition = Lists.partition(baseInfoEmployeeIds, 100); // employeeIdPartition.forEach(getInsuranceBaseInfoMapper()::batchDeleteByEmployeeIds); //查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id) - List moreBaseInfoPOS = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(baseInfoEmployeeIds); +// List moreBaseInfoPOS = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(baseInfoEmployeeIds); + List moreBaseInfoPOS = new ArrayList<>(); + List> partitionInfo = Lists.partition((List) baseInfoEmployeeIds, 1000); + partitionInfo.forEach(part -> moreBaseInfoPOS.addAll( + getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part))); List newInsuranceArchivesBaseInfoList = new ArrayList<>(); //设置社保、公积金、其他福利档案id for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { From 3745be2c5c24f8dc6f3808c632e9a5452628c5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Oct 2023 15:52:52 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index eb07db215..acc42616d 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -60,7 +60,7 @@ public class SalaryFormulaEmployeeDTO { private String dissmissdate; //状态 - @SalaryFormulaVar(defaultLabel = "状态", labelId = 98621, dataType = "string") + @SalaryFormulaVar(defaultLabel = "状态编码", labelId = 98621, dataType = "string") private String status; @SalaryFormulaVar(defaultLabel = "状态", labelId = 98622, dataType = "string") From 6bbfc10c3448be33b9dc18924d509fe497fe14cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Oct 2023 16:25:30 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E8=BF=87=E6=BB=A4=3D=3D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/enums/common/FilterEnum.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/enums/common/FilterEnum.java b/src/com/engine/salary/enums/common/FilterEnum.java index ea90fa2c3..f331fea5a 100644 --- a/src/com/engine/salary/enums/common/FilterEnum.java +++ b/src/com/engine/salary/enums/common/FilterEnum.java @@ -8,7 +8,7 @@ import java.math.BigDecimal; import java.util.List; import java.util.function.Predicate; -public enum FilterEnum implements BaseEnum { +public enum FilterEnum implements BaseEnum { BT("BT", "包含", 1) { @Override @@ -19,7 +19,13 @@ public enum FilterEnum implements BaseEnum { EQ("EQ", "等于", 1) { @Override public Predicate filter(List params) { - return a -> a.equals(params.get(0)); + return a -> { + if (NumberUtils.isCreatable(a) && NumberUtils.isCreatable(params.get(0))) { + return new BigDecimal(a).compareTo(new BigDecimal(params.get(0))) == 0; + } else { + return a.equals(params.get(0)); + } + }; } }, NE("NE", "不等于", 1) { From 81b9d65a22b62b062d87ca68de1bf5a1eb506298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Oct 2023 16:26:23 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E8=BF=87=E6=BB=A4=3D=3D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/enums/common/FilterEnum.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/enums/common/FilterEnum.java b/src/com/engine/salary/enums/common/FilterEnum.java index f331fea5a..52fbd970e 100644 --- a/src/com/engine/salary/enums/common/FilterEnum.java +++ b/src/com/engine/salary/enums/common/FilterEnum.java @@ -31,7 +31,13 @@ public enum FilterEnum implements BaseEnum { NE("NE", "不等于", 1) { @Override public Predicate filter(List params) { - return a -> !a.equals(params.get(0)); + return a -> { + if (NumberUtils.isCreatable(a) && NumberUtils.isCreatable(params.get(0))) { + return new BigDecimal(a).compareTo(new BigDecimal(params.get(0))) != 0; + } else { + return !a.equals(params.get(0)); + } + }; } }, GT("GT", "大于", 1) { From 0dd9040408d35d76a895d11060759f9324fc28d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Oct 2023 17:35:33 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E4=B8=80=E9=94=AE=E7=B4=AF=E8=AE=A1bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/AddUpDeductionBiz.java | 16 +++++++++++++--- .../entity/datacollection/AddUpDeduction.java | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/biz/AddUpDeductionBiz.java b/src/com/engine/salary/biz/AddUpDeductionBiz.java index 75fc201f7..8b9ffa0a4 100644 --- a/src/com/engine/salary/biz/AddUpDeductionBiz.java +++ b/src/com/engine/salary/biz/AddUpDeductionBiz.java @@ -32,7 +32,7 @@ public class AddUpDeductionBiz extends BaseBean { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); List list = mapper.list(param); list = encryptUtil.decryptList(list, AddUpDeductionDTO.class); - return list; + return list; } finally { sqlSession.close(); } @@ -48,8 +48,18 @@ public class AddUpDeductionBiz extends BaseBean { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpDeductionMapper mapper = sqlSession.getMapper(AddUpDeductionMapper.class); - List addUpDeductions = mapper.listSome(param); - return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class); + if (CollectionUtils.isNotEmpty(param.getEmployeeIds())) { + List addUpDeductions = new ArrayList<>(); + List> partition = Lists.partition(param.getEmployeeIds(), 500); + partition.forEach(l -> { + param.setEmployeeIds(l); + addUpDeductions.addAll(mapper.listSome(param)); + }); + return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class); + } else { + List addUpDeductions = mapper.listSome(param); + return encryptUtil.decryptList(addUpDeductions, AddUpDeduction.class); + } } finally { sqlSession.close(); } diff --git a/src/com/engine/salary/entity/datacollection/AddUpDeduction.java b/src/com/engine/salary/entity/datacollection/AddUpDeduction.java index c462a4551..3168a0880 100644 --- a/src/com/engine/salary/entity/datacollection/AddUpDeduction.java +++ b/src/com/engine/salary/entity/datacollection/AddUpDeduction.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import java.util.Collection; import java.util.Date; +import java.util.List; /** * 数据采集-累计专项附加扣除表 @@ -113,7 +114,7 @@ public class AddUpDeduction { */ private String tenantKey; - Collection employeeIds; + List employeeIds; Collection taxAgentIds; From 83e16cedf6d48b5d9b9607b0c887460a19223ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 20 Oct 2023 09:43:04 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E4=B8=80=E9=94=AE=E7=B4=AF=E8=AE=A1bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/biz/AddUpSituationBiz.java | 12 +++++++++- .../engine/salary/biz/OtherDeductionBiz.java | 24 ++++++++++++------- .../salary/biz/SalaryArchiveItemBiz.java | 14 +++++++++-- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/biz/AddUpSituationBiz.java b/src/com/engine/salary/biz/AddUpSituationBiz.java index 1ef7cb103..e1fbdb901 100644 --- a/src/com/engine/salary/biz/AddUpSituationBiz.java +++ b/src/com/engine/salary/biz/AddUpSituationBiz.java @@ -46,8 +46,18 @@ public class AddUpSituationBiz extends BaseBean { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { AddUpSituationMapper mapper = sqlSession.getMapper(AddUpSituationMapper.class); - List addUpSituations = mapper.listSome(param); + if(CollectionUtils.isNotEmpty(param.getEmployeeIds())){ + List addUpSituations = new ArrayList<>(); + List> partition = Lists.partition((List) param.getEmployeeIds(), 500); + partition.forEach(l->{ + param.setEmployeeIds(l); + addUpSituations.addAll(mapper.listSome(param)); + }); return encryptUtil.decryptList(addUpSituations, AddUpSituation.class); + }else { + List addUpSituations = mapper.listSome(param); + return encryptUtil.decryptList(addUpSituations, AddUpSituation.class); + } } finally { sqlSession.close(); } diff --git a/src/com/engine/salary/biz/OtherDeductionBiz.java b/src/com/engine/salary/biz/OtherDeductionBiz.java index 5b6002825..1b107764c 100644 --- a/src/com/engine/salary/biz/OtherDeductionBiz.java +++ b/src/com/engine/salary/biz/OtherDeductionBiz.java @@ -28,8 +28,18 @@ public class OtherDeductionBiz extends BaseBean { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { OtherDeductionMapper mapper = sqlSession.getMapper(OtherDeductionMapper.class); - List otherDeductionPOS = mapper.listSome(param); - return encryptUtil.decryptList(otherDeductionPOS, OtherDeductionPO.class); + if (CollectionUtils.isNotEmpty(param.getEmployeeIds())) { + List> partition = Lists.partition(param.getEmployeeIds(), 500); + List otherDeductionPOS = new ArrayList<>(); + partition.forEach(l -> { + param.setEmployeeIds(l); + otherDeductionPOS.addAll(mapper.listSome(param)); + }); + return encryptUtil.decryptList(otherDeductionPOS, OtherDeductionPO.class); + }else { + List otherDeductionPOS = mapper.listSome(param); + return encryptUtil.decryptList(otherDeductionPOS, OtherDeductionPO.class); + } } finally { sqlSession.close(); } @@ -77,7 +87,7 @@ public class OtherDeductionBiz extends BaseBean { * @return */ public void batchSave(List param) { - if(CollectionUtils.isEmpty(param)){ + if (CollectionUtils.isEmpty(param)) { return; } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); @@ -99,7 +109,7 @@ public class OtherDeductionBiz extends BaseBean { * @return */ public void batchUpdate(List param) { - if(CollectionUtils.isEmpty(param)){ + if (CollectionUtils.isEmpty(param)) { return; } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); @@ -115,10 +125,6 @@ public class OtherDeductionBiz extends BaseBean { } - - - - /** * 处理导入数据 * @@ -183,8 +189,8 @@ public class OtherDeductionBiz extends BaseBean { /** - * @description 批量删除 * @return void + * @description 批量删除 * @author Harryxzy * @date 2022/10/27 16:07 */ diff --git a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java index b82cd7e81..df3c5041a 100644 --- a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java @@ -34,8 +34,18 @@ public class SalaryArchiveItemBiz { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class); - List salaryArchiveItemPOS = mapper.listByParam(build); - return encryptUtil.decryptList(salaryArchiveItemPOS, SalaryArchiveItemPO.class); + if (CollectionUtils.isNotEmpty(build.getEmployeeIds())) { + List salaryArchiveItemPOS = new ArrayList<>(); + List> partition = Lists.partition((List) build.getEmployeeIds(), 500); + partition.forEach(l -> { + build.setEmployeeIds(l); + salaryArchiveItemPOS.addAll(mapper.listByParam(build)); + }); + return encryptUtil.decryptList(salaryArchiveItemPOS, SalaryArchiveItemPO.class); + } else { + List salaryArchiveItemPOS = mapper.listByParam(build); + return encryptUtil.decryptList(salaryArchiveItemPOS, SalaryArchiveItemPO.class); + } } finally { sqlSession.close(); } From f8f5ea77827e906d96e956dc8ff8bd371b735993 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 20 Oct 2023 09:50:44 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E8=B0=83=E7=94=A8=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2=E6=97=B6?= =?UTF-8?q?=E4=BA=BA=E5=91=98ids=E5=88=86=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SIAccountServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 84f7ade04..e1b3cae36 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -897,7 +897,15 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } //20230707增加福利核算明细中的缴纳状态+合计的数据项 - List insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, employeeIds); +// List insuranceAccountDetailPOS = getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, employeeIds); + + List insuranceAccountDetailPOS = new ArrayList<>(); + List> empIdsPart = Lists.partition((List) employeeIds, 500); + for (List part : empIdsPart) { + insuranceAccountDetailPOS.addAll( + getInsuranceAccountDetailMapper().queryList(billMonth, taxAgentId, part)); + } + //退差数据不参与薪资核算 insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream() .filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue()) From a19f86c62453ecd20351aa4cf698781913962967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 20 Oct 2023 10:29:46 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E4=B8=80=E9=94=AE=E7=B4=AF=E8=AE=A1bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctEmployeeServiceImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 391289aaa..8c8bca9ac 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -179,7 +179,13 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(employeeIds)) { return Collections.emptyList(); } - return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(employeeIds).build()); + List> partition = Lists.partition((List) employeeIds, 500); + List list = new ArrayList<>(); + partition.forEach(l -> { + list.addAll(getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(l).build())); + }); + + return list; } @Override From 328158204d63dd447255c518388f3593587c1d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 23 Oct 2023 10:03:04 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E8=B0=83=E5=B7=AE?= =?UTF-8?q?=E7=B4=AF=E8=AE=A1=E5=AD=97=E6=AE=B5=E5=AF=B9=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java index 5a4f908e3..88192ff3e 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java @@ -159,7 +159,9 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { .addUpOtherDeduction(valueMap.get("addUpOtherDeduction")) .addUpTaxExemptIncome(valueMap.get("addUpTaxExemptIncome")) .addUpAllowedDonation(valueMap.get("addUpAllowedDonation")) + .addUpTaxSavings(valueMap.get("addUpTaxSavings")) .addUpAdvanceTax(valueMap.get("addUpAdvanceTax")) + .taxAdjustment(valueMap.get("taxAdjustment")) .addUpTaxableIncome(valueMap.get("addUpTaxableIncome")) // .modifier(taxDeclaration.getCreator()) .creator(taxDeclaration.getCreator())