From 54ca46c653d7c6b05d8f64574cb742f919405f1f Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 11 May 2023 10:51:43 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A1=B9=E8=87=AA=E5=8A=A8=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryAcctResultUpdateLockStatusParam.java | 11 +++++++++++ .../service/impl/SalaryAcctExcelServiceImpl.java | 7 +++++++ .../service/impl/SalaryAcctResultServiceImpl.java | 13 +++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java index d5ae5718f..1e6042977 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java @@ -1,7 +1,12 @@ package com.engine.salary.entity.salaryacct.param; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; /** * 更新核算锁定状态 @@ -12,6 +17,9 @@ import lombok.Data; * @version 1.0 **/ @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class SalaryAcctResultUpdateLockStatusParam { //锁定状态 @@ -23,6 +31,9 @@ public class SalaryAcctResultUpdateLockStatusParam { //薪资核算人员的id") // private Set idStrSet; + //薪资项目的IdList + private Set salaryItemIds; + //薪资核算记录的id") private Long salaryAcctRecordId; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index d190fb19d..e232cd3b8 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -28,6 +28,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; @@ -1021,6 +1022,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); } } + // 导入的列都自动锁定 + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() + .salaryItemIds(excelSalaryItemIds) + .salaryAcctRecordId(param.getSalaryAcctRecordId()) + .lockStatus(LockStatusEnum.LOCK).build(); + getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 8ea761ec2..5f10df7cc 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -844,9 +844,18 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } // salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); // } - Set salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + + Set salaryItemIds; + if(CollectionUtils.isNotEmpty(updateParam.getSalaryItemIds())){ + salaryItemIds = updateParam.getSalaryItemIds(); + }else{ + salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + } if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { - salaryAcctRecord.getLockSalaryItemIds().addAll(salaryItemIds); + Set lockSalaryItemIds = new HashSet<>(); + lockSalaryItemIds.addAll(salaryAcctRecord.getLockSalaryItemIds()); + lockSalaryItemIds.addAll(salaryItemIds); + salaryAcctRecord.setLockSalaryItemIds(new ArrayList(lockSalaryItemIds)); } else { salaryAcctRecord.getLockSalaryItemIds().removeAll(salaryItemIds); } From b0084cad9cfebfca5d87725c0c5ef37cb16e02e4 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 11 May 2023 14:40:10 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=96=E8=BE=91=20=E6=89=8B=E5=8A=A8=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E5=8A=A8=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 53 ++++++++++++++++--- .../dto/SalaryAcctResultDetailDTO.java | 22 ++++++++ .../impl/SalaryAcctResultServiceImpl.java | 25 +++++++-- 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 96bd7353f..8822dcc6d 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -15,10 +15,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobEmpFieldDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; -import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; -import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; -import com.engine.salary.entity.salarysob.po.SalarySobItemPO; -import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; @@ -369,6 +366,7 @@ public class SalaryAcctResultBO { TaxAgentPO taxAgentPO, SalaryAcctEmployeePO salaryAcctEmployee, List salarySobEmpFields, + List salarySobItemGroupPOS, List salarySobItemPOS, List salaryItems, List salaryAcctResults, @@ -391,6 +389,26 @@ public class SalaryAcctResultBO { Map resultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResults, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); Map salaryBackItemMap = SalaryEntityUtil.convert2Map(salaryBackItemPOS, SalaryItemPO::getId); + Map> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItemPOS, SalarySobItemPO::getSalarySobItemGroupId); + + // 对分组进行排序 + salarySobItemGroupPOS = sortGroup(salarySobItemGroupPOS); + // 对分组内薪资项目排序 + sortItem(salarySobItemPOMap); + // 根据账套分组封装薪资项目的值 + List itemsByGroup = new ArrayList<>(); + for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + List items = groupItems.stream() + .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) + .collect(Collectors.toList()); + itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder() + .salarySobItemGroupId(groupPO.getId()) + .salarySobItemGroupName(groupPO.getName()) + .salaryItems(items) + .sortedIndex(groupPO.getSortedIndex()).build() ); + } + // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) List formulaItems = salarySobItemPOS.stream() .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) @@ -415,10 +433,32 @@ public class SalaryAcctResultBO { .employeeInfos(employeeInfos) .formulaItems(formulaItems) .inputItems(inputItems) + .itemsByGroup(itemsByGroup) .issuedAndReissueItems(issuedAndReissueItems) .build(); } + private static List sortGroup(List salarySobItemGroupPOS) { + if(CollectionUtils.isEmpty(salarySobItemGroupPOS)){ + return Collections.emptyList(); + } + return salarySobItemGroupPOS.stream().sorted(Comparator.comparingInt(SalarySobItemGroupPO::getSortedIndex)).collect(Collectors.toList()); + } + + /** + * 薪资账套的薪资项目按照sortedIndex排序 + * + */ + private static void sortItem(Map> salarySobItemPOMap) { + for(Map.Entry> entry : salarySobItemPOMap.entrySet()){ + List items = entry.getValue(); + if (CollectionUtils.isNotEmpty(items)) { + List sortedValue = items.stream().sorted(Comparator.comparingInt(SalarySobItemPO::getSortedIndex)).collect(Collectors.toList()); + salarySobItemPOMap.put(entry.getKey(), sortedValue); + } + } + } + /** * 转换成薪资核算结果详情dto * @@ -436,7 +476,8 @@ public class SalaryAcctResultBO { .salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .resultValue(resultValueMap.getOrDefault(salarySobItemPO.getSalaryItemId(), StringUtils.EMPTY)) .dataType(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) - .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) +// .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) + .canEdit(true) .build(); } @@ -492,7 +533,7 @@ public class SalaryAcctResultBO { .salaryAcctEmpId(salaryAcctEmployee.getId()) .employeeId(salaryAcctEmployee.getEmployeeId()) .taxAgentId(salaryAcctEmployee.getTaxAgentId()) - .resultValue(e.getResultValue()) + .resultValue(StringUtils.trim(e.getResultValue())) .originResultValue(salaryAcctResultOldPOMap.get(saveParam.getSalaryAcctEmpId() + "-" + e.getSalaryItemId())) .creator(employeeId) .createTime(now) diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java index efd51c4a2..c8d16c683 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java @@ -39,6 +39,9 @@ public class SalaryAcctResultDetailDTO { //输入项") private List inputItems; + // 根据账套分组的薪资项目 + private List itemsByGroup; + //已发补发 private List issuedAndReissueItems; @@ -66,4 +69,23 @@ public class SalaryAcctResultDetailDTO { //是否可编辑 private Boolean canEdit; } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class SalaryAcctResultDetailItemByGroupDTO { + + //薪资账套分组id") + private Long salarySobItemGroupId; + + //薪资项目分组名称") + private String salarySobItemGroupName; + + //分组中包含的薪资项目 + private List salaryItems; + + //分组顺序 + private Integer sortedIndex; + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 5f10df7cc..f1ceef54e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -156,6 +156,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -271,7 +275,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe TaxAgentPO taxAgent = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); // 转换成薪资核算结果详情dto - return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula); + return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula); } @Override @@ -523,9 +527,24 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe encryptUtil.decryptList(salaryAcctResultPOSOld, SalaryAcctResultPO.class); // 保存参数转换成薪资核算结果po List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); + // 对比核算结果提取修改了哪些薪资项目 + Set needLockItems = new HashSet<>(); + Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); + salaryAcctResultPOS.stream().forEach(PO -> { + String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + if(!StringUtils.equals(oldValue,PO.getResultValue())){ + needLockItems.add(PO.getSalaryItemId()); + } + }); + // 编辑的列都自动锁定 + SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() + .salaryItemIds(needLockItems) + .salaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()) + .lockStatus(LockStatusEnum.LOCK).build(); + getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); - SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); +// SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 若保存编辑时一同传已发补发,则删除以下代码 // if(byId.getBackCalcStatus() != null && Objects.equals(byId.getBackCalcStatus(),1)){ // // 是回算 @@ -927,4 +946,4 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } return salaryItemIds; } -} +} \ No newline at end of file From 7c741491845c7a4421e06fb9389cafc42f76637a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 May 2023 18:02:22 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=20=E9=80=89=E6=8B=A9=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=88=86=E7=B1=BB=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 4 +- .../dto/SalaryAcctImportFieldDTO.java | 37 +++++++-- .../impl/SalaryAcctExcelServiceImpl.java | 83 +++++++++++++------ 3 files changed, 89 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 8822dcc6d..df92e4715 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -438,7 +438,7 @@ public class SalaryAcctResultBO { .build(); } - private static List sortGroup(List salarySobItemGroupPOS) { + public static List sortGroup(List salarySobItemGroupPOS) { if(CollectionUtils.isEmpty(salarySobItemGroupPOS)){ return Collections.emptyList(); } @@ -449,7 +449,7 @@ public class SalaryAcctResultBO { * 薪资账套的薪资项目按照sortedIndex排序 * */ - private static void sortItem(Map> salarySobItemPOMap) { + public static void sortItem(Map> salarySobItemPOMap) { for(Map.Entry> entry : salarySobItemPOMap.entrySet()){ List items = entry.getValue(); if (CollectionUtils.isNotEmpty(items)) { diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java index d954e319a..67d3560e6 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java @@ -5,7 +5,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Collection; import java.util.List; /** @@ -22,14 +21,17 @@ import java.util.List; @AllArgsConstructor public class SalaryAcctImportFieldDTO { - //公式项 - private Collection formulaItems; +// //公式项 +// private Collection formulaItems; +// +// //sql项 +// private Collection sqlItems; +// +// //输入项 +// private Collection inputItems; - //sql项 - private Collection sqlItems; - - //输入项 - private Collection inputItems; + // 根据账套分组的薪资项目 + private List itemsByGroup; // 缓存勾选项目 private List checkItems; @@ -46,4 +48,23 @@ public class SalaryAcctImportFieldDTO { //薪资项目名称 private String salaryItemName; } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ImportFieldByGroupDTO { + + //薪资账套分组id") + private Long salarySobItemGroupId; + + //薪资项目分组名称") + private String salarySobItemGroupName; + + //分组中包含的薪资项目 + private List salaryItems; + + //分组顺序 + private Integer sortedIndex; + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index e232cd3b8..fa4a0aed7 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -24,9 +24,9 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; -import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -119,6 +119,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { + return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; private SalaryCheckResultDetailService salaryCheckResultDetailService; @@ -376,36 +380,65 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); // 查询薪资项目 List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); - // 薪资项目中的公式项 - List formulaItems = salaryItems.stream() - .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.FORMULA.getValue())) - .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salaryItemPO.getId()) - .salaryItemName(salaryItemPO.getName()) + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); + + Map> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItems, SalarySobItemPO::getSalarySobItemGroupId); + + // 查询薪资账套的薪资项目分类 + List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 对分组进行排序 + salarySobItemGroupPOS = SalaryAcctResultBO.sortGroup(salarySobItemGroupPOS); + // 对分组内薪资项目排序 + SalaryAcctResultBO.sortItem(salarySobItemPOMap); + // 根据账套分组封装薪资项目的值 + List itemsByGroup = new ArrayList<>(); + for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + List items = groupItems.stream() + .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .salaryItemId(salarySobItemPO.getSalaryItemId()) + .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .build()) - .collect(Collectors.toList()); - // 薪资项目中的SQl项 - List sqlItems = salaryItems.stream() - .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.SQL.getValue())) - .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salaryItemPO.getId()) - .salaryItemName(salaryItemPO.getName()) - .build()) - .collect(Collectors.toList()); - // 薪资项目中的输入项 - List inputItems = salaryItems.stream() - .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.INPUT.getValue())) - .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salaryItemPO.getId()) - .salaryItemName(salaryItemPO.getName()) - .build()) - .collect(Collectors.toList()); + .collect(Collectors.toList()); + + itemsByGroup.add(SalaryAcctImportFieldDTO.ImportFieldByGroupDTO.builder() + .salarySobItemGroupId(groupPO.getId()) + .salarySobItemGroupName(groupPO.getName()) + .salaryItems(items) + .sortedIndex(groupPO.getSortedIndex()).build() ); + } + +// // 薪资项目中的公式项 +// List formulaItems = salaryItems.stream() +// .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.FORMULA.getValue())) +// .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() +// .salaryItemId(salaryItemPO.getId()) +// .salaryItemName(salaryItemPO.getName()) +// .build()) +// .collect(Collectors.toList()); +// // 薪资项目中的SQl项 +// List sqlItems = salaryItems.stream() +// .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.SQL.getValue())) +// .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() +// .salaryItemId(salaryItemPO.getId()) +// .salaryItemName(salaryItemPO.getName()) +// .build()) +// .collect(Collectors.toList()); +// // 薪资项目中的输入项 +// List inputItems = salaryItems.stream() +// .filter(salaryItemPO -> Objects.equals(salaryItemPO.getValueType(), SalaryValueTypeEnum.INPUT.getValue())) +// .map(salaryItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() +// .salaryItemId(salaryItemPO.getId()) +// .salaryItemName(salaryItemPO.getName()) +// .build()) +// .collect(Collectors.toList()); // 缓存勾选 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto - return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); +// return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); + return SalaryAcctImportFieldDTO.builder().itemsByGroup(itemsByGroup).checkItems(checkItems).build(); } @Override From a6fc40a084d203f2256f854ede068ba96cd88afc Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 May 2023 14:12:49 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=20?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=88=97=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index df92e4715..97ef9afae 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -409,16 +409,16 @@ public class SalaryAcctResultBO { .sortedIndex(groupPO.getSortedIndex()).build() ); } - // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) - List formulaItems = salarySobItemPOS.stream() - .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) - .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) - .collect(Collectors.toList()); - // 输入/导入项目的值 - List inputItems = salarySobItemPOS.stream() - .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() <= 0) - .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) - .collect(Collectors.toList()); +// // 公式项的值(不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段) +// List formulaItems = salarySobItemPOS.stream() +// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) +// .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) +// .collect(Collectors.toList()); +// // 输入/导入项目的值 +// List inputItems = salarySobItemPOS.stream() +// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() <= 0) +// .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) +// .collect(Collectors.toList()); // // TODO 临时处理,后续删除,将已发补发加入输入、导入 // formulaItems.addAll(salarySobBackItemPOS.stream() // .map(salarySobBackItemPO -> backItemConvert2SalaryAcctResultDetailItemDTO(salarySobBackItemPO, salaryBackItemMap.get(salarySobBackItemPO.getSalaryItemId()), resultValueMap, salaryBackItemFormula)) @@ -431,8 +431,8 @@ public class SalaryAcctResultBO { .id(salaryAcctEmployee.getId()) .employeeId(salaryAcctEmployee.getEmployeeId()) .employeeInfos(employeeInfos) - .formulaItems(formulaItems) - .inputItems(inputItems) +// .formulaItems(formulaItems) +// .inputItems(inputItems) .itemsByGroup(itemsByGroup) .issuedAndReissueItems(issuedAndReissueItems) .build(); From 083916eb0c20e2343eea2525d5974c33b36c3431 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 May 2023 15:41:11 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=96=E8=BE=91=20=E5=B8=A6=E4=B8=8A=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 22 +++++++++++++++---- .../dto/SalaryAcctResultDetailDTO.java | 2 +- .../impl/SalaryAcctResultServiceImpl.java | 5 +++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 97ef9afae..9509a74a5 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeInfoDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; @@ -17,6 +18,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; 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.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.SalaryEntityUtil; @@ -372,7 +374,8 @@ public class SalaryAcctResultBO { List salaryAcctResults, List salarySobBackItemPOS, List salaryBackItemPOS, - Map salaryBackItemFormula) { + Map salaryBackItemFormula, + Map formulaContentMap) { // 员工信息字段 Map employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee); @@ -400,7 +403,7 @@ public class SalaryAcctResultBO { for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); List items = groupItems.stream() - .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap)) + .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap)) .collect(Collectors.toList()); itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder() .salarySobItemGroupId(groupPO.getId()) @@ -469,13 +472,24 @@ public class SalaryAcctResultBO { */ private static SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO convert2SalaryAcctResultDetailItemDTO(SalarySobItemPO salarySobItemPO, SalaryItemPO salaryItemPO, - Map resultValueMap) { + Map resultValueMap, + Map formulaContentMap) { + + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getValueType).orElse(0)); + String itemFormulaContent; + if(Objects.equals(salaryValueTypeEnum.getValue(),SalaryValueTypeEnum.FORMULA.getValue())){ + itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse(""); + }else{ + itemFormulaContent = salaryValueTypeEnum == null ? "" : salaryValueTypeEnum.getDefaultLabel(); + } + // 薪资项目的数据类型 return SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .resultValue(resultValueMap.getOrDefault(salarySobItemPO.getSalaryItemId(), StringUtils.EMPTY)) .dataType(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) + .itemFormulaContent(itemFormulaContent) // .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) .canEdit(true) .build(); @@ -498,7 +512,7 @@ public class SalaryAcctResultBO { .salaryItemId(salarySobBackItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .resultValue(resultValueMap.getOrDefault(salarySobBackItemPO.getSalaryItemId(), StringUtils.EMPTY)) - .salaryBackItemFormula(salaryBackItemFormula.get(salarySobBackItemPO.getSalaryItemId())) + .itemFormulaContent(salaryBackItemFormula.get(salarySobBackItemPO.getSalaryItemId())) .dataType(Optional.ofNullable(salarySobBackItemPO).map(SalarySobBackItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0)) .build(); diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java index c8d16c683..1df7b8a14 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctResultDetailDTO.java @@ -61,7 +61,7 @@ public class SalaryAcctResultDetailDTO { private String resultValue; // 公式/输入 - private String salaryBackItemFormula; + private String itemFormulaContent; //数据类型:number、string") private String dataType; diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index f1ceef54e..64d73534e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -273,9 +273,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctResultPOS = listBySalaryAcctEmployeeId(salaryAcctEmployeeId); // 查询个税扣缴义务人 TaxAgentPO taxAgent = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId()); + // 查询公式 + Map formulaContentMap = getSalaryAcctResultService(user).getColumnBySalaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 转换成薪资核算结果详情dto - return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula); + return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS, salarySobBackItemPOList, salaryBackItemPOS, salaryBackItemFormula, formulaContentMap); } @Override @@ -471,7 +473,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } Map resultMap = Maps.newHashMap(); // 查询薪资核算使用的薪资账套下的薪资项目 - List salarySobItems = Lists.newArrayList(); SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId()); for (SalarySobItemIncomeCategoryDTO incomeCategoryDTO : salarySobItemAggregateDTO.getIncomeCategories()) { for (SalarySobItemGroupDTO salarySobItemGroupDTO : incomeCategoryDTO.getItemGroups()) { From 72f2ca443917d13f1a6b9dae235d92feea45fc26 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 17 May 2023 14:49:53 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctResultServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 64d73534e..3bbdd584d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -532,7 +532,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Set needLockItems = new HashSet<>(); Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); salaryAcctResultPOS.stream().forEach(PO -> { - String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + String oldValue = Optional.ofNullable(oldResutMap.get(PO.getSalaryItemId())).map(SalaryAcctResultPO::getResultValue).orElse(""); if(!StringUtils.equals(oldValue,PO.getResultValue())){ needLockItems.add(PO.getSalaryItemId()); }