diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index b17fc171d..2ebec48be 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -82,7 +82,6 @@ public class SalaryArchiveExcelBO extends Service { /** * 初始化i18n - * */ public static void initI18n() { userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); @@ -139,10 +138,10 @@ public class SalaryArchiveExcelBO extends Service { String listType = Optional.ofNullable(params.get("listType")).orElse("").toString(); String importType = Optional.ofNullable(params.get("importType")).orElse("").toString(); if (params == null) { - errorMsg = SalaryI18nUtil.getI18nLabel( 100582, "参数必传"); + errorMsg = SalaryI18nUtil.getI18nLabel(100582, "参数必传"); } else if (StringUtils.isEmpty(listType)) { errorMsg = // SalaryI18nUtil.getI18nLabel( 100592, "导入类型必传") + "," + - SalaryI18nUtil.getI18nLabel( 109712, "列表类型必传"); + SalaryI18nUtil.getI18nLabel(109712, "列表类型必传"); } else { Optional optionalListType = Arrays.stream(SalaryArchiveListTypeEnum.values()).filter(e -> e.getValue().equals(listType)).findFirst(); if (optionalListType.isPresent()) { @@ -150,7 +149,7 @@ public class SalaryArchiveExcelBO extends Service { if (optionalListType.get().getValue().equals(SalaryArchiveListTypeEnum.FIXED.getValue())) { Optional optional = Arrays.stream(SalaryArchiveImportTypeEnum.values()).filter(e -> e.getValue().equals(params.get("importType").toString())).findFirst(); if (!optional.isPresent()) { - errorMsg = SalaryI18nUtil.getI18nLabel( 100593, "导入类型不正确"); + errorMsg = SalaryI18nUtil.getI18nLabel(100593, "导入类型不正确"); } else { // message.setDataType(message.getDataType() // + "-" + SalaryI18nUtil.getI18nLabel( optionalListType.get().getLabelId(), optionalListType.get().getDefaultLabel()) @@ -161,7 +160,7 @@ public class SalaryArchiveExcelBO extends Service { // + "-" + SalaryI18nUtil.getI18nLabel( optionalListType.get().getLabelId(), optionalListType.get().getDefaultLabel())); } } else { - errorMsg = SalaryI18nUtil.getI18nLabel( 109716, "列表类型不正确"); + errorMsg = SalaryI18nUtil.getI18nLabel(109716, "列表类型不正确"); } } return errorMsg; @@ -369,6 +368,11 @@ public class SalaryArchiveExcelBO extends Service { } Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0) > 0 ? employeeSameIds.get(0) : null; + //员工id 流程定薪使用 + String empId = Optional.ofNullable(map.get("员工id")).orElse("").toString(); + if (StringUtils.isNotBlank(empId)) { + employeeId = Long.valueOf(empId); + } // 用于初始化导入数据校验 @@ -466,7 +470,7 @@ public class SalaryArchiveExcelBO extends Service { // 判空 if (isEmpty) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + notEmptyI18n); + errorMessageMap.put("message", rowindex + header + notEmptyI18n); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, notEmptyI18n, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -475,7 +479,7 @@ public class SalaryArchiveExcelBO extends Service { if (isNotEmpty && userNameI18n.equals(key.toString())) { if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + empRepeatMsg); + errorMessageMap.put("message", rowindex + header + empRepeatMsg); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, empRepeatMsg, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -484,7 +488,7 @@ public class SalaryArchiveExcelBO extends Service { } else if (isNotEmpty && taxAgentI18n.equals(key.toString())) { if (taxAgentId == null) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + taxAgentNoExist); + errorMessageMap.put("message", rowindex + header + taxAgentNoExist); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, taxAgentNoExist, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -498,7 +502,7 @@ public class SalaryArchiveExcelBO extends Service { // } else { // finalSalaryArchive.setIncomeCategory(incomeCategory); // } - // 薪资账套 + // 薪资账套 // } // else if (isNotEmpty && salarySobI18n.equals(key.toString())) { // List salarySobNames = Arrays.stream(salarySobCellVal.split(",")).distinct().collect(Collectors.toList()); @@ -517,18 +521,18 @@ public class SalaryArchiveExcelBO extends Service { // finalSalaryArchive.setIncomeCategory(incomeCategory); // importHandleParam.getSalaryArchiveSobSaves().addAll(SalaryArchiveBO.buildSalaryArchiveSob(finalSalaryArchive.getId(), salarySobIds, importHandleParam.getNowTime(), importHandleParam.getCurrentEmployeeId(), importHandleParam.getTenantKey())); // } - // 3.生效时间处理(定薪的调薪\定薪的初始化) + // 3.生效时间处理(定薪的调薪\定薪的初始化) // } else if (isNotEmpty && effectiveTimeI18n.equals(key.toString()) && effectiveTime == null && importHandleParam.isFixedList()) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + effectiveTimeErr); + errorMessageMap.put("message", rowindex + header + effectiveTimeErr); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, effectiveTimeErr, errorCount + 1, errorCount + 1, j, j); isError = true; // 4.调整原因列(定薪的调薪) } else if (isNotEmpty && adjustReasonI18n.equals(key.toString()) && StringUtils.isEmpty(adjustReason) && importHandleParam.isSalaryItemAdjust()) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + adjustReasonNoExist); + errorMessageMap.put("message", rowindex + header + adjustReasonNoExist); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, adjustReasonNoExist, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -536,7 +540,7 @@ public class SalaryArchiveExcelBO extends Service { } else if (isNotEmpty && payStartDateI18n.equals(key.toString()) && (importHandleParam.isInit() || importHandleParam.isPendingList())) { if (payStartDate == null) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + dateErr); + errorMessageMap.put("message", rowindex + header + dateErr); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, dateErr, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -549,7 +553,7 @@ public class SalaryArchiveExcelBO extends Service { if (payEndDateTemp != null && payStartDate.after(payEndDateTemp)) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + payStartUnableAfterEnd); + errorMessageMap.put("message", rowindex + header + payStartUnableAfterEnd); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, payStartUnableAfterEnd, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -565,7 +569,7 @@ public class SalaryArchiveExcelBO extends Service { if (isNotEmpty) { if (payEndDate == null) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + dateErr); + errorMessageMap.put("message", rowindex + header + dateErr); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, dateErr, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -581,7 +585,7 @@ public class SalaryArchiveExcelBO extends Service { } if (payStartDateTemp != null && payStartDateTemp.after(payEndDate)) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + payStartUnableAfterEnd); + errorMessageMap.put("message", rowindex + header + payStartUnableAfterEnd); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, payStartUnableAfterEnd, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -737,7 +741,7 @@ public class SalaryArchiveExcelBO extends Service { boolean isNotNumber = salaryItemPO.getDataType().equals(SalaryArchiveFieldTypeEnum.NUMBER.getValue()) && StringUtils.isNotEmpty(cellVal) && !Pattern.matches(SalaryArchiveConstant.NUMBER_REGEX, cellVal); if (isNotNumber) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + numberErr); + errorMessageMap.put("message", rowindex + key + numberErr); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, numberErr, errorCount + 1, errorCount + 1, j, j); isError = true; @@ -765,19 +769,19 @@ public class SalaryArchiveExcelBO extends Service { SalaryItemAdjustValidDTO salaryItemAdjustValid = SalaryArchiveItemBO.handleSalaryItemAdjustValid(effectiveSalaryItem, effectiveBeforeSalaryItem, ineffectiveSalaryItem, effectiveTime, importHandleParam.getToday(), cellVal, importHandleParam.getSalaryArchiveItemDelSalaryItemIds()); if (salaryItemAdjustValid.isBefore()) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + salaryItemNoBeforeCurrentEffectiveTime); + errorMessageMap.put("message", rowindex + key + salaryItemNoBeforeCurrentEffectiveTime); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, salaryItemNoBeforeCurrentEffectiveTime, errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); isError = true; } else if (salaryItemAdjustValid.isSame()) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + salaryItemAdjustNoSame); + errorMessageMap.put("message", rowindex + key + salaryItemAdjustNoSame); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, salaryItemAdjustNoSame, errorCount + 1, errorCount + 1, j, j); isError = true; } else if (salaryItemAdjustValid.isSameIneffective()) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + salaryItemAdjustNoSameIneffective); + errorMessageMap.put("message", rowindex + key + salaryItemAdjustNoSameIneffective); excelComments.add(errorMessageMap); // SalaryArchiveExcelBO.createExcelComment(excelComments, salaryItemAdjustNoSameIneffective, errorCount + 1, errorCount + 1, j, j); isError = true; diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java index 61e1905d3..1b93c0d9b 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportActionParam.java @@ -29,6 +29,7 @@ public class SalaryArchiveImportActionParam { * @see SalaryArchiveImportTypeEnum */ String importType; + String listType; /** * 导入数据 diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportHandleParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportHandleParam.java index 6878bc280..1da90e96c 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportHandleParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveImportHandleParam.java @@ -45,6 +45,10 @@ public class SalaryArchiveImportHandleParam { String importType; String listType; + /** + * 是否处理数据 + */ + boolean onlyCheck; //*****************************************************************/ diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java index da0f302bb..d8e082ba6 100644 --- a/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveActionAPI.java @@ -2,7 +2,6 @@ package com.engine.salary.process.salaryArchive; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.util.ResponseResult; import com.engine.salary.wrapper.SalaryArchiveWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -12,7 +11,9 @@ import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.*; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import java.util.Map; @@ -39,13 +40,13 @@ public class SalaryArchiveActionAPI { * @return * @param importType=salaryItemAdjust(调薪),taxAgentAdjust(调整个税扣缴义务人),init(档案初始化) */ - @GET - @Path("/selectSalaryArchiveColumns") - @Produces(MediaType.APPLICATION_JSON) - public String selectSalarySobList(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("importType") String importType) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::selectSalaryArchiveColumns,importType); - } +// @GET +// @Path("/selectSalaryArchiveColumns") +// @Produces(MediaType.APPLICATION_JSON) +// public String selectSalarySobList(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("importType") String importType) { +// User user = HrmUserVarify.getUser(request, response); +// return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::selectSalaryArchiveColumns,importType); +// } /** * 前置校验、列表添加接口 @@ -59,7 +60,7 @@ public class SalaryArchiveActionAPI { User user = HrmUserVarify.getUser(request, response); importData.setImportType("init"); importData.setAddData(false); - return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::importSalaryArchiveInit, importData); + return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::checkSalaryArchiveInit, importData); } /** @@ -77,17 +78,17 @@ public class SalaryArchiveActionAPI { return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::importSalaryArchiveInit, importData); } - /** - * 导入薪资档案附件上传前置校验 - * @param importParam - * @return - */ - @POST - @Path("/checkImportSalaryArchiveUpload") - @Produces(MediaType.APPLICATION_JSON) - public String checkParam(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportHandleParam importParam) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::checkImportSalaryArchive, importParam); - } +// /** +// * 导入薪资档案附件上传前置校验 +// * @param importParam +// * @return +// */ +// @POST +// @Path("/checkImportSalaryArchiveUpload") +// @Produces(MediaType.APPLICATION_JSON) +// public String checkParam(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportHandleParam importParam) { +// User user = HrmUserVarify.getUser(request, response); +// return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::checkImportSalaryArchive, importParam); +// } } diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveInitAction.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveInitAction.java index 655c58cc1..718a20bd2 100644 --- a/src/com/engine/salary/process/salaryArchive/SalaryArchiveInitAction.java +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveInitAction.java @@ -1,56 +1,56 @@ -package com.engine.salary.process.salaryArchive; - -import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; -import com.engine.salary.service.SalaryArchiveService; -import com.engine.salary.service.impl.SalaryArchiveServiceImpl; -import weaver.general.BaseBean; -import weaver.hrm.User; -import weaver.interfaces.workflow.action.Action; -import weaver.soa.workflow.request.RequestInfo; - -import java.util.List; -import java.util.Map; - -/** - * 薪资档案流程使用,导入薪资档案(初始化) - *

Copyright: Copyright (c) 2022

- *

Company: 泛微软件

- * - * @author liuliang - * @version 1.0 - **/ -public class SalaryArchiveInitAction extends BaseBean implements Action { - private SalaryArchiveService getSalaryArchiveService(User user) { - return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); - } - @Override - public String execute(RequestInfo requestInfo) { - String requestId = requestInfo.getRequestid(); - String tableName = requestInfo.getRequestManager().getBillTableName(); - writeLog("requestId:"+requestId); - writeLog("tableName:"+tableName); - Map dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName); - List> importDatas = (List>)dataMap.get("importDatas"); - String imageId = dataMap.get("imageId") == null?"":dataMap.get("imageId").toString(); - User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString())); - //手动列表添加导入 - if (importDatas.size() > 0){ - - SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas) - .importType("init").build(); - - Map resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true); - writeLog("result :"+resultMap.toString()); - } - //附件上传导入 - if (!"".equals(imageId)){ - SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("init").build(); - Map responseMap = getSalaryArchiveService(user).importSalaryArchive(param); - writeLog("result :"+responseMap.toString()); - } - - return SUCCESS; - } -} +//package com.engine.salary.process.salaryArchive; +// +//import com.engine.common.util.ServiceUtil; +//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; +//import com.engine.salary.service.SalaryArchiveService; +//import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +//import weaver.general.BaseBean; +//import weaver.hrm.User; +//import weaver.interfaces.workflow.action.Action; +//import weaver.soa.workflow.request.RequestInfo; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * 薪资档案流程使用,导入薪资档案(初始化) +// *

Copyright: Copyright (c) 2022

+// *

Company: 泛微软件

+// * +// * @author liuliang +// * @version 1.0 +// **/ +//public class SalaryArchiveInitAction extends BaseBean implements Action { +// private SalaryArchiveService getSalaryArchiveService(User user) { +// return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); +// } +// @Override +// public String execute(RequestInfo requestInfo) { +// String requestId = requestInfo.getRequestid(); +// String tableName = requestInfo.getRequestManager().getBillTableName(); +// writeLog("requestId:"+requestId); +// writeLog("tableName:"+tableName); +// Map dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName); +// List> importDatas = (List>)dataMap.get("importDatas"); +// String imageId = dataMap.get("imageId") == null?"":dataMap.get("imageId").toString(); +// User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString())); +// //手动列表添加导入 +// if (importDatas.size() > 0){ +// +// SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas) +// .importType("init").build(); +// +// Map resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true); +// writeLog("result :"+resultMap.toString()); +// } +// //附件上传导入 +// if (!"".equals(imageId)){ +// SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("init").build(); +// Map responseMap = getSalaryArchiveService(user).importSalaryArchive(param); +// writeLog("result :"+responseMap.toString()); +// } +// +// return SUCCESS; +// } +//} diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveSalaryItemAdjustAction.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveSalaryItemAdjustAction.java index 9a82fc2af..a4930f3f8 100644 --- a/src/com/engine/salary/process/salaryArchive/SalaryArchiveSalaryItemAdjustAction.java +++ b/src/com/engine/salary/process/salaryArchive/SalaryArchiveSalaryItemAdjustAction.java @@ -1,54 +1,54 @@ -package com.engine.salary.process.salaryArchive; - -import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; -import com.engine.salary.service.SalaryArchiveService; -import com.engine.salary.service.impl.SalaryArchiveServiceImpl; -import weaver.general.BaseBean; -import weaver.hrm.User; -import weaver.interfaces.workflow.action.Action; -import weaver.soa.workflow.request.RequestInfo; - -import java.util.List; -import java.util.Map; - -/** - * 薪资档案流程使用,导入薪资档案(调薪) - *

Copyright: Copyright (c) 2022

- *

Company: 泛微软件

- * - * @author liuliang - * @version 1.0 - **/ -public class SalaryArchiveSalaryItemAdjustAction extends BaseBean implements Action { - private SalaryArchiveService getSalaryArchiveService(User user) { - return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); - } - @Override - public String execute(RequestInfo requestInfo) { - String requestId = requestInfo.getRequestid(); - String tableName = requestInfo.getRequestManager().getBillTableName(); - writeLog("requestId:"+requestId); - writeLog("tableName:"+tableName); - Map dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName); - List> importDatas = (List>)dataMap.get("importDatas"); - String imageId = dataMap.get("imageId").toString(); - User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString())); - if (importDatas.size() > 0){ - - SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas) - .importType("salaryItemAdjust").build(); - - Map resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true); - writeLog("result :"+resultMap.toString()); - } - //附件上传导入 - if (!"".equals(imageId)){ - SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("salaryItemAdjust").build(); - Map responseMap = getSalaryArchiveService(user).importSalaryArchive(param); - writeLog("result :"+responseMap.toString()); - } - return SUCCESS; - } -} +//package com.engine.salary.process.salaryArchive; +// +//import com.engine.common.util.ServiceUtil; +//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +//import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; +//import com.engine.salary.service.SalaryArchiveService; +//import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +//import weaver.general.BaseBean; +//import weaver.hrm.User; +//import weaver.interfaces.workflow.action.Action; +//import weaver.soa.workflow.request.RequestInfo; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * 薪资档案流程使用,导入薪资档案(调薪) +// *

Copyright: Copyright (c) 2022

+// *

Company: 泛微软件

+// * +// * @author liuliang +// * @version 1.0 +// **/ +//public class SalaryArchiveSalaryItemAdjustAction extends BaseBean implements Action { +// private SalaryArchiveService getSalaryArchiveService(User user) { +// return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); +// } +// @Override +// public String execute(RequestInfo requestInfo) { +// String requestId = requestInfo.getRequestid(); +// String tableName = requestInfo.getRequestManager().getBillTableName(); +// writeLog("requestId:"+requestId); +// writeLog("tableName:"+tableName); +// Map dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName); +// List> importDatas = (List>)dataMap.get("importDatas"); +// String imageId = dataMap.get("imageId").toString(); +// User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString())); +// if (importDatas.size() > 0){ +// +// SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas) +// .importType("salaryItemAdjust").build(); +// +// Map resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true); +// writeLog("result :"+resultMap.toString()); +// } +// //附件上传导入 +// if (!"".equals(imageId)){ +// SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("salaryItemAdjust").build(); +// Map responseMap = getSalaryArchiveService(user).importSalaryArchive(param); +// writeLog("result :"+responseMap.toString()); +// } +// return SUCCESS; +// } +//} diff --git a/src/com/engine/salary/process/salaryArchive/SalaryArchiveTaxAgentAdjustAction.java b/src/com/engine/salary/process/salaryArchive/SalaryArchiveTaxAgentAdjustAction.java deleted file mode 100644 index eb045f98a..000000000 --- a/src/com/engine/salary/process/salaryArchive/SalaryArchiveTaxAgentAdjustAction.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.engine.salary.process.salaryArchive; - -import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; -import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; -import com.engine.salary.service.SalaryArchiveService; -import com.engine.salary.service.impl.SalaryArchiveServiceImpl; -import weaver.general.BaseBean; -import weaver.hrm.User; -import weaver.interfaces.workflow.action.Action; -import weaver.soa.workflow.request.RequestInfo; - -import java.util.List; -import java.util.Map; - -/** - * 薪资档案流程使用,导入薪资档案(调整个税扣缴义务人) - *

Copyright: Copyright (c) 2022

- *

Company: 泛微软件

- * - * @author liuliang - * @version 1.0 - **/ -public class SalaryArchiveTaxAgentAdjustAction extends BaseBean implements Action { - private SalaryArchiveService getSalaryArchiveService(User user) { - return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); - } - @Override - public String execute(RequestInfo requestInfo) { - String requestId = requestInfo.getRequestid(); - String tableName = requestInfo.getRequestManager().getBillTableName(); - writeLog("requestId:"+requestId); - writeLog("tableName:"+tableName); - - Map dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName); - List> importDatas = (List>)dataMap.get("importDatas"); - String imageId = dataMap.get("imageId").toString(); - User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString())); - if (importDatas.size() > 0){ - - SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas) - .importType("taxAgentAdjust").build(); - - Map resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true); - writeLog("result :"+resultMap.toString()); - } - - //附件上传导入 - if (!"".equals(imageId)){ - SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("taxAgentAdjust").build(); - Map responseMap = getSalaryArchiveService(user).importSalaryArchive(param); - writeLog("result :"+responseMap.toString()); - } - return SUCCESS; - } -} diff --git a/src/com/engine/salary/service/SalaryArchiveExcelService.java b/src/com/engine/salary/service/SalaryArchiveExcelService.java index 5fd7c0f5b..4ca31f91c 100644 --- a/src/com/engine/salary/service/SalaryArchiveExcelService.java +++ b/src/com/engine/salary/service/SalaryArchiveExcelService.java @@ -1,5 +1,7 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -32,5 +34,17 @@ public interface SalaryArchiveExcelService { */ XSSFWorkbook downloadTemplate(SalaryArchiveQueryParam queryParam); - Map batchImportEbatch(Map param); + /** + * 导入 + * @param param + * @return + */ + Map batchImportEbatch(SalaryArchiveImportHandleParam param); + + /** + * 流程初始化档案 + * @param param + * @return + */ + Map processInit(SalaryArchiveImportActionParam param); } diff --git a/src/com/engine/salary/service/SalaryArchiveService.java b/src/com/engine/salary/service/SalaryArchiveService.java index 33db0ce63..c2ee80e3b 100644 --- a/src/com/engine/salary/service/SalaryArchiveService.java +++ b/src/com/engine/salary/service/SalaryArchiveService.java @@ -83,14 +83,6 @@ public interface SalaryArchiveService { */ XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam); - /** - * 下载导入模板 - * - * @param salaryArchiveImportTypeEnum - * @param queryParam - * @return - */ - XSSFWorkbook downloadTemplate(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam); /** * 保存发薪设置 @@ -131,21 +123,6 @@ public interface SalaryArchiveService { */ List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds, Long taxAgentId); - /** - * 导入,数据入库 - * @param param - * @return - */ - Map importSalaryArchive(SalaryArchiveImportHandleParam param); - - /** - * 导入 - * @param param - * @param ifImportData 数据是否入库 - * @return - */ - Map importSalaryArchive(SalaryArchiveImportHandleParam param,boolean ifImportData); - /** * 预览 * @param param @@ -159,14 +136,6 @@ public interface SalaryArchiveService { */ Map selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum); - - /** - * 导入薪资档案(action使用) - * @param importData - * @return - */ - Map importSalaryArchiveAction(SalaryArchiveImportActionParam importData, boolean ifImportData); - /** * 停薪 * @param stopSalaryParam diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index d1ba38d12..4a0036c55 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -8,6 +8,7 @@ import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveExcelBO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; @@ -38,7 +39,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.file.ImageFileManager; -import weaver.general.Util; +import weaver.hrm.User; import java.io.InputStream; import java.util.*; @@ -59,21 +60,21 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); } - private SalaryArchiveItemService salaryArchiveItemService() { + private SalaryArchiveItemService salaryArchiveItemService(User user) { return ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); } - private SalaryArchiveService salaryArchiveService() { + private SalaryArchiveService salaryArchiveService(User user) { return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } - private TaxAgentService getTaxAgentService() { + private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } - private SalaryEmployeeService getSalaryEmployeeService() { + private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } @@ -258,7 +259,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch String finalNameI18n = nameI18n; // 获取所有可被引用的薪资项目 - List salaryItems = salaryArchiveItemService().getCanAdjustSalaryItems(); + List salaryItems = salaryArchiveItemService(user).getCanAdjustSalaryItems(); // boolean enableHr = baseEnvInfoService.checkDisplayModule(HrmModuleConstancts.hr, tenantKey); List header = Lists.newArrayList(); header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); @@ -300,7 +301,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch List> rows = new ArrayList<>(); rows.add(header); // 获取所有个税扣缴义务人 - Collection taxAgentList = getTaxAgentService().listAll(); + Collection taxAgentList = getTaxAgentService(user).listAll(); Collection salaryArchives = getSalaryArchiveMapper().list(queryParam); // boolean isSearchIdNo = enableHr && StringUtils.isNotEmpty(queryParam.getIdNo()); // if (isSearchIdNo) { @@ -312,9 +313,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // 开启分权并且不是薪酬模块总管理员 long employeeId = user.getUID(); - if (getTaxAgentService().isNeedAuth(employeeId)) { - List taxAgentEmployees = getTaxAgentService().listTaxAgentAndEmployee(employeeId); - List taxAgentIdsAsAdmin = getTaxAgentService().listAllTaxAgentsAsAdmin(employeeId).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + if (getTaxAgentService(user).isNeedAuth(employeeId)) { + List taxAgentEmployees = getTaxAgentService(user).listTaxAgentAndEmployee(employeeId); + List taxAgentIdsAsAdmin = getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); salaryArchives = salaryArchives.stream().filter(f -> // 作为管理员 taxAgentIdsAsAdmin.contains(f.getTaxAgentId()) @@ -328,7 +329,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // : new HashMap<>(); if (queryParam.getHasData()) { - List> listMaps = salaryArchiveService() + List> listMaps = salaryArchiveService(user) .buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, Boolean.FALSE); // 组装数据 listMaps.forEach(e -> { @@ -426,18 +427,16 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // } // } - /** - * 导入的数据插入到数据库中 - */ - public Map batchImportEbatch(Map params) { + + public Map batchImportEbatch(SalaryArchiveImportHandleParam param) { // 初始化国际化标签 SalaryArchiveExcelBO.initI18n(); - String imageId = params.get("imageId").toString(); + String imageId = param.getImageId(); // 列表类型 - String listType = params.get("listType").toString(); + String listType = param.getListType(); // 导入类型 - String importType = Util.null2String(params.get("importType")); + String importType = param.getImportType(); // 2.构建导入需要的数据 SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam(listType, importType); @@ -524,7 +523,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } // 4.数据入库处理 - handleImportData(importHandleParam); + if (!param.isOnlyCheck()) { + handleImportData(importHandleParam); + } Map apidatas = new HashMap<>(); @@ -541,6 +542,115 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } } + + public Map processInit(SalaryArchiveImportActionParam param) { + // 初始化国际化标签 + SalaryArchiveExcelBO.initI18n(); + + // 列表类型 + String listType = param.getListType(); + // 导入类型 + String importType = param.getImportType(); + // 2.构建导入需要的数据 + SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam(listType, importType); + + + int total = 0; + //excel数据 + // 需要导入的数据 + List> data = param.getImportDatas(); + if (data != null) { + total += data.size(); + } + + int index = 0; + int successCount = 0; + int errorCount = 0; + // 错误excel内容 +// List errorExcelSheets = new ArrayList<>(); + // 用于(初始化导入)的相同employeeId时的处理 + List initImportData = Lists.newArrayList(); + // 用于(调薪和调整个税扣缴义务人)的相同employeeId时取第一条记录,如果是初始化导入则有重复 + List allTodoSalaryArchives = Lists.newArrayList(); + + + // 错误提示 + List> excelComments = new ArrayList<>(); + HashMap message = new HashMap(); + + // 错误sheet数据 + List> errorData = new ArrayList<>(); + + for (int i = 0; i < data.size(); i++) { + Map map = data.get(i); + List headers = Lists.newArrayList(); + map.keySet().forEach(headers::add); + int effectiveTimeIndex = 0; + for (int j = 0; j < headers.size(); j++) { + String header = headers.get(j); + String key = header; + if (key.equals(SalaryI18nUtil.getI18nLabel(85904, "生效日期"))) { + effectiveTimeIndex = j; + } + } + boolean isValidHeader = checkHeaders(importHandleParam, message, headers); + if (!isValidHeader) { + excelComments.add(message); + Map apidatas = new HashMap<>(); + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorNotice", excelComments); + return apidatas; + } + + index += 1; + map = data.get(i); + map.put("index", i + 2); + // 3.校验行内容 + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + if (isError) { + errorCount += 1; + // 添加错误数据 + errorData.add(map); + } else { + successCount += 1; + } + // 初始化导入对重复记录校验 + if (importHandleParam.isInit()) { + Map validMap = SalaryArchiveExcelBO + .validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); + errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); + successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); + } + // 导入进度 +// if (index % 100 == 0 || index >= total) { +// salaryBatchService.sendImportRate(message.getBizId(), total, index); +// } + } + + // 如果sheet包含错误数据 + if (CollectionUtils.isNotEmpty(errorData)) { +// salaryBatchService.createErrorExcelSheet(headers, errorData, excelSheet.getName(), excelComments, errorExcelSheets); + } + + // 4.数据入库处理 + if (param.isAddData()) { + handleImportData(importHandleParam); + } + + Map apidatas = new HashMap<>(); + + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorNotice", excelComments); + return apidatas; + + // 发送导入回调信息 +// salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets); + + } + + /** * 构建导入处理参数 * @@ -550,10 +660,10 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch */ private SalaryArchiveImportHandleParam buildImportHandleParam(String listType, String importType) { // 获取所有可被引用的薪资项目 - List salaryItems = salaryArchiveItemService().getCanAdjustSalaryItems(); + List salaryItems = salaryArchiveItemService(user).getCanAdjustSalaryItems(); Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); // 获取所有个税扣缴义务人 - Collection taxAgentList = getTaxAgentService().listTaxAgentAndEmployeeTree((long) user.getUID()); + Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree((long) user.getUID()); // 待定薪列表 boolean isPendingList = listType.equals(SalaryArchiveListTypeEnum.PENDING.getValue()); @@ -575,11 +685,11 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } else if (isSuspendList) { runStatusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue()); } - List salaryArchiveList = salaryArchiveService().listSome(SalaryArchivePO.builder().runStatusList(runStatusList).build()); + List salaryArchiveList = salaryArchiveService(user).listSome(SalaryArchivePO.builder().runStatusList(runStatusList).build()); List salaryArchiveIds = salaryArchiveList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList()); Map salaryArchivesMap = SalaryEntityUtil.convert2Map(salaryArchiveList, k -> k.getEmployeeId() + "-" + k.getTaxAgentId()); - List employees = getTaxAgentService().listEmployees(); + List employees = getTaxAgentService(user).listEmployees(); // 查询人员状态 // List hrmStatusList = hrmCommonHrmStatusService.list(tenantKey); @@ -600,7 +710,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // 调薪导入 .isSalaryItemAdjust(isSalaryItemAdjust) // 获取租户下所有的人员 - .employees(getSalaryEmployeeService().listAll()) + .employees(getSalaryEmployeeService(user).listAll()) // .hrmStatusList(hrmStatusList) // 获取所有个税扣缴义务人 .taxAgentList(taxAgentList) @@ -610,10 +720,10 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch .salaryItemIds(salaryItemIds) // 查询已生效的薪资项目数据 .effectiveItemListMap( - isSuspendList ? Collections.emptyMap() : salaryArchiveItemService().getEffectiveItemListMap(salaryArchiveIds, isNoNeedSalaryItem, salaryItemIds)) + isSuspendList ? Collections.emptyMap() : salaryArchiveItemService(user).getEffectiveItemListMap(salaryArchiveIds, isNoNeedSalaryItem, salaryItemIds)) // 查询未生效的薪资项目数据 .ineffectiveItemListMap( - isSuspendList ? Collections.emptyMap() : salaryArchiveItemService().getIneffectiveItemListMap(salaryArchiveIds, isNoNeedSalaryItem, salaryItemIds)) + isSuspendList ? Collections.emptyMap() : salaryArchiveItemService(user).getIneffectiveItemListMap(salaryArchiveIds, isNoNeedSalaryItem, salaryItemIds)) // 当前时间 .nowTime(new Date()) // 当天 diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index ec6f75577..14469039c 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -7,11 +7,8 @@ import com.engine.salary.biz.*; import com.engine.salary.common.LocalDateRange; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; -import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportDTO; -import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportSameDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryarchive.param.*; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; @@ -31,7 +28,6 @@ import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; import com.engine.salary.mapper.archive.SalaryArchiveMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; -import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; @@ -39,14 +35,12 @@ 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.excel.ExcelComment; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; -import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import dm.jdbc.util.IdGenerator; @@ -66,9 +60,7 @@ import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; -import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -530,143 +522,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe return ExcelUtil.genWorkbookV2(rows, sheetName); } - @Override - public XSSFWorkbook downloadTemplate(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam) { - - SalaryArchiveListTypeEnum listTypeEnum = queryParam.getListType(); - - // 待定薪列表 - boolean isPendingList = listTypeEnum == SalaryArchiveListTypeEnum.PENDING; - // 定薪列表 - boolean isFixedList = listTypeEnum == SalaryArchiveListTypeEnum.FIXED; - // 待停薪列表 - boolean isSuspendList = listTypeEnum == SalaryArchiveListTypeEnum.SUSPEND; - if (isPendingList) { - queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.PENDING.getValue())); - } else if (isFixedList) { - queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())); - } else if (isSuspendList) { - queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.SUSPEND.getValue())); - } - - boolean isInit = SalaryArchiveImportTypeEnum.INIT.getValue().equals(queryParam.getImportType()); - boolean isSalaryItemAdjust = SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue().equals(queryParam.getImportType()); - // 名称 - String nameI18n = SalaryI18nUtil.getI18nLabel(101601, "薪资档案导入模板") - + SalaryI18nUtil.getI18nLabel(listTypeEnum.getLabelId(), listTypeEnum.getDefaultLabel()); - if (isFixedList) { - // 初始化 - if (isInit) { - nameI18n += - "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.INIT.getLabelId(), SalaryArchiveImportTypeEnum.INIT.getDefaultLabel()); - // 调薪 - } else if (isSalaryItemAdjust) { - nameI18n += "-" + SalaryI18nUtil - .getI18nLabel(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getLabelId(), SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getDefaultLabel()); - } - } - String finalNameI18n = nameI18n; - - - // 1.工作簿名称 - String sheetName = finalNameI18n; - // 获取所有可被引用的薪资项目 - List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); - - // 2.表头 - List header = Lists.newArrayList(); - header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); - header.add(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); - header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); - header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); - header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); - header.add(SalaryI18nUtil.getI18nLabel(91075, "状态")); - - String payStartDateI18n = SalaryI18nUtil.getI18nLabel(109527, "起始发薪日期"); - String payEndDateI18n = SalaryI18nUtil.getI18nLabel(109329, "最后发薪日期"); - String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); - String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); - if (isPendingList) { - header.add(payStartDateI18n); - header.add(payEndDateI18n); - } else if (isFixedList) { - if (isInit) { - header.add(payStartDateI18n); - header.add(payEndDateI18n); - } else if (isSalaryItemAdjust) { - header.add(adjustReasonI18n); - header.add(effectiveTimeI18n); - } - } else if (isSuspendList) { - header.add(payStartDateI18n); - header.add(payEndDateI18n); - } - - for (SalaryItemPO salaryItem : salaryItems) { - header.add(salaryItem.getName()); - } - // 组装数据 - List> rows = new ArrayList<>(); - rows.add(header); - - //模板是否含数据 - if (queryParam.getHasData() != null && queryParam.getHasData()) { - // 获取所有个税扣缴义务人 - Collection taxAgentList = getTaxAgentService(user).listAll(); - List salaryArchives = list(queryParam); - List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, Boolean.FALSE); - listMaps.forEach(e -> { - List row = new ArrayList<>(); - row.add(Util.null2String(e.get("username"))); - row.add(Util.null2String(e.get("taxAgentName"))); -// if ( isSalaryItemAdjust) { -// row.add(""); -// } - if (isSalaryItemAdjust) { - row.add(""); - } - row.add(Util.null2String(e.get("departmentName"))); - row.add(Util.null2String(e.get("mobile"))); - row.add(Util.null2String(e.get("workcode"))); - row.add(Util.null2String(e.get("employeeStatus"))); - - if (isPendingList) { - row.add(Util.null2String(e.get("payStartDate"))); - row.add(Util.null2String(e.get("payEndDate"))); - } else if (isFixedList) { - if (isInit) { - row.add(Util.null2String(e.get("payStartDate"))); - row.add(Util.null2String(e.get("payEndDate"))); - } else if (isSalaryItemAdjust) { - row.add(""); - row.add(""); - } - } else if (isSuspendList) { - row.add(Util.null2String(e.get("payStartDate"))); - row.add(Util.null2String(e.get("payEndDate"))); - } - rows.add(row); - }); - } - - // 3.表数据 - // 4.注释 - List excelComments = Lists.newArrayList(); - excelComments.add(new ExcelComment(0, 0, 3, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); - excelComments.add(new ExcelComment(1, 0, 4, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); - if (isSalaryItemAdjust) { - excelComments.add(new ExcelComment(2, 0, 5, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); - } - if (isSalaryItemAdjust) { - excelComments.add(new ExcelComment(3, 0, 6, 2, SalaryI18nUtil.getI18nLabel(100953, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化"))); - } - if (isInit) { - excelComments.add(new ExcelComment(6, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); - } - XSSFWorkbook book = ExcelUtil.genWorkbookV2(rows, sheetName, excelComments); - return book; - - } @Override public String savePaySet(SalaryArchiveSetPaySaveParam saveParam) { @@ -854,149 +709,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe return SalaryArchiveBO.buildSalaryArchiveData(salaryArchiveList, salaryArchiveItemDataList, localDateRange, allEmployeeIds, isOnlyTaxAgent); } - /** - * 导入薪资档案 - */ - public Map importSalaryArchive(SalaryArchiveImportHandleParam param, boolean ifImportData) { - //1、参数校验 - vaildImportParam(param); - - String imageId = param.getImageId(); - String importType = param.getImportType(); - String listType = param.getListType(); - - // 2.构建导入需要的数据 - SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam(listType, importType); - - InputStream fileInputStream = null; - try { - fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); - List headers = ExcelSupport.getSheetHeader(sheet, 0); - - //检查导入模板的必填列 - checkHeaders(param, headers); - - //excel数据 - List> data = ExcelParseHelper.parse2Map(sheet, 1); - - int successCount = 0; - int errorCount = 0; - // 用于(初始化导入)的相同employeeId时的处理 - List initImportData = Lists.newArrayList(); - // 用于(调薪和调整个税扣缴义务人)的相同employeeId时取第一条记录,如果是初始化导入则有重复 - List allEmployeeIds = Lists.newArrayList(); - - // 错误sheet数据 - List> errorData = new ArrayList<>(); - // 错误提示 - List> excelComments = new ArrayList<>(); - - - for (int i = 0; i < data.size(); i++) { - Map map = data.get(i); - map.put("index", i + 2); - // 3.校验行内容 - boolean isError = singleRowCheck(allEmployeeIds, map, headers, excelComments, errorCount, importHandleParam); - - if (isError) { - errorCount += 1; - // 添加错误数据 - errorData.add(map); - } else { - successCount += 1; - } - // 初始化导入对重复记录校验 - if (importHandleParam.isInit()) { - Map validMap = validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); - errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); - successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); - } - - } - // 4.数据入库处理 - if (ifImportData) { - handleImportData(importHandleParam); - } - - Map apidatas = new HashMap<>(); - - apidatas.put("successCount", successCount); - apidatas.put("errorCount", errorCount); - apidatas.put("errorNotice", excelComments); - return apidatas; - - } finally { - IOUtils.closeQuietly(fileInputStream); - } - - - } - - public Map importSalaryArchive(SalaryArchiveImportHandleParam param) { - return importSalaryArchive(param, true); - } - - /** - * 导入薪资档案(action使用) - * - * @param importData 导入参数 - * @return - */ - public Map importSalaryArchiveAction(SalaryArchiveImportActionParam importData, boolean ifImportData) { - // 1.构建导入需要的数据 - //导入类型 - String importType = importData.getImportType(); - SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam("FIXED", importType); - // 需要导入的数据 - List> data = importData.getImportDatas(); - // 成功数量 - int successCount = 0; - // 错误数量 - int errorCount = 0; - // 错误数据 - List> errorData = Lists.newArrayList(); - // 错误提示 - List> excelComments = new ArrayList<>(); - - List initImportData = Lists.newArrayList(); - - boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); - - for (int i = 0; i < data.size(); i++) { - Map map = data.get(i); - List headers = Lists.newArrayList(); - map.keySet().forEach(headers::add); - map.put("index", i + 2); - // 3.校验行内容 - boolean isError = singleRowCheck(Lists.newArrayList(), map, headers, excelComments, errorCount, importHandleParam); - if (isError) { - errorCount += 1; - // 添加错误数据 - errorData.add(map); - } else { - successCount += 1; - } - // 初始化导入对重复记录校验 - if (isInit) { - Map validMap = validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); - errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); - successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); - } - } - // 4.数据入库处理 - if (ifImportData) { - handleImportData(importHandleParam); - } - - Map apidatas = new HashMap<>(); - - apidatas.put("successCount", successCount); - apidatas.put("errorCount", errorCount); - apidatas.put("errorNotice", excelComments); - return apidatas; - - } @Override public void stopSalary(SalaryArchiveStopParam stopSalaryParam) { @@ -1065,812 +777,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } } - /** - * 构建导入处理参数 - * - * @return - */ - private SalaryArchiveImportHandleParam buildImportHandleParam(String listType, String importType) { - long employeeId = user.getUID(); - // 获取所有可被引用的薪资项目 - List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); - - Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); - Date now = new Date(); - - // 待定薪列表 - boolean isPendingList = listType.equals(SalaryArchiveListTypeEnum.PENDING.getValue()); - // 定薪列表 - boolean isFixedList = listType.equals(SalaryArchiveListTypeEnum.FIXED.getValue()); - // 待停薪列表 - boolean isSuspendList = listType.equals(SalaryArchiveListTypeEnum.SUSPEND.getValue()); - - boolean isInit = isFixedList && importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); - boolean isSalaryItemAdjust = isFixedList && importType.equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); - // 初始化导入是先删除后增的,起始可以只加载非加密的列 - boolean isNoNeedSalaryItem = isPendingList || isInit; - - List runStatusList = Lists.newArrayList();// 初始化导入是全量 - if (isPendingList) { - runStatusList = Arrays.asList(SalaryArchiveStatusEnum.PENDING.getValue()); - } else if (isSalaryItemAdjust) { - runStatusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue()); - } else if (isSuspendList) { - runStatusList = Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue()); - } - - List salaryArchiveList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().runStatusList(runStatusList).build()); - - List salaryArchiveIds = salaryArchiveList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList()); - Map salaryArchivesMap = SalaryEntityUtil.convert2Map(salaryArchiveList, k -> k.getEmployeeId() + "-" + k.getTaxAgentId()); - - - return SalaryArchiveImportHandleParam.builder() -// .openDevolution(getTaxAgentService(user).isOpenDevolution()) -// .listTaxAgentAndEmployeeTree(getTaxAgentService(user).listTaxAgentAndEmployeeTree(employeeId)) - // 待定薪列表 - .isPendingList(isPendingList) - // 定薪列表 - .isFixedList(isFixedList) - // 待停薪列表 - .isSuspendList(isSuspendList) - // 初始化导入 - .isInit(isInit) - .listType(listType) - .salaryArchivesMap(salaryArchivesMap) - // 获取租户下所有的人员 - .employees(employBiz.listEmployee()) - // 获取所有个税扣缴义务人 -// .taxAgentList(getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId)) - .salaryItems(salaryItems) - // 查询已有的薪资档案基本数据 -// .salaryArchives(list(SalaryArchiveQueryParam.builder().build())).salaryItemIds(salaryItemIds) - // 查询已生效的薪资项目数据 -// .effectiveItemList(getEffectiveItemList(salaryItemIds)) - // 查询未生效的薪资项目数据 -// .ineffectiveItemList(getIneffectiveItemList(salaryItemIds)) - // 查询已生效的个税扣缴义务人数据 -// .effectiveTaxAgentList(getEffectiveTaxAgentList()) - // 查询未生效的个税扣缴义务人数据 -// .ineffectiveTaxAgentList(getIneffectiveTaxAgentList()) - // 当前时间 - .nowTime(now) - // 当天 - .today(now) - // 待保存薪资档案 - .salaryArchiveSaves(Lists.newArrayList()) - // 待修改薪资档案- - .salaryArchiveUpdates(Lists.newArrayList()) - // 待保存薪资档案-个税扣缴义务人 -// .salaryArchiveTaxAgentSaves(Lists.newArrayList()) - // 待保存薪资档案-薪资项目 - .salaryArchiveItemSaves(Lists.newArrayList()) - // 待删除薪资档案-个税扣缴义务人 -// .salaryArchiveTaxAgentDelTaxAgentIds(Lists.newArrayList()) - // 待删除薪资档案-薪资项目 - .salaryArchiveItemDelSalaryItemIds(Lists.newArrayList()).build(); - - } - - /** - * 初始化导入数据校验 - * 说明:如果一个人的多条记录中有一个错那么就全部弄到错误文档中 - * - * @param isError - * @param rowNo - * @param map - * @param excelComments - * @param errorCount - * @param successCount - * @param errorData - * @param initImportData - * @param importHandleParam - */ - private Map validInitImportData(boolean isError, int rowNo, Map map, List> excelComments, int errorCount, int successCount, List> errorData, List initImportData, SalaryArchiveImportHandleParam importHandleParam) { - Long employeeId = Long.valueOf(Optional.ofNullable(map.get("employeeId")).orElse("0").toString()); - Optional optionalInitImport = initImportData.stream().filter(f -> f.getEmployeeId().equals(employeeId)).findFirst(); - - Map validMap = new HashMap<>(); - validMap.put("errorCount", errorCount); - validMap.put("successCount", successCount); - - if (employeeId.equals(0L)) { - return validMap; - } - AtomicInteger finalErrorCount = new AtomicInteger(errorCount); - AtomicInteger finalSuccessCount = new AtomicInteger(successCount); - if (optionalInitImport.isPresent()) { - SalaryArchiveInitImportDTO initImport = optionalInitImport.get(); - List sames = initImport.getSames(); - sames.add(SalaryArchiveInitImportSameDTO.builder().isError(isError).rowNo(rowNo).row(map).build()); - Optional optionalSame = sames.stream().filter(SalaryArchiveInitImportSameDTO::isError).findFirst(); - // 只要是其中一行有错误 - if (optionalSame.isPresent()) { - sames.forEach(e -> { - if (!e.isError()) { - e.setError(Boolean.TRUE); - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", "该员工的薪资档案记录有误,请检查"); - excelComments.add(errorMessageMap); - finalErrorCount.addAndGet(1); - errorData.add(e.getRow()); - finalSuccessCount.addAndGet(-1); - } - }); - // 如果到目前为止都没错的话,则相互之间检验调整记录 - } else { - int nums = sames.size(); - // 1.生效时间不可重复 - List effectiveTimeList = sames.stream().map(m -> Optional.ofNullable(m.getRow().get("payStartDate")).orElse("").toString()).distinct().collect(Collectors.toList()); - // 2.个税扣缴义务人和薪资项目共同决定是否重复 - List rowSameList = sames.stream().map(m -> { - Map row = m.getRow(); - String taxAgent = Optional.ofNullable(row.get("taxAgent")).orElse("").toString(); - String salaryItem = Optional.ofNullable(row.get("salaryItemVal")).orElse("").toString(); - return taxAgent + salaryItem; - }).distinct().collect(Collectors.toList()); - if (/** effectiveTimeList.size() != nums || */rowSameList.size() != nums) { - sames.forEach(e -> { - if (!e.isError()) { - e.setError(Boolean.TRUE); - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", "该员工的薪资档案记录有误"); - excelComments.add(errorMessageMap); - finalErrorCount.addAndGet(1); - errorData.add(e.getRow()); - finalSuccessCount.addAndGet(-1); - } - }); - } - } - initImport.setSames(sames); - } else { - SalaryArchiveInitImportDTO initImport = new SalaryArchiveInitImportDTO(); - initImport.setEmployeeId(employeeId); - List sames = Lists.newArrayList(); - sames.add(SalaryArchiveInitImportSameDTO.builder().isError(isError).rowNo(rowNo).row(map).build()); - initImport.setSames(sames); - initImportData.add(initImport); - } - // 如果出现错误 - if (isError || errorCount != finalErrorCount.get() || successCount != finalSuccessCount.get()) { - validMap.put("errorCount", finalErrorCount.get()); - validMap.put("successCount", finalSuccessCount.get()); - // 将前面添加好的数据给过滤掉 - importHandleParam.setSalaryArchiveSaves(importHandleParam.getSalaryArchiveSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); -// importHandleParam.setSalaryArchiveTaxAgentSaves(importHandleParam.getSalaryArchiveTaxAgentSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); - importHandleParam.setSalaryArchiveItemSaves(importHandleParam.getSalaryArchiveItemSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); - } - return validMap; - } - - /** - * 校验单行数据 - * - * @param allEmployeeIds - * @param map - * @param headers - * @param excelComments - * @param errorCount - * @param importHandleParam - * @return - */ - private boolean singleRowCheck(List allEmployeeIds, Map map, List headers, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { - boolean isError = false; - - boolean isInit = importHandleParam.isInit(); - boolean isSalaryItemAdjust = importHandleParam.isSalaryItemAdjust(); - - String uidI18n = SalaryI18nUtil.getI18nLabel(85429, "员工id"); - String userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); - String taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); - String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); - String payStartDateI18n = SalaryI18nUtil.getI18nLabel(85904, "起始发薪日期"); - String payEndDateI18n = SalaryI18nUtil.getI18nLabel(85904, "最后发薪日期"); - String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); - String rowindex = "第" + map.get("index") + "行"; - // 1.姓名 - String uid = Optional.ofNullable(map.get(uidI18n)).orElse("").toString(); - String userName = Optional.ofNullable(map.get(userNameI18n)).orElse("").toString(); - String deparmentName = Optional.ofNullable(map.get(SalaryI18nUtil.getI18nLabel(86185, "部门"))).orElse("").toString(); - String mobile = Optional.ofNullable(map.get(SalaryI18nUtil.getI18nLabel(86186, "手机号"))).orElse("").toString(); - String workcode = Optional.ofNullable(map.get(SalaryI18nUtil.getI18nLabel(86317, "工号"))).orElse("").toString(); - - //查询对于人员信息导入筛选的全局配置 - SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); - String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; - - //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List emps = getSalaryEmployeeService(user).matchImportEmployee(importHandleParam.getEmployees(), userName, deparmentName, mobile, workcode, SalaryEntityUtil.string2Long(uid)); - - List employeeSameIds = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { - employeeSameIds = emps.stream().filter(e -> UserStatusEnum.getNormalStatus().contains(e.getStatus())).map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); - } - if (CollectionUtils.isNotEmpty(emps) && emps.size() == 1) { - employeeSameIds = emps.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); - } - Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0) > 0 ? employeeSameIds.get(0) : null; - //设置当前的待校验人员id -// importHandleParam.setEmployeeId(employeeId); - - // 调薪和调整个税扣缴义务人的存在相同的取第一条 - if (employeeId != null && allEmployeeIds.contains(employeeId) && isSalaryItemAdjust) { - return isError; - } - if (employeeId != null) { - allEmployeeIds.add(employeeId); - } - // 用于初始化导入数据校验 - map.put("employeeId", employeeId); - map.put("rowId", employeeId); - // 2.生效日期 - String effectiveTimeCellVal = Optional.ofNullable(map.get(effectiveTimeI18n)).orElse("").toString().replaceAll(" 00:00:00", ""); - // 免得失败后,会追加 00:00:00 - map.put(effectiveTimeI18n, effectiveTimeCellVal); - map.put("effectiveTime", effectiveTimeCellVal); - Date effectiveTime = SalaryDateUtil.checkDay(effectiveTimeCellVal) ? dateStrToLocalDate(effectiveTimeCellVal) : null; - // 3.个税扣缴义务人 - 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(); - Long taxAgentId = optionalTaxAgent.map(TaxAgentManageRangeEmployeeDTO::getTaxAgentId).orElse(null); - // 4.调整原因 - String adjustReason = ""; - if (isSalaryItemAdjust) { - // 4.调整原因[薪资项目] - adjustReason = SalaryArchiveItemAdjustReasonEnum.getValueByDefaultLabel(Optional.ofNullable(map.get(adjustReasonI18n)).orElse("").toString()); - } - - // 5.起始发薪日期 - String payStartDateCellVal = Optional.ofNullable(map.get(payStartDateI18n)).orElse("").toString().replaceAll(" 00:00:00", ""); - // 免得失败后,会追加 00:00:00 - map.put(payStartDateI18n, payStartDateCellVal); - map.put("payStartDate", payStartDateCellVal); - Date payStartDate = SalaryDateUtil.checkDay(payStartDateCellVal) ? dateStrToLocalDate(payStartDateCellVal) : null; - // 6.最后发薪日期 - String payEndDateCellVal = Optional.ofNullable(map.get(payEndDateI18n)).orElse("").toString().replaceAll(" 00:00:00", ""); - // 免得失败后,会追加 00:00:00 - map.put(payEndDateI18n, payEndDateCellVal); - map.put("payEndDate", payEndDateCellVal); - Date payEndDate = SalaryDateUtil.checkDay(payEndDateCellVal) ? dateStrToLocalDate(payEndDateCellVal) : null; - - // 构建薪资档案 - SalaryArchivePO finalSalaryArchive = buildSalaryArchive(payStartDate, payEndDate, employeeId, taxAgentId, importHandleParam); - - // 不满足构建条件 - if (finalSalaryArchive == null) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + SalaryI18nUtil.getI18nLabel(115527, "该条数据不符合当前列表导入要求或其他列表存在该档案,不可导入")); - excelComments.add(errorMessageMap); - isError = true; - return isError; - } else { - map.put("salaryArchiveId", finalSalaryArchive.getId()); - } - - for (int j = 0; j < headers.size(); j++) { - String key = headers.get(j); - - String cellVal = Optional.ofNullable(map.get(key)).orElse("").toString(); - - boolean isEmpty = StringUtils.isEmpty(cellVal) && - (userNameI18n.equals(key.toString()) || taxAgentI18n.equals(key.toString()) - // 定薪列表初始化导入必填: 起始发薪日期、生效日期 - || ((payStartDateI18n.equals(key.toString()) || effectiveTimeI18n.equals(key.toString())) && importHandleParam.isInit()) - // 定薪列表调薪必填: 调整原因、生效日期 - || ((adjustReasonI18n.equals(key.toString()) || effectiveTimeI18n.equals(key.toString())) && importHandleParam.isSalaryItemAdjust()) - // 待停薪必填:最后发薪日期 - || (payEndDateI18n.equals(key.toString()) && importHandleParam.isSuspendList())); - // 判空 - if (userNameI18n.equals(key) && StringUtils.isEmpty(cellVal) && "0".equals(confValue)) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + key + "不能为空"); - excelComments.add(errorMessageMap); - } - // 个税扣缴义务人列判空(初始化导入或调整个税扣缴义务人) - if ((taxAgentI18n.equals(key) && StringUtils.isEmpty(cellVal))) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + key + "不能为空"); - excelComments.add(errorMessageMap); - } - // 调整原因列判空(调薪或调整个税扣缴义务人) - if ((adjustReasonI18n.equals(key) && (isSalaryItemAdjust)) && StringUtils.isEmpty(cellVal)) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + key + "不能为空"); - excelComments.add(errorMessageMap); - } - //调薪生效时间不能为空 - if (isSalaryItemAdjust && effectiveTimeI18n.equals(key) && StringUtils.isEmpty(cellVal)) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + key + "不能为空"); - excelComments.add(errorMessageMap); - } - //定薪起始时间不能为空 - if (payStartDateI18n.equals(key) && StringUtils.isEmpty(cellVal)) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + key + "不能为空"); - excelComments.add(errorMessageMap); - } - - if (isEmpty) { - isError = true; - } - // 1.姓名列处理 - if (!isEmpty && userNameI18n.equals(key)) { - if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "员工信息不存在或者存在多个员工"); - excelComments.add(errorMessageMap); - isError = true; - } else if (employeeId == null) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "姓名错误,系统内不存在该姓名"); - excelComments.add(errorMessageMap); - isError = true; - // (调薪或调整个税扣缴义务人) - } else if (finalSalaryArchive == null && isSalaryItemAdjust) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "该人员的薪资档案不存在,请先初始化"); - excelComments.add(errorMessageMap); - isError = true; - } - -// //设置当前的待校验人员id -// importHandleParam.setEmployeeId(employeeId); - } else if (!isEmpty && taxAgentI18n.equals(key) && isInit ) { - // 2.个税扣缴义务人列处理(初始化导入或调整个税扣缴义务人) - isError = handleTaxAgent(isError, isInit, excelComments, errorCount, j, taxAgentId, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, map); - } else if (!isEmpty && payStartDateI18n.equals(key) && payStartDate == null) { - // 起始发薪日期 - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "发薪起始日期格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"); - excelComments.add(errorMessageMap); - isError = true; - } else if (!isEmpty && payEndDateI18n.equals(key) && !payEndDateCellVal.equals("") && !SalaryDateUtil.checkDay(payEndDateCellVal)) { - // 最后发薪日期 - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "最后发薪日期格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"); - excelComments.add(errorMessageMap); - isError = true; - // 5.薪资项目列处理(初始化导入或调薪) - } else if (!isEmpty && effectiveTimeI18n.equals(key) && effectiveTime == null) { - // 3.生效时间处理 - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"), errorCount + 1, errorCount + 1, j, j); - isError = true; - // 4.调整原因列处理(调薪或调整个税扣缴义务人) - } else if (!isEmpty && adjustReasonI18n.equals(key) && isSalaryItemAdjust && StringUtils.isEmpty(adjustReason)) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "调整原因异常"); - excelComments.add(errorMessageMap); - isError = true; - // 5.薪资项目列处理(初始化导入或调薪) - } else { - // 薪资项目数据 - if (!isSalaryItemAdjust) { - effectiveTime = payStartDate; - } - - isError = handleSalaryItem(isError, isInit, excelComments, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key, cellVal, map); - - } - } - return isError; - } - - /** - * 构建薪资档案 - * - * @param payStartDate - * @param payEndDate - * @param employeeId - * @param taxAgentId - * @param importHandleParam - * @return - */ - private SalaryArchivePO buildSalaryArchive(Date payStartDate, Date payEndDate, Long employeeId, Long taxAgentId, SalaryArchiveImportHandleParam importHandleParam) { -// Optional optionalSA = importHandleParam.getSalaryArchives().stream().filter(p -> p.getEmployeeId().equals(employeeId) && p.getTaxAgentId().equals(taxAgentId)).findFirst(); - SalaryArchivePO salaryArchive = importHandleParam.getSalaryArchivesMap().get(employeeId + "-" + taxAgentId); - if (salaryArchive != null) { - // 修改档案 - SalaryArchivePO sa = salaryArchive; - boolean isEnabled = - // 待定薪导入 - (sa.getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue()) && importHandleParam.isPendingList()) - // 调薪导入 - || ((sa.getRunStatus().equals(SalaryArchiveStatusEnum.FIXED.getValue()) || sa.getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) && importHandleParam.isFixedList() && !importHandleParam.isInit()) - // 初始化导入 - || importHandleParam.isInit() - // 待停薪导入 - || ((sa.getRunStatus().equals(SalaryArchiveStatusEnum.FIXED.getValue()) || sa.getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) && importHandleParam.isSuspendList()); - if (isEnabled) { - if (importHandleParam.isInit()) { - sa.setRunStatus(SalaryArchiveStatusEnum.FIXED.getValue()); - } -// sa.setModifier(importHandleParam.getCurrentEmployeeId()); - salaryArchive = sa; - salaryArchive.setPayStartDate(payStartDate); - salaryArchive.setPayEndDate(payEndDate); - importHandleParam.getSalaryArchiveUpdates().add(salaryArchive); - } - } else if (employeeId != null && taxAgentId != null && importHandleParam.isInit()) { - // 新增档案 - salaryArchive = SalaryArchivePO.builder() - .id(IdGenerator.generate()) - .employeeId(employeeId) - .taxAgentId(taxAgentId) - .runStatus(SalaryArchiveStatusEnum.FIXED.getValue()) - .createTime(importHandleParam.getNowTime()) - .updateTime(importHandleParam.getNowTime()) - .creator(importHandleParam.getCurrentEmployeeId()) - .payStartDate(payStartDate) - .payEndDate(payEndDate) -// .modifier(importHandleParam.getCurrentEmployeeId()) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - importHandleParam.getSalaryArchiveSaves().add(salaryArchive); - } - return salaryArchive; - } - - - /** - * 构建薪资档案对象 - * - * @param employeeId - * @param taxAgentId - * @param importHandleParam - * @return - */ - public static SalaryArchivePO buildSalaryArchive(Long employeeId, Long taxAgentId, SalaryArchiveImportHandleParam importHandleParam) { - SalaryArchivePO salaryArchive = importHandleParam.getSalaryArchivesMap().get(employeeId + "-" + taxAgentId); - if (salaryArchive != null) { - // 修改档案 - SalaryArchivePO sa = salaryArchive; - boolean isEnabled = - // 待定薪导入 - (sa.getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue()) && importHandleParam.isPendingList()) - // 调薪导入 - || ((sa.getRunStatus().equals(SalaryArchiveStatusEnum.FIXED.getValue()) || sa.getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) && importHandleParam.isFixedList() && !importHandleParam.isInit()) - // 初始化导入 - || importHandleParam.isInit() - // 待停薪导入 - || ((sa.getRunStatus().equals(SalaryArchiveStatusEnum.FIXED.getValue()) || sa.getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) && importHandleParam.isSuspendList()); - if (isEnabled) { - if (importHandleParam.isInit()) { - sa.setRunStatus(SalaryArchiveStatusEnum.FIXED.getValue()); - } -// sa.setModifier(importHandleParam.getCurrentEmployeeId()); - salaryArchive = sa; - - importHandleParam.getSalaryArchiveUpdates().add(salaryArchive); - } - } else if (employeeId != null && taxAgentId != null && importHandleParam.isInit()) { - // 新增档案 - salaryArchive = SalaryArchivePO.builder() - .id(IdGenerator.generate()) - .employeeId(employeeId) - .taxAgentId(taxAgentId) - .runStatus(SalaryArchiveStatusEnum.FIXED.getValue()) - .createTime(importHandleParam.getNowTime()) - .updateTime(importHandleParam.getNowTime()) - .creator(importHandleParam.getCurrentEmployeeId()) -// .modifier(importHandleParam.getCurrentEmployeeId()) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - importHandleParam.getSalaryArchiveSaves().add(salaryArchive); - } - return salaryArchive; - } - - - /** - * 个税扣缴义务人处理 - * - * @param isError - * @param excelComments - * @param errorCount - * @param j - * @param taxAgentId - * @param effectiveTime - * @param finalSalaryArchive - * @param taxAgentAdjustReason - * @param importHandleParam - * @return - */ - private boolean handleTaxAgent(boolean isError, boolean isInit, List> excelComments, int errorCount, int j, Long taxAgentId, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam, Map map) { -// String rowindex = "第" + map.get("index") + "行"; -// -// //分权 -// Boolean openDevolution = importHandleParam.getOpenDevolution(); -// -// Collection taxAgentList = importHandleParam.getTaxAgentList(); -// Set taxAgents = SalaryEntityUtil.properties(taxAgentList, TaxAgentPO::getId); -// if (taxAgentId == null) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人不存在"); -// excelComments.add(errorMessageMap); -// isError = true; -// } else if (!taxAgents.contains(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "没有该个税扣缴义务人的权限"); -// excelComments.add(errorMessageMap); -// isError = true; -// } -// -// //人员是否在扣缴义务人范围内 -// if (openDevolution) { -// Optional taxAgentEmployees = importHandleParam.getListTaxAgentAndEmployeeTree().stream().filter(m -> m.getTaxAgentId().equals(taxAgentId)).findFirst(); -// if (!taxAgentEmployees.isPresent()) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "该条数据的扣缴义务人不存在"); -// excelComments.add(errorMessageMap); -// isError = true; -// } else { -// List employeeList = taxAgentEmployees.get().getEmployeeList(); -// if (CollectionUtils.isEmpty(employeeList)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "该条数据的扣缴义务人未设置人员范围"); -// excelComments.add(errorMessageMap); -// isError = true; -// } else { -// Optional optionalTaxAgentEmp = employeeList.stream().filter(f -> f.getEmployeeId().equals(importHandleParam.getEmployeeId())).findFirst(); -// if (!optionalTaxAgentEmp.isPresent()) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "该条数据不在个税扣缴义务人人员范围内,不可导入"); -// excelComments.add(errorMessageMap); -// isError = true; -// } -// } -// -// } -// } -// -// if (effectiveTime != null && finalSalaryArchive != null) { -// boolean isBeforeError = false; -// if (!isInit) { -// // 前后调整校验 -// // 已生效 -// List effectiveList = importHandleParam.getEffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).collect(Collectors.toList()); -// // 当前已生效 -// SalaryArchiveTaxAgentPO effectiveTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; -// // 当前已生效的前一次调整 -// SalaryArchiveTaxAgentPO effectiveBeforeTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; -// // 未生效 -// Optional optionalIneffective = importHandleParam.getIneffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).findFirst(); -// SalaryArchiveTaxAgentPO ineffectiveTaxAgent = optionalIneffective.orElse(null); -// // 1.检验是否可以调整 -// if (effectiveTaxAgent != null) { -// // 当前已经生效的时间 -// Date currentEffectiveTime = effectiveTaxAgent.getEffectiveTime(); -// // 1.1 如果早于<当前已生效 -// if (effectiveTime.before(currentEffectiveTime)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人生效日期不可早于当前已生效的调整日期"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); -// isError = true; -// isBeforeError = true; -// // 1.2 如果等于当前已生效 -// } else if (effectiveTime.equals(currentEffectiveTime)) { -// if (effectiveBeforeTaxAgent != null && effectiveBeforeTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人调整前后不可相同"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人与未生效的调整后不可相同"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.3 如果>已经生效且<=今天 -// } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { -// if (effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人调整前后不可相同"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人与未生效的调整后不可相同"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.4 如果>今天 -// } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人调整前后不可相同"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// } else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + "个税扣缴义务人与未生效的调整后不可相同"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// -// -// // 2.数据处理,有的就先删后增 -// if (effectiveTaxAgent != null && effectiveTime.equals(effectiveTaxAgent.getEffectiveTime())) { -// importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds().add(effectiveTaxAgent.getId()); -// } -// if (ineffectiveTaxAgent != null && effectiveTime.after(importHandleParam.getToday())) { -// importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds().add(ineffectiveTaxAgent.getId()); -// } -// } -// if (!isBeforeError) { -// importHandleParam.getSalaryArchiveTaxAgentSaves().add(SalaryArchiveTaxAgentPO.builder().salaryArchiveId(finalSalaryArchive.getId()).employeeId(finalSalaryArchive.getEmployeeId()).taxAgentId(taxAgentId).effectiveTime(effectiveTime).adjustReason(StringUtils.isEmpty(taxAgentAdjustReason) ? SalaryArchiveTaxAgentAdjustReasonEnum.INIT.getValue() : taxAgentAdjustReason).operator((long) user.getUID()).operateTime(importHandleParam.getNowTime()).createTime(importHandleParam.getNowTime()).updateTime(importHandleParam.getNowTime()).creator((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build()); -// } -// } - return isError; - } - - /** - * 薪资项目处理 - * - * @param isError - * @param excelComments - * @param effectiveTime - * @param finalSalaryArchive - * @param salaryItemAdjustReason - * @param importHandleParam - * @param cellVal - * @return - */ - private boolean handleSalaryItem(boolean isError, boolean isInit, List> excelComments, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, String key, String cellVal, Map map) { -// String rowindex = "第" + map.get("index") + "行"; -// Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); -// if (optionalSalaryItem.isPresent()) { -// Long salaryItemId = optionalSalaryItem.get().getId(); -// boolean isBeforeError = false; -// if (!isInit) { -// // 已生效 -// List effectiveList = importHandleParam.getEffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).collect(Collectors.toList()); -// // 当前已生效 -// SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; -// // 当前已生效的前一次调整 -// SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; -// // 未生效 -// Optional optionalIneffective = importHandleParam.getIneffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).findFirst(); -// SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); -// -// // 1.检验是否可以调整 -// if (effectiveSalaryItem != null) { -// // 当前已经生效的时间 -// Date currentEffectiveTime = effectiveSalaryItem.getEffectiveTime(); -// // 1.1 如果早于<当前已生效 -// if (effectiveTime.before(currentEffectiveTime)) { -// Map errorMessageMap = Maps.newHashMap(); -// errorMessageMap.put("message", rowindex + key + "生效日期不可早于当前已生效的调整日期"); -// excelComments.add(errorMessageMap); -//// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); -// isError = true; -// isBeforeError = true; -// // 1.2 如果等于当前已生效 -// } else if (effectiveTime.equals(currentEffectiveTime)) { -// if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) { -//// Map errorMessageMap = Maps.newHashMap(); -//// errorMessageMap.put("message", rowindex + key + "调整前后不可相同"); -//// excelComments.add(errorMessageMap); -////// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -//// isError = true; -// } -// if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -//// Map errorMessageMap = Maps.newHashMap(); -//// errorMessageMap.put("message", rowindex + key + "与未生效的调整后不可相同"); -//// excelComments.add(errorMessageMap); -////// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -//// isError = true; -// } -// // 1.3 如果>已经生效且<=今天 -// } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { -// if (effectiveSalaryItem.getItemValue().equals(cellVal)) { -//// Map errorMessageMap = Maps.newHashMap(); -//// errorMessageMap.put("message", rowindex + key + "调整前后不可相同"); -//// excelComments.add(errorMessageMap); -////// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -//// isError = true; -// } -// if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -//// Map errorMessageMap = Maps.newHashMap(); -//// errorMessageMap.put("message", rowindex + key + "与未生效的调整后不可相同"); -//// excelComments.add(errorMessageMap); -////// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -//// isError = true; -// } -// // 1.4 如果>今天 -// } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveSalaryItem.getItemValue().equals(cellVal)) { -//// Map errorMessageMap = Maps.newHashMap(); -//// errorMessageMap.put("message", rowindex + key + "调整前后不可相同"); -//// excelComments.add(errorMessageMap); -////// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -//// isError = true; -// } -// } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -//// Map errorMessageMap = Maps.newHashMap(); -//// errorMessageMap.put("message", rowindex + key + "与未生效的调整后不可相同"); -//// excelComments.add(errorMessageMap); -////// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -//// isError = true; -// } -// // 2.数据处理 -// if (effectiveSalaryItem != null && effectiveTime.equals(effectiveSalaryItem.getEffectiveTime())) { -// importHandleParam.getSalaryArchiveItemDelSalaryItemIds().add(effectiveSalaryItem.getId()); -// } -// if (ineffectiveSalaryItem != null && effectiveTime.after(importHandleParam.getToday())) { -// importHandleParam.getSalaryArchiveItemDelSalaryItemIds().add(ineffectiveSalaryItem.getId()); -// } -// } -// if (!isBeforeError) { -// importHandleParam.getSalaryArchiveItemSaves().add(SalaryArchiveItemPO.builder().salaryArchiveId(finalSalaryArchive.getId()).employeeId(finalSalaryArchive.getEmployeeId()).effectiveTime(effectiveTime).adjustReason(StringUtils.isEmpty(salaryItemAdjustReason) ? SalaryArchiveItemAdjustReasonEnum.INIT.getValue() : salaryItemAdjustReason).salaryItemId(salaryItemId).itemValue(cellVal).description("").operator((long) user.getUID()).operateTime(importHandleParam.getNowTime()).createTime(importHandleParam.getNowTime()).updateTime(importHandleParam.getNowTime()).creator((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build()); -// } -// // 用于初始化导入,同一个人的多行记录之间的薪资项目是否调整 -// map.put("salaryItemVal", Optional.ofNullable(map.get("salaryItemVal")).orElse("").toString() + salaryItemId + cellVal); -// } - return isError; - } - - - /** - * 字符串转日期 - * 兼容/和- - * - * @param effectiveTime - * @return - */ - private Date dateStrToLocalDate(String effectiveTime) { - Date localDate = null; - try { - if (effectiveTime.contains("/")) { - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - localDate = format.parse(effectiveTime); - } else if (effectiveTime.contains("-")) { - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - localDate = format.parse(effectiveTime); - } - } catch (Exception e) { - localDate = null; - } - - return localDate; - } - - private List getEffectiveItemList(Collection salaryItemIds) { - long currentEmployeeId = user.getUID(); - // 没有薪资项目时,给个不存在的,否则加载所有不合理 - if (CollectionUtils.isEmpty(salaryItemIds)) { - return new ArrayList<>(); - } - Date truncate = DateUtils.truncate(new Date(), Calendar.DATE); - return salaryArchiveItemMapper.getEffectiveSalaryItems(SalaryArchiveItemQueryParam.builder().effectiveTime(truncate).salaryItemIds(salaryItemIds).build()); - } - - private List getIneffectiveItemList(Collection salaryItemIds) { - long currentEmployeeId = user.getUID(); - // 没有薪资项目时,给个不存在的,否则加载所有不合理 - if (CollectionUtils.isEmpty(salaryItemIds)) { - return new ArrayList<>(); - } - Date truncate = DateUtils.truncate(new Date(), Calendar.DATE); - return salaryArchiveItemMapper.getIneffectiveSalaryItems(SalaryArchiveItemQueryParam.builder().salaryItemIds(salaryItemIds).effectiveTime(truncate).build()); - } - private List getEffectiveTaxAgentList() { Date truncate = DateUtils.truncate(new Date(), Calendar.DATE); return salaryArchiveTaxAgentMapper.getEffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam.builder().effectiveTime(truncate).build()); @@ -1882,145 +788,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } - /** - * 检查列头 - * - * @param headers - * @return - */ - private boolean checkHeaders(SalaryArchiveImportHandleParam importHandleParam, List headers) { - boolean isValid = true; - - String userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); - String taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); - String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); - String payStartDateI18n = SalaryI18nUtil.getI18nLabel(85904, "起始发薪日期"); - String payEndDateI18n = SalaryI18nUtil.getI18nLabel(85904, "最后发薪日期"); - String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); - - List mustHeaders = Lists.newArrayList(); - - - mustHeaders.add(userNameI18n); - mustHeaders.add(taxAgentI18n); -// mustHeaders.add(incomeCategoryI18n); -// mustHeaders.add(salarySobI18n); - if (importHandleParam.isPendingList()) { - mustHeaders.add(payStartDateI18n); - mustHeaders.add(payEndDateI18n); - } else if (importHandleParam.isFixedList()) { - if (importHandleParam.isInit()) { - mustHeaders.add(payStartDateI18n); - mustHeaders.add(payEndDateI18n); -// mustHeaders.add(effectiveTimeI18n); - } else if (importHandleParam.isSalaryItemAdjust()) { - mustHeaders.add(adjustReasonI18n); - mustHeaders.add(effectiveTimeI18n); - } - } else if (importHandleParam.isSuspendList()) { - mustHeaders.add(payEndDateI18n); - } - - // 缺少的必须列 - List lackHeaders = mustHeaders.stream().filter(item -> !headers.contains(item)).collect(Collectors.toList()); - - String errorMsg = ""; - String checkHeaderI18n = SalaryI18nUtil.getI18nLabel(101850, "缺少如下列,请检查:"); - if (CollectionUtils.isNotEmpty(lackHeaders)) { - errorMsg = checkHeaderI18n + Joiner.on(",").join((Iterable) lackHeaders); - } - - // 有错误信息发送 - if (StringUtils.isNotEmpty(errorMsg)) { - throw new SalaryRunTimeException(errorMsg); - } - return isValid; - } - - /** - * 数据落库处理 - * - * @param importHandleParam - */ - private void handleImportData(SalaryArchiveImportHandleParam importHandleParam) { - -// List salaryArchiveSaves = importHandleParam.getSalaryArchiveSaves(); -// List salaryArchiveUpdates = importHandleParam.getSalaryArchiveUpdates(); -// List salaryArchiveItemSaves = importHandleParam.getSalaryArchiveItemSaves(); -// List salaryArchiveItemDelSalaryItemIds = importHandleParam.getSalaryArchiveItemDelSalaryItemIds(); -// // 初始化导入 -// if (isInit) { -// List salaryArchiveItemIds = importHandleParam.getSalaryArchiveItemSaves().stream().map(SalaryArchiveItemPO::getSalaryArchiveId).distinct().collect(Collectors.toList()); -// -// List salaryArchiveIds = salaryArchiveItemIds; -// if (CollectionUtils.isNotEmpty(salaryArchiveIds)) { -// List> partitionSalaryArchiveIds = Lists.partition(salaryArchiveIds, 1000); -// for (List partitions : partitionSalaryArchiveIds) { -// salaryArchiveTaxAgentMapper.deleteBySalaryArchiveId(partitions); -// salaryArchiveItemMapper.deleteBySalaryArchiveId(partitions); -// } -// } -// } else { -// if (CollectionUtils.isNotEmpty(salaryArchiveItemDelSalaryItemIds)) { -// salaryArchiveItemMapper.deleteBatchIds(salaryArchiveItemDelSalaryItemIds); -// } -// } -// -// // 修改薪资档案 -// if (isInit && CollectionUtils.isNotEmpty(salaryArchiveUpdates)) { -// salaryArchiveUpdates.forEach(getSalaryArchiveMapper()::update); -// } -// -// // 新增薪资档案 -// if (CollectionUtils.isNotEmpty(salaryArchiveSaves)) { -// // 薪资档案 -// salaryArchiveMapper.batchInsert(salaryArchiveSaves); -// } -// // 薪资档案-薪资项目 -// if (CollectionUtils.isNotEmpty(salaryArchiveItemSaves)) { -// salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves); -// } -// - - - List salaryArchiveSaves = importHandleParam.getSalaryArchiveSaves(); - List salaryArchiveUpdates = importHandleParam.getSalaryArchiveUpdates(); - List salaryArchiveItemSaves = importHandleParam.getSalaryArchiveItemSaves(); - List salaryArchiveItemDelSalaryItemIds = importHandleParam.getSalaryArchiveItemDelSalaryItemIds(); -// List salaryArchiveSobSaves = importHandleParam.getSalaryArchiveSobSaves(); - // 新增薪资档案 - if (CollectionUtils.isNotEmpty(salaryArchiveSaves)) { - // 去除已经存在的,避免重复 - if (CollectionUtils.isNotEmpty(salaryArchiveUpdates)) { - List salaryArchiveUpdateIds = salaryArchiveUpdates.stream().map(SalaryArchivePO::getId).distinct().collect(Collectors.toList()); - salaryArchiveSaves = salaryArchiveSaves.stream().filter(save -> !salaryArchiveUpdateIds.contains(save.getId())).collect(Collectors.toList()); - } - // 薪资档案 - salaryArchiveMapper.batchInsert(salaryArchiveSaves); - } - // 修改薪资档案 - if (CollectionUtils.isNotEmpty(salaryArchiveUpdates)) { - // 薪资档案 - salaryArchiveMapper.batchUpdate(salaryArchiveUpdates); - } - // 薪资档案-薪资项目 - if (CollectionUtils.isNotEmpty(salaryArchiveItemDelSalaryItemIds)) { - salaryArchiveItemMapper.deleteBatchIds(salaryArchiveItemDelSalaryItemIds); - } - // 薪资档案-薪资项目 - if (CollectionUtils.isNotEmpty(salaryArchiveItemSaves)) { - salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves); - } - - // 薪资档案-薪资账套 -// salaryArchiveSaves.addAll(salaryArchiveUpdates); -// List salaryArchiveIds = salaryArchiveSaves.stream().map(SalaryArchivePO::getId).distinct().collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(salaryArchiveIds) && CollectionUtils.isNotEmpty(salaryArchiveSaves)) { -// this.salaryArchiveSobService.saveBatchBySalaryArchiveIdsAndSaves(salaryArchiveIds, salaryArchiveSobSaves, message.getTenantKey()); -// } - - } - /** * 处理历史数据 * 下回发版可删除 diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index b3ff5f3ec..a7724f325 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -510,9 +510,9 @@ public class SalaryArchiveController { @POST @Path("/importSalaryArchive") @Produces(MediaType.APPLICATION_JSON) - public String importSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Map importParam) { + public String importSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportHandleParam importParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult, Map>(user).run(getSalaryArchiveWrapper(user)::importSalaryArchive, importParam); + return new ResponseResult>(user).run(getSalaryArchiveWrapper(user)::importSalaryArchive, importParam); } //人员状态列表 diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 989d1077d..596808e3a 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -486,7 +486,7 @@ public class SalaryArchiveWrapper extends Service { * @param param * @return */ - public Map importSalaryArchive(Map param) { + public Map importSalaryArchive(SalaryArchiveImportHandleParam param) { return getSalaryArchiveExcelService(user).batchImportEbatch(param); } @@ -509,7 +509,7 @@ public class SalaryArchiveWrapper extends Service { param.setImageId(rs.getString("imagefileid")); } } - return getSalaryArchiveService(user).importSalaryArchive(param, false); + return getSalaryArchiveExcelService(user).batchImportEbatch(param); } @@ -520,7 +520,8 @@ public class SalaryArchiveWrapper extends Service { * @return */ public Map checkImportSalaryArchiveParam(SalaryArchiveImportHandleParam param) { - return getSalaryArchiveService(user).importSalaryArchive(param, false); + param.setOnlyCheck(true); + return getSalaryArchiveExcelService(user).batchImportEbatch(param); } /** @@ -546,20 +547,28 @@ public class SalaryArchiveWrapper extends Service { } + public Map checkSalaryArchiveInit(SalaryArchiveImportActionParam importData) { + importData.setImportType("init"); + importData.setListType("FIXED"); + importData.setAddData(false); + return getSalaryArchiveExcelService(user).processInit(importData); + } + public Map importSalaryArchiveInit(SalaryArchiveImportActionParam importData) { - return getSalaryArchiveService(user).importSalaryArchiveAction(importData, importData.isAddData()); + importData.setImportType("init"); + importData.setListType("FIXED"); + importData.setAddData(true); + return getSalaryArchiveExcelService(user).processInit(importData); } - public Map importSalaryArchiveSalaryItemAdjust(SalaryArchiveImportActionParam importData) { - importData.setImportType("salaryItemAdjust"); - return getSalaryArchiveService(user).importSalaryArchiveAction(importData, false); - } +// public Map importSalaryArchiveSalaryItemAdjust(SalaryArchiveImportActionParam importData) { +// importData.setListType("FIXED"); +// importData.setImportType("salaryItemAdjust"); +// importData.setAddData(true); +// return getSalaryArchiveExcelService(user).processInit(importData); +// } - public Map importSalaryArchiveTaxAgentAdjust(SalaryArchiveImportActionParam importData) { - importData.setImportType("taxAgentAdjust"); - return getSalaryArchiveService(user).importSalaryArchiveAction(importData, false); - } /** * 停薪