Commit 13d02b329a52f922329cb024c87f2ef592c4e827
1 parent
67f6a578
feature(*): 考评计算修改
考评计算修改
Showing
5 changed files
with
283 additions
and
148 deletions
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupRankConfigBO.java
0 → 100644
1 | +package cn.fw.morax.domain.bo.eval; | |
2 | + | |
3 | +import cn.fw.morax.domain.db.eval.EvalGroup; | |
4 | +import cn.fw.morax.domain.db.eval.EvalGroupRank; | |
5 | +import cn.fw.morax.domain.db.eval.EvalGroupRankStage; | |
6 | +import lombok.AllArgsConstructor; | |
7 | +import lombok.Data; | |
8 | +import lombok.NoArgsConstructor; | |
9 | + | |
10 | +import java.time.LocalDate; | |
11 | +import java.util.Set; | |
12 | + | |
13 | +/** | |
14 | + * @author : kurisu | |
15 | + * @version : 1.0 | |
16 | + * @className : KpiGroupCalculableBO | |
17 | + * @description : 需要计算绩效的考评组 | |
18 | + * @date : 2022-04-16 11:31 | |
19 | + */ | |
20 | +@Data | |
21 | +@NoArgsConstructor | |
22 | +@AllArgsConstructor | |
23 | +public class EvalGroupRankConfigBO { | |
24 | + | |
25 | + private EvalGroupRank evalGroupRank; | |
26 | + | |
27 | + private EvalGroupRankStage evalGroupRankStage; | |
28 | + | |
29 | + private EvalGroup evalGroup; | |
30 | +} | ... | ... |
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... | ... | @@ -9,7 +9,6 @@ import cn.fw.morax.common.utils.ThreadPoolUtil; |
9 | 9 | import cn.fw.morax.domain.bo.eval.*; |
10 | 10 | import cn.fw.morax.domain.bo.kpi.EvalGroupCalculableRankBO; |
11 | 11 | import cn.fw.morax.domain.db.eval.*; |
12 | -import cn.fw.morax.domain.dto.salary.SalaryExtraDTO; | |
13 | 12 | import cn.fw.morax.domain.enums.*; |
14 | 13 | import cn.fw.morax.service.biz.CommonService; |
15 | 14 | import cn.fw.morax.service.biz.calculator.eval.kpi.EvalKpiBaseCalculator; |
... | ... | @@ -40,7 +39,6 @@ import java.time.YearMonth; |
40 | 39 | import java.util.*; |
41 | 40 | import java.util.concurrent.*; |
42 | 41 | import java.util.concurrent.atomic.AtomicReference; |
43 | -import java.util.function.Consumer; | |
44 | 42 | import java.util.stream.Collectors; |
45 | 43 | |
46 | 44 | /** |
... | ... | @@ -169,20 +167,22 @@ public class EvalCalculateService { |
169 | 167 | Map<Long, List<EvalGroup>> stageEvalGroupMap = evalGroups.stream().collect(Collectors.groupingBy(EvalGroup::getEvalGroupRankStageId)); |
170 | 168 | //计算考评得分 |
171 | 169 | CompletableFuture<Void>[] futuresArr = evalGroups.stream().map(evalGroup -> CompletableFuture.runAsync(() -> { |
172 | - Long start = System.currentTimeMillis(); | |
170 | + if (Boolean.FALSE.equals(this.checkEvalConfigValid(evalGroup, dataDate))){ | |
171 | + return; | |
172 | + } | |
173 | + final EvalGroupRankConfigBO calcConfigBo = this.getEvalCalcConfig(evalGroup, dataDate); | |
174 | + final Long start = System.currentTimeMillis(); | |
173 | 175 | log.info(" 考评组计算:考评组进行计算:{}", evalGroup.getId()); |
174 | 176 | TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition); |
175 | - final Long evalGroupRankStageId = evalGroup.getEvalGroupRankStageId(); | |
176 | - final Long evalGroupId = evalGroup.getId(); | |
177 | 177 | try { |
178 | - EvalGroupCalcParamsBO calcDateParam = this.getCalcDate(evalGroupRankStageId, dataDate, EvalCalStageDimEnum.STAGE_STAGE); | |
179 | - calculateEvalGroup(evalGroupId, calcDateParam, EvalScopeEnum.STAFF); | |
180 | - calculateEvalGroup(evalGroupId, calcDateParam, EvalScopeEnum.SHOP); | |
178 | + EvalGroupCalcParamsBO calcDateParam = this.getCalcDate(calcConfigBo, dataDate, EvalCalStageDimEnum.STAGE_STAGE); | |
179 | + calculateEvalGroup(calcConfigBo, calcDateParam, EvalScopeEnum.STAFF); | |
180 | + calculateEvalGroup(calcConfigBo, calcDateParam, EvalScopeEnum.SHOP); | |
181 | 181 | //多阶段才需要计算-阶段累计 |
182 | 182 | if (calcDateParam.getMultiStage()) { |
183 | - EvalGroupCalcParamsBO calcDateParamM = this.getCalcDate(evalGroupRankStageId, dataDate, EvalCalStageDimEnum.STAGE_MONTH); | |
184 | - calculateEvalGroup(evalGroupId, calcDateParamM, EvalScopeEnum.STAFF); | |
185 | - calculateEvalGroup(evalGroupId, calcDateParamM, EvalScopeEnum.SHOP); | |
183 | + EvalGroupCalcParamsBO calcDateParamM = this.getCalcDate(calcConfigBo, dataDate, EvalCalStageDimEnum.STAGE_MONTH); | |
184 | + calculateEvalGroup(calcConfigBo, calcDateParamM, EvalScopeEnum.STAFF); | |
185 | + calculateEvalGroup(calcConfigBo, calcDateParamM, EvalScopeEnum.SHOP); | |
186 | 186 | } |
187 | 187 | platformTransactionManager.commit(transactionStatus); |
188 | 188 | log.info(" 考评组计算:考评组计算完成:{},耗时:{} s", evalGroup.getId(), TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start)); |
... | ... | @@ -197,19 +197,24 @@ public class EvalCalculateService { |
197 | 197 | this.calcEvalRank(evalGroupRankId, dataDate); |
198 | 198 | //计算考评奖惩 |
199 | 199 | CompletableFuture<List<EvalRewardPushSalaryBO>>[] futuresRewardArr = stageEvalGroupMap.entrySet().stream().map(stage -> CompletableFuture.supplyAsync(() -> { |
200 | - Long start = System.currentTimeMillis(); | |
201 | - log.info("考评奖惩计算:考评奖惩开始进行计算,考评排名组:{}", evalGroupRankId); | |
200 | + final Long evalGroupRankStageId = stage.getKey(); | |
201 | + if (Boolean.FALSE.equals(this.checkEvalRewardConfigValid(evalGroupRankStageId, dataDate))){ | |
202 | + return new ArrayList<>(); | |
203 | + } | |
204 | + final EvalGroupRankConfigBO calcConfigBo = this.getEvalRewardCalcConfig(evalGroupRankStageId, dataDate); | |
205 | + final Long start = System.currentTimeMillis(); | |
206 | + log.info("考评奖惩计算:考评奖惩开始进行计算,考评阶段:{}", evalGroupRankStageId); | |
202 | 207 | List<EvalRewardPushSalaryBO> res = new ArrayList<>(); |
203 | 208 | TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition); |
204 | 209 | try { |
205 | - res = calculateEvalStageReward(evalGroupRankId, stage, dataDate); | |
210 | + res = calculateEvalStageReward(calcConfigBo, stage, dataDate); | |
206 | 211 | platformTransactionManager.commit(transactionStatus); |
207 | 212 | } catch (Exception ex) { |
208 | 213 | platformTransactionManager.rollback(transactionStatus); |
209 | 214 | log.error("计算考评奖惩数据失败:{}", bo, ex); |
210 | 215 | success.set(Boolean.FALSE); |
211 | 216 | } |
212 | - log.info("考评奖惩计算:考评奖惩计算完成,考评排名组:{},耗时:{} s", evalGroupRankId, TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start)); | |
217 | + log.info("考评奖惩计算:考评奖惩计算完成,考评阶段:{},耗时:{} s", evalGroupRankStageId, TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start)); | |
213 | 218 | return res; |
214 | 219 | }, threadPool)).<CompletableFuture<List<EvalRewardPushSalaryBO>>>toArray(CompletableFuture[]::new); |
215 | 220 | CompletableFuture.allOf(futuresRewardArr).join(); |
... | ... | @@ -218,14 +223,14 @@ public class EvalCalculateService { |
218 | 223 | overflowsList.add(str); |
219 | 224 | } else { |
220 | 225 | //计算排名、报表数据抽取 |
221 | - //考评奖惩 | |
226 | + //考评奖惩推送薪酬 | |
222 | 227 | this.cacheEvalRewardPushSalary(futuresRewardArr); |
223 | 228 | //考评门店角色奖惩 |
224 | 229 | this.cacheEvalShopRoleRewardPushSalary(evalGroupRankId, dataDate); |
225 | 230 | //保存计算结果 |
226 | 231 | this.cacheSaveCalcResult(evalCalcId, bo.getEvalGroupRankId(), dataDate, evalGroups); |
227 | 232 | evalCalcService.modifyStatus(evalCalcId, EvalCalcStatusEnum.SAVE_CALC_RESULT); |
228 | - //是否分配奖惩 | |
233 | + //是否分配门店奖惩 | |
229 | 234 | this.cacheDistShopReward(evalCalcId, evalGroupRankId, dataDate); |
230 | 235 | } |
231 | 236 | } catch (Exception re) { |
... | ... | @@ -251,6 +256,62 @@ public class EvalCalculateService { |
251 | 256 | stringRedisTemplate.opsForSet().add(evalCalculationVal.getCacheSaveCalcResult(), json); |
252 | 257 | } |
253 | 258 | |
259 | + public Boolean checkEvalConfigValid(EvalGroup evalGroup, LocalDate calcDate) { | |
260 | + if (PublicUtil.isEmpty(evalGroup)) { | |
261 | + return Boolean.FALSE; | |
262 | + } | |
263 | + EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroup.getEvalGroupRankStageId(), calcDate); | |
264 | + if (PublicUtil.isEmpty(evalGroupRankStage)) { | |
265 | + log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); | |
266 | + return Boolean.FALSE; | |
267 | + } | |
268 | + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId()); | |
269 | + if (PublicUtil.isEmpty(evalGroupRank)) { | |
270 | + log.error("考评组[{}]排名组不存在,终止计算!", evalGroup.getEvalGroupRankId()); | |
271 | + return Boolean.FALSE; | |
272 | + } | |
273 | + return Boolean.TRUE; | |
274 | + } | |
275 | + | |
276 | + public EvalGroupRankConfigBO getEvalCalcConfig(EvalGroup evalGroup, LocalDate calcDate) { | |
277 | + EvalGroupRankConfigBO rankConfigBO = new EvalGroupRankConfigBO(); | |
278 | + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId()); | |
279 | + EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroup.getEvalGroupRankStageId(), calcDate); | |
280 | + | |
281 | + rankConfigBO.setEvalGroupRank(evalGroupRank); | |
282 | + rankConfigBO.setEvalGroupRankStage(evalGroupRankStage); | |
283 | + rankConfigBO.setEvalGroup(evalGroup); | |
284 | + return rankConfigBO; | |
285 | + } | |
286 | + | |
287 | + public Boolean checkEvalRewardConfigValid(Long evalGroupRankStageId, LocalDate calcDate) { | |
288 | + if (PublicUtil.isEmpty(evalGroupRankStageId)) { | |
289 | + return Boolean.FALSE; | |
290 | + } | |
291 | + EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroupRankStageId, calcDate); | |
292 | + if (PublicUtil.isEmpty(evalGroupRankStage)) { | |
293 | + log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroupRankStageId)); | |
294 | + return Boolean.FALSE; | |
295 | + } | |
296 | + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroupRankStage.getEvalGroupRankId()); | |
297 | + if (PublicUtil.isEmpty(evalGroupRank)) { | |
298 | + log.error("考评组[{}]排名组不存在,终止计算!", evalGroupRankStage.getEvalGroupRankId()); | |
299 | + return Boolean.FALSE; | |
300 | + } | |
301 | + return Boolean.TRUE; | |
302 | + } | |
303 | + | |
304 | + public EvalGroupRankConfigBO getEvalRewardCalcConfig(Long evalGroupRankStageId, LocalDate calcDate) { | |
305 | + EvalGroupRankConfigBO rankConfigBO = new EvalGroupRankConfigBO(); | |
306 | + EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroupRankStageId, calcDate); | |
307 | + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroupRankStage.getEvalGroupRankId()); | |
308 | + | |
309 | + rankConfigBO.setEvalGroupRank(evalGroupRank); | |
310 | + rankConfigBO.setEvalGroupRankStage(evalGroupRankStage); | |
311 | + return rankConfigBO; | |
312 | + } | |
313 | + | |
314 | + | |
254 | 315 | private void cacheEvalRewardPushSalary(CompletableFuture<List<EvalRewardPushSalaryBO>>[] futuresRewardArr) { |
255 | 316 | List<EvalRewardPushSalaryBO> evalRewardPushSalaryBOS = new ArrayList<>(); |
256 | 317 | Arrays.stream(futuresRewardArr).forEach(future -> { |
... | ... | @@ -298,17 +359,9 @@ public class EvalCalculateService { |
298 | 359 | * @param localDate |
299 | 360 | * @return |
300 | 361 | */ |
301 | - public EvalGroupCalcParamsBO getCalcDate(Long evalGroupRankStageId, final LocalDate localDate,EvalCalStageDimEnum stageDimEnum) { | |
302 | - EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroupRankStageId, localDate); | |
303 | - if (Objects.isNull(evalGroupRankStage)) { | |
304 | - log.error("考评排名组阶段[{}]不存在,终止计算!", evalGroupRankStageId); | |
305 | - return null; | |
306 | - } | |
307 | - EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroupRankStage.getEvalGroupRankId()); | |
308 | - if (Objects.isNull(evalGroupRank)) { | |
309 | - log.error("考评排名组[{}]不存在,终止计算!", evalGroupRankStage.getEvalGroupRankId()); | |
310 | - return null; | |
311 | - } | |
362 | + public EvalGroupCalcParamsBO getCalcDate(EvalGroupRankConfigBO calcConfigBo, final LocalDate localDate,EvalCalStageDimEnum stageDimEnum) { | |
363 | + EvalGroupRankStage evalGroupRankStage = calcConfigBo.getEvalGroupRankStage(); | |
364 | + EvalGroupRank evalGroupRank = calcConfigBo.getEvalGroupRank(); | |
312 | 365 | EvalGroupCalcParamsBO paramsBO = new EvalGroupCalcParamsBO(); |
313 | 366 | LocalDate firstStageStartTime = evalGroupRankStageService.getRankStartTime(evalGroupRank.getId(), evalGroupRank.getPeriod(), localDate); |
314 | 367 | paramsBO.setCalcMonthBeginDate(firstStageStartTime); |
... | ... | @@ -330,12 +383,11 @@ public class EvalCalculateService { |
330 | 383 | return paramsBO; |
331 | 384 | } |
332 | 385 | |
333 | - public void calculateEvalGroup(final Long evalGroupId, final EvalGroupCalcParamsBO calcDateParam, EvalScopeEnum scopeType) { | |
334 | - if (Objects.isNull(calcDateParam)){ | |
335 | - log.error("参数不够,终止计算!"); | |
336 | - return; | |
337 | - } | |
338 | - List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroupId, calcDateParam, scopeType); | |
386 | + public void calculateEvalGroup(EvalGroupRankConfigBO calcConfigBo, final EvalGroupCalcParamsBO calcDateParam, EvalScopeEnum scopeType) { | |
387 | + EvalGroup evalGroup = calcConfigBo.getEvalGroup(); | |
388 | + | |
389 | + final Long evalGroupId = evalGroup.getId(); | |
390 | + List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(calcConfigBo, calcDateParam, scopeType); | |
339 | 391 | if (PublicUtil.isEmpty(userShops)) { |
340 | 392 | log.error("考评组[{}]人员为空,终止计算!", evalGroupId); |
341 | 393 | return; |
... | ... | @@ -356,28 +408,22 @@ public class EvalCalculateService { |
356 | 408 | } |
357 | 409 | } |
358 | 410 | |
359 | - public List<EvalRewardPushSalaryBO> calculateEvalStageReward(final Long evalGroupRankId, | |
411 | + public List<EvalRewardPushSalaryBO> calculateEvalStageReward(EvalGroupRankConfigBO calcConfigBo, | |
360 | 412 | Map.Entry<Long, List<EvalGroup>> stageEvalGroupEntry, |
361 | 413 | LocalDate dataDate) { |
362 | 414 | final Long evalGroupRankStageId = stageEvalGroupEntry.getKey(); |
363 | 415 | final List<EvalGroup> evalGroups = stageEvalGroupEntry.getValue(); |
364 | - EvalGroupCalcParamsBO calcDateParam = this.getCalcDate(evalGroupRankStageId, dataDate, EvalCalStageDimEnum.STAGE_STAGE); | |
365 | - if (Objects.isNull(calcDateParam)){ | |
366 | - log.error("参数不够,终止计算!"); | |
367 | - return new ArrayList<>(); | |
368 | - } | |
416 | + EvalGroupCalcParamsBO calcDateParam = this.getCalcDate(calcConfigBo, dataDate, EvalCalStageDimEnum.STAGE_STAGE); | |
369 | 417 | final LocalDate calcEndDate = calcDateParam.getCalcEndDate(); |
370 | 418 | final Date date = DateUtil.localDateTime2Date(calcDateParam.getCalcEndDate().atTime(23, 23, 59)); |
371 | - EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroupRankStageId, calcEndDate); | |
372 | - if (Objects.isNull(evalGroupRankStage)) { | |
373 | - log.error("考评排名组阶段[{}]不存在,终止计算!", evalGroupRankStageId); | |
374 | - return new ArrayList<>(); | |
375 | - } | |
419 | + EvalGroupRank evalGroupRank = calcConfigBo.getEvalGroupRank(); | |
420 | + EvalGroupRankStage evalGroupRankStage = calcConfigBo.getEvalGroupRankStage(); | |
421 | + final Long evalGroupRankId = evalGroupRank.getId(); | |
376 | 422 | |
377 | 423 | List<EvalRewardPushSalaryBO> evalRewards = new ArrayList<>(); |
378 | 424 | for (EvalScopeEnum scopeType : EvalScopeEnum.values()) { |
379 | 425 | List<EvalGroupRewardDimBO> rewardDims = this.getRewardBOS(evalGroupRankStageId, scopeType); |
380 | - List<EvalGroupUserShop> userShops = this.getRewardObjs(calcDateParam, evalGroupRankStageId , evalGroups, scopeType); | |
426 | + List<EvalGroupUserShop> userShops = this.getRewardObjs(calcConfigBo, calcDateParam, evalGroupRankStageId , evalGroups, scopeType); | |
381 | 427 | if (PublicUtil.isEmpty(userShops)) { |
382 | 428 | log.error("考评阶段[{}]人员为空,终止计算!", evalGroupRankStageId); |
383 | 429 | continue; |
... | ... | @@ -697,64 +743,25 @@ public class EvalCalculateService { |
697 | 743 | } |
698 | 744 | |
699 | 745 | /** |
700 | - * @param evalGroupId | |
701 | 746 | * @param calcDateParam .getCalcEndDate() <=阶段的截止时间的一个计算时间 |
702 | 747 | * @param scopeType |
703 | 748 | * @return |
704 | 749 | */ |
705 | - public List<EvalGroupUserShop> buildEvalGroupObj(Long evalGroupId, EvalGroupCalcParamsBO calcDateParam, EvalScopeEnum scopeType) { | |
706 | - EvalGroup evalGroup = evalGroupService.getById(evalGroupId); | |
707 | - if (Objects.isNull(evalGroup)) { | |
708 | - log.error("考评组[{}]不存在,终止计算!", evalGroupId); | |
709 | - return new ArrayList<>(); | |
710 | - } | |
750 | + public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroupRankConfigBO calcConfigBo, EvalGroupCalcParamsBO calcDateParam, EvalScopeEnum scopeType) { | |
751 | + final EvalGroupRank evalGroupRank = calcConfigBo.getEvalGroupRank(); | |
752 | + final EvalGroupRankStage evalGroupRankStage = calcConfigBo.getEvalGroupRankStage(); | |
753 | + final EvalGroup evalGroup = calcConfigBo.getEvalGroup(); | |
711 | 754 | final Long groupId = evalGroup.getGroupId(); |
712 | - EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getByIdAndSetTime(evalGroup.getEvalGroupRankStageId(), calcDateParam.getCalcEndDate()); | |
713 | - if (Objects.isNull(evalGroupRankStage)) { | |
714 | - log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); | |
715 | - return new ArrayList<>(); | |
716 | - } | |
717 | - EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId()); | |
718 | - if (Objects.isNull(evalGroupRank)) { | |
719 | - log.error("考评组[{}]排名组不存在,终止计算!", evalGroup.getEvalGroupRankId()); | |
720 | - return new ArrayList<>(); | |
721 | - } | |
722 | 755 | |
723 | 756 | List<EvalGroupUserShop> userShops = new ArrayList<>(); |
724 | 757 | if (EvalScopeEnum.STAFF.equals(scopeType)) { |
725 | -// //考评不计算保护期员工 | |
726 | -// List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() | |
727 | -// .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId()) | |
728 | -// .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate()) | |
729 | -// .eq(EvalGroupUser::getYn, Boolean.TRUE) | |
730 | -// .eq(EvalGroupUser::getIgnored, Boolean.FALSE) | |
731 | -// ); | |
732 | -// //转正员工要计算 | |
733 | -// List<EvalGroupUser> turnPositiveUsers = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() | |
734 | -// .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId()) | |
735 | -// .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate()) | |
736 | -// .eq(EvalGroupUser::getYn, Boolean.TRUE) | |
737 | -// .eq(EvalGroupUser::getIgnored, Boolean.TRUE) | |
738 | -// .eq(EvalGroupUser::getIgnoreCause, KpiIgnoreCauseEnum.TURN_POSITIVE_AFTER) | |
739 | -// ); | |
740 | -// if (PublicUtil.isNotEmpty(turnPositiveUsers)) { | |
741 | -// users.addAll(turnPositiveUsers); | |
742 | -// } | |
743 | - List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() | |
744 | - .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId()) | |
745 | - .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate()) | |
746 | - .eq(EvalGroupUser::getYn, Boolean.TRUE) | |
758 | + List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery() | |
759 | + .eq(EvalUserPool::getEvalGroupRankStageId, evalGroupRankStage.getId()) | |
760 | + .eq(EvalUserPool::getMonthly, YearMonth.from(calcDateParam.getCalcEndDate())) | |
761 | + .eq(EvalUserPool::getYn, Boolean.TRUE) | |
747 | 762 | ); |
748 | - Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroupRankStage, users, calcDateParam.getCalcEndDate(), scopeType); | |
749 | - for (EvalGroupUser user : users) { | |
750 | - EvalUserPool userPool = userPoolMap.get(user.getUserId()); | |
751 | - userPool.setDataDate(user.getDataDate()); | |
752 | - //试用期员工不计算绩效 | |
753 | - if (Boolean.TRUE.equals(user.getIgnored()) && PublicUtil.isNotEmpty(user.getStaffStatus()) && SalaryStaffStatusEnum.PROBATION.equals(user.getStaffStatus())) { | |
754 | - evalUserPoolService.updateById(userPool); | |
755 | - continue; | |
756 | - } | |
757 | - userShops.add(convertBO(user, userPool, evalGroupRank, evalGroupRankStage,calcDateParam, scopeType)); | |
763 | + for (EvalUserPool userPool : pools) { | |
764 | + userShops.add(this.convertBO(userPool, evalGroupRank, evalGroupRankStage,calcDateParam, scopeType)); | |
758 | 765 | } |
759 | 766 | return userShops; |
760 | 767 | } |
... | ... | @@ -764,8 +771,7 @@ public class EvalCalculateService { |
764 | 771 | List<Long> calcShopIds = commonService.filterInvalidShop(groupId, calcDateParam.getCalcEndDate(), evalGroup.getShopIds()); |
765 | 772 | for (Long shopId : calcShopIds) { |
766 | 773 | EvalShopPool shopPool = shopPoolBOMap.get(shopId); |
767 | -// Boolean ignored = ! distShopIds.contains(shopId); | |
768 | - userShops.add(this.convertBO(shopPool, evalGroup, evalGroupRank, evalGroupRankStage, calcDateParam)); | |
774 | + userShops.add(this.convertShopBO(shopPool, evalGroup, evalGroupRank, evalGroupRankStage, calcDateParam)); | |
769 | 775 | } |
770 | 776 | return userShops; |
771 | 777 | } |
... | ... | @@ -810,25 +816,26 @@ public class EvalCalculateService { |
810 | 816 | Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroupRankStage, users, calcDateParam.getCalcEndDate(), scopeType); |
811 | 817 | for (EvalGroupUser user : users) { |
812 | 818 | EvalUserPool userPool = userPoolMap.get(user.getUserId()); |
813 | - userShops.add(convertBO(user, userPool, evalGroupRank, evalGroupRankStage,calcDateParam, EvalScopeEnum.MANAGEMENT)); | |
819 | + userShops.add(convertBO(userPool, evalGroupRank, evalGroupRankStage,calcDateParam, EvalScopeEnum.MANAGEMENT)); | |
814 | 820 | } |
815 | 821 | return userShops; |
816 | 822 | } |
817 | 823 | |
818 | - public List<EvalGroupUserShop> getRewardObjs(EvalGroupCalcParamsBO calcDateParam, Long evalGroupRankStageId , List<EvalGroup> evalGroups, EvalScopeEnum scopeType) { | |
824 | + public List<EvalGroupUserShop> getRewardObjs(EvalGroupRankConfigBO calcConfigBo, EvalGroupCalcParamsBO calcDateParam, Long evalGroupRankStageId , List<EvalGroup> evalGroups, EvalScopeEnum scopeType) { | |
819 | 825 | List<EvalGroupUserShop> userShops = Lists.newArrayListWithCapacity(80); |
820 | 826 | if (EvalScopeEnum.MANAGEMENT.equals(scopeType)) { |
821 | 827 | userShops = this.buildManagerEvalGroupObj(evalGroupRankStageId, calcDateParam, scopeType); |
822 | - return userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())) | |
828 | + return userShops.stream().filter(userShop -> Boolean.TRUE.equals(userShop.getInclusion())) | |
823 | 829 | .collect(Collectors.toList()); |
824 | 830 | } |
825 | 831 | |
826 | - final List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList()); | |
827 | - for (Long evalGroupId : evalGroupIds) { | |
828 | - List<EvalGroupUserShop> evalGroupUserShops = this.buildEvalGroupObj(evalGroupId, calcDateParam, scopeType); | |
832 | + //普通岗位、门店 奖惩对象 | |
833 | + for (EvalGroup evalGroup : evalGroups) { | |
834 | + calcConfigBo.setEvalGroup(evalGroup); | |
835 | + List<EvalGroupUserShop> evalGroupUserShops = this.buildEvalGroupObj(calcConfigBo, calcDateParam, scopeType); | |
829 | 836 | if (PublicUtil.isNotEmpty(evalGroupUserShops)) { |
830 | 837 | List<EvalGroupUserShop> calcKpiEvalGroupUserShops = evalGroupUserShops.stream() |
831 | - .filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())) | |
838 | + .filter(userShop -> Boolean.TRUE.equals(userShop.getInclusion())) | |
832 | 839 | .collect(Collectors.toList()); |
833 | 840 | if (PublicUtil.isNotEmpty(calcKpiEvalGroupUserShops)) { |
834 | 841 | userShops.addAll(calcKpiEvalGroupUserShops); |
... | ... | @@ -1013,21 +1020,21 @@ public class EvalCalculateService { |
1013 | 1020 | } |
1014 | 1021 | } |
1015 | 1022 | |
1016 | - public List<EvalGroupUserShop> filterUserShops(EvalGroupRewardDimBO dim, EvalScopeEnum scopeType, List<EvalGroupUserShop> userShops) { | |
1017 | - if (EvalScopeEnum.STAFF.equals(scopeType)) { | |
1018 | - return userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); | |
1019 | - } | |
1020 | - List<EvalGroupUserShop> filterUserShops = new ArrayList<>(); | |
1023 | +// public List<EvalGroupUserShop> filterUserShops(EvalGroupRewardDimBO dim, EvalScopeEnum scopeType, List<EvalGroupUserShop> userShops) { | |
1021 | 1024 | // if (EvalScopeEnum.STAFF.equals(scopeType)) { |
1022 | -// filterUserShops = userShops.stream().filter(userShop -> dim.getPostIds().contains(userShop.getPostId())).collect(Collectors.toList()); | |
1023 | -// } else { | |
1025 | +// return userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); | |
1026 | +// } | |
1027 | +// List<EvalGroupUserShop> filterUserShops = new ArrayList<>(); | |
1028 | +//// if (EvalScopeEnum.STAFF.equals(scopeType)) { | |
1029 | +//// filterUserShops = userShops.stream().filter(userShop -> dim.getPostIds().contains(userShop.getPostId())).collect(Collectors.toList()); | |
1030 | +//// } else { | |
1031 | +//// filterUserShops = userShops.stream().filter(userShop -> dim.getShopIds().contains(userShop.getShopId())).collect(Collectors.toList()); | |
1032 | +//// } | |
1033 | +// if (EvalScopeEnum.SHOP.equals(scopeType)) { | |
1024 | 1034 | // filterUserShops = userShops.stream().filter(userShop -> dim.getShopIds().contains(userShop.getShopId())).collect(Collectors.toList()); |
1025 | 1035 | // } |
1026 | - if (EvalScopeEnum.SHOP.equals(scopeType)) { | |
1027 | - filterUserShops = userShops.stream().filter(userShop -> dim.getShopIds().contains(userShop.getShopId())).collect(Collectors.toList()); | |
1028 | - } | |
1029 | - return filterUserShops; | |
1030 | - } | |
1036 | +// return filterUserShops; | |
1037 | +// } | |
1031 | 1038 | |
1032 | 1039 | /** |
1033 | 1040 | * 计算绩效金额 |
... | ... | @@ -1365,16 +1372,15 @@ public class EvalCalculateService { |
1365 | 1372 | return poolDetail; |
1366 | 1373 | } |
1367 | 1374 | |
1368 | - public EvalGroupUserShop convertBO(EvalGroupUser user, | |
1369 | - EvalUserPool userPool, | |
1375 | + public EvalGroupUserShop convertBO(EvalUserPool userPool, | |
1370 | 1376 | EvalGroupRank evalGroupRank, |
1371 | 1377 | EvalGroupRankStage evalGroupRankStage, |
1372 | 1378 | EvalGroupCalcParamsBO calcDateParam, |
1373 | 1379 | EvalScopeEnum evalScopeType) { |
1374 | 1380 | EvalGroupUserShop userShop = new EvalGroupUserShop(); |
1375 | - userShop.setName(user.getUserName()); | |
1381 | + userShop.setName(userPool.getUserName()); | |
1376 | 1382 | userShop.setScopeType(evalScopeType); |
1377 | - userShop.setEvalGroupId(user.getEvalGroupId()); | |
1383 | + userShop.setEvalGroupId(userPool.getEvalGroupId()); | |
1378 | 1384 | userShop.setEvalGroupRankId(evalGroupRankStage.getEvalGroupRankId()); |
1379 | 1385 | userShop.setEvalGroupRankStageId(evalGroupRankStage.getId()); |
1380 | 1386 | userShop.setPoolId(userPool.getId()); |
... | ... | @@ -1383,14 +1389,14 @@ public class EvalCalculateService { |
1383 | 1389 | userShop.setShopId(userPool.getShopId()); |
1384 | 1390 | userShop.setScoreRatio(Optional.ofNullable(userPool.getScoreRatio()).orElse(BigDecimal.ZERO)); |
1385 | 1391 | userShop.setStageAccumulationScoreRatio(Optional.ofNullable(userPool.getStageAccumulationScoreRatio()).orElse(BigDecimal.ZERO)); |
1386 | - userShop.setReferId(user.getUserId()); | |
1392 | + userShop.setReferId(userPool.getUserId()); | |
1387 | 1393 | userShop.setBeginDate(calcDateParam.getCalcBeginDate()); |
1388 | - userShop.setDataDate(user.getDataDate()); | |
1394 | + userShop.setDataDate(userPool.getDataDate()); | |
1389 | 1395 | userShop.setMultiStage(evalGroupRank.getMultiStage()); |
1390 | - userShop.setGroupId(user.getGroupId()); | |
1396 | + userShop.setGroupId(userPool.getGroupId()); | |
1391 | 1397 | userShop.setScore(BigDecimal.ZERO); |
1392 | 1398 | // userShop.setReward(BigDecimal.ZERO); |
1393 | - userShop.setIgnored(user.getIgnored()); | |
1399 | + userShop.setInclusion(userPool.getInclusion()); | |
1394 | 1400 | userShop.setStageDimEnum(calcDateParam.getStageDimEnum()); |
1395 | 1401 | if (PublicUtil.isNotEmpty(calcDateParam.getCalcMonthBeginDate())) { |
1396 | 1402 | userShop.setCalcMonthBeginDate(calcDateParam.getCalcMonthBeginDate()); |
... | ... | @@ -1423,7 +1429,7 @@ public class EvalCalculateService { |
1423 | 1429 | // return userShop; |
1424 | 1430 | // } |
1425 | 1431 | |
1426 | - public EvalGroupUserShop convertBO(EvalShopPool shopPool, | |
1432 | + public EvalGroupUserShop convertShopBO(EvalShopPool shopPool, | |
1427 | 1433 | EvalGroup evalGroup, |
1428 | 1434 | EvalGroupRank evalGroupRank, |
1429 | 1435 | EvalGroupRankStage evalGroupRankStage, |
... | ... | @@ -1449,7 +1455,7 @@ public class EvalCalculateService { |
1449 | 1455 | userShop.setMultiStage(evalGroupRank.getMultiStage()); |
1450 | 1456 | userShop.setGroupId(evalGroup.getGroupId()); |
1451 | 1457 | // userShop.setIgnored(ignored); |
1452 | - userShop.setIgnored(Boolean.FALSE); | |
1458 | + userShop.setInclusion(Boolean.TRUE); | |
1453 | 1459 | userShop.setScore(BigDecimal.ZERO); |
1454 | 1460 | userShop.setStageDimEnum(calcDateParam.getStageDimEnum()); |
1455 | 1461 | if (PublicUtil.isNotEmpty(calcDateParam.getCalcMonthBeginDate())) { | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateTaskService.java
... | ... | @@ -323,22 +323,19 @@ public class EvalCalculateTaskService { |
323 | 323 | } |
324 | 324 | } |
325 | 325 | //去重 |
326 | - List<EvalGroupUser> repeatUsers = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() | |
327 | - .eq(EvalGroupUser::getEvalGroupRankStageId, evalGroupRankStageId) | |
328 | - .eq(EvalGroupUser::getDataDate, dataDate) | |
329 | - .eq(EvalGroupUser::getYn, Boolean.TRUE) | |
330 | - .select(EvalGroupUser::getId) | |
331 | - ); | |
332 | - if (PublicUtil.isNotEmpty(repeatUsers)) { | |
333 | - evalGroupUserService.removeByIds(repeatUsers.stream().map(EvalGroupUser::getId).collect(Collectors.toSet())); | |
326 | + Set<Long> repeatUserIds = this.queryRepeatUserEvalIds(evalGroupRankStageId, dataDate); | |
327 | + if (PublicUtil.isNotEmpty(repeatUserIds)) { | |
328 | + evalGroupUserService.removeByIds(repeatUserIds); | |
334 | 329 | } |
335 | 330 | if (PublicUtil.isNotEmpty(evalGroupUsersForSave)) { |
336 | 331 | evalGroupUserService.insertBatchSomeColumn(evalGroupUsersForSave); |
337 | - this.updatePoolOtherInfo(evalGroupUsersForSave, EvalScopeEnum.STAFF); | |
332 | + evalPoolCommonService.createUserPools(evalGroupUsersForSave, EvalScopeEnum.STAFF); | |
333 | +// this.updatePoolOtherInfo(evalGroupUsersForSave, EvalScopeEnum.STAFF); | |
338 | 334 | } |
339 | 335 | if (PublicUtil.isNotEmpty(managerEvalGroupUsersForSave)) { |
340 | 336 | evalGroupUserService.insertBatchSomeColumn(managerEvalGroupUsersForSave); |
341 | - this.updatePoolOtherInfo(managerEvalGroupUsersForSave, EvalScopeEnum.MANAGEMENT); | |
337 | + evalPoolCommonService.createUserPools(managerEvalGroupUsersForSave, EvalScopeEnum.MANAGEMENT); | |
338 | +// this.updatePoolOtherInfo(managerEvalGroupUsersForSave, EvalScopeEnum.MANAGEMENT); | |
342 | 339 | } |
343 | 340 | } |
344 | 341 | evalCalcService.modifyStatus(evalCalcId, EvalCalcStatusEnum.COLLECT_STAGE_DATA); |
... | ... | @@ -357,7 +354,6 @@ public class EvalCalculateTaskService { |
357 | 354 | } |
358 | 355 | |
359 | 356 | public void extractStageEveryDateEvalUser(EvalExtractUserBO bo) { |
360 | - final Long evalCalcId = bo.getEvalCalcId(); | |
361 | 357 | final Long evalGroupRankId = bo.getEvalGroupRankId(); |
362 | 358 | final Boolean realTimeCalc = bo.getRealTimeCalc(); |
363 | 359 | final LocalDate yesterday = bo.getLocalDate(); |
... | ... | @@ -387,9 +383,7 @@ public class EvalCalculateTaskService { |
387 | 383 | for (EvalGroup evalGroup : evalGroups) { |
388 | 384 | for (Long postId : Optional.ofNullable(evalGroup.getPostIds()).orElse(new ArrayList<>())) { |
389 | 385 | List<EvalGroupUser> evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(groupId, postId, evalGroup, stageEveryDataTime); |
390 | - for (EvalGroupUser evalGroupUser : evalGroupUsers) { | |
391 | - evalPoolCommonService.createUserPool(evalGroupUser, EvalScopeEnum.STAFF); | |
392 | - } | |
386 | + evalPoolCommonService.createUserPools(evalGroupUsers, EvalScopeEnum.STAFF); | |
393 | 387 | } |
394 | 388 | } |
395 | 389 | //管理层人员 |
... | ... | @@ -398,9 +392,7 @@ public class EvalCalculateTaskService { |
398 | 392 | for (Long postId : rewardDim.getPostIds()) { |
399 | 393 | List<EvalGroupUser> manageEvalGroupUsers = evalGroupUserBizService.fetchPostUsers(groupId, postId, rewardDim.getShopIds(), stageEveryDataTime); |
400 | 394 | this.initManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId); |
401 | - for (EvalGroupUser evalGroupUser : manageEvalGroupUsers) { | |
402 | - evalPoolCommonService.createUserPool(evalGroupUser, EvalScopeEnum.MANAGEMENT); | |
403 | - } | |
395 | + evalPoolCommonService.createUserPools(manageEvalGroupUsers, EvalScopeEnum.MANAGEMENT); | |
404 | 396 | } |
405 | 397 | } |
406 | 398 | repeatUserIds.addAll(this.queryRepeatUserEvalIds(evalGroupRankStageId, stageEveryDataTime)); |
... | ... | @@ -490,6 +482,7 @@ public class EvalCalculateTaskService { |
490 | 482 | |
491 | 483 | public void extractStageIndicator(EvalExtractStageIndicatorBO stageIndicatorBO) { |
492 | 484 | final Long evalGroupRankId = stageIndicatorBO.getEvalGroupRankId(); |
485 | + final Long evalCalcId = stageIndicatorBO.getEvalCalcId(); | |
493 | 486 | final LocalDate dataDate = stageIndicatorBO.getLocalDate(); |
494 | 487 | final Boolean realTimeCalc = stageIndicatorBO.getRealTimeCalc(); |
495 | 488 | |
... | ... | @@ -511,7 +504,7 @@ public class EvalCalculateTaskService { |
511 | 504 | if (PublicUtil.isEmpty(sysIndicatorCodes)) { |
512 | 505 | evalCalc.setStatus(EvalCalcStatusEnum.CALC_EVAL); |
513 | 506 | evalCalcService.updateById(evalCalc); |
514 | - cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate()); | |
507 | + cacheCalcGroupIds(evalCalcId, evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate()); | |
515 | 508 | platformTransactionManager.commit(status); |
516 | 509 | return; |
517 | 510 | } |
... | ... | @@ -521,14 +514,15 @@ public class EvalCalculateTaskService { |
521 | 514 | //保存发送记录,构建发送mq |
522 | 515 | EvalRankReportBO evalRankReportBO = this.getReportObj(evalGroupRank, dataDate, evalGroupRankStages); |
523 | 516 | for (String sysIndicatorCode : sysIndicatorCodes) { |
524 | - stageReportNoticeMQS.addAll(this.sendNotice(evalRankReportBO, evalGroupRankStages, sysIndicatorCode, dataDate, evalCalc.getId())); | |
517 | + stageReportNoticeMQS.addAll(this.sendNotice(evalRankReportBO, evalGroupRankStages, sysIndicatorCode, dataDate, evalCalcId)); | |
518 | + stageReportNoticeMQS.addAll(this.sendLeaveStaffNotice(evalRankReportBO, evalGroupRankStages, sysIndicatorCode, dataDate, evalCalcId)); | |
525 | 519 | |
526 | 520 | //关联指标也发MQ |
527 | 521 | Indicators indicators = indicatorsService.queryByCode(sysIndicatorCode, Boolean.FALSE); |
528 | 522 | if (PublicUtil.isNotEmpty(indicators) && PublicUtil.isNotEmpty(indicators.getOriginIndicatorCode())) { |
529 | 523 | final String originIndicatorCode = indicators.getOriginIndicatorCode(); |
530 | - stageReportNoticeMQS.addAll(this.sendNotice(evalRankReportBO, evalGroupRankStages, | |
531 | - originIndicatorCode, dataDate, evalCalc.getId())); | |
524 | + stageReportNoticeMQS.addAll(this.sendNotice(evalRankReportBO, evalGroupRankStages, originIndicatorCode, dataDate, evalCalcId)); | |
525 | + stageReportNoticeMQS.addAll(this.sendLeaveStaffNotice(evalRankReportBO, evalGroupRankStages, originIndicatorCode, dataDate, evalCalcId)); | |
532 | 526 | } |
533 | 527 | } |
534 | 528 | platformTransactionManager.commit(status); |
... | ... | @@ -605,6 +599,82 @@ public class EvalCalculateTaskService { |
605 | 599 | return reportNoticeMQS; |
606 | 600 | } |
607 | 601 | |
602 | + /** | |
603 | + * 发送绩效数据上报mq | |
604 | + * | |
605 | + * @param dataDate | |
606 | + */ | |
607 | + public List<KpiStageReportNoticeMQ> sendLeaveStaffNotice(EvalRankReportBO evalRankReportBO, List<EffectEvalStageBO> stages, String indicatorCode, final LocalDate dataDate, final Long evalCalcId) { | |
608 | + final Date monthlyEndTime = DateUtil.localDateTime2Date(YearMonth.from(dataDate).atEndOfMonth().atTime(23, 59, 59)); | |
609 | + final Date monthlyStartTime = DateUtil.localDateTime2Date(evalRankReportBO.getWholeBeginTime().atTime(0, 0, 1)); | |
610 | + List<KpiStageReportNoticeMQ> reportNoticeMQS = new ArrayList<>(); | |
611 | + | |
612 | + for (EffectEvalStageBO evalStageBO : stages) { | |
613 | + final LocalDate stageEndTime = evalStageBO.getStageEndTime().isAfter(dataDate) | |
614 | + ? dataDate : evalStageBO.getStageEndTime(); | |
615 | + | |
616 | + final Long evalGroupRankStageId = evalStageBO.getEvalGroupRankStageId(); | |
617 | + List<EvalUserPool> userPools = evalUserPoolService.getLeaveOrChangePostPools(evalGroupRankStageId, stageEndTime); | |
618 | + if (PublicUtil.isEmpty(userPools)) { | |
619 | + log.info("阶段没有离职调岗员工:{}", JSON.toJSONString(evalStageBO)); | |
620 | + continue; | |
621 | + } | |
622 | + | |
623 | + for (EvalUserPool userPool : userPools) { | |
624 | + final LocalDate staffLastDate = userPool.getDataDate(); | |
625 | + //阶段时间、阶段累计时间 | |
626 | + //员工离岗时间 与 阶段结束时间判断 | |
627 | + final LocalDate staffStageEndTime = staffLastDate.compareTo(stageEndTime) > 0 | |
628 | + ? stageEndTime : staffLastDate; | |
629 | + final Date staffStageEndDateTime = DateUtil.localDateTime2Date(staffStageEndTime.atTime(23, 59, 59)); | |
630 | + | |
631 | + KpiStageMqLog mqLog = this.createLeaveStaffMqLog(userPool, evalRankReportBO, evalStageBO, indicatorCode, evalCalcId, staffStageEndTime); | |
632 | + KpiStageReportNoticeMQ noticeMQ = KpiStageReportNoticeMQ.builder() | |
633 | + .indicatorCode(mqLog.getIndicatorCode()) | |
634 | + .shopIds(new ArrayList<Long>(){{add(userPool.getShopId());}}) | |
635 | + .userIds(new ArrayList<Long>(){{add(userPool.getUserId());}}) | |
636 | + .groupId(mqLog.getGroupId()) | |
637 | + .build(); | |
638 | + List<KpiStageReportNoticeMQ.ReportDate> reportStages = new ArrayList<>(); | |
639 | + KpiStageReportNoticeMQ.ReportDate reportStage = noticeMQ.new ReportDate(IndicatorReportTypeEnum.STAGE.getValue(), | |
640 | + DateUtil.localDateTime2Date(evalStageBO.getStageBeginTime().atTime(0, 0, 1)), | |
641 | + staffStageEndDateTime, | |
642 | + DateUtil.localDateTime2Date(evalStageBO.getStageEndTime().atTime(23, 59, 59)) | |
643 | + ); | |
644 | + reportStages.add(reportStage); | |
645 | + mqLog.setStatus(KpiStageMqLogStatusEnum.WAIT_REPORT); | |
646 | + mqLog.setStageTimeStr(JSON.toJSONString(reportStages)); | |
647 | + kpiStageMqLogService.save(mqLog); | |
648 | + KpiStageReportNoticeMQ.ReportDate monthly = noticeMQ.new ReportDate(IndicatorReportTypeEnum.WHOLE.getValue(), | |
649 | + monthlyStartTime, | |
650 | + staffStageEndDateTime, | |
651 | + monthlyEndTime | |
652 | + ); | |
653 | + noticeMQ.setWhole(monthly); | |
654 | + noticeMQ.setStages(reportStages); | |
655 | + noticeMQ.setUid(mqLog.getId().toString()); | |
656 | + | |
657 | + reportNoticeMQS.add(noticeMQ); | |
658 | + //1. 初始状态放入 | |
659 | + stringRedisTemplate.opsForHash().put( | |
660 | + evalCalculationVal.getMqCodeLogStatusKey(mqLog.getEvalCalcId()), | |
661 | + mqLog.getIndicatorCode(), | |
662 | + String.valueOf(mqLog.getStatus().getValue()) | |
663 | + ); | |
664 | + //设置过期 | |
665 | + stringRedisTemplate.expire( | |
666 | + evalCalculationVal.getMqCodeLogStatusKey(mqLog.getEvalCalcId()), | |
667 | + 6L, TimeUnit.HOURS); | |
668 | + log.info("1. 初始状态放入 redis K: {},HK: {},HV: {},24H后过期", | |
669 | + evalCalculationVal.getMqCodeLogStatusKey(mqLog.getEvalCalcId()), | |
670 | + mqLog.getIndicatorCode(), | |
671 | + mqLog.getStatus().getValue() | |
672 | + ); | |
673 | + } | |
674 | + } | |
675 | + return reportNoticeMQS; | |
676 | + } | |
677 | + | |
608 | 678 | public KpiStageMqLog createMqLog(EvalRankReportBO evalRankReportBO, EffectEvalStageBO stageBO, String indicatorCode, Long evalCalcId, LocalDate dataDate) { |
609 | 679 | final LocalDate wholeBeginTime = evalRankReportBO.getWholeBeginTime(); |
610 | 680 | final Long groupId = stageBO.getGroupId(); |
... | ... | @@ -621,6 +691,22 @@ public class EvalCalculateTaskService { |
621 | 691 | return mqLog; |
622 | 692 | } |
623 | 693 | |
694 | + public KpiStageMqLog createLeaveStaffMqLog(EvalUserPool evalUserPool, EvalRankReportBO evalRankReportBO, EffectEvalStageBO stageBO, String indicatorCode, Long evalCalcId, LocalDate dataDate) { | |
695 | + final LocalDate wholeBeginTime = evalRankReportBO.getWholeBeginTime(); | |
696 | + final Long groupId = stageBO.getGroupId(); | |
697 | + | |
698 | + KpiStageMqLog mqLog = new KpiStageMqLog(); | |
699 | + mqLog.setIndicatorCode(indicatorCode); | |
700 | + mqLog.setWholeBeginTime(wholeBeginTime); | |
701 | + mqLog.setWholeEndTime(dataDate); | |
702 | + mqLog.setEvalCalcId(evalCalcId); | |
703 | + mqLog.setDataDate(dataDate); | |
704 | + mqLog.setGroupId(groupId); | |
705 | + mqLog.setUserIds(new ArrayList<Long>(){{add(evalUserPool.getShopId());}}); | |
706 | + mqLog.setShopIds(new ArrayList<Long>(){{add(evalUserPool.getShopId());}}); | |
707 | + return mqLog; | |
708 | + } | |
709 | + | |
624 | 710 | public void checkExtractStageIndicatorTimeOut() { |
625 | 711 | Lock lock = distributedLocker.lock(evalCalculationVal.getCheckExtractStageTimeOutKey()); |
626 | 712 | if (!((RLock) lock).isLocked()) { | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java
... | ... | @@ -180,6 +180,13 @@ public class EvalPoolCommonService { |
180 | 180 | return userPool; |
181 | 181 | } |
182 | 182 | |
183 | + @Transactional(rollbackFor = Exception.class) | |
184 | + public void createUserPools(List<EvalGroupUser> users, EvalScopeEnum scopeType) { | |
185 | + for (EvalGroupUser user : Optional.ofNullable(users).orElse(new ArrayList<>())) { | |
186 | + this.createUserPool(user, scopeType); | |
187 | + } | |
188 | + } | |
189 | + | |
183 | 190 | /** |
184 | 191 | * 查询薪酬池 |
185 | 192 | * |
... | ... | @@ -207,6 +214,7 @@ public class EvalPoolCommonService { |
207 | 214 | if (Boolean.FALSE.equals(inclusion)) { |
208 | 215 | evalUserPool.setReward(BigDecimal.ZERO); |
209 | 216 | } |
217 | + evalUserPool.setDataDate(user.getDataDate()); | |
210 | 218 | evalUserPoolService.updateById(evalUserPool); |
211 | 219 | } |
212 | 220 | //同一个考评组的 调岗员工 修改调岗数据(调岗同岗位,合并数据,不同岗位,两条数据) | ... | ... |