From da9b5484804ee8a0db957ec965f49b324b7a6bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 17 Feb 2023 10:54:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryitem/bo/SalaryItemBO.java | 9 ++- .../salaryitem/dto/SalaryItemListDTO.java | 1 + .../service/impl/SalaryItemServiceImpl.java | 5 +- .../salary/wrapper/SalaryItemWrapper.java | 81 ++++++++++++++++--- 4 files changed, 78 insertions(+), 18 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 03e0a757b..f3b0048fd 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -93,6 +93,7 @@ public class SalaryItemBO { SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItemPO.getDataType()); return SalaryItemListDTO.builder() .id(salaryItemPO.getId()) + .code(salaryItemPO.getCode()) .name(salaryItemPO.getName()) .systemName(sysSalaryItemNameMap.getOrDefault(salaryItemPO.getSysSalaryItemId(), StringUtils.EMPTY)) .useInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) @@ -220,10 +221,10 @@ public class SalaryItemBO { .taxAgentIds(saveParam.getTaxAgentIds()) .build(); // 开启了"薪资档案引用",取值方式固定为输入 - if (Objects.equals(saveParam.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)) { - salaryItemPO.setValueType(SalaryValueTypeEnum.INPUT.getValue()); - salaryItemPO.setFormulaId(NumberUtils.LONG_ZERO); - } +// if (Objects.equals(saveParam.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)) { +// salaryItemPO.setValueType(SalaryValueTypeEnum.INPUT.getValue()); +// salaryItemPO.setFormulaId(NumberUtils.LONG_ZERO); +// } return salaryItemPO; } } diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java index 33af37dfd..24b0904f0 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java @@ -35,6 +35,7 @@ public class SalaryItemListDTO { @SalaryTableColumn(text = "名称", width = "10%", column = "name") @TableTitle(title = "名称",dataIndex = "name",key = "name") private String name; + private String code; @SalaryTableColumn(text = "系统名", width = "10%", column = "systemName") @TableTitle(title = "系统名",dataIndex = "systemName",key = "systemName") diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 6e541a860..3a841da5b 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -193,7 +193,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService newSalaryItemPO.setUseInEmployeeSalary(saveParam.getUseInEmployeeSalary()); newSalaryItemPO.setRoundingMode(saveParam.getRoundingMode()); newSalaryItemPO.setPattern(saveParam.getPattern()); - newSalaryItemPO.setValueType(saveParam.getValueType()); +// newSalaryItemPO.setValueType(saveParam.getValueType()); newSalaryItemPO.setDataType(saveParam.getDataType()); newSalaryItemPO.setFormulaId(Objects.equals(saveParam.getValueType(), SalaryValueTypeEnum.INPUT.getValue()) ? 0L : saveParam.getFormulaId()); newSalaryItemPO.setDescription(saveParam.getDescription()); @@ -224,6 +224,9 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService if (CollectionUtils.isNotEmpty(salarySobItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98322, "薪资账套正在使用该薪资项目,不允许删除")); } + + + // 删除薪资项目 ids = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getId); salaryItemBiz.deleteByIds(ids); diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index 6a9c00cfa..ab031ac13 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -25,6 +25,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; +import lombok.Builder; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; @@ -99,7 +100,7 @@ public class SalaryItemWrapper extends Service { usingItemIds.addAll(backItemIds); List formulaVars = getSalaryFormulaService(user).listVarByFormulaIds(effectiveFormulaIds); - SalaryEntityUtil.properties(formulaVars, FormulaVar::getFieldId, Collectors.toList()); + List itemCode = formulaVars.stream().map(FormulaVar::getFieldId).map(v -> v.replaceAll("salaryItem_", "")).collect(Collectors.toList()); //!!! 从2023-01-23起,薪资项目这里不再查询薪资档案引用的项目 !!! //薪资档案引用的项目转移到字段管理功能项 @@ -128,21 +129,10 @@ public class SalaryItemWrapper extends Service { List salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas, sysSalaryItemPOS); //系统项目不删除 salaryItemListDTOS.forEach(dto -> { - if (StringUtils.isNotBlank(dto.getSystemName()) || usingItemIds.contains(dto.getId()) ) { + if (StringUtils.isNotBlank(dto.getSystemName()) || usingItemIds.contains(dto.getId()) || itemCode.contains(dto.getCode())) { dto.setCanDelete(false); } }); - //3、被引用的薪资项目不能删除 - Set salaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getId); - salarySobItems = getSalarySobItemService(user).listBySalaryItemIds(salaryItemIds); - if (CollectionUtils.isNotEmpty(salarySobItems)) { - Set salaryItemIdsUseBySob = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); - salaryItemListDTOS.forEach(dto -> { - if (salaryItemIdsUseBySob.contains(dto.getId())) { - dto.setCanDelete(false); - } - }); - } salaryItemListDTOPage.setList(salaryItemListDTOS); } @@ -277,6 +267,71 @@ public class SalaryItemWrapper extends Service { * @param ids 主键id */ public void delete(Collection ids) { + + //清除未被引用的公式 + List effectiveFormulaIds = getEffectiveFormulaIds(); + + //删除无用公式 +// getSalaryFormulaService(user).deleteNotIn(effectiveFormulaIds); + + //账套里的项目,项目里的项目 + List sobItemIds = SalaryEntityUtil.properties(sobItems, SalarySobItemPO::getSalaryItemId, Collectors.toList()); + List backItemIds = SalaryEntityUtil.properties(backItems, SalarySobBackItemPO::getSalaryItemId, Collectors.toList()); + List usingItemIds = new ArrayList<>(); + usingItemIds.addAll(sobItemIds); + usingItemIds.addAll(backItemIds); + + List formulaVars = getSalaryFormulaService(user).listVarByFormulaIds(effectiveFormulaIds); + List itemCode = formulaVars.stream().map(FormulaVar::getFieldId).map(v -> v.replaceAll("salaryItem_", "")).collect(Collectors.toList()); + + // 查询薪资项目 + List salaryItemPOS = getSalaryItemService(user).listByIds(ids); + if (CollectionUtils.isEmpty(salaryItemPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除")); + } + if (CollectionUtils.containsAny(usingItemIds, ids)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98322, "薪资账套正在使用该薪资项目,不允许删除")); + } + List codes = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getCode, Collectors.toList()); + if (CollectionUtils.containsAny(itemCode, codes)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98322, "公式正在使用该薪资项目,不允许删除")); + } getSalaryItemService(user).deleteByIds(ids); } + + private usingItemAndFormulaIds getUsingFormulaIds() { + + //系统项目 + List sysItems = getSysSalaryItemService(user).listAll(); + List sysItemFormulaIds = SalaryEntityUtil.properties(sysItems, SysSalaryItemPO::getFormulaId, Collectors.toList()); + + //薪资项目 + List items = getSalaryItemService(user).listAll(); + List itemFormulaIds = SalaryEntityUtil.properties(items, SalaryItemPO::getFormulaId, Collectors.toList()); + + //账套项目 + List sobItems = getSalarySobItemService(user).list(); + List sobItemFormulaIds = SalaryEntityUtil.properties(sobItems, SalarySobItemPO::getFormulaId, Collectors.toList()); + + //回算项目 + List backItems = getSalarySobBackItemService(user).listAll(); + List backItemFormulaIds = SalaryEntityUtil.properties(backItems, SalarySobBackItemPO::getFormulaId, Collectors.toList()); + + List usingFormulaIds = new ArrayList<>(); + usingFormulaIds.addAll(sysItemFormulaIds); + usingFormulaIds.addAll(itemFormulaIds); + usingFormulaIds.addAll(sobItemFormulaIds); + usingFormulaIds.addAll(backItemFormulaIds); + + + return usingFormulaIds; + } + + + @Builder + class UsingItemAndFormulaIds { + private List usingFormulaIds; + + private List usingItemIds; + } }