diff --git a/src/com/engine/salary/entity/report/bo/SalaryAcctResultReportBO.java b/src/com/engine/salary/entity/report/bo/SalaryAcctResultReportBO.java index 6a23857a5..485389860 100644 --- a/src/com/engine/salary/entity/report/bo/SalaryAcctResultReportBO.java +++ b/src/com/engine/salary/entity/report/bo/SalaryAcctResultReportBO.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultTempPO; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.math.NumberUtils; import java.util.*; @@ -62,6 +63,44 @@ public class SalaryAcctResultReportBO { .collect(Collectors.toList()); } + public static List lkszConvert2PO(List items, + SalaryAcctEmployeePO salaryAcctEmployee, + Long employeeId, Map emps) { + if (CollectionUtils.isEmpty(items) || ObjectUtils.isEmpty(salaryAcctEmployee)) { + return Collections.emptyList(); + } + Date now = new Date(); + return items.stream() + .map(e -> { + SalaryAcctResultReportPO po = SalaryAcctResultReportPO.builder() + .id(IdGenerator.generate()) + .salarySobId(salaryAcctEmployee.getSalarySobId()) + .salaryItemId(e.getSalaryItemId()) + .salaryAcctRecordId(salaryAcctEmployee.getSalaryAcctRecordId()) + .salaryAcctEmpId(salaryAcctEmployee.getId().toString()) + .employeeId(salaryAcctEmployee.getEmployeeId().toString()) + .taxAgentId(salaryAcctEmployee.getTaxAgentId()) + .resultValue(e.getResultValue()) + .creator(employeeId) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + + DataCollectionEmployee dataCollectionEmployee = emps.get(salaryAcctEmployee.getEmployeeId()); + if (dataCollectionEmployee != null) { + po.setDepartmentId(dataCollectionEmployee.getDepartmentId()); + po.setSubcompanyId(dataCollectionEmployee.getSubcompanyid()); + po.setCostcenterId(dataCollectionEmployee.getCostcenterId()); + po.setJobtitleId(dataCollectionEmployee.getJobtitleId()); + po.setLocationId(dataCollectionEmployee.getLocationId()); + } + return po; + }) + .collect(Collectors.toList()); + } + public static List convert2ReportPO(Collection temps, Map emps) { // Map longDataCollectionEmployeeMap = SalaryEntityUtil.convert2Map(emps, DataCollectionEmployee::getEmployeeId); diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 57b6e1927..29cae5d4a 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -27,6 +27,7 @@ import com.engine.salary.util.page.Column; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.BeanUtils; @@ -577,6 +578,34 @@ public class SalaryAcctResultBO { .collect(Collectors.toList()); } + + public static List batchEditConvert2PO(Map salaryAcctResultOldPOMap, + List items, + SalaryAcctEmployeePO salaryAcctEmployee, + Long employeeId) { + if (CollectionUtils.isEmpty(items) || ObjectUtils.isEmpty(salaryAcctEmployee)) { + return Collections.emptyList(); + } + Date now = new Date(); + return items.stream() + .map(e -> SalaryAcctResultPO.builder() + .salarySobId(salaryAcctEmployee.getSalarySobId()) + .salaryItemId(e.getSalaryItemId()) + .salaryAcctRecordId(salaryAcctEmployee.getSalaryAcctRecordId()) + .salaryAcctEmpId(salaryAcctEmployee.getId()) + .employeeId(salaryAcctEmployee.getEmployeeId()) + .taxAgentId(salaryAcctEmployee.getTaxAgentId()) + .resultValue(StringUtils.trim(e.getResultValue())) + .originResultValue(salaryAcctResultOldPOMap.get(salaryAcctEmployee.getId() + "-" + e.getSalaryItemId())) + .creator(employeeId) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()) + .collect(Collectors.toList()); + } + public static Map buildEmployeeFieldName() { Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields(); Map employeeFieldNameMap = Maps.newHashMapWithExpectedSize(declaredFields.length); diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultBatchEditParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultBatchEditParam.java new file mode 100644 index 000000000..21922043c --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultBatchEditParam.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.salaryacct.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @ClassName SalaryAcctResultBatchUpdateParam + * @author Harryxzy + * @date 2023/12/4 13:48 + * @description 鲁控数字批量编辑参数 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SalaryAcctResultBatchEditParam { + + private Long salaryAcctRecordId; + + private List resultValueList; + + + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public class resultValue { + + // 薪资核算人员id + private Long salaryAcctEmpId; + + // 薪资项目值 + private List items; + } + +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultBatchUpdateParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultBatchUpdateParam.java new file mode 100644 index 000000000..8eabde532 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultBatchUpdateParam.java @@ -0,0 +1,37 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @ClassName SalaryAcctResultBatchUpdateParam + * @author Harryxzy + * @date 2023/12/4 13:48 + * @description 鲁控数字批量更新参数 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SalaryAcctResultBatchUpdateParam { + + //薪资核算记录的id + @DataCheck(require = true, message = "薪资核算记录ID不得为空") + private Long salaryAcctRecordId; + + //薪资项目的Id + @DataCheck(require = true, message = "薪资项目id不得为空") + private Long salaryItemId; + + // 薪资核算人员id + private List salaryAcctEmpIdList; + + //薪资项目值 + private String value; + +} diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index 1ba3419bf..319552b78 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -207,4 +207,10 @@ public interface SalaryAcctRecordService { List listSome(SalaryAcctRecordPO po); + + /** + * 鲁控数字-结账 + * @param salaryAcctRecordId + */ + void lkszJz(Long salaryAcctRecordId); } diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 67320ed0d..871188360 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -4,10 +4,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; -import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultUpdateLockStatusParam; +import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.util.page.PageInfo; @@ -207,4 +204,16 @@ public interface SalaryAcctResultService { * @return */ Boolean checkAuth(Long salaryAcctRecordId); + + /** + * 鲁控数字薪资核算结果批量更新 + * @param param + */ + void lkszBatchUpdate(SalaryAcctResultBatchUpdateParam param); + + /** + * 鲁控数字薪资核算结果批量编辑 + * @param param + */ + void lkszBatchEdit(SalaryAcctResultBatchEditParam param); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 8038d08f7..1a189f762 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -4,6 +4,9 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; @@ -12,6 +15,7 @@ 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.salarysob.dto.SalarySobCycleDTO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; @@ -31,11 +35,14 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; +import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @@ -77,6 +84,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + // private SalaryCheckResultService salaryCheckResultService; // // private SalaryCheckResultDetailService salaryCheckResultDetailService; @@ -102,6 +113,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + @Override public SalaryAcctRecordPO getById(Long id) { @@ -810,4 +825,88 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe public List listSome(SalaryAcctRecordPO po) { return getSalaryAcctRecordMapper().listSome(po); } + + @Override + public void lkszJz(Long salaryAcctRecordId) { + SalaryAcctRecordPO salaryAcctRecordPO = getById(salaryAcctRecordId); + if (ObjectUtils.isEmpty(salaryAcctRecordPO)) { + throw new SalaryRunTimeException("薪资核算记录不存在或已被删除"); + } + YearMonth salaryMonth = SalaryDateUtil.toYearMonth(SalaryDateUtil.dateToLocalDate(salaryAcctRecordPO.getSalaryMonth()).plusMonths(1)); + // 创建下一个月的薪资核算记录 + Long newSalaryAcctRecordId = save(SalaryAcctRecordSaveParam.builder().salarySobId(salaryAcctRecordPO.getSalarySobId()).salaryMonth(salaryMonth).build()); + // 查询下个月的薪资核算人员 + List salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(newSalaryAcctRecordId); + List acctEmpIds = salaryAcctEmployeePOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); + // 获取原来的薪资核算结果 + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobItemIds = salarySobItemPOS.stream().map(SalarySobItemPO::getSalaryItemId).collect(Collectors.toList()); + List resultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(salaryAcctRecordId), salarySobItemIds); + // 过滤掉新的核算记录中不存在的人 + resultPOS = resultPOS.stream().filter(result -> acctEmpIds.contains(result.getEmployeeId())).collect(Collectors.toList()); + Map> resultMap = SalaryEntityUtil.group2Map(resultPOS, SalaryAcctResultPO::getEmployeeId); + // 查询人员信息,供报表使用 + List dataCollectionEmployees = getSalaryEmployeeService(user).listAllForReport(); + Map emps = SalaryEntityUtil.convert2Map(dataCollectionEmployees, DataCollectionEmployee::getEmployeeId); + + // 需要保存的核算结果 + List needInsertResultList = new ArrayList<>(); + // 报表 + List needInsertResultReportList = new ArrayList<>(); + Date now = new Date(); + Long uid = Long.valueOf(user.getUID()); + salaryAcctEmployeePOList.stream().forEach(acctEmp -> { + List oldResultList = resultMap.get(acctEmp.getEmployeeId()); + oldResultList.stream().forEach(oldResult -> { + // 薪资核算结果 + needInsertResultList.add(SalaryAcctResultPO.builder() + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(oldResult.getSalaryItemId()) + .salaryAcctRecordId(newSalaryAcctRecordId) + .salaryAcctEmpId(acctEmp.getId()) + .employeeId(acctEmp.getEmployeeId()) + .taxAgentId(acctEmp.getTaxAgentId()) + .resultValue(StringUtils.trim(oldResult.getResultValue())) + .originResultValue(oldResult.getOriginResultValue()) + .creator(uid) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + + // 报表结果 + SalaryAcctResultReportPO po = SalaryAcctResultReportPO.builder() + .id(IdGenerator.generate()) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(oldResult.getSalaryItemId()) + .salaryAcctRecordId(newSalaryAcctRecordId) + .salaryAcctEmpId(acctEmp.getId().toString()) + .employeeId(acctEmp.getEmployeeId().toString()) + .taxAgentId(acctEmp.getTaxAgentId()) + .resultValue(StringUtils.trim(oldResult.getResultValue())) + .creator(uid) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + + DataCollectionEmployee dataCollectionEmployee = emps.get(acctEmp.getEmployeeId()); + if (dataCollectionEmployee != null) { + po.setDepartmentId(dataCollectionEmployee.getDepartmentId()); + po.setSubcompanyId(dataCollectionEmployee.getSubcompanyid()); + po.setCostcenterId(dataCollectionEmployee.getCostcenterId()); + po.setJobtitleId(dataCollectionEmployee.getJobtitleId()); + po.setLocationId(dataCollectionEmployee.getLocationId()); + } + needInsertResultReportList.add(po); + }); + }); + + // 入库 + getSalaryAcctResultService(user).batchSave(needInsertResultList); + getSalaryAcctReportService(user).batchSave(needInsertResultReportList); + + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 039546c4d..734f2ade4 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; @@ -46,6 +47,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -55,6 +57,7 @@ import com.weaver.util.threadPool.entity.LocalRunnable; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.jdbc.datasource.DataSourceTransactionManager; @@ -1088,4 +1091,169 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } return true; } + + @Override + public void lkszBatchUpdate(SalaryAcctResultBatchUpdateParam param) { + ValidUtil.doValidator(param); + + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId()); + if (ObjectUtils.isEmpty(salaryAcctRecordPO)) { + throw new SalaryRunTimeException("薪资核算记录不存在,或已被删除"); + } + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 薪资账套中包含的薪资项目 + List salarySobItemIds = salarySobItemPOS.stream().map(SalarySobItemPO::getSalaryItemId).collect(Collectors.toList()); + if (!salarySobItemIds.contains(param.getSalaryItemId())) { + throw new SalaryRunTimeException("该账套不包含该薪资项目或已被删除,请先检查账套"); + } + // 获取需要更新的核算人员信息 + List salaryAcctEmployeePOList = Collections.emptyList(); + if (CollectionUtils.isEmpty(param.getSalaryAcctEmpIdList())) { + // 没有选择核算人员,更新核算记录中所有人员 + salaryAcctEmployeePOList.addAll(getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordPO.getId())); + } else { + salaryAcctEmployeePOList.addAll(getSalaryAcctEmployeeService(user).listByIds(param.getSalaryAcctEmpIdList())); + } + + if (CollectionUtils.isNotEmpty(salaryAcctEmployeePOList)) { + List salaryAcctEmployeeIdList = SalaryEntityUtil.properties(salaryAcctEmployeePOList, SalaryAcctEmployeePO::getId, Collectors.toList()); + // 查询薪资核算结果 + List resultPOS = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIdList, Collections.singleton(param.getSalaryItemId())); + Map salaryAcctResultPOMap = SalaryEntityUtil.convert2Map(resultPOS, SalaryAcctResultPO::getSalaryAcctEmpId); + List needUpdateList = new ArrayList<>(); + List needInsertList = new ArrayList<>(); + Date now = new Date(); + salaryAcctEmployeePOList.forEach(salaryAcctEmployeePO -> { + if (salaryAcctResultPOMap.containsKey(salaryAcctEmployeePO.getId())) { + // 更新 + SalaryAcctResultPO po = salaryAcctResultPOMap.get(salaryAcctEmployeePO.getId()); + po.setResultValue(param.getValue()); + po.setUpdateTime(now); + needUpdateList.add(po); + } else { + // 新增 + needInsertList.add(SalaryAcctResultPO.builder() + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(param.getSalaryItemId()) + .salaryAcctRecordId(param.getSalaryAcctRecordId()) + .salaryAcctEmpId(salaryAcctEmployeePO.getId()) + .employeeId(salaryAcctEmployeePO.getEmployeeId()) + .taxAgentId(salaryAcctEmployeePO.getTaxAgentId()) + .resultValue(StringUtils.trim(param.getValue())) + .originResultValue("") + .creator(Long.valueOf(user.getUID())) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + } + }); + // 入库 + if (CollectionUtils.isNotEmpty(needUpdateList)) { + getSalaryAcctResultMapper().batchUpdate(needUpdateList); + } + + if (CollectionUtils.isNotEmpty(needInsertList)) { + getSalaryAcctResultMapper().batchInsert(needInsertList); + } + } + } + + @Override + public void lkszBatchEdit(SalaryAcctResultBatchEditParam param) { + List dataCollectionEmployees = getSalaryEmployeeService(user).listAllForReport(); + Map emps = SalaryEntityUtil.convert2Map(dataCollectionEmployees, DataCollectionEmployee::getEmployeeId); + + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId()); + if (ObjectUtils.isEmpty(salaryAcctRecordPO)) { + throw new SalaryRunTimeException("薪资核算结果不存在或已被删除"); + } + + List salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(param.getSalaryAcctRecordId()); + Map salaryAcctEmployeePOMap = SalaryEntityUtil.convert2Map(salaryAcctEmployeePOList, SalaryAcctEmployeePO::getId); + + // 需要更新数据的薪资核算人员id + List updateAcctEmpIds = param.getResultValueList().stream().map(SalaryAcctResultBatchEditParam.resultValue::getSalaryAcctEmpId).collect(Collectors.toList()); + // 查询原来的薪资核算结果 + List salaryAcctResultPOSOld = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(updateAcctEmpIds).build()); + // 解密 + encryptUtil.decryptList(salaryAcctResultPOSOld, SalaryAcctResultPO.class); + // 保存参数转换成薪资核算结果po + List salaryAcctResultPOS = new ArrayList<>(); + // 获取薪资项目回算前的值 + Map salaryAcctResultOldPOMap = salaryAcctResultPOSOld.stream() + .collect(Collectors.groupingBy(p -> p.getSalaryAcctEmpId() + "-" + p.getSalaryItemId(), + Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(SalaryAcctResultPO::getId)), + s -> s.map(SalaryAcctResultPO::getOriginResultValue).orElse("")))); + List salaryAcctResultReportPOS = new ArrayList<>(); + param.getResultValueList().forEach(resultValue -> { + SalaryAcctEmployeePO salaryAcctEmployeePO = salaryAcctEmployeePOMap.get(resultValue.getSalaryAcctEmpId()); + salaryAcctResultPOS.addAll(SalaryAcctResultBO.batchEditConvert2PO(salaryAcctResultOldPOMap, resultValue.getItems(), salaryAcctEmployeePO, (long) user.getUID())); + // 报表 + salaryAcctResultReportPOS.addAll(SalaryAcctResultReportBO.lkszConvert2PO(resultValue.getItems(), salaryAcctEmployeePO, (long) user.getUID(), emps)); + }); + + // 删除原来的薪资核算结果 + param.getResultValueList().stream().forEach(resultValue -> { + List saveItemIds = resultValue.getItems().stream().map(SalaryAcctResultSaveParam.SalaryAcctResultDetailItemParam::getSalaryItemId).collect(Collectors.toList()); + deleteByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(resultValue.getSalaryAcctEmpId()), saveItemIds); + // 报表 + getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(resultValue.getSalaryAcctEmpId()), saveItemIds); + }); + + // 保存薪资核算结果 + if (CollectionUtils.isNotEmpty(salaryAcctResultPOS)) { + // 加密 + encryptUtil.encryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); + List> partition = Lists.partition(salaryAcctResultPOS, 100); + partition.forEach(getSalaryAcctResultMapper()::batchInsert); + } + + //报表 + if (CollectionUtils.isNotEmpty(salaryAcctResultReportPOS)) { + getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); + } + } + + + public void temp(SalaryAcctResultSaveParam saveParam){ + List dataCollectionEmployees = getSalaryEmployeeService(user).listAllForReport(); + Map emps = SalaryEntityUtil.convert2Map(dataCollectionEmployees, DataCollectionEmployee::getEmployeeId); + + // 查询薪资核算人员 + SalaryAcctEmployeePO salaryAcctEmployeePO = getSalaryAcctEmployeeService(user).getById(saveParam.getSalaryAcctEmpId()); + if (Objects.isNull(salaryAcctEmployeePO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除")); + } + // 查询原来的薪资核算结果 + List salaryAcctResultPOSOld = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpId(saveParam.getSalaryAcctEmpId()).build()); + // 解密 + encryptUtil.decryptList(salaryAcctResultPOSOld, SalaryAcctResultPO.class); + // 保存参数转换成薪资核算结果po + List salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(salaryAcctResultPOSOld, saveParam, salaryAcctEmployeePO, (long) user.getUID()); + SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); + + // 删除原来的薪资核算结果 + List saveItemIds = saveParam.getItems().stream().map(SalaryAcctResultSaveParam.SalaryAcctResultDetailItemParam::getSalaryItemId).collect(Collectors.toList()); + deleteByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(saveParam.getSalaryAcctEmpId()), saveItemIds); + // 保存薪资核算结果 + if (CollectionUtils.isNotEmpty(salaryAcctResultPOS)) { + // 加密 + encryptUtil.encryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); + 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); + } + + + // 存储薪资核算结果数据来源日志 + salaryAcctResultPOS = getSalaryAcctRecordService(user).listBySalaryAcctEmpId(saveParam.getSalaryAcctEmpId()); + saveSalaryAcctResultLog(salaryAcctResultPOSOld, salaryAcctResultPOS); + } } \ No newline at end of file diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 078060a02..45de6654d 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -158,6 +158,15 @@ public class SalaryAcctController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::backCalculate, param.getSalaryAcctRecordId()); } + + // 结账 + @GET + @Path("/lkszJz") + @Produces(MediaType.APPLICATION_JSON) + public String lkszJz(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::lkszJz, id); + } /* ********************************薪资核算记录相关 end*********************************/ @@ -448,6 +457,24 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::updateLockStatusByParam, param); } + //鲁控数字批量更新 + @POST + @Path("/acctresult/lkszBatchUpdate") + @Produces(MediaType.APPLICATION_JSON) + public String lkszBatchUpdate(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultBatchUpdateParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::lkszBatchUpdate, param); + } + + //鲁控数字批量编辑 + @POST + @Path("/acctresult/lkszBatchEdit") + @Produces(MediaType.APPLICATION_JSON) + public String lkszBatchEdit(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultBatchEditParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::lkszBatchEdit, param); + } + //薪资核算 @POST @Path("/acctresult/accounting") diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 9c17eaf78..5cd43cecb 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -258,4 +258,12 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord public void backCalculate(Long salaryAcctRecordId){ getSalaryAcctRecordService(user).backCalculate(salaryAcctRecordId); } + + /** + * 鲁控数字-结账 + * @param salaryAcctRecordId + */ + public void lkszJz(Long salaryAcctRecordId) { + getSalaryAcctRecordService(user).lkszJz(salaryAcctRecordId); + } } diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 8c0e6404d..59bbd3093 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -9,10 +9,7 @@ import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; -import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultUpdateLockStatusParam; +import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; @@ -260,6 +257,22 @@ public class SalaryAcctResultWrapper extends Service { return getSalaryAcctResultService(user).checkAuth(salaryAcctRecordId); } + /** + * 鲁控数字薪资核算结果批量更新 + * @param param + */ + public void lkszBatchUpdate(SalaryAcctResultBatchUpdateParam param) { + getSalaryAcctResultService(user).lkszBatchUpdate(param); + } + + /** + * 鲁控数字薪资核算结果批量编辑 + * @param param + */ + public void lkszBatchEdit(SalaryAcctResultBatchEditParam param) { + getSalaryAcctResultService(user).lkszBatchEdit(param); + } + /** * 薪资核算-校验