Commit 26a838fe5a28cc710460c702e3db94e4bb7b5ff8

Authored by 姜超
1 parent 9f48755c

feature(*): 考评报表修改

考评报表修改
fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalGroupRankStageDao.java
... ... @@ -18,6 +18,5 @@ import java.util.List;
18 18 */
19 19 public interface EvalGroupRankStageDao extends BaseMapper<EvalGroupRankStage> {
20 20  
21   - List<EvalGroupRankStage> getEffects(@Param("dataDate") LocalDate dataDate);
22 21  
23 22 }
... ...
fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalUserRankStageReportDao.java 0 → 100644
  1 +package cn.fw.morax.dao.eval;
  2 +
  3 +
  4 +import cn.fw.morax.domain.db.eval.EvalUserRankStageReport;
  5 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  6 +
  7 +/**
  8 + * <p>
  9 + * 报表绩效排名组 Mapper 接口
  10 + * </p>
  11 + *
  12 + * @author jiangchao
  13 + * @since 2023-03-31
  14 + */
  15 +public interface EvalUserRankStageReportDao extends BaseMapper<EvalUserRankStageReport> {
  16 +
  17 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserRankCodeReport.java
... ... @@ -31,6 +31,11 @@ public class EvalUserRankCodeReport extends BaseEntity&lt;EvalUserRankCodeReport, L
31 31 private Long evalUserRankReportId;
32 32  
33 33 /**
  34 + * 报表考评排名组阶段id
  35 + */
  36 + private Long evalUserRankStageReportId;
  37 +
  38 + /**
34 39 * 考评指标id
35 40 */
36 41 private Long evalGroupIndicatorId;
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserRankReport.java
... ... @@ -39,16 +39,9 @@ public class EvalUserRankReport extends BaseEntity&lt;EvalUserRankReport, Long&gt; {
39 39 private String rankName;
40 40  
41 41 /**
42   - * 考评组id
  42 + * 多阶段
43 43 */
44   - @TableField(typeHandler = LongListTypeHandler.class)
45   - private List<Long> evalGroupIds;
46   -
47   - /**
48   - * 考评所有门店id
49   - */
50   - @TableField(typeHandler = LongListTypeHandler.class)
51   - private List<Long> shopIds;
  44 + private Boolean multiStage;
52 45  
53 46 /**
54 47 * 集团id
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserRankStageReport.java 0 → 100644
  1 +package cn.fw.morax.domain.db.eval;
  2 +
  3 +import cn.fw.common.data.entity.BaseEntity;
  4 +import cn.fw.common.data.mybatis.handler.LongListTypeHandler;
  5 +import com.baomidou.mybatisplus.annotation.TableField;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +import lombok.experimental.Accessors;
  10 +
  11 +import java.time.LocalDate;
  12 +import java.time.YearMonth;
  13 +import java.util.List;
  14 +
  15 +/**
  16 + * <p>
  17 + * 报表绩效排名组
  18 + * </p>
  19 + *
  20 + * @author jiangchao
  21 + * @since 2023-03-31
  22 + */
  23 +@Data
  24 +@EqualsAndHashCode(callSuper = false)
  25 +@Accessors(chain = true)
  26 +@TableName(autoResultMap = true)
  27 +public class EvalUserRankStageReport extends BaseEntity<EvalUserRankStageReport, Long> {
  28 +
  29 + private static final long serialVersionUID = 1L;
  30 +
  31 + /**
  32 + * 报表考评排名组id
  33 + */
  34 + private Long evalUserRankReportId;
  35 +
  36 + /**
  37 + * 考评排名组id
  38 + */
  39 + private Long evalGroupRankId;
  40 +
  41 + /**
  42 + * 考评排名组阶段id
  43 + */
  44 + private Long evalGroupRankStageId;
  45 +
  46 + /**
  47 + * 考评排名组阶段名称
  48 + */
  49 + private String stageName;
  50 +
  51 + /**
  52 + * 考评组id
  53 + */
  54 + @TableField(typeHandler = LongListTypeHandler.class)
  55 + private List<Long> evalGroupIds;
  56 +
  57 + /**
  58 + * 生效时间
  59 + */
  60 + private LocalDate beginTime;
  61 +
  62 + /**
  63 + * 结束时间
  64 + */
  65 + private LocalDate overTime;
  66 +
  67 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserReport.java
... ... @@ -34,6 +34,11 @@ public class EvalUserReport extends BaseEntity&lt;EvalUserReport, Long&gt; {
34 34 private Long evalUserRankReportId;
35 35  
36 36 /**
  37 + * 报表考评排名组阶段id
  38 + */
  39 + private Long evalUserRankStageReportId;
  40 +
  41 + /**
37 42 * 维度
38 43 */
39 44 private ReportDimensionEnum dimension;
... ... @@ -88,6 +93,11 @@ public class EvalUserReport extends BaseEntity&lt;EvalUserReport, Long&gt; {
88 93 */
89 94 private Long evalUserPoolId;
90 95  
  96 + /**
  97 + * 绩效池id
  98 + */
  99 + private Long evalShopPoolId;
  100 +
91 101 public EvalUserReport() {
92 102 }
93 103  
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/EvalUseTargetEnum.java
... ... @@ -16,7 +16,7 @@ public enum EvalUseTargetEnum implements IEnum&lt;Integer&gt; {
16 16 */
17 17 NO(1, "无目标"),
18 18 FIRST_TARGET(2, "第一目标"),
19   - EXTRA_TARGET(2, "额外目标值"),
  19 + EXTRA_TARGET(3, "额外目标值"),
20 20 ;
21 21  
22 22 /**
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
... ... @@ -15,6 +15,7 @@ import com.google.common.collect.Maps;
15 15 import lombok.Getter;
16 16 import lombok.RequiredArgsConstructor;
17 17 import lombok.extern.slf4j.Slf4j;
  18 +import org.apache.rocketmq.common.filter.impl.Op;
18 19 import org.redisson.api.RLock;
19 20 import org.springframework.beans.factory.annotation.Value;
20 21 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
... ... @@ -51,15 +52,18 @@ public class EvalUserReportTask {
51 52 private final EvalGroupIndicatorHitLogService evalGroupIndicatorHitLogService;
52 53 private final EvalGroupIndicatorParamService evalGroupIndicatorParamService;
53 54 private final EvalUserRankCodeReportService evalUserRankCodeReportService;
  55 + private final EvalUserRankStageReportService evalUserRankStageReportService;
54 56 private final EvalUserValueReportService evalUserValueReportService;
55 57 private final EvalGroupIndicatorService evalGroupIndicatorService;
56 58 private final IndicatorUserValueService indicatorUserValueService;
57 59 private final EvalIndicatorValueService evalIndicatorValueService;
58 60 private final PlatformTransactionManager platformTransactionManager;
59 61 private final EvalUserRankReportService evalUserRankReportService;
  62 + private final EvalGroupRankStageService evalGroupRankStageService;
60 63 private final EvalUserReportService evalUserReportService;
61 64 private final TransactionDefinition transactionDefinition;
62 65 private final EvalUserPoolService evalUserPoolService;
  66 + private final EvalShopPoolService evalShopPoolService;
63 67 private final EvalGroupRankService evalGroupRankService;
64 68 private final EvalGroupService evalGroupService;
65 69 private final DistributedLocker distributedLocker;
... ... @@ -121,36 +125,48 @@ public class EvalUserReportTask {
121 125 * @param date
122 126 */
123 127 public void createRankReport(EvalGroupRank rank, Long groupId, LocalDate date) {
124   - List<EvalGroup> evalGroups = evalGroupService.getEffectsByRankId(rank.getId(), date);
125   - List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
126   - if (PublicUtil.isEmpty(evalGroupIds)) {
  128 + //查已经开始的考评阶段
  129 + List<EvalGroupRankStage> stages = evalGroupRankStageService.getRankStartStages(rank.getId(), date);
  130 + if (PublicUtil.isEmpty(stages)) {
127 131 return;
128 132 }
129   - List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
130   - .in(EvalUserPool::getEvalGroupId, evalGroupIds)
131   - .eq(EvalUserPool::getMonthly, YearMonth.from(date))
132   - .eq(EvalUserPool::getYn, Boolean.TRUE)
133   - );
134   - if (PublicUtil.isEmpty(pools)) {
135   - return;
136   - }
137   - List<EvalGroupIndicator> evalGroupIndicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery()
138   - .in(EvalGroupIndicator::getEvalGroupId, evalGroupIds)
139   - .eq(EvalGroupIndicator::getYn, Boolean.TRUE)
140   - .orderByAsc(EvalGroupIndicator::getId)
141   - );
142   -
143 133 //排名组
144   - EvalUserRankReport reportRank = this.saveRankReport(rank, evalGroupIds, evalGroups, date, groupId);
  134 + EvalUserRankReport reportRank = this.saveRankReport(rank, date, groupId);
145 135 final Long evalUserRankReportId = reportRank.getId();
146   - //排名组指标编码、人员、门店
147   - List<EvalUserRankCodeReport> rankCodes = this.saveRankCodeReports(evalGroupIndicators, evalUserRankReportId, date);
148   - List<EvalUserReport> evalUserReports = this.saveStaffReports(pools, date, evalUserRankReportId);
149   - List<EvalUserReport> evalShopReports = this.saveShopReports(pools, date, evalUserRankReportId);
150   - //人员维度
151   - List<EvalUserValueReport> reportUserValues = calcUser(pools, evalGroupIndicators, evalUserReports, date);
152   - //门店维度
153   - calcShop(evalShopReports, rankCodes, reportUserValues, evalUserReports, date);
  136 + for (EvalGroupRankStage rankStage : stages) {
  137 + List<EvalGroup> evalGroups = evalGroupService.getEvalGroups(rank.getId());
  138 + List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
  139 + if (PublicUtil.isEmpty(evalGroupIds)) {
  140 + continue;
  141 + }
  142 + List<EvalUserPool> userPools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
  143 + .in(EvalUserPool::getEvalGroupId, evalGroupIds)
  144 + .eq(EvalUserPool::getMonthly, YearMonth.from(date))
  145 + .eq(EvalUserPool::getYn, Boolean.TRUE)
  146 + );
  147 + List<EvalShopPool> shopPools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
  148 + .in(EvalShopPool::getEvalGroupId, evalGroupIds)
  149 + .eq(EvalShopPool::getMonthly, YearMonth.from(date))
  150 + .eq(EvalShopPool::getYn, Boolean.TRUE)
  151 + );
  152 + List<EvalGroupIndicator> evalGroupIndicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery()
  153 + .in(EvalGroupIndicator::getEvalGroupId, evalGroupIds)
  154 + .eq(EvalGroupIndicator::getYn, Boolean.TRUE)
  155 + .orderByAsc(EvalGroupIndicator::getId)
  156 + );
  157 +
  158 + EvalUserRankStageReport rankStageReport = this.saveRankStageReport(reportRank, rank, rankStage, evalGroups);
  159 + final Long evalUserRankStageReportId = rankStageReport.getId();
  160 + //排名组指标编码、人员、门店
  161 + List<EvalUserRankCodeReport> rankCodes = this.saveRankCodeReports(evalGroupIndicators, evalUserRankReportId, evalUserRankStageReportId, date);
  162 + List<EvalUserReport> evalUserReports = this.saveStaffReports(userPools, date, evalUserRankReportId, evalUserRankStageReportId);
  163 + List<EvalUserReport> evalShopReports = this.saveShopReports(shopPools, date, evalUserRankReportId, evalUserRankStageReportId);
  164 + //人员维度
  165 + List<EvalUserValueReport> reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, date);
  166 + //门店维度
  167 + calcShop(evalShopReports, rankCodes, reportUserValues, evalUserReports, date);
  168 + }
  169 +
154 170  
155 171 }
156 172 public List<EvalUserValueReport> calcUser(List<EvalUserPool> pools,
... ... @@ -200,7 +216,7 @@ public class EvalUserReportTask {
200 216 reportUserValues.add(convertParamDB(evalUserReportId, param, value, date));
201 217 }
202 218 } else {
203   - Map<Long, EvalGroupIndicatorTargetHitLog> hitLogMap = queryUserTargetValue(param.getId(), poolIds, date);
  219 + Map<Long, EvalGroupIndicatorTargetHitLog> hitLogMap = queryTargetValue(param.getId(), poolIds, date);
204 220 for (EvalUserPool userPool : pools) {
205 221 EvalGroupIndicatorTargetHitLog hitLog = hitLogMap.get(userPool.getId());
206 222 BigDecimal value = Optional.ofNullable(hitLog)
... ... @@ -218,6 +234,86 @@ public class EvalUserReportTask {
218 234 return reportUserValues;
219 235 }
220 236  
  237 + public List<EvalUserValueReport> calcShop2(List<EvalShopPool> pools,
  238 + List<EvalGroupIndicator> evalGroupIndicators,
  239 + List<EvalUserReport> evalShopReports,
  240 + LocalDate date) {
  241 + List<EvalUserValueReport> reportUserValues = new ArrayList<>();
  242 + List<Long> shopIds = pools.stream().map(EvalShopPool::getShopId).distinct().collect(Collectors.toList());
  243 + List<Long> poolIds = pools.stream().map(EvalShopPool::getId).collect(Collectors.toList());
  244 + List<Long> evalGroupIndicatorIds = evalGroupIndicators.stream().map(EvalGroupIndicator::getId).collect(Collectors.toList());
  245 + List<EvalGroupIndicatorHitLog> hitLogs = evalGroupIndicatorHitLogService.getHitLogs(evalGroupIndicatorIds, poolIds, EvalScopeEnum.SHOP, date);
  246 + Map<Long, List<EvalGroupIndicatorHitLog>> indicatorHitLogMap = hitLogs.stream().collect(Collectors.groupingBy(EvalGroupIndicatorHitLog::getEvalGroupIndicatorId));
  247 + Map<Long, Long> shopPoolReportIdMap = evalShopReports.stream().collect(Collectors.toMap(EvalUserReport::getEvalShopPoolId, EvalUserReport::getId, (v1, v2) -> v1));
  248 +
  249 + for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
  250 + final ScoreWayEnum scoreWay = groupIndicator.getScoreWay();
  251 + final IndicatorCodeTypeEnum codeType = groupIndicator.getCodeType();
  252 + final Long evalGroupIndicatorId = groupIndicator.getId();
  253 + List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
  254 + .eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, evalGroupIndicatorId)
  255 + .eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
  256 + );
  257 +
  258 + List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>());
  259 + Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream()
  260 + .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
  261 + for (EvalShopPool shopPool : pools) {
  262 + if (! shopPool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) {
  263 + continue;
  264 + }
  265 + Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(shopPool.getId()));
  266 + BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ?
  267 + hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) :
  268 + hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO);
  269 + Long evalUserReportId = shopPoolReportIdMap.get(shopPool.getId());
  270 + reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params));
  271 + }
  272 +
  273 + //是否有子指标
  274 + if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) {
  275 + for (EvalGroupIndicatorParam param : params) {
  276 + Map<Long, EvalGroupIndicatorTargetHitLog> targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.SHOP);
  277 +
  278 + for (EvalShopPool pool : pools) {
  279 + EvalGroupIndicatorTargetHitLog hitLog = targetHitLogMap.get(pool.getId());
  280 + EvalUseTargetEnum useTarget = hitLog.getUseTarget();
  281 +
  282 + BigDecimal value = Optional.ofNullable(hitLog.getValue()).orElse(BigDecimal.ZERO);
  283 + if (EvalUseTargetEnum.FIRST_TARGET.equals(useTarget)) {
  284 + value = Optional.ofNullable(hitLog.getReachValue()).orElse(BigDecimal.ZERO);
  285 + } else if (EvalUseTargetEnum.EXTRA_TARGET.equals(useTarget)) {
  286 +
  287 + }
  288 +
  289 + BigDecimal value = Optional.ofNullable(hitLog)
  290 + .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED);
  291 + Long evalUserReportId = userPoolReportIdMap.get(userPool.getId());
  292 + reportUserValues.add(convertParamDB(evalUserReportId, param, value, date));
  293 + }
  294 +
  295 +
  296 +
  297 + if (TargetTypeEnum.NO.equals(param.getTargetType())) {
  298 + Map<Long, BigDecimal> userValueMap = queryUserOriginValue(param, userIds, date);
  299 + for (EvalShopPool shopPool : pools) {
  300 + BigDecimal value = userValueMap.getOrDefault(shopPool.getUserId(), BigDecimal.ZERO);
  301 + Long evalUserReportId = userPoolReportIdMap.get(userPool.getId());
  302 + reportUserValues.add(convertParamDB(evalUserReportId, param, value, date));
  303 + }
  304 + } else {
  305 +
  306 +
  307 + }
  308 + }
  309 + }
  310 + }
  311 + if (PublicUtil.isNotEmpty(reportUserValues)) {
  312 + evalUserValueReportService.saveBatch(reportUserValues);
  313 + }
  314 + return reportUserValues;
  315 + }
  316 +
221 317 public void calcShop(List<EvalUserReport> evalShopReports,
222 318 List<EvalUserRankCodeReport> rankCodes,
223 319 List<EvalUserValueReport> reportUserValues,
... ... @@ -250,11 +346,12 @@ public class EvalUserReportTask {
250 346 }
251 347 }
252 348  
253   - public List<EvalUserReport> saveStaffReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId) {
  349 + public List<EvalUserReport> saveStaffReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId, Long evalUserRankStageReportId) {
254 350 List<EvalUserReport> evalUserReports = new ArrayList<>();
255 351 for (EvalUserPool userPool : pools) {
256 352 EvalUserReport report = new EvalUserReport();
257 353 report.setEvalUserRankReportId(evalUserRankReportId);
  354 + report.setEvalUserRankStageReportId(evalUserRankStageReportId);
258 355 report.setDimension(ReportDimensionEnum.STAFF);
259 356 report.setUserId(userPool.getUserId());
260 357 report.setUserName(userPool.getUserName());
... ... @@ -271,15 +368,15 @@ public class EvalUserReportTask {
271 368 return evalUserReports;
272 369 }
273 370  
274   - public List<EvalUserReport> saveShopReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId) {
  371 + public List<EvalUserReport> saveShopReports(List<EvalShopPool> shopPools, LocalDate date, Long evalUserRankReportId, Long evalUserRankStageReportId) {
275 372 List<EvalUserReport> evalShopReports = new ArrayList<>();
276   - Map<Long, String> shopMap = pools.stream().collect(Collectors.toMap(EvalUserPool::getShopId, EvalUserPool::getShopName, (v1, v2) -> v1));
277   - for (Long shopId : shopMap.keySet()) {
  373 + for (EvalShopPool shopPool : shopPools) {
278 374 EvalUserReport report = new EvalUserReport();
279 375 report.setDimension(ReportDimensionEnum.SHOP);
280 376 report.setEvalUserRankReportId(evalUserRankReportId);
281   - report.setShopId(shopId);
282   - report.setShopName(shopMap.get(shopId));
  377 + report.setEvalUserRankStageReportId(evalUserRankStageReportId);
  378 + report.setShopId(shopPool.getShopId());
  379 + report.setShopName(shopPool.getShopName());
283 380 report.setDataDate(date);
284 381 evalShopReports.add(report);
285 382 }
... ... @@ -314,13 +411,13 @@ public class EvalUserReportTask {
314 411 return referValueMap;
315 412 }
316 413  
317   - public Map<Long, EvalGroupIndicatorTargetHitLog> queryUserTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate) {
  414 + public Map<Long, EvalGroupIndicatorTargetHitLog> queryTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate, EvalScopeEnum scopeType) {
318 415 List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
319 416 .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
320 417 .eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)
321 418 .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
322 419 .in(EvalGroupIndicatorTargetHitLog::getPoolId, poolIds)
323   - .eq(EvalGroupIndicatorTargetHitLog::getScopeType, EvalScopeEnum.STAFF)
  420 + .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType)
324 421 .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)
325 422 );
326 423 return targetHitLogs.stream()
... ... @@ -371,7 +468,8 @@ public class EvalUserReportTask {
371 468 );
372 469 }
373 470  
374   - public List<EvalUserRankCodeReport> saveRankCodeReports(List<EvalGroupIndicator> evalGroupIndicators, Long reportRankId, LocalDate date) {
  471 + public List<EvalUserRankCodeReport> saveRankCodeReports(List<EvalGroupIndicator> evalGroupIndicators, Long reportRankId,
  472 + Long evalUserRankStageReportId, LocalDate date) {
375 473 Set<String> codes = new HashSet<>();
376 474 List<EvalUserRankCodeReport> rankCodes = new ArrayList<>();
377 475 AtomicInteger order = new AtomicInteger();
... ... @@ -380,7 +478,7 @@ public class EvalUserReportTask {
380 478 if (! codes.add(groupIndicator.getCode())) {
381 479 continue;
382 480 }
383   - rankCodes.add(this.convertRankCodeDB(groupIndicator, date, reportRankId, order));
  481 + rankCodes.add(this.convertRankCodeDB(groupIndicator, date, reportRankId, evalUserRankStageReportId, order));
384 482  
385 483 //组合指标
386 484 if (PublicUtil.isNotEmpty(groupIndicator.getCodeType()) &&
... ... @@ -413,13 +511,12 @@ public class EvalUserReportTask {
413 511 return evalGroupRanks.stream().collect(Collectors.groupingBy(EvalGroupRank::getGroupId));
414 512 }
415 513  
416   - public EvalUserRankReport saveRankReport(EvalGroupRank rank, List<Long> evalGroupIds, List<EvalGroup> evalGroups, LocalDate date, Long groupId) {
417   - List<Long> shopIds = evalGroups.stream().map(EvalGroup::getShopIds).distinct().collect(ArrayList::new, List::addAll, List::addAll);
  514 + public EvalUserRankReport saveRankReport(EvalGroupRank rank, LocalDate date, Long groupId) {
  515 +// List<Long> shopIds = evalGroups.stream().map(EvalGroup::getShopIds).distinct().collect(ArrayList::new, List::addAll, List::addAll);
418 516 EvalUserRankReport reportRank = new EvalUserRankReport();
419 517 reportRank.setRankId(rank.getId());
420 518 reportRank.setRankName(rank.getName());
421   - reportRank.setEvalGroupIds(evalGroupIds);
422   - reportRank.setShopIds(shopIds);
  519 + reportRank.setMultiStage(rank.getMultiStage());
423 520 reportRank.setDataDate(date);
424 521 reportRank.setMonthly(YearMonth.from(date));
425 522 reportRank.setGroupId(groupId);
... ... @@ -427,6 +524,24 @@ public class EvalUserReportTask {
427 524 return reportRank;
428 525 }
429 526  
  527 + public EvalUserRankStageReport saveRankStageReport(EvalUserRankReport rankReport, EvalGroupRank rank,
  528 + EvalGroupRankStage rankStage, List<EvalGroup> evalGroups) {
  529 + List<Long> shopIds = evalGroups.stream().map(EvalGroup::getShopIds).distinct().collect(ArrayList::new, List::addAll, List::addAll);
  530 + List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
  531 + EvalUserRankStageReport reportRankStage = new EvalUserRankStageReport();
  532 + reportRankStage.setEvalUserRankReportId(rankReport.getId());
  533 + reportRankStage.setEvalGroupRankId(rank.getId());
  534 + reportRankStage.setEvalGroupRankStageId(rankStage.getId());
  535 + if (PublicUtil.isNotEmpty(rankStage.getName())) {
  536 + reportRankStage.setStageName(rankStage.getName());
  537 + }
  538 + reportRankStage.setEvalGroupIds(evalGroupIds);
  539 + reportRankStage.setBeginTime(rankStage.getBeginTime());
  540 + reportRankStage.setOverTime(rankStage.getOverTime());
  541 + evalUserRankStageReportService.save(reportRankStage);
  542 + return reportRankStage;
  543 + }
  544 +
430 545 public EvalUserValueReport convertDB(Long evalUserReportId, EvalGroupIndicator groupIndicator, BigDecimal value,
431 546 LocalDate date, List<EvalGroupIndicatorParam> params) {
432 547 EvalUserValueReport userValue = new EvalUserValueReport();
... ... @@ -459,9 +574,11 @@ public class EvalUserReportTask {
459 574 return userValue;
460 575 }
461 576  
462   - public EvalUserRankCodeReport convertRankCodeDB(EvalGroupIndicator groupIndicator, LocalDate date, Long reportRankId, AtomicInteger order) {
  577 + public EvalUserRankCodeReport convertRankCodeDB(EvalGroupIndicator groupIndicator, LocalDate date, Long reportRankId,
  578 + Long evalUserRankStageReportId, AtomicInteger order) {
463 579 EvalUserRankCodeReport rankCode = new EvalUserRankCodeReport();
464 580 rankCode.setEvalUserRankReportId(reportRankId);
  581 + rankCode.setEvalUserRankStageReportId(evalUserRankStageReportId);
465 582 rankCode.setEvalGroupIndicatorId(groupIndicator.getId());
466 583 rankCode.setCode(groupIndicator.getCode());
467 584 rankCode.setCodeType(groupIndicator.getCodeType());
... ... @@ -494,5 +611,4 @@ public class EvalUserReportTask {
494 611 return rankCode;
495 612 }
496 613  
497   -
498 614 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalGroupRankStageService.java
... ... @@ -17,5 +17,11 @@ import java.util.List;
17 17 */
18 18 public interface EvalGroupRankStageService extends IService<EvalGroupRankStage> {
19 19  
20   - List<EvalGroupRankStage> getEffects(LocalDate dataDate);
  20 + /**
  21 + * 获取排名组开始的阶段
  22 + * @param rankId
  23 + * @return
  24 + */
  25 + List<EvalGroupRankStage> getRankStartStages(Long rankId, LocalDate date);
  26 +
21 27 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalUserRankStageReportService.java 0 → 100644
  1 +package cn.fw.morax.service.data.eval;
  2 +
  3 +
  4 +import cn.fw.morax.domain.db.eval.EvalUserRankStageReport;
  5 +import com.baomidou.mybatisplus.extension.service.IService;
  6 +
  7 +/**
  8 + * <p>
  9 + * 报表绩效排名组 服务类
  10 + * </p>
  11 + *
  12 + * @author jiangchao
  13 + * @since 2023-03-31
  14 + */
  15 +public interface EvalUserRankStageReportService extends IService<EvalUserRankStageReport> {
  16 +
  17 +}
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalGroupRankStageServiceImpl.java
... ... @@ -4,6 +4,7 @@ package cn.fw.morax.service.data.eval.impl;
4 4 import cn.fw.morax.dao.eval.EvalGroupRankStageDao;
5 5 import cn.fw.morax.domain.db.eval.EvalGroupRankStage;
6 6 import cn.fw.morax.service.data.eval.EvalGroupRankStageService;
  7 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
7 8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 9 import org.springframework.stereotype.Service;
9 10  
... ... @@ -22,7 +23,13 @@ import java.util.List;
22 23 public class EvalGroupRankStageServiceImpl extends ServiceImpl<EvalGroupRankStageDao, EvalGroupRankStage> implements EvalGroupRankStageService {
23 24  
24 25 @Override
25   - public List<EvalGroupRankStage> getEffects(LocalDate dataDate) {
26   - return this.baseMapper.getEffects(dataDate);
  26 + public List<EvalGroupRankStage> getRankStartStages(Long rankId, LocalDate date) {
  27 + List<EvalGroupRankStage> stages = this.baseMapper.selectList(Wrappers.<EvalGroupRankStage>lambdaQuery()
  28 + .eq(EvalGroupRankStage::getEvalGroupRankId, rankId)
  29 + .eq(EvalGroupRankStage::getYn, Boolean.TRUE)
  30 + .le(EvalGroupRankStage::getBeginTime, date)
  31 + .orderByAsc(EvalGroupRankStage::getBeginTime)
  32 + );
  33 + return stages;
27 34 }
28 35 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalUserRankStageServiceImplReport.java 0 → 100644
  1 +package cn.fw.morax.service.data.eval.impl;
  2 +
  3 +
  4 +import cn.fw.morax.dao.eval.EvalUserRankStageReportDao;
  5 +import cn.fw.morax.domain.db.eval.EvalUserRankStageReport;
  6 +import cn.fw.morax.service.data.eval.EvalUserRankStageReportService;
  7 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8 +import org.springframework.stereotype.Service;
  9 +
  10 +/**
  11 + * <p>
  12 + * 报表绩效排名组 服务实现类
  13 + * </p>
  14 + *
  15 + * @author jiangchao
  16 + * @since 2023-03-31
  17 + */
  18 +@Service
  19 +public class EvalUserRankStageServiceImplReport extends ServiceImpl<EvalUserRankStageReportDao, EvalUserRankStageReport>
  20 + implements EvalUserRankStageReportService {
  21 +
  22 +}
... ...