From 5055a4801a598982fa455dafbf501fc3aed7b422 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 12 Aug 2024 16:36:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=96=AA=E9=85=AC?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B9=89=E5=8A=A1=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacollection/bo/VariableArchiveBO.java | 1 + .../bo/VariableArchiveExcelBO.java | 28 ++++++++-- .../dto/VariableArchiveListDTO.java | 12 +++++ .../VariableArchiveImportHandleParam.java | 8 ++- .../param/VariableArchiveQueryParam.java | 3 ++ .../param/VariableArchiveSaveParam.java | 3 ++ .../datacollection/po/VariableArchivePO.java | 2 + .../salaryacct/bo/CalculateFormulaVarBO.java | 20 +++---- .../datacollection/VariableArchiveMapper.xml | 52 +++++++++++++++++-- .../service/VariableArchiveService.java | 2 +- .../impl/SalaryAcctCalculateServiceImpl.java | 5 +- .../impl/VariableArchiveServiceImpl.java | 39 +++++++++++--- 12 files changed, 141 insertions(+), 34 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java index 92f09ec15..b4f2778d7 100644 --- a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java @@ -37,6 +37,7 @@ public class VariableArchiveBO { WeaTableColumn employeeIdColumn = new WeaTableColumn("100px", "人员信息表的主键id", "employeeId"); employeeIdColumn.setDisplay(WeaBoolAttr.FALSE); columns.add(employeeIdColumn); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "个税扣缴义务人"), "taxAgentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "username")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86186, "手机号"), "mobile")); diff --git a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java index 2644c4236..313ddc1d4 100644 --- a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandle import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; import com.engine.salary.entity.datacollection.po.VariableArchivePO; import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.util.SalaryI18nUtil; @@ -174,20 +175,35 @@ public class VariableArchiveExcelBO extends Service { return isError; } + // 个税扣缴义务人 + String taxAgentCellVal = Optional.ofNullable(map.get(taxAgentI18n)).orElse("").toString(); + map.put("taxAgent", taxAgentCellVal); + Optional optionalTaxAgent = importHandleParam.getTaxAgentList().stream().filter(m -> m.getTaxAgentName().equals(taxAgentCellVal)).findFirst(); + if (!optionalTaxAgent.isPresent()) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowindex + "个税扣缴义务人不存在,或不在权限范围内"); + excelComments.add(errorMessageMap); + isError = true; + return isError; + } + Long taxAgentId = optionalTaxAgent.get().getTaxAgentId(); + map.put("taxAgentId", taxAgentId); + // 用于初始化导入数据校验 map.put("employeeId", employeeId); - if (allTodoVariableArchives.contains(employeeId.toString())) { + String repeatKey = optionalTaxAgent.get().getTaxAgentId() + "-" + employeeId.toString(); + if (allTodoVariableArchives.contains(repeatKey)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowindex + "存在重复数据"); excelComments.add(errorMessageMap); isError = true; return isError; } else { - allTodoVariableArchives.add(employeeId.toString()); + allTodoVariableArchives.add(repeatKey); } // 构建薪资档案 - VariableArchivePO finalVariableArchive = buildVariableArchive(employeeId, importHandleParam); + VariableArchivePO finalVariableArchive = buildVariableArchive(employeeId, taxAgentId, importHandleParam); map.put("variableArchiveId", finalVariableArchive.getId()); List needDelArchiveItemIds = new ArrayList<>(); for (int j = 0; j < headers.size(); j++) { @@ -267,16 +283,18 @@ public class VariableArchiveExcelBO extends Service { * 构建浮动薪资档案对象 * * @param employeeId + * @param taxAgentId * @param importHandleParam * @return */ - public static VariableArchivePO buildVariableArchive(Long employeeId, VariableArchiveImportHandleParam importHandleParam) { - VariableArchivePO variableArchivePO = importHandleParam.getVariableArchivesMap().get(employeeId); + public static VariableArchivePO buildVariableArchive(Long employeeId, Long taxAgentId, VariableArchiveImportHandleParam importHandleParam) { + VariableArchivePO variableArchivePO = importHandleParam.getVariableArchivesMap().get(taxAgentId + "-" + employeeId); if (variableArchivePO == null) { // 新增浮动档案 variableArchivePO = VariableArchivePO.builder() .id(IdGenerator.generate()) .employeeId(employeeId) + .taxAgentId(taxAgentId) .salaryMonth(importHandleParam.getSalaryMonthDate()) .createTime(importHandleParam.getNowTime()) .updateTime(importHandleParam.getNowTime()) diff --git a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java index 7851c3cb2..de5c0fd22 100644 --- a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java +++ b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java @@ -34,6 +34,18 @@ public class VariableArchiveListDTO { private Date salaryMonth; + /** + * 个税扣缴义务人 + */ + @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") + @I18n + private String taxAgentName; + + /** + * 个税扣缴义务人id + */ + private String taxAgentId; + /** * 姓名 */ diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java index 4b3622869..ab12ad1a0 100644 --- a/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; import com.engine.salary.entity.datacollection.po.VariableArchivePO; import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -59,7 +60,7 @@ public class VariableArchiveImportHandleParam { /** * 查询已有的浮动薪资档案基本数据 */ - Map variableArchivesMap; + Map variableArchivesMap; /** * 浮动薪资项目id @@ -71,6 +72,11 @@ public class VariableArchiveImportHandleParam { */ Map> effectiveItemListMap; + /** + * 获取所有个税扣缴义务人 + */ + Collection taxAgentList; + /** * 当前时间 */ diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java index e7296d645..76066cea8 100644 --- a/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java @@ -25,6 +25,9 @@ public class VariableArchiveQueryParam extends BaseQueryParam { // 主键id private Long id; + // 个税扣缴义务人 + private List taxAgentIds; + // 薪资年月 @DataCheck(require = true,message = "薪资所属月不能为空") private String salaryMonth; diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java index e94448ffd..60e82cf91 100644 --- a/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java @@ -25,6 +25,9 @@ public class VariableArchiveSaveParam { @DataCheck(require = true,message = "薪资所属月不能为空") private String salaryMonth; + @DataCheck(require = true,message = "义务人id不能为空") + private Long taxAgentIds; + private Date salaryMonthDate; // 人员id diff --git a/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java b/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java index b3735be89..c078f7dbc 100644 --- a/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java +++ b/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java @@ -28,6 +28,8 @@ public class VariableArchivePO { */ private Long employeeId; + private Long taxAgentId; + /** * 薪资月份 */ diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index 5035085ac..b341f162d 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -253,27 +253,23 @@ public class CalculateFormulaVarBO { } private void handleVariableArchiveData(SalaryAcctCalculateBO salaryAcctCalculateBO, Map> resultMap) { - // 浮动薪资可选字段 - Map> tempMap = Maps.newHashMapWithExpectedSize(variableArchiveList.size()); - variableArchiveList.forEach(map -> { - Long key = Long.valueOf(map.get("employeeId").toString()); - List formulaVarValues = tempMap.computeIfAbsent(key, k -> Lists.newArrayList()); + Map> variableArchiveMap = SalaryEntityUtil.convert2Map(variableArchiveList, map -> map.getOrDefault("taxAgentIds", "").toString() + "-" + map.getOrDefault("employeeId", "").toString()); + // 填充到返回结果集中 + for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { + List formulaVarValues = resultMap.computeIfAbsent(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId(), + k -> Lists.newArrayList()); + + String key = salaryAcctEmployeePO.getTaxAgentId().toString() + "-" + salaryAcctEmployeePO.getEmployeeId().toString(); + Map map = variableArchiveMap.getOrDefault(key, Collections.emptyMap()); formulaVarValues.addAll(salaryAcctCalculateBO.getVariableItems().stream().map(field -> { String fieldId = SalaryFormulaReferenceEnum.VARIABLE_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + field.getCode(); - String value = map.getOrDefault(field.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, StringUtils.EMPTY) == null ? StringUtils.EMPTY : map.getOrDefault(field.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, StringUtils.EMPTY).toString(); return new FormulaVarValue().setFieldId(fieldId).setFieldValue(value); }).collect(Collectors.toList())); - }); - // 填充到返回结果集中 - for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { - List formulaVarValues = resultMap.computeIfAbsent(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId(), - k -> Lists.newArrayList()); - formulaVarValues.addAll(tempMap.getOrDefault(salaryAcctEmployeePO.getEmployeeId(), Collections.emptyList())); } } diff --git a/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml index ff279f29c..c6352fa2f 100644 --- a/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml @@ -16,6 +16,7 @@ t.id , t.employee_id + , t.tax_agent_id , t.salary_month , t.create_time , t.update_time @@ -52,6 +53,9 @@ AND employee_id = #{employeeId} + + AND tax_agent_id = #{taxAgentId} + AND salary_month = #{salaryMonth} @@ -83,6 +87,7 @@ t.id , t.employee_id + , t.tax_agent_id , t.salary_month , t.create_time , t.update_time @@ -97,6 +102,8 @@ , e.enddate as dismissdate , d.departmentname AS departmentName , c.subcompanyname AS subcompanyName + , a.name AS taxAgentName + , a.id AS taxAgentId