From a0bc3b545278b034e5f94dbf9041b4f6f4bd9666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 17:32:02 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctExcelServiceImpl.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 75b63245c..c7f3be70b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -71,6 +71,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; +import org.springframework.util.StopWatch; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -1036,6 +1037,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } private Map batchImport(SalaryAcctImportParam param, String importType) { + StopWatch stopWatch = new StopWatch("导入核算数据"); + stopWatch.start("数据准备"); Map apidatas = new HashMap(); ValidUtil.doValidator(param); Date now = new Date(); @@ -1053,27 +1056,38 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (salaryAcctRecordPO == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } + stopWatch.stop(); // 薪资账套下的薪资项目副本 + stopWatch.start("薪资账套下的薪资项目副本"); List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); // 薪资项目 Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getName, SalaryItemPO::getId); + stopWatch.stop(); // 薪资核算确认的人员 + stopWatch.start("薪资核算确认的人员"); List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId); Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, e -> e.getEmployeeId() + "-" + e.getTaxAgentId()); + stopWatch.stop(); // 租户下所有的人员 + stopWatch.start("薪资核算确认的人员"); List salaryEmployees = getSalaryEmployeeService(user).listAllForReport(); Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); Map emps = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getEmployeeId); + stopWatch.stop(); // 租户下所有的个税扣缴义务人 + stopWatch.start("租户下所有的个税扣缴义务人"); List taxAgents = getTaxAgentService(user).listAll(); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); + stopWatch.stop(); // 薪资核算人员信息字段 + stopWatch.start("薪资核算人员信息字段"); List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); List salarySobEmpFields = SalaryEntityUtil.properties(new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS), SalarySobEmpFieldDTO::getFieldName, Collectors.toList()); List excludeFields = Arrays.asList("个税扣缴义务人", "部门", "姓名"); salarySobEmpFields = salarySobEmpFields.stream().filter(field -> !excludeFields.contains(field)).collect(Collectors.toList()); + stopWatch.stop(); // 索引(用于计算进度) int index = 0; // 失败的数量 @@ -1103,10 +1117,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); - + stopWatch.start("解析文件"); Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX); Sheet sheet = workbook.getSheetAt(0); - + stopWatch.stop(); // 错误提示信息 List excelComments = Lists.newArrayList(); @@ -1136,6 +1150,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (CollectionUtils.isEmpty(data)) { throw new RuntimeException("无数据"); } + stopWatch.start("解析数据"); for (int i = 0; i < data.size(); i++) { String row = "第" + (i + 3) + "行"; @@ -1365,10 +1380,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } successCount++; } + stopWatch.stop(); // 如果sheet包含错误数据 // if (CollectionUtils.isNotEmpty(errorDatas)) { // salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets); // } + stopWatch.start("插入数据"); if (StringUtils.equals("importExcelAcctResult", importType)) { getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); if (CollectionUtils.isNotEmpty(excelAcctResults)) { @@ -1421,6 +1438,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); } } + stopWatch.stop(); + stopWatch.start("锁定数据"); SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); if (autoLock != null && StringUtils.equals(autoLock.getConfValue(), "1")) { // 导入的列都自动锁定 @@ -1430,6 +1449,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc .lockStatus(LockStatusEnum.LOCK).build(); getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); } + stopWatch.stop(); + log.info(stopWatch.prettyPrint()); apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); From 6ec7210720582d3a58be522ea557f7e8a0d1fe54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 15 Oct 2024 14:40:04 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E9=99=A4=E5=8E=BB=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index c7f3be70b..7b0d21ffe 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1139,7 +1139,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - data = ExcelParseHelper.parse2Map(workbook, 0, 2, 1); + data = ExcelParseHelper.parse2Map(sheet, 2, 1); // } else { // data = ExcelParseHelper.parse2Map(sheet, 1); // } From 0d100d9f537f4e4c6305d5098469318568ab7970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Oct 2024 10:20:58 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=88=86=E9=83=A8=E6=9D=A1=E4=BB=B6=E8=BF=87=E6=BB=A4=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctEmployeeServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 0dce7dbda..47170d989 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -695,7 +695,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct if (isRealOrg) { employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList()); } else { - list.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyId())).collect(Collectors.toList()); + list = list.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyId())).collect(Collectors.toList()); } } From 38f773d125662ea415f79e7fc73216387d82f703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Oct 2024 14:07:27 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=95=88=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctExcelServiceImpl.java | 71 ++++++++----------- .../impl/SalaryAcctResultServiceImpl.java | 66 +++++++++-------- 2 files changed, 62 insertions(+), 75 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 7b0d21ffe..4acdc3e02 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -58,11 +58,9 @@ import com.engine.salary.wrapper.SalarySobItemWrapper; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import com.wbi.util.Util; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; - import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.ss.usermodel.FormulaEvaluator; @@ -70,7 +68,6 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.beans.BeanUtils; import org.springframework.util.StopWatch; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -1272,19 +1269,19 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc salaryAcctResultsOfOneEmp.add(salaryAcctResult); - SalaryAcctResultReportPO reportPO = SalaryAcctResultReportPO.builder() - .id(IdGenerator.generate()) - .salaryAcctRecordId(salaryAcctRecordPO.getId()) - .salarySobId(salaryAcctRecordPO.getSalarySobId()) - .salaryItemId(salaryItemId) - .resultValue(dataValue) - .creator(currentEmployeeId) - .createTime(now) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - salaryAcctResultReportOfOneEmp.add(reportPO); +// SalaryAcctResultReportPO reportPO = SalaryAcctResultReportPO.builder() +// .id(IdGenerator.generate()) +// .salaryAcctRecordId(salaryAcctRecordPO.getId()) +// .salarySobId(salaryAcctRecordPO.getSalarySobId()) +// .salaryItemId(salaryItemId) +// .resultValue(dataValue) +// .creator(currentEmployeeId) +// .createTime(now) +// .updateTime(now) +// .deleteType(0) +// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) +// .build(); +// salaryAcctResultReportOfOneEmp.add(reportPO); } } } @@ -1361,22 +1358,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); } - for (SalaryAcctResultReportPO po : salaryAcctResultReportOfOneEmp) { - po.setEmployeeId(Util.null2String(employeeId)); - po.setTaxAgentId(taxAgentId); - po.setSalaryAcctEmpId(Util.null2String(salaryAcctEmpId)); - - DataCollectionEmployee emp = emps.get(employeeId); - po.setSubcompanyId(emp.getSubcompanyid()); - po.setDepartmentId(emp.getDepartmentId()); - po.setCostcenterId(emp.getCostcenterId()); - po.setJobtitleId(emp.getJobtitleId()); - po.setLocationId(emp.getLocationId()); - - } +// for (SalaryAcctResultReportPO po : salaryAcctResultReportOfOneEmp) { +// po.setEmployeeId(Util.null2String(employeeId)); +// po.setTaxAgentId(taxAgentId); +// po.setSalaryAcctEmpId(Util.null2String(salaryAcctEmpId)); +// +// DataCollectionEmployee emp = emps.get(employeeId); +// po.setSubcompanyId(emp.getSubcompanyid()); +// po.setDepartmentId(emp.getDepartmentId()); +// po.setCostcenterId(emp.getCostcenterId()); +// po.setJobtitleId(emp.getJobtitleId()); +// po.setLocationId(emp.getLocationId()); +// +// } salaryAcctEmpIds.add(salaryAcctEmpId); salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); - salaryAcctReports.addAll(salaryAcctResultReportOfOneEmp); +// salaryAcctReports.addAll(salaryAcctResultReportOfOneEmp); } successCount++; } @@ -1409,16 +1406,9 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (CollectionUtils.isNotEmpty(salaryAcctResults)) { // 处理导入薪资项的回算值 handleOriginResultValue(deleteResults, salaryAcctResults); - // 备份一份加密前的值 - List list4log = new ArrayList<>(); - salaryAcctResults.stream().forEach(source -> { - SalaryAcctResultPO target = new SalaryAcctResultPO(); - BeanUtils.copyProperties(source, target); - list4log.add(target); - }); getSalaryAcctResultService(user).batchSave(salaryAcctResults); - // 记录操作日志 TODO 这里的数据没有id,id是自增的重新查数据太多效率太低 + // 记录操作日志 SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()); LoggerContext loggerContext = new LoggerContext<>(); @@ -1428,11 +1418,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据 ") + targetName); - loggerContext.setOldValueList(list4log); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); - //报表 - getSalaryAcctReportService(user).batchSave(salaryAcctReports); +// //报表 +// getSalaryAcctReportService(user).batchSave(salaryAcctReports); } if (CollectionUtils.isNotEmpty(newSalaryAcctEmployees)) { getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 61320e5e3..67f31f4ef 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -17,7 +17,6 @@ import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.progress.ProgressDTO; -import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.*; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; @@ -52,7 +51,6 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -682,12 +680,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List> partition = Lists.partition(salaryAcctResultPOS, 100); partition.forEach(getSalaryAcctResultMapper()::batchInsert); } - //报表 todo - getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(saveParam.getSalaryAcctEmpId()), saveItemIds); - List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2PO(saveParam, salaryAcctEmployeePO, (long) user.getUID(), emps); - if (CollectionUtils.isNotEmpty(salaryAcctResultReportPOS)) { - getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); - } + //报表 +// getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(saveParam.getSalaryAcctEmpId()), saveItemIds); +// List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2PO(saveParam, salaryAcctEmployeePO, (long) user.getUID(), emps); +// if (CollectionUtils.isNotEmpty(salaryAcctResultReportPOS)) { +// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); +// } // 存储薪资核算结果数据来源日志 @@ -1189,30 +1187,30 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } // 报表 - SalaryAcctResultReportPO po = SalaryAcctResultReportPO.builder() - .id(IdGenerator.generate()) - .salarySobId(salaryAcctRecordPO.getSalarySobId()) - .salaryItemId(param.getSalaryItemId()) - .salaryAcctRecordId(param.getSalaryAcctRecordId()) - .salaryAcctEmpId(salaryAcctEmployeePO.getId().toString()) - .employeeId(salaryAcctEmployeePO.getEmployeeId().toString()) - .taxAgentId(salaryAcctEmployeePO.getTaxAgentId()) - .resultValue(param.getValue()) - .creator(Long.valueOf(user.getUID())) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - DataCollectionEmployee dataCollectionEmployee = emps.get(salaryAcctEmployeePO.getEmployeeId()); - if (dataCollectionEmployee != null) { - po.setDepartmentId(dataCollectionEmployee.getDepartmentId()); - po.setSubcompanyId(dataCollectionEmployee.getSubcompanyid()); - po.setCostcenterId(dataCollectionEmployee.getCostcenterId()); - po.setJobtitleId(dataCollectionEmployee.getJobtitleId()); - po.setLocationId(dataCollectionEmployee.getLocationId()); - } - salaryAcctResultReportPOS.add(po); +// SalaryAcctResultReportPO po = SalaryAcctResultReportPO.builder() +// .id(IdGenerator.generate()) +// .salarySobId(salaryAcctRecordPO.getSalarySobId()) +// .salaryItemId(param.getSalaryItemId()) +// .salaryAcctRecordId(param.getSalaryAcctRecordId()) +// .salaryAcctEmpId(salaryAcctEmployeePO.getId().toString()) +// .employeeId(salaryAcctEmployeePO.getEmployeeId().toString()) +// .taxAgentId(salaryAcctEmployeePO.getTaxAgentId()) +// .resultValue(param.getValue()) +// .creator(Long.valueOf(user.getUID())) +// .createTime(now) +// .updateTime(now) +// .deleteType(NumberUtils.INTEGER_ZERO) +// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) +// .build(); +// DataCollectionEmployee dataCollectionEmployee = emps.get(salaryAcctEmployeePO.getEmployeeId()); +// if (dataCollectionEmployee != null) { +// po.setDepartmentId(dataCollectionEmployee.getDepartmentId()); +// po.setSubcompanyId(dataCollectionEmployee.getSubcompanyid()); +// po.setCostcenterId(dataCollectionEmployee.getCostcenterId()); +// po.setJobtitleId(dataCollectionEmployee.getJobtitleId()); +// po.setLocationId(dataCollectionEmployee.getLocationId()); +// } +// salaryAcctResultReportPOS.add(po); }); // 入库 @@ -1225,8 +1223,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe batchSave(needInsertList); // 报表入库前先删除 - getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(param.getIdList(), Collections.singletonList(param.getSalaryItemId())); - getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); +// getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(param.getIdList(), Collections.singletonList(param.getSalaryItemId())); +// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); } } From cede931b0d0ffb2038a7f3799215e04dddc6595d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Oct 2024 14:21:46 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index beede61ad..73a128f3e 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=2.15.2.2409.01 +version=2.16.1.2410.01 openFormulaForcedEditing=false \ No newline at end of file From be2d6b693a67924bd12da2e3bac98d59722c2a49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Oct 2024 18:27:37 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E9=94=81?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctCalculateBO.java | 8 --- .../salaryacct/bo/SalaryAcctResultBO.java | 2 + .../param/SalaryAcctResultLockParam.java | 34 ++++++++++ .../salaryacct/po/SalaryAcctEmployeePO.java | 5 ++ .../salaryacct/po/SalaryAcctRecordPO.java | 1 + .../salaryacct/SalaryAcctManager.java | 22 ++---- .../salaryacct/SalaryAcctEmployeeMapper.java | 2 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 15 +++- .../service/SalaryAcctEmployeeService.java | 2 + .../service/SalaryAcctResultService.java | 7 ++ .../impl/SalaryAcctCalculateServiceImpl.java | 10 +-- .../impl/SalaryAcctEmployeeServiceImpl.java | 40 +++++++---- .../impl/SalaryAcctResultServiceImpl.java | 68 ++++++++++--------- .../salary/web/SalaryAcctController.java | 8 +++ .../wrapper/SalaryAcctResultWrapper.java | 5 ++ 15 files changed, 153 insertions(+), 76 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLockParam.java diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index afba2a327..e0a777bcd 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -4,7 +4,6 @@ import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.datacollection.po.VariableItemPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; -import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; @@ -49,13 +48,6 @@ public class SalaryAcctCalculateBO { */ private SalarySobCycleDTO salarySobCycleDTO; - /** - * 核算锁定值 - */ - private Map salaryAcctLockResultPOS; - private List lockSalaryItemIds; - - /** * 相同税款所属期内其他薪资核算记录(薪资类型为工资薪金的账套的) */ diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index ef1dcca05..7cf9c3aff 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -318,6 +318,8 @@ public class SalaryAcctResultBO { map.put("id", e.getId()); //锁定状态 map.put("lockStatus", LockStatusEnum.getByValue(e.getLockStatus()).getDefaultLabel()); + //锁定数据 + map.put("lockItems", e.getLockItems()); //人员id map.put("employeeId", e.getEmployeeId()); // 个税扣缴义务人 diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLockParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLockParam.java new file mode 100644 index 000000000..555411825 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLockParam.java @@ -0,0 +1,34 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.enums.salaryaccounting.LockStatusEnum; +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 薪资数据单元格锁定 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SalaryAcctResultLockParam { + //锁定状态 + @DataCheck(require = true,message = "锁定状态不能为空") + private LockStatusEnum lockStatus; + + //薪资核算人员Id + @DataCheck(require = true,message = "薪资核算人员不能为空") + private Long acctEmpId; + + //薪资项目的Id + @DataCheck(require = true,message = "薪资项目不能为空") + private Long salaryItemId; +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index d86941b8b..3645db6fc 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -12,6 +12,7 @@ import lombok.experimental.Accessors; import java.util.Collection; import java.util.Date; +import java.util.List; /** * 薪资核算人员 @@ -110,6 +111,7 @@ public class SalaryAcctEmployeePO { private Date updateTime; + @Deprecated @ElogTransform(name = "锁定状态") private Integer lockStatus; @@ -142,6 +144,9 @@ public class SalaryAcctEmployeePO { */ private String status; + //锁定的项目 + private List lockItems; + //--------条件---------- //主键id集合 diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index d2f089f21..26cd0b3c4 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -126,6 +126,7 @@ public class SalaryAcctRecordPO { /** * 锁定的薪资项目 */ + @Deprecated private List lockSalaryItemIds; //查询条件------------------------------- diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index 78392dfd4..289b898bd 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -261,8 +261,11 @@ public class SalaryAcctManager extends Service { // 7、查询考勤引用的所有字段 List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); -// //核算锁定值 -// List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); + //fixme 先全部锁定 + +// //将除重新核算的项目外的所有的值都锁定 +// List salaryItemIds = calculateParam.getSalaryItemIds(); +// List lockSalaryItemIds = salaryItemPOS.stream().map(SalaryItemPO::getId).filter(id -> !salaryItemIds.contains(id)).collect(Collectors.toList()); // Map acctResults = new HashMap<>(); // if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { // List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); @@ -273,19 +276,6 @@ public class SalaryAcctManager extends Service { // .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); // } - //将除重新核算的项目外的所有的值都锁定 - List salaryItemIds = calculateParam.getSalaryItemIds(); - List lockSalaryItemIds = salaryItemPOS.stream().map(SalaryItemPO::getId).filter(id -> !salaryItemIds.contains(id)).collect(Collectors.toList()); - Map acctResults = new HashMap<>(); - if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { - List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); - acctResults = Optional.ofNullable(acctResultPOS) - .orElse(new ArrayList<>()) - .stream() - .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) - .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); - } - // 8、查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); @@ -323,8 +313,6 @@ public class SalaryAcctManager extends Service { .setSalarySobPO(salarySobPO) .setSalarySobCycleDTO(salarySobCycleDTO) .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) - .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) - .setLockSalaryItemIds(lockSalaryItemIds) .setSalarySobItemPOS(salarySobItemPOS) .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) .setExpressFormulas(expressFormulas) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java index 84b16591c..a7f66818a 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java @@ -124,4 +124,6 @@ public interface SalaryAcctEmployeeMapper { void lockByRecordId(@Param("lockStatus") Integer lockStatus, @Param("recordId") Long recordId); void updateIgnoreNull(@Param("salaryAcctEmployeePO")SalaryAcctEmployeePO salaryAcctEmployeePO); + + void lock(SalaryAcctEmployeePO salaryAcctEmployeePO); } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 86781c4d3..6cede4796 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -25,6 +25,7 @@ + @@ -966,6 +968,7 @@ + @@ -994,6 +997,7 @@ , t.jobcall , t.jobcall_id , t.status + , t.lock_items @@ -1166,4 +1170,13 @@ WHERE id = #{salaryAcctEmployeePO.id} AND delete_type = 0 + + UPDATE hrsa_salary_acct_emp + + lock_items = + #{lockItems, jdbcType=ARRAY, typeHandler=com.engine.salary.handle.SalaryListTypeHandler}, + + WHERE id = #{id} AND delete_type = 0 + + diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index 6c506cb04..f2647df1b 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -267,4 +267,6 @@ public interface SalaryAcctEmployeeService { * @param salaryAcctEmployeePO */ void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO); + + void lock(SalaryAcctEmployeePO salaryAcctEmployeePO); } diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 7c8e8a00f..ea6c2fe30 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -157,6 +157,13 @@ public interface SalaryAcctResultService { */ List listBySalaryAcctRecordIdsAndTaxAgentIds(Collection salaryAcctRecordIds, Collection taxAgentIds); + /** + * 锁定单元格 + * @param param + */ + void lock(SalaryAcctResultLockParam param); + + /** * 锁定项目 * diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index c7cce5da7..ee7588545 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -31,7 +31,6 @@ import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.util.StopWatch; @@ -162,6 +161,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc sw.start("查询薪资核算人员的薪资核算结果"); List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + Map empItemValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOS, p -> p.getSalaryAcctEmpId() + "_" + p.getSalaryItemId(), SalaryAcctResultPO::getResultValue); sw.stop(); // 查询浮动薪资 sw.start("查询浮动薪资"); @@ -174,8 +174,6 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc for (Map.Entry> et : collect.entrySet()) { salaryAcctResultPOMap.put(et.getKey(), et.getValue().get(0).getOriginResultValue()); } - //核算锁定的值 - Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); sw.stop(); // 9、查询相同税款所属期内涉及合并计税的其他薪资核算结果 sw.start("查询相同税款所属期内涉及合并计税的其他薪资核算结果"); @@ -210,6 +208,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc StringBuffer noticeMsg = new StringBuffer(); for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId(); + List lockItems = salaryAcctEmployeePO.getLockItems(); //1 获取当前薪资核算人员的公式中的变量的值 List formulaVarValues = formulaVarMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()); //2 人员信息 @@ -272,9 +271,10 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 处理小数点 resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO, salarySobBackItems, salarySobBackItemMap, salaryItemIdKeySalarySobItemPOMap); + //是否锁定 - if (salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId) != null) { - resultValue = salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId).getResultValue(); + if (lockItems != null && lockItems.contains(salaryItemId)) { + resultValue = empItemValueMap.get(salaryAcctEmployeePOId + "_" + salaryItemId); } // 将已经计算过的薪资项目的值转换成公式变量的值添加到集合中 String key = SalaryFormulaReferenceEnum.SALARY_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + salaryItemPO.getCode(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 47170d989..ee0ddc70a 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.param.*; @@ -16,6 +17,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; @@ -108,6 +110,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } + private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { + return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); + } + + private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE)); @Override @@ -769,12 +776,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public void lockEmp(SalaryAcctResultUpdateLockStatusParam updateParam) { - // 查询薪资核算记录 - SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(updateParam.getSalaryAcctRecordId()); - if (CollectionUtils.isEmpty(salaryAcctRecord.getLockSalaryItemIds())) { - salaryAcctRecord.setLockSalaryItemIds(new ArrayList<>()); - } - List salaryAcctEmployees = listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); + List salaryAcctEmployees = listByIds(updateParam.getAcctEmpIds()); if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return; } @@ -784,13 +786,20 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct throw new SalaryRunTimeException("锁定状态异常!"); } - Set acctEmpIds = updateParam.getAcctEmpIds(); - if (CollUtil.isNotEmpty(acctEmpIds)) { - //锁定指定人员 - getSalaryAcctEmployeeMapper().lockByAcctEmpIds(lockStatus.getValue(), acctEmpIds); - } else { - //锁定全部 - getSalaryAcctEmployeeMapper().lockByRecordId(lockStatus.getValue(), updateParam.getSalaryAcctRecordId()); + if (updateParam.getLockStatus() == LockStatusEnum.LOCK){ + SalaryAcctConfig salaryAcctSobConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(updateParam.getSalaryAcctRecordId()); + List salarySobItems = salaryAcctSobConfig.getSalarySobItems(); + List itemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId,Collectors.toList()); + + salaryAcctEmployees.forEach(salaryAcctEmployeePO -> { + salaryAcctEmployeePO.setLockItems(itemIds); + lock(salaryAcctEmployeePO); + }); + }else { + salaryAcctEmployees.forEach(salaryAcctEmployeePO -> { + salaryAcctEmployeePO.setLockItems(new ArrayList<>()); + lock(salaryAcctEmployeePO); + }); } } @@ -798,4 +807,9 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct public void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO) { getSalaryAcctEmployeeMapper().updateIgnoreNull(salaryAcctEmployeePO); } + + @Override + public void lock(SalaryAcctEmployeePO salaryAcctEmployeePO) { + getSalaryAcctEmployeeMapper().lock(salaryAcctEmployeePO); + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 67f31f4ef..2e8258f96 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1,6 +1,5 @@ package com.engine.salary.service.impl; -import cn.hutool.core.collection.CollUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -831,21 +830,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空")); } - - //核算锁定值 - List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); - Map acctResults = new HashMap<>(); - if (CollUtil.isNotEmpty(lockSalaryItemIds)) { - List acctResultPOS = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singleton(calculateParam.getSalaryAcctRecordId()), lockSalaryItemIds); - acctResults = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())).collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); - } - List lockEmpIds = salaryAcctEmployeePOS.stream().filter(po -> LockStatusEnum.LOCK.getValue().equals(po.getLockStatus())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(lockEmpIds)) { - List acctResultPOS = listBySalaryAcctEmployeeIds(lockEmpIds); - Map acctResultMaps = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); - acctResults.putAll(acctResultMaps); - } - stopWatch.stop(); stopWatch.start("核算耗时"); @@ -874,8 +858,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .setSalarySobPO(salarySobPO) .setSalarySobCycleDTO(salarySobCycleDTO) .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) - .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) - .setLockSalaryItemIds(lockSalaryItemIds) .setSalarySobItemPOS(salarySobItemPOS) .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) .setExpressFormulas(expressFormulas) @@ -1018,13 +1000,32 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // return salaryAcctEmployeeService.filterByAuthority(salaryAcctEmployees, employeeId); // } + + @Override + public void lock(SalaryAcctResultLockParam param) { + ValidUtil.doValidator(param); + + SalaryAcctEmployeePO salaryAcctEmployeePO = getSalaryAcctEmployeeService(user).getById(param.getAcctEmpId()); + if (salaryAcctEmployeePO == null) { + return; + } + + List lockItemIds = salaryAcctEmployeePO.getLockItems() == null ? new ArrayList<>() : salaryAcctEmployeePO.getLockItems(); + Long salaryItemId = param.getSalaryItemId(); + + if (param.getLockStatus() == LockStatusEnum.LOCK) { + lockItemIds.add(salaryItemId); + } else { + lockItemIds.remove(salaryItemId); + } + + salaryAcctEmployeePO.setLockItems(lockItemIds); + + getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO); + } + @Override public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { - // 查询薪资核算记录 - SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(updateParam.getSalaryAcctRecordId()); - if (CollectionUtils.isEmpty(salaryAcctRecord.getLockSalaryItemIds())) { - salaryAcctRecord.setLockSalaryItemIds(new ArrayList<>()); - } List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return; @@ -1036,15 +1037,18 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } else { salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); } - if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { - Set lockSalaryItemIds = new HashSet<>(); - lockSalaryItemIds.addAll(salaryAcctRecord.getLockSalaryItemIds()); - lockSalaryItemIds.addAll(salaryItemIds); - salaryAcctRecord.setLockSalaryItemIds(new ArrayList(lockSalaryItemIds)); - } else { - salaryAcctRecord.getLockSalaryItemIds().removeAll(salaryItemIds); - } - getSalaryAcctRecordService(user).updateLockSalaryItemIds(salaryAcctRecord); + + salaryAcctEmployees.forEach(salaryAcctEmployeePO -> { + List lockItemIds = salaryAcctEmployeePO.getLockItems() == null ? new ArrayList<>() : salaryAcctEmployeePO.getLockItems(); + + if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { + lockItemIds.addAll(salaryItemIds); + } else { + lockItemIds.removeAll(salaryItemIds); + } + salaryAcctEmployeePO.setLockItems(lockItemIds); + getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO); + }); } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index c8739df1d..a196d53ef 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -464,6 +464,14 @@ public class SalaryAcctController { } + @POST + @Path("/acctresult/lock") + @Produces(MediaType.APPLICATION_JSON) + public String lock(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultLockParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::lock, param); + } + //更新薪资项目锁定状态 @POST @Path("/acctresult/updateLockStatus") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 094602f01..ac3573064 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -189,6 +189,11 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult getSalaryAcctResultService(user).save(saveParam); } + + public void lock(SalaryAcctResultLockParam param) { + getSalaryAcctResultService(user).lock(param); + } + /** * 更新薪资核算结果的值的锁定状态 * From 641b085a28676a94934b9d1e054ee36cec1ee7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Oct 2024 18:53:37 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E9=94=81?= =?UTF-8?q?=E5=AE=9Asql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202410170303.sql | 3 +++ resource/sqlupgrade/GS/sql202410170303.sql | 3 +++ resource/sqlupgrade/JC/sql202410170303.sql | 3 +++ resource/sqlupgrade/Mysql/sql202410170303.sql | 1 + resource/sqlupgrade/Oracle/sql202410170303.sql | 2 ++ resource/sqlupgrade/PG/sql202410170303.sql | 1 + resource/sqlupgrade/SQLServer/sql202410170303.sql | 2 ++ resource/sqlupgrade/ST/sql202410170303.sql | 3 +++ 8 files changed, 18 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202410170303.sql create mode 100644 resource/sqlupgrade/GS/sql202410170303.sql create mode 100644 resource/sqlupgrade/JC/sql202410170303.sql create mode 100644 resource/sqlupgrade/Mysql/sql202410170303.sql create mode 100644 resource/sqlupgrade/Oracle/sql202410170303.sql create mode 100644 resource/sqlupgrade/PG/sql202410170303.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202410170303.sql create mode 100644 resource/sqlupgrade/ST/sql202410170303.sql diff --git a/resource/sqlupgrade/DM/sql202410170303.sql b/resource/sqlupgrade/DM/sql202410170303.sql new file mode 100644 index 000000000..59556ae32 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202410170303.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add lock_items varchar2(4000) NULL; +/ + diff --git a/resource/sqlupgrade/GS/sql202410170303.sql b/resource/sqlupgrade/GS/sql202410170303.sql new file mode 100644 index 000000000..59556ae32 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202410170303.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add lock_items varchar2(4000) NULL; +/ + diff --git a/resource/sqlupgrade/JC/sql202410170303.sql b/resource/sqlupgrade/JC/sql202410170303.sql new file mode 100644 index 000000000..59556ae32 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202410170303.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add lock_items varchar2(4000) NULL; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202410170303.sql b/resource/sqlupgrade/Mysql/sql202410170303.sql new file mode 100644 index 000000000..3b0f772c0 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202410170303.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_emp ADD COLUMN lock_items varchar(4000); diff --git a/resource/sqlupgrade/Oracle/sql202410170303.sql b/resource/sqlupgrade/Oracle/sql202410170303.sql new file mode 100644 index 000000000..53cdeed2e --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202410170303.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_acct_emp add lock_items varchar2(4000) NULL +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202410170303.sql b/resource/sqlupgrade/PG/sql202410170303.sql new file mode 100644 index 000000000..deb01bd56 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202410170303.sql @@ -0,0 +1 @@ +alter table hrsa_salary_acct_emp add lock_items varchar(4000); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202410170303.sql b/resource/sqlupgrade/SQLServer/sql202410170303.sql new file mode 100644 index 000000000..23c230163 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202410170303.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_acct_emp ADD lock_items varchar(4000) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202410170303.sql b/resource/sqlupgrade/ST/sql202410170303.sql new file mode 100644 index 000000000..59556ae32 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202410170303.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add lock_items varchar2(4000) NULL; +/ + From 9f498551e4c71d50179d9f472b0e3344617e3c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 18 Oct 2024 10:20:29 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E9=94=81?= =?UTF-8?q?=E5=AE=9A=E5=AD=97=E6=AE=B5=E6=94=B9=E6=88=90=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 7cf9c3aff..8912df16e 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -316,10 +316,8 @@ public class SalaryAcctResultBO { } // 主键id map.put("id", e.getId()); - //锁定状态 - map.put("lockStatus", LockStatusEnum.getByValue(e.getLockStatus()).getDefaultLabel()); //锁定数据 - map.put("lockItems", e.getLockItems()); + map.put("lockItems", e.getLockItems() != null ? e.getLockItems().stream().filter(Objects::nonNull).map(Object::toString).collect(Collectors.toList()) : new ArrayList<>()); //人员id map.put("employeeId", e.getEmployeeId()); // 个税扣缴义务人