From f32fbcdc9eff8a7ae78e447b4b72ff28204c80b2 Mon Sep 17 00:00:00 2001 From: jiangchao Date: Thu, 25 May 2023 16:44:00 +0800 Subject: [PATCH] feature(*): 薪酬抽数据修改 --- fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryReportTask.java | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryReportTask.java b/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryReportTask.java index 478b573..ac3fb5b 100644 --- a/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryReportTask.java +++ b/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryReportTask.java @@ -219,15 +219,15 @@ public class SalaryReportTask { private List calcUser(List salaryGroupProjects, List userDims, - LocalDate date, + LocalDate dataDate, List pools, Long reportSalaryId) { - MultiKeyMap userSalaryMap = this.getUserIndicatorHitMap(salaryGroupProjects, date, pools); + MultiKeyMap userSalaryMap = this.getUserIndicatorHitMap(salaryGroupProjects, dataDate, pools); List reportSalaryValues = new ArrayList<>(); //人的维度为基础,计算各个指标信息对应的数据 for (SalaryPool pool : pools) { //如果计算日期 与 报表数据抽取日期不一致,使用计算日期(计算日期每个人都可能不一致) - LocalDate dataDate = (pool.getDataDate().compareTo(date) == 0) ? date : pool.getDataDate(); + Boolean changeStaff = pool.getDataDate().compareTo(dataDate) != 0; ReportSalaryDim reportSalaryDim = saveStaffDim(pool, dataDate, reportSalaryId); userDims.add(reportSalaryDim); @@ -239,7 +239,11 @@ public class SalaryReportTask { continue; } final Long salaryGroupProjectId = salaryGroupProject.getId(); - reportSalaryValues.add(this.convertDB(salaryGroupProject, reportSalaryDimId, dataDate, userSalaryMap.get(userId, salaryGroupProjectId))); + BigDecimal salaryValue = userSalaryMap.get(userId, salaryGroupProjectId); + if (changeStaff) { + salaryValue = this.getUserIndicatorHitValue(salaryGroupProject, pool.getDataDate(), pool); + } + reportSalaryValues.add(this.convertDB(salaryGroupProject, reportSalaryDimId, dataDate, salaryValue)); List salaryGroupProjectParamVos = salaryGroupProjectParamService.getSalaryGroupProjectParamVO(salaryGroupProject.getId()); if (salaryGroupProject.getCalMethod().equals(SalaryCalMethodEnum.CAR_SERIES)) { @@ -252,14 +256,15 @@ public class SalaryReportTask { if (! paramCodes.add(salaryGroupProjectParam.getIndicatorCode())) { continue; } + LocalDate calcDate = (changeStaff) ? pool.getDataDate() : dataDate; if (TargetTypeEnum.NO.equals(salaryGroupProjectParam.getTargetType())) { //无目标 - Map userValueMap = queryUserOriginValue(salaryGroupProjectParam.getIndicatorCode(), userId, dataDate); + Map userValueMap = queryUserOriginValue(salaryGroupProjectParam.getIndicatorCode(), userId, calcDate); BigDecimal value = userValueMap.getOrDefault(userId, BigDecimal.ZERO); reportSalaryValues.add(this.convertNoTargetDB(salaryGroupProject, salaryGroupProjectParam, dataDate, reportSalaryDimId, value)); } else { //有目标 - Map targetHitLogMap = queryUserTargetValue(salaryGroupProjectParam.getId(), userId, dataDate); + Map targetHitLogMap = queryUserTargetValue(salaryGroupProjectParam.getId(), userId, calcDate); SalaryGroupProjectTargetHitLog hitLog = targetHitLogMap.get(userId); BigDecimal value = Optional.ofNullable(hitLog).map(SalaryGroupProjectTargetHitLog::getReachValue).orElse(BigDecimal.ZERO); reportSalaryValues.add(this.convertTargetDB(salaryGroupProject, salaryGroupProjectParam, dataDate, reportSalaryDimId, value)); @@ -553,6 +558,16 @@ public class SalaryReportTask { return userGroupIndicatorHitMap; } + public BigDecimal getUserIndicatorHitValue(SalaryGroupProjectBO salaryGroupProject, LocalDate date, SalaryPool pool) { + SalaryGroupProjectHitLog indicatorHitLog = salaryGroupProjectHitLogService.getOne(Wrappers.lambdaQuery() + .eq(SalaryGroupProjectHitLog::getSalaryGroupProjectId, salaryGroupProject.getId()) + .eq(SalaryGroupProjectHitLog::getUserId, pool.getUserId()) + .eq(SalaryGroupProjectHitLog::getDataDate, date) + .eq(SalaryGroupProjectHitLog::getYn, Boolean.TRUE) + , Boolean.FALSE + ); + return Optional.ofNullable(indicatorHitLog).map(SalaryGroupProjectHitLog::getSalaryValue).orElse(BigDecimal.ZERO); + } public Map queryUserTargetValue(Long referId, Long userId, LocalDate dataDate) { -- libgit2 0.22.2