-
mentioned in commit fa9e0337
Showing
2 changed files
fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryReportTask.java
... | ... | @@ -219,14 +219,17 @@ public class SalaryReportTask { |
219 | 219 | |
220 | 220 | private List<ReportSalaryDimValue> calcUser(List<SalaryGroupProjectBO> salaryGroupProjects, |
221 | 221 | List<ReportSalaryDim> userDims, |
222 | - LocalDate date, | |
222 | + LocalDate dataDate, | |
223 | 223 | List<SalaryPool> pools, |
224 | 224 | Long reportSalaryId) { |
225 | - MultiKeyMap<Long, BigDecimal> userSalaryMap = this.getUserIndicatorHitMap(salaryGroupProjects, date, pools); | |
225 | + MultiKeyMap<Long, BigDecimal> userSalaryMap = this.getUserIndicatorHitMap(salaryGroupProjects, dataDate, pools); | |
226 | 226 | List<ReportSalaryDimValue> reportSalaryValues = new ArrayList<>(); |
227 | 227 | //人的维度为基础,计算各个指标信息对应的数据 |
228 | 228 | for (SalaryPool pool : pools) { |
229 | - ReportSalaryDim reportSalaryDim = saveStaffDim(pool, date, reportSalaryId); | |
229 | + //如果计算日期 与 报表数据抽取日期不一致,使用计算日期(计算日期每个人都可能不一致) | |
230 | + Boolean changeStaff = pool.getDataDate().compareTo(dataDate) != 0; | |
231 | + | |
232 | + ReportSalaryDim reportSalaryDim = saveStaffDim(pool, dataDate, reportSalaryId); | |
230 | 233 | userDims.add(reportSalaryDim); |
231 | 234 | final Long userId = pool.getUserId(); |
232 | 235 | final Long reportSalaryDimId = reportSalaryDim.getId(); |
... | ... | @@ -236,7 +239,11 @@ public class SalaryReportTask { |
236 | 239 | continue; |
237 | 240 | } |
238 | 241 | final Long salaryGroupProjectId = salaryGroupProject.getId(); |
239 | - reportSalaryValues.add(this.convertDB(salaryGroupProject, reportSalaryDimId, date, userSalaryMap.get(userId, salaryGroupProjectId))); | |
242 | + BigDecimal salaryValue = userSalaryMap.get(userId, salaryGroupProjectId); | |
243 | + if (changeStaff) { | |
244 | + salaryValue = this.getUserIndicatorHitValue(salaryGroupProject, pool.getDataDate(), pool); | |
245 | + } | |
246 | + reportSalaryValues.add(this.convertDB(salaryGroupProject, reportSalaryDimId, dataDate, salaryValue)); | |
240 | 247 | List<SalaryGroupProjectParamVO> salaryGroupProjectParamVos = salaryGroupProjectParamService.getSalaryGroupProjectParamVO(salaryGroupProject.getId()); |
241 | 248 | |
242 | 249 | if (salaryGroupProject.getCalMethod().equals(SalaryCalMethodEnum.CAR_SERIES)) { |
... | ... | @@ -249,17 +256,18 @@ public class SalaryReportTask { |
249 | 256 | if (! paramCodes.add(salaryGroupProjectParam.getIndicatorCode())) { |
250 | 257 | continue; |
251 | 258 | } |
259 | + LocalDate calcDate = (changeStaff) ? pool.getDataDate() : dataDate; | |
252 | 260 | if (TargetTypeEnum.NO.equals(salaryGroupProjectParam.getTargetType())) { |
253 | 261 | //无目标 |
254 | - Map<Long, BigDecimal> userValueMap = queryUserOriginValue(salaryGroupProjectParam.getIndicatorCode(), userId, date); | |
262 | + Map<Long, BigDecimal> userValueMap = queryUserOriginValue(salaryGroupProjectParam.getIndicatorCode(), userId, calcDate); | |
255 | 263 | BigDecimal value = userValueMap.getOrDefault(userId, BigDecimal.ZERO); |
256 | - reportSalaryValues.add(this.convertNoTargetDB(salaryGroupProject, salaryGroupProjectParam, date, reportSalaryDimId, value)); | |
264 | + reportSalaryValues.add(this.convertNoTargetDB(salaryGroupProject, salaryGroupProjectParam, dataDate, reportSalaryDimId, value)); | |
257 | 265 | } else { |
258 | 266 | //有目标 |
259 | - Map<Long, SalaryGroupProjectTargetHitLog> targetHitLogMap = queryUserTargetValue(salaryGroupProjectParam.getId(), userId, date); | |
267 | + Map<Long, SalaryGroupProjectTargetHitLog> targetHitLogMap = queryUserTargetValue(salaryGroupProjectParam.getId(), userId, calcDate); | |
260 | 268 | SalaryGroupProjectTargetHitLog hitLog = targetHitLogMap.get(userId); |
261 | 269 | BigDecimal value = Optional.ofNullable(hitLog).map(SalaryGroupProjectTargetHitLog::getReachValue).orElse(BigDecimal.ZERO); |
262 | - reportSalaryValues.add(this.convertTargetDB(salaryGroupProject, salaryGroupProjectParam, date, reportSalaryDimId, value)); | |
270 | + reportSalaryValues.add(this.convertTargetDB(salaryGroupProject, salaryGroupProjectParam, dataDate, reportSalaryDimId, value)); | |
263 | 271 | } |
264 | 272 | } |
265 | 273 | } |
... | ... | @@ -550,6 +558,16 @@ public class SalaryReportTask { |
550 | 558 | return userGroupIndicatorHitMap; |
551 | 559 | } |
552 | 560 | |
561 | + public BigDecimal getUserIndicatorHitValue(SalaryGroupProjectBO salaryGroupProject, LocalDate date, SalaryPool pool) { | |
562 | + SalaryGroupProjectHitLog indicatorHitLog = salaryGroupProjectHitLogService.getOne(Wrappers.<SalaryGroupProjectHitLog>lambdaQuery() | |
563 | + .eq(SalaryGroupProjectHitLog::getSalaryGroupProjectId, salaryGroupProject.getId()) | |
564 | + .eq(SalaryGroupProjectHitLog::getUserId, pool.getUserId()) | |
565 | + .eq(SalaryGroupProjectHitLog::getDataDate, date) | |
566 | + .eq(SalaryGroupProjectHitLog::getYn, Boolean.TRUE) | |
567 | + , Boolean.FALSE | |
568 | + ); | |
569 | + return Optional.ofNullable(indicatorHitLog).map(SalaryGroupProjectHitLog::getSalaryValue).orElse(BigDecimal.ZERO); | |
570 | + } | |
553 | 571 | |
554 | 572 | |
555 | 573 | public Map<Long, SalaryGroupProjectTargetHitLog> queryUserTargetValue(Long referId, Long userId, LocalDate dataDate) { | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/KpiGroupBizService.java
... | ... | @@ -549,10 +549,10 @@ public class KpiGroupBizService { |
549 | 549 | .eq(KpiGroup::getStatus, SettingStatusEnum.EFFECTIVE) |
550 | 550 | ); |
551 | 551 | // BV.isTrue(count <= 0, "绩效组名称重复,请重新输入"); |
552 | - if (count > 0) { | |
553 | - log.info("绩效组名称重复,name:{},id:{}: ", name, Optional.ofNullable(id).orElse(0L).toString()); | |
554 | - throw new BusinessException("绩效组名称重复,请重新输入"); | |
555 | - } | |
552 | +// if (count > 0) { | |
553 | +// log.info("绩效组名称重复,name:{},id:{}: ", name, Optional.ofNullable(id).orElse(0L).toString()); | |
554 | +// throw new BusinessException("绩效组名称重复,请重新输入"); | |
555 | +// } | |
556 | 556 | |
557 | 557 | List<SettingDraft> drafts = commonService.getEditDraftByName(name, SettingDraftTypeEnum.KPI, draftId); |
558 | 558 | BV.isTrue(drafts.size() <= 0, "绩效组名称在草稿中存在,请重新输入"); | ... | ... |