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/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(); } 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; 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") 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..22a1a7a37 --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/dto/SalaryItemTopologyDTO.java @@ -0,0 +1,33 @@ +package com.engine.salary.entity.salarysob.dto; + +import com.engine.salary.entity.salaryformula.ExpressFormula; +import lombok.Data; + +import java.util.List; + +@Data +public class SalaryItemTopologyDTO { + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 薪资项目名称 + */ + private String salaryItemName; + + /** + * 公式 + */ + 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 new file mode 100644 index 000000000..2db5e982e --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/param/SalaryItemTopologyQueryParam.java @@ -0,0 +1,38 @@ +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; + + /** + * 薪资核算人员id + */ + private Long acctEmpId; +} 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()) diff --git a/src/com/engine/salary/enums/common/FilterEnum.java b/src/com/engine/salary/enums/common/FilterEnum.java index 602bcadbd..52fbd970e 100644 --- a/src/com/engine/salary/enums/common/FilterEnum.java +++ b/src/com/engine/salary/enums/common/FilterEnum.java @@ -8,24 +8,36 @@ 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 public Predicate filter(List params) { - return a -> a.contentEquals(params.get(0)); + return a -> a.contains(params.get(0)); } }, 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) { @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) { 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 b9d6c78db..8106f4561 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -1,8 +1,10 @@ package com.engine.salary.service; 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; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -127,5 +129,16 @@ public interface SalarySobItemService { */ SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param); + /** + * 更新 + * @param po + */ void update(SalarySobItemPO po); + + /** + * 拓扑图 + * @param param + * @return + */ + SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param); } 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()) 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) { diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index c9cdcf7e6..b345b69e5 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 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 bc880f98a..f53d107fb 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -7,16 +7,22 @@ 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.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; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.bo.SalarySobItemBO; +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; 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; @@ -27,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; @@ -99,6 +106,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class); } + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + // private LoggerTemplate salarySobLoggerTemplate; @Override @@ -833,4 +844,187 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return salarySobItemFormDTO; } + /** + * 拓扑图 + * + * @param param + * @return + */ + @Override + public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) { + + // 查询薪资账套 + 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); + + + //所有薪资项目 + TopologyData topologyData = init(param); + SalaryItemPO salaryItemPO = topologyData.getSalaryItemPO(); + + // 获取薪资项目公式 + ExpressFormula expressFormula = getSalaryFormulaService(user).getExpressFormula(salarySobItemPO.getFormulaId()); + + SalaryItemTopologyDTO salaryItemTopologyDTO = new SalaryItemTopologyDTO(); + salaryItemTopologyDTO.setSalaryItemId(salaryItemPO.getId()); + salaryItemTopologyDTO.setSalaryItemName(salaryItemPO.getName()); + 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) { + Long salaryItemId = topologyData.getSalaryItemId(); + Map salaryItemIdMap = topologyData.getSalaryItemIdMap(); + 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(); + String fieldName = formulaVar.getFieldName(); + //是否是薪资项目 + 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(fieldId).getFormulaId()); + } else if (salaryItemCodeMap.containsKey(fieldId)) { + expressFormula = expressFormulaIdMap.get(salaryItemCodeMap.get(fieldId).getFormulaId()); + } else { + expressFormula = null; + } + + SalaryItemPO salaryItemChild = isSalaryItemVar ? salaryItemCodeMap.get(fieldId) : new SalaryItemPO(); + + SalaryItemTopologyDTO salaryItemTopologyChild = new SalaryItemTopologyDTO(); + 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) { + 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()); + List salaryItems = getSalaryItemService(user).listAll(); + + 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()); + + Map salarySobItemCodeMap = SalaryEntityUtil.convert2Map(salarySobItems, SalarySobItemPO::getSalaryItemCode); + topologyData.setSalarySobItemCodeMap(salarySobItemCodeMap); + + //公式 + List expressFormulas = getSalaryFormulaService(user).listAllExpressFormula(); + + 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; + + /** + * 薪资项目 + */ + Map salaryItemIdMap; + Map salaryItemCodeMap; + + /** + * 账套项目 + */ + SalaryItemPO salaryItemPO; + Map salarySobItemCodeMap; + + /** + * 公式 + */ + Map expressFormulaIdMap; + + /** + * 核算结果 + */ + Map resultItemMap; + } + + } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 9faa5f466..a422b6b59 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); } @@ -150,6 +158,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 ea8719d73..7fd598241 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -393,6 +393,21 @@ public class SalarySobController { return new ResponseResult(user).run(getSalarySobItemWrapper(user)::getSalaryItemForm, param); } + /** + * 账套项目拓扑图 + * + * @param request + * @param response + * @param param + * @return + */ + @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*********************************/ @@ -471,7 +486,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 1fbe0e0e0..8cc48d6fb 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -10,8 +10,10 @@ 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; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -177,4 +179,15 @@ public class SalarySobItemWrapper extends Service { public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) { return getSalarySobItemService(user).getSalaryItemForm(param); } + + + /** + * 拓扑图 + * @param param + * @return + */ + public SalaryItemTopologyDTO topology(SalaryItemTopologyQueryParam param) { + return getSalarySobItemService(user).topology(param); + + } } diff --git a/src/com/engine/salary/wrapper/SalarySobWrapper.java b/src/com/engine/salary/wrapper/SalarySobWrapper.java index a505a2f44..3fb290dd5 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()); } /**