diff --git a/src/com/engine/salary/maintainer/MaintainerController.java b/src/com/engine/salary/maintainer/MaintainerController.java index 245844bc9..1122d6681 100644 --- a/src/com/engine/salary/maintainer/MaintainerController.java +++ b/src/com/engine/salary/maintainer/MaintainerController.java @@ -6,6 +6,7 @@ import com.engine.salary.maintainer.salaryacct.SalaryAcctManager; import com.engine.salary.maintainer.salaryacct.SalaryAcctSupplementParam; import com.engine.salary.util.ResponseResult; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -16,7 +17,9 @@ 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.Arrays; import java.util.Map; +import java.util.stream.Collectors; /** * 累计专项附加扣除 @@ -48,9 +51,25 @@ public class MaintainerController { @Path("/acct/supplement") @Produces(MediaType.APPLICATION_JSON) public String supplementAcctRecord(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String type = request.getParameter("type"); + String salaryAcctRecordStrIds = request.getParameter("salaryAcctRecordStrIds"); + String salarySobStrIds = request.getParameter("salarySobStrIds"); + String salaryItemStrIds = request.getParameter("salaryItemStrIds"); SalaryAcctSupplementParam queryParam = SalaryAcctSupplementParam.builder() - .salaryAcctRecordId(Long.parseLong(request.getParameter("salaryAcctRecordId"))) - .salaryItemStrIds(request.getParameter("salaryItemStrIds")).build(); + .type(type) + .salaryAcctRecordStrIds(salaryAcctRecordStrIds) + .salarySobStrIds(salarySobStrIds) + .salaryItemStrIds(salaryItemStrIds) + .build(); + if (StringUtils.isNotBlank(salaryAcctRecordStrIds)) { + queryParam.setSalaryAcctRecordIds(Arrays.stream(salaryAcctRecordStrIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + if (StringUtils.isNotBlank(salarySobStrIds)) { + queryParam.setSalarySobIds(Arrays.stream(salarySobStrIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + if (StringUtils.isNotBlank(salaryItemStrIds)) { + queryParam.setSalaryItemIds(Arrays.stream(salaryItemStrIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalaryAcctManager(user)::supplementAcctRecord, queryParam); } diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java index b6cb9a8fd..8894536a2 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctManager.java @@ -104,9 +104,6 @@ public class SalaryAcctManager extends Service { return ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user); } - private SalarySobItemHideService getSalarySobItemHideService(User user) { - return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); - } private SalaryAcctCalculateService getSalaryAcctCalculateService(User user) { return ServiceUtil.getService(SalaryAcctCalculateServiceImpl.class, user); @@ -151,14 +148,41 @@ public class SalaryAcctManager extends Service { public void supplementAcctRecord(SalaryAcctSupplementParam param) { ValidUtil.doValidator(param); - List salaryItemIds = Arrays.stream(param.getSalaryItemStrIds().split(",")).map(Long::valueOf).collect(Collectors.toList()); - param.setSalaryItemIds(salaryItemIds); - if(CollectionUtils.isEmpty(salaryItemIds)){ - throw new SalaryRunTimeException("薪资项目为空!"); + //待补算的记录 + List salaryAcctRecordPOS = new ArrayList<>(); + + if (StringUtils.equals(param.getType(), "sob")) { + + List salarySobIds = param.getSalarySobIds(); + + if (CollectionUtils.isEmpty(salarySobIds)) { + throw new SalaryRunTimeException("补算账套为空!"); + } + //获取账套下面所有的核算记录 + salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIds(salarySobIds); + + if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { + throw new SalaryRunTimeException("账套下不存在核算记录"); + } + + } else if (StringUtils.equals(param.getType(), "record")) { + + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + + salaryAcctRecordPOS = getSalaryAcctRecordService(user).listByIds(salaryAcctRecordIds); + + if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { + throw new SalaryRunTimeException("核算记录不存在"); + } + } else { + throw new SalaryRunTimeException("补算方式异常!"); } - calculate(param); + salaryAcctRecordPOS.forEach(salaryAcctRecordPO -> { + param.setSalaryAcctRecordId(salaryAcctRecordPO.getId()); + calculate(param); + }); } @@ -170,12 +194,15 @@ public class SalaryAcctManager extends Service { public void calculate(SalaryAcctSupplementParam calculateParam) { log.info("补算开始{}", calculateParam); + //核算记录 + Long salaryAcctRecordId = calculateParam.getSalaryAcctRecordId(); + //当前登陆人员 DataCollectionEmployee simpleEmployee = new DataCollectionEmployee(); simpleEmployee.setEmployeeId((long) user.getUID()); // 检查是否正在核算中 - SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId()); + SalaryAcctProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId); if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { return; } @@ -188,20 +215,16 @@ public class SalaryAcctManager extends Service { .setProgress(BigDecimal.ZERO) .setStatus(true) .setMessage(StringUtils.EMPTY); - getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), initProgress); - new Thread() { - public void run() { - calculate(calculateParam, simpleEmployee); - } - }.start(); - + getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, initProgress); + calculate(calculateParam, simpleEmployee); } public void calculate(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) { + Long salaryAcctRecordId = calculateParam.getSalaryAcctRecordId(); try { // 1、查询薪资核算记录 - SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId()); + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } @@ -211,7 +234,7 @@ public class SalaryAcctManager extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除")); } // 2、查询薪资核算记录的薪资周期、考勤周期等 - SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(calculateParam.getSalaryAcctRecordId()); + SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctRecordId); // 3、查询薪资核算记录所用薪资账套的薪资项目副本 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); if (CollectionUtils.isEmpty(salarySobItemPOS)) { @@ -235,7 +258,7 @@ public class SalaryAcctManager extends Service { List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); Map acctResults = new HashMap<>(); if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { - List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); + List acctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); acctResults = Optional.ofNullable(acctResultPOS) .orElse(new ArrayList<>()) .stream() @@ -261,7 +284,7 @@ public class SalaryAcctManager extends Service { } // 11.1、初始化进度 SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); - getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), initProgress); + getSalaryAcctProgressService(user).initProgress("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, initProgress); // 12、对薪资核算人员进行拆分 List> partition = Lists.partition(salaryAcctEmployeePOS, 5000); // 12.1、监控子线程的任务执行 @@ -307,7 +330,7 @@ public class SalaryAcctManager extends Service { if (!allSuccess) { // 薪资核算实现的线程的错误信息 String errorMsg = calculateResults.stream().filter(result -> !result.isStatus()).map(SalaryAcctCalculateBO.Result::getErrMsg).collect(Collectors.joining("|")); - getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), errorMsg); + getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, errorMsg); // 删除薪资核算临时存储表中的数据 getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); return; @@ -315,11 +338,11 @@ public class SalaryAcctManager extends Service { // 15、处理核算结果临时表数据 handleSalaryAcctResultTemp(calculateParam, calculateKey); - getSalaryAcctProgressService(user).finish("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), true); + getSalaryAcctProgressService(user).finish("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, true); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); - getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); + getSalaryAcctProgressService(user).fail("SUPPLEMENT_ACCT_PROGRESS_" + salaryAcctRecordId, SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); } } @@ -336,15 +359,14 @@ public class SalaryAcctManager extends Service { List salaryItemIds = calculateParam.getSalaryItemIds(); getSalaryAcctResultMapper().deleteBySalaryAcctRecordIdAndSalaryItemIds(calculateParam.getSalaryAcctRecordId(), salaryItemIds); // 保存薪资的薪资核算结果 - List salaryAcctResultPOS = salaryAcctResultTempPOS.stream().filter(salaryAcctResultTempPO -> salaryItemIds.contains(salaryAcctResultTempPO.getSalaryItemId())).map(e -> { - SalaryAcctResultPO salaryAcctResult = new SalaryAcctResultPO(); - BeanUtils.copyProperties(e, salaryAcctResult); - return salaryAcctResult; - }).collect(Collectors.toList()); + List salaryAcctResultPOS = salaryAcctResultTempPOS.stream() + .filter(salaryAcctResultTempPO -> salaryItemIds.contains(salaryAcctResultTempPO.getSalaryItemId())) + .map(e -> { + SalaryAcctResultPO salaryAcctResult = new SalaryAcctResultPO(); + BeanUtils.copyProperties(e, salaryAcctResult); + return salaryAcctResult; + }).collect(Collectors.toList()); getSalaryAcctResultService(user).batchSave(salaryAcctResultPOS); - //保存核算报表数据 -// List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); -// getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); // 删除薪资核算临时存储表中的数据 getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); } diff --git a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java index d3e3c5b95..b70912377 100644 --- a/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java +++ b/src/com/engine/salary/maintainer/salaryacct/SalaryAcctSupplementParam.java @@ -22,12 +22,33 @@ import java.util.List; @AllArgsConstructor public class SalaryAcctSupplementParam { - @DataCheck(require = true,message = "参数错误,薪资核算记录ID不能为空") - private Long salaryAcctRecordId; - @DataCheck(require = true,message = "参数错误,薪资项目ID不能为空") + //前端传入 + /** + * 补算方式,0按核算记录进行补充核算,1按账套进行补充核算 + */ + @DataCheck(require = true, message = "补算方式为空") + private String type; + + /** + * 按核算记录进行补充核算 + */ + private List salaryAcctRecordIds; + private String salaryAcctRecordStrIds; + + /** + * 按账套进行补充核算 + */ + private List salarySobIds; + private String salarySobStrIds; + + /** + * 待核算的项目 + */ + @DataCheck(require = true, message = "补算项目为空") + private List salaryItemIds; private String salaryItemStrIds; - private List salaryItemIds; - + //核算使用 + private Long salaryAcctRecordId; } diff --git a/src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java b/src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java new file mode 100644 index 000000000..696ac6ad5 --- /dev/null +++ b/src/com/engine/salary/maintainer/salaryacct/SupAcctThread.java @@ -0,0 +1,42 @@ +package com.engine.salary.maintainer.salaryacct; + +import com.engine.salary.entity.datacollection.DataCollectionEmployee; + +public abstract class SupAcctThread implements Runnable { + + private SalaryAcctSupplementParam calculateParam; + + private DataCollectionEmployee simpleEmployee; + + public SalaryAcctSupplementParam getCalculateParam() { + return calculateParam; + } + + public void setCalculateParam(SalaryAcctSupplementParam calculateParam) { + this.calculateParam = calculateParam; + } + + public DataCollectionEmployee getSimpleEmployee() { + return simpleEmployee; + } + + public void setSimpleEmployee(DataCollectionEmployee simpleEmployee) { + this.simpleEmployee = simpleEmployee; + } + + public SupAcctThread(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) { + this.calculateParam = calculateParam; + this.simpleEmployee = simpleEmployee; + } + + @Override + public void run() { + try { + execute(calculateParam, simpleEmployee); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public abstract void execute(SalaryAcctSupplementParam calculateParam, DataCollectionEmployee simpleEmployee) throws Exception; +}