From 8876d9b491c2c28ad57ec66d2bf75f1a20fbf1d5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 30 May 2025 15:02:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=87=E5=BE=B7=E9=9A=86=20=E5=AE=9A?= =?UTF-8?q?=E8=96=AA=E8=B0=83=E8=96=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/SalaryArchiveExcelBO.java | 7 +- .../param/SalaryArchiveImportActionParam.java | 2 + .../SalaryArchiveItemBatchSaveParam.java | 40 ++++ .../SalaryArchiveItemDetailSaveParam.java | 3 + .../param/SalaryArchiveItemSaveParam.java | 8 + .../param/SalaryArchiveQueryParam.java | 2 + .../mapper/archive/SalaryArchiveMapper.java | 2 + .../mapper/archive/SalaryArchiveMapper.xml | 9 + .../salary/service/SalaryArchiveService.java | 4 + .../impl/SalaryArchiveExcelServiceImpl.java | 11 +- .../impl/SalaryArchiveItemServiceImpl.java | 6 +- .../impl/SalaryArchiveServiceImpl.java | 29 +++ .../salary/web/SalaryArchiveController.java | 54 +++++ .../wrapper/SalaryArchiveItemWrapper.java | 222 ++++++++++++++++++ .../proxy/SalaryArchiveItemWrapperProxy.java | 2 + 15 files changed, 395 insertions(+), 6 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemBatchSaveParam.java diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index fb69bb2df..4d7af7ef8 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -815,6 +815,11 @@ public class SalaryArchiveExcelBO extends Service { String key, String cellVal, Map map, User user) { String rowindex = "第" + map.get("index") + "行"; + String cellValDescription = Optional.ofNullable(map.get(key.toString() + "_description")).orElse("").toString(); + String cellValEffectiveTime = Optional.ofNullable(map.get(key.toString() + "_effectivetime")).orElse("").toString(); + if (StringUtils.isNotBlank(cellValEffectiveTime) && SalaryDateUtil.stringToDate(cellValEffectiveTime) != null) { + effectiveTime = SalaryDateUtil.stringToDate(cellValEffectiveTime); + } // 薪资项目数据 if (isError || importHandleParam.isSuspendList() || (importHandleParam.isSalaryItemAdjust() && effectiveTime == null) || finalSalaryArchive == null) { return isError; @@ -888,7 +893,7 @@ public class SalaryArchiveExcelBO extends Service { .adjustReason(StringUtils.isEmpty(salaryItemAdjustReason) ? SalaryArchiveItemAdjustReasonEnum.INIT.getValue() : salaryItemAdjustReason) .salaryItemId(salaryItemId) .itemValue(cellVal) - .description(importHandleParam.getDescription() == null ? "" : importHandleParam.getDescription()) + .description(StringUtils.isNotBlank(cellValDescription) ? cellValDescription : (importHandleParam.getDescription() == null ? "" : importHandleParam.getDescription())) .operator(importHandleParam.getCurrentEmployeeId()) .operateTime(importHandleParam.getNowTime()) .createTime(importHandleParam.getNowTime()) diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java index 0f8e3a602..12a643f1c 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java @@ -47,4 +47,6 @@ public class SalaryArchiveImportActionParam { * 档案状态是否保持不变 */ private Boolean keepStatus; + + private Boolean isWdlWorkflow; } diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemBatchSaveParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemBatchSaveParam.java new file mode 100644 index 000000000..7c58e3b80 --- /dev/null +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemBatchSaveParam.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.salaryarchive.param; + +import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Harryxzy + * @ClassName SalaryArchiveItemBatchSaveParam + * @date 2025/05/26 15:25 + * @description + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryArchiveItemBatchSaveParam { + private String taxAgentName; + + private String employeeId; + + private String effectiveTime; + + private SalaryArchiveItemAdjustReasonEnum adjustReason; + + private String description; + + private String salaryItemId; + + private String adjustValue; + + private String salaryStartDate; + + private String salaryEndDate; + +} diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemDetailSaveParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemDetailSaveParam.java index 7d0223ee3..4fd841578 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemDetailSaveParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemDetailSaveParam.java @@ -25,4 +25,7 @@ public class SalaryArchiveItemDetailSaveParam { //调整值") private String adjustValue; + + // 说明 + private String description; } diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java index 01329f8bc..e651d3351 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java @@ -52,6 +52,14 @@ public class SalaryArchiveItemSaveParam { //备注 private String description; + private String taxAgentName; + + private Long employeeId; + + private String salaryStartDate; + + private String salaryEndDate; + //薪资项目 private List salaryArchiveItems; diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java index bbbd2cc80..82437429f 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveQueryParam.java @@ -118,4 +118,6 @@ public class SalaryArchiveQueryParam extends BaseQueryParam { // 调薪结束日期 private Date adjustSalaryEndDate; + private Long salaryItemId; + } diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java index a11f48491..ffbef9e55 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java @@ -143,4 +143,6 @@ public interface SalaryArchiveMapper { * @param date */ void updatePayStartDateById(@Param("id")Long salaryArchiveId, @Param("payStartDate")Date date); + + SalaryArchivePO getByTaxAgentIdAndEmployeeId(@Param("taxAgentId")Long taxAgentId, @Param("employeeId")Long employeeId); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 17229b2e9..dbe77fe9b 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -760,6 +760,15 @@ AND pay_start_date is null AND run_status = #{runStatus} + UPDATE hrsa_salary_archive diff --git a/src/com/engine/salary/service/SalaryArchiveService.java b/src/com/engine/salary/service/SalaryArchiveService.java index e86655fd6..67aed4cbd 100644 --- a/src/com/engine/salary/service/SalaryArchiveService.java +++ b/src/com/engine/salary/service/SalaryArchiveService.java @@ -256,4 +256,8 @@ public interface SalaryArchiveService { * @return */ List listPayStartDateIsNull(String runStatus); + + SalaryArchivePO getByTaxAgentIdAndEmployeeId(Long id, Long employeeId); + + String getEffectiveItemValue(SalaryArchiveQueryParam param); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 4db580e19..d181ab8cb 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -626,10 +626,17 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } // 4.数据入库处理 - if (param.isAddData()) { - handleImportData(importHandleParam); + if (param.getIsWdlWorkflow()) { + if (CollectionUtils.isEmpty(excelComments)) { + handleImportData(importHandleParam); + } + } else { + if (param.isAddData()) { + handleImportData(importHandleParam); + } } + Map apidatas = new HashMap<>(); apidatas.put("successCount", successCount); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index c5c9879e8..9aa758379 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -484,7 +484,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi if (ineffectiveSalaryItem != null && saveEffectiveTime.after(today)) { effectiveSalaryItemDels.add(ineffectiveSalaryItem.getId()); } - salaryArchiveItemNews.add(buildInsert(salaryArchive, e.getSalaryItemId(), e.getAdjustValue(), saveParam, nowTime)); + salaryArchiveItemNews.add(buildInsert(salaryArchive, e.getSalaryItemId(), e.getAdjustValue(), saveParam, nowTime, e.getDescription())); }); // 落库处理 @@ -581,13 +581,13 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi * @param salaryArchive * @param saveParam */ - private SalaryArchiveItemPO buildInsert(SalaryArchivePO salaryArchive, Long salaryItemId, String adjustValue, SalaryArchiveItemSaveParam saveParam, Date now) { + private SalaryArchiveItemPO buildInsert(SalaryArchivePO salaryArchive, Long salaryItemId, String adjustValue, SalaryArchiveItemSaveParam saveParam, Date now, String description) { return SalaryArchiveItemPO.builder() .salaryArchiveId(saveParam.getSalaryArchiveId()) .employeeId(salaryArchive.getEmployeeId()) .effectiveTime(saveParam.getEffectiveTime()) .adjustReason(saveParam.getAdjustReason()) - .description(saveParam.getDescription()) + .description(StringUtils.isBlank(description) ? saveParam.getDescription() : description) .salaryItemId(salaryItemId) // 调整后 .itemValue(adjustValue) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 1c11ad7f4..42f4d6ae6 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -1400,4 +1400,33 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } return getSalaryArchiveMapper().listPayStartDateIsNull(runStatus); } + + @Override + public SalaryArchivePO getByTaxAgentIdAndEmployeeId(Long taxAgentId, Long employeeId) { + if (taxAgentId == null || employeeId == null) { + return null; + } + return getSalaryArchiveMapper().getByTaxAgentIdAndEmployeeId(taxAgentId, employeeId); + } + + @Override + public String getEffectiveItemValue(SalaryArchiveQueryParam param) { + if (param.getEmployeeId() == null || StringUtils.isBlank(param.getTaxAgentName()) || param.getSalaryItemId() == null) { + return ""; + } + Map taxAgentNameMap = SalaryEntityUtil.convert2Map(getTaxAgentService(user).listAll(), TaxAgentPO::getName, TaxAgentPO::getId); + Long taxAgentId = taxAgentNameMap.get(param.getTaxAgentName()); + if (taxAgentId == null) { + return ""; + } + SalaryArchivePO salaryArchivePO = getByTaxAgentIdAndEmployeeId(taxAgentId, param.getEmployeeId()); + if (salaryArchivePO == null) { + return ""; + } + List currentEffectiveItemList = getCurrentEffectiveItemList(Collections.singletonList(salaryArchivePO.getId()), Collections.singletonList(param.getSalaryItemId())); + if (CollectionUtils.isNotEmpty(currentEffectiveItemList)) { + return currentEffectiveItemList.get(0).getItemValue(); + } + return ""; + } } diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index 8bb205be2..ad3eeab65 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -708,6 +708,60 @@ public class SalaryArchiveController { } + /** + * 调薪(单个人) + */ + @POST + @Path("/saveSalaryItem4Workflow") + @Produces(MediaType.APPLICATION_JSON) + public String saveSalaryItem4Workflow(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveItemSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::saveSalaryItem4Workflow, saveParam); + } + + /** + * 调薪(多个人) + */ + @POST + @Path("/batchAdjustSalaryItem4Workflow") + @Produces(MediaType.APPLICATION_JSON) + public String batchAdjustSalaryItem4Workflow(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody List saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryArchiveItemWrapper(user)::batchAdjustSalaryItem4Workflow, saveParam); + } + + /** + * 定薪(单个人) + */ + @POST + @Path("/initSalaryItem4Workflow") + @Produces(MediaType.APPLICATION_JSON) + public String initSalaryItem4Workflow(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveItemSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::initSalaryItem4Workflow, saveParam); + } + + /** + * 定薪(多个人) + */ + @POST + @Path("/batchInitSalaryItem4Workflow") + @Produces(MediaType.APPLICATION_JSON) + public String batchInitSalaryItem4Workflow(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody List saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryArchiveItemWrapper(user)::batchInitSalaryItem4Workflow, saveParam); + } + + + @POST + @Path("/getEffectiveItemValue") + @Produces(MediaType.APPLICATION_JSON) + public String getEffectiveItemValue(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::getEffectiveItemValue, param); + } + + /** * 删除薪资项目调整 */ diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index d53341ea3..510f0e32e 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.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.hrmelog.entity.dto.LoggerContext; +import com.engine.salary.action.CheckInitSalaryAction; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemFormDTO; @@ -11,17 +12,24 @@ import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.dto.SingleSalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.*; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.wrapper.proxy.SalaryArchiveItemWrapperProxy; @@ -31,7 +39,11 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; import weaver.hrm.User; +import weaver.soa.workflow.request.Property; import java.util.*; import java.util.stream.Collectors; @@ -67,6 +79,14 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) { + return ServiceUtil.getService(SalaryArchiveWrapper.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + /** * 构建薪资项目基础信息表单 @@ -204,6 +224,21 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt public String saveSalaryItem(SalaryArchiveItemSaveParam saveParam) { return getSalaryArchiveItemService(user).saveSalaryItem(saveParam); } + public String saveSalaryItem4Workflow(SalaryArchiveItemSaveParam saveParam) { + // 个税扣缴义务人 + List taxAgentList = getTaxAgentService(user).listAll(); + Optional first = taxAgentList.stream().filter(t -> t.getName().equals(saveParam.getTaxAgentName())).findFirst(); + if (!first.isPresent()) { + throw new SalaryRunTimeException(saveParam.getTaxAgentName() + "个税扣缴义务人不存在"); + } + // 获取薪资档案 + SalaryArchivePO salaryArchivePO = getSalaryArchiveService(user).getByTaxAgentIdAndEmployeeId(first.get().getId(), saveParam.getEmployeeId()); + if (salaryArchivePO == null) { + throw new SalaryRunTimeException("该个税扣缴义务人下该员工没有对应的薪资档案"); + } + saveParam.setSalaryArchiveId(salaryArchivePO.getId()); + return getSalaryArchiveItemService(user).saveSalaryItem(saveParam); + } /** * 删除薪资项目调整 @@ -483,4 +518,191 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt } return null; } + + public void batchAdjustSalaryItem4Workflow(List batchSaveParams) { + + Optional first = batchSaveParams.stream().filter(param -> StringUtils.isBlank(param.getTaxAgentName()) || StringUtils.isBlank(param.getEmployeeId())).findFirst(); + if (first.isPresent()) { + throw new SalaryRunTimeException("参数错误"); + } + Map salaryItemNameMap = SalaryEntityUtil.convert2Map(getSalaryItemService(user).listAll(), item -> item.getId().toString(), SalaryItemPO::getName); + List> importData = new ArrayList<>(); + // 根据个税扣缴义务人和人员分组 + Map> paramGroupMap = SalaryEntityUtil.group2Map(batchSaveParams, param -> param.getTaxAgentName() + "_split" + param.getEmployeeId()); + for (Map.Entry> entry : paramGroupMap.entrySet()) { + HashMap paramMap = new HashMap<>(); + String[] split = entry.getKey().split("_split"); + String taxAgentName = split.length > 0 ? split[0] : ""; + String employeeId = split.length > 1 ? split[1] : ""; + paramMap.put("员工id", employeeId); + paramMap.put("个税扣缴义务人", taxAgentName); + paramMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + paramMap.put("调整原因", entry.getValue().get(0).getAdjustReason() == null ? SalaryArchiveItemAdjustReasonEnum.SALARY_ADJUSTMENT.getDefaultLabel() : entry.getValue().get(0).getAdjustReason().getDefaultLabel()); + List paramValueList = entry.getValue(); + for (SalaryArchiveItemBatchSaveParam paramValue : paramValueList) { + String salaryItemName = salaryItemNameMap.getOrDefault(paramValue.getSalaryItemId(), ""); + paramMap.put(salaryItemName + "_description", paramValue.getDescription()); + paramMap.put(salaryItemName + "_effectivetime", paramValue.getEffectiveTime()); + paramMap.put(salaryItemName, paramValue.getAdjustValue()); + } + importData.add(paramMap); + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + build.setIsWdlWorkflow(true); + Map checkMap = getSalaryArchiveWrapper(user).checkAdjustmentSalaryArchive(build); + + List checkErrorNotice = (List) checkMap.get("errorNotice"); + if (CollectionUtils.isNotEmpty(checkErrorNotice)) { + BaseBean baseBean = new BaseBean(); + baseBean.writeLog("调薪流程存在异常,参数:"+build+", map:" + checkMap); + List> excelComments = (List>) checkMap.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + throw new SalaryRunTimeException(message.toString()); + } + } + + public String getEffectiveItemValue(SalaryArchiveQueryParam param) { + return getSalaryArchiveService(user).getEffectiveItemValue(param); + } + + public void initSalaryItem4Workflow(SalaryArchiveItemSaveParam saveParam) { + // 个税扣缴义务人 + List taxAgentList = getTaxAgentService(user).listAll(); + Optional first = taxAgentList.stream().filter(t -> t.getName().equals(saveParam.getTaxAgentName())).findFirst(); + if (!first.isPresent()) { + throw new SalaryRunTimeException(saveParam.getTaxAgentName() + "个税扣缴义务人不存在"); + } + Map importDataMap = new HashMap<>(); + importDataMap.put("个税扣缴义务人", saveParam.getTaxAgentName()); + importDataMap.put("员工id", saveParam.getEmployeeId()); + importDataMap.put("起始发薪日期", saveParam.getSalaryStartDate()); + if (StringUtils.isNotBlank(saveParam.getSalaryEndDate()) && SalaryDateUtil.checkDay(saveParam.getSalaryEndDate())) { + importDataMap.put("最后发薪日期", saveParam.getSalaryEndDate()); + } else { + importDataMap.put("最后发薪日期", ""); + } + if (saveParam.getEffectiveTime() != null) { + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(saveParam.getEffectiveTime())); + } else { + importDataMap.put("生效日期", saveParam.getSalaryStartDate()); + } + SalaryArchiveItemAdjustReasonEnum salaryArchiveItemAdjustReasonEnum = SalaryArchiveItemAdjustReasonEnum.parseByValue(saveParam.getAdjustReason()); + if (salaryArchiveItemAdjustReasonEnum != null) { + importDataMap.put("调整原因", salaryArchiveItemAdjustReasonEnum.getDefaultLabel()); + } else { + importDataMap.put("调整原因", SalaryArchiveItemAdjustReasonEnum.ONBOARD.getDefaultLabel()); + } + List salaryArchiveItems = saveParam.getSalaryArchiveItems(); + Map salaryItemNameMap = SalaryEntityUtil.convert2Map(getSalaryItemService(user).listAll(), SalaryItemPO::getId, SalaryItemPO::getName); + for (SalaryArchiveItemDetailSaveParam archiveItem : salaryArchiveItems) { + String salaryItemName = salaryItemNameMap.getOrDefault(archiveItem.getSalaryItemId(), ""); + importDataMap.put(salaryItemName + "_description", archiveItem.getDescription()); + importDataMap.put(salaryItemName, archiveItem.getAdjustValue()); + } + List> importData = new ArrayList<>(); + importData.add(importDataMap); + + // 首先判断是否已经存在薪资档案,且薪资档案状态为待定薪 + String empIdStr = importDataMap.getOrDefault("员工id", "").toString(); + Long taxAgentId = first.get().getId(); + // 获取员工id + if (NumberUtils.isCreatable(empIdStr)) { + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(Long.valueOf(empIdStr)).build()); + if (CollectionUtils.isNotEmpty(salaryArchivePOList) && !salaryArchivePOList.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())) { + // 存在薪资档案,且薪资档案状态不是待定薪,修改状态为待定薪 + salaryArchivePOList.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOList.get(0).setPayEndDate(null); + getSalaryArchiveMapper().update(salaryArchivePOList.get(0)); + } + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .isWdlWorkflow(true) + .build(); + + //操作人 + Map map = getSalaryArchiveWrapper(user).checkSalaryArchiveInit(build); + List checkErrorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(checkErrorNotice)) { + BaseBean baseBean = new BaseBean(); + baseBean.writeLog("定薪流程存在异常,参数:"+build+", map:" + map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + throw new SalaryRunTimeException(message.toString()); + } + } + + public void batchInitSalaryItem4Workflow(List batchSaveParams) { + Optional first = batchSaveParams.stream().filter(param -> StringUtils.isBlank(param.getTaxAgentName()) || StringUtils.isBlank(param.getEmployeeId())).findFirst(); + if (first.isPresent()) { + throw new SalaryRunTimeException("参数错误"); + } + Map salaryItemNameMap = SalaryEntityUtil.convert2Map(getSalaryItemService(user).listAll(), item -> item.getId().toString(), SalaryItemPO::getName); + List> importData = new ArrayList<>(); + // 根据个税扣缴义务人和人员分组 + Map> paramGroupMap = SalaryEntityUtil.group2Map(batchSaveParams, param -> param.getTaxAgentName() + "_split" + param.getEmployeeId()); + for (Map.Entry> entry : paramGroupMap.entrySet()) { + HashMap paramMap = new HashMap<>(); + String[] split = entry.getKey().split("_split"); + String taxAgentName = split.length > 0 ? split[0] : ""; + String employeeId = split.length > 1 ? split[1] : ""; + paramMap.put("员工id", employeeId); + paramMap.put("个税扣缴义务人", taxAgentName); + paramMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + paramMap.put("起始发薪日期", entry.getValue().get(0).getSalaryStartDate()); + String salaryEndDate = entry.getValue().get(0).getSalaryEndDate(); + if (StringUtils.isNotBlank(salaryEndDate) && SalaryDateUtil.checkDay(salaryEndDate)) { + paramMap.put("最后发薪日期", salaryEndDate); + } else { + paramMap.put("最后发薪日期", ""); + } + paramMap.put("调整原因", entry.getValue().get(0).getAdjustReason() == null ? SalaryArchiveItemAdjustReasonEnum.ONBOARD.getDefaultLabel() : entry.getValue().get(0).getAdjustReason().getDefaultLabel()); + List paramValueList = entry.getValue(); + for (SalaryArchiveItemBatchSaveParam paramValue : paramValueList) { + String salaryItemName = salaryItemNameMap.getOrDefault(paramValue.getSalaryItemId(), ""); + paramMap.put(salaryItemName + "_description", paramValue.getDescription()); + String effectiveTime = ""; + if (StringUtils.isNotBlank(paramValue.getEffectiveTime()) && SalaryDateUtil.checkDay(paramValue.getEffectiveTime())) { + effectiveTime = paramValue.getEffectiveTime(); + } else { + effectiveTime = entry.getValue().get(0).getSalaryStartDate(); + } + paramMap.put(salaryItemName + "_effectivetime",effectiveTime); + paramMap.put(salaryItemName, paramValue.getAdjustValue()); + } + importData.add(paramMap); + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .isWdlWorkflow(true) + .build(); + + //操作人 + Map map = getSalaryArchiveWrapper(user).checkSalaryArchiveInit(build); + + List checkErrorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(checkErrorNotice)) { + BaseBean baseBean = new BaseBean(); + baseBean.writeLog("定薪流程存在异常,参数:"+build+", map:" + map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + throw new SalaryRunTimeException(message.toString()); + } + + } } diff --git a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java index 79ffa914a..e2b75d143 100644 --- a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java @@ -30,6 +30,8 @@ public interface SalaryArchiveItemWrapperProxy { */ String saveSalaryItem(SalaryArchiveItemSaveParam saveParam); + String saveSalaryItem4Workflow(SalaryArchiveItemSaveParam saveParam); + /** * 删除薪资项目调整 *