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 53d58de..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,14 +219,17 @@ 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) { - ReportSalaryDim reportSalaryDim = saveStaffDim(pool, date, reportSalaryId); + //如果计算日期 与 报表数据抽取日期不一致,使用计算日期(计算日期每个人都可能不一致) + Boolean changeStaff = pool.getDataDate().compareTo(dataDate) != 0; + + ReportSalaryDim reportSalaryDim = saveStaffDim(pool, dataDate, reportSalaryId); userDims.add(reportSalaryDim); final Long userId = pool.getUserId(); final Long reportSalaryDimId = reportSalaryDim.getId(); @@ -236,7 +239,11 @@ public class SalaryReportTask { continue; } final Long salaryGroupProjectId = salaryGroupProject.getId(); - reportSalaryValues.add(this.convertDB(salaryGroupProject, reportSalaryDimId, date, 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)) { @@ -249,17 +256,18 @@ 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, date); + Map userValueMap = queryUserOriginValue(salaryGroupProjectParam.getIndicatorCode(), userId, calcDate); BigDecimal value = userValueMap.getOrDefault(userId, BigDecimal.ZERO); - reportSalaryValues.add(this.convertNoTargetDB(salaryGroupProject, salaryGroupProjectParam, date, reportSalaryDimId, value)); + reportSalaryValues.add(this.convertNoTargetDB(salaryGroupProject, salaryGroupProjectParam, dataDate, reportSalaryDimId, value)); } else { //有目标 - Map targetHitLogMap = queryUserTargetValue(salaryGroupProjectParam.getId(), userId, date); + 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, date, reportSalaryDimId, value)); + reportSalaryValues.add(this.convertTargetDB(salaryGroupProject, salaryGroupProjectParam, dataDate, reportSalaryDimId, value)); } } } @@ -550,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) { diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/KpiGroupBizService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/KpiGroupBizService.java index 4a995b9..68be5b3 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/KpiGroupBizService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/KpiGroupBizService.java @@ -549,10 +549,10 @@ public class KpiGroupBizService { .eq(KpiGroup::getStatus, SettingStatusEnum.EFFECTIVE) ); // BV.isTrue(count <= 0, "绩效组名称重复,请重新输入"); - if (count > 0) { - log.info("绩效组名称重复,name:{},id:{}: ", name, Optional.ofNullable(id).orElse(0L).toString()); - throw new BusinessException("绩效组名称重复,请重新输入"); - } +// if (count > 0) { +// log.info("绩效组名称重复,name:{},id:{}: ", name, Optional.ofNullable(id).orElse(0L).toString()); +// throw new BusinessException("绩效组名称重复,请重新输入"); +// } List drafts = commonService.getEditDraftByName(name, SettingDraftTypeEnum.KPI, draftId); BV.isTrue(drafts.size() <= 0, "绩效组名称在草稿中存在,请重新输入");