Commit 51066fcacc79d96466041c98980c4ce8b3831b95
1 parent
a3e9e920
feature(*): 考评人员维度数据处理
考评人员维度数据处理
Showing
4 changed files
with
165 additions
and
5 deletions
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateTaskService.java
... | ... | @@ -13,8 +13,6 @@ import cn.fw.morax.domain.bo.eval.EvalGroupCalculableBO; |
13 | 13 | import cn.fw.morax.domain.bo.eval.EvalRankReportBO; |
14 | 14 | import cn.fw.morax.domain.db.eval.*; |
15 | 15 | import cn.fw.morax.domain.db.kpi.Indicators; |
16 | -import cn.fw.morax.domain.db.kpi.KpiGroupUser; | |
17 | -import cn.fw.morax.domain.db.kpi.KpiPool; | |
18 | 16 | import cn.fw.morax.domain.db.kpi.KpiStageMqLog; |
19 | 17 | import cn.fw.morax.domain.enums.*; |
20 | 18 | import cn.fw.morax.rpc.ehr.EhrRpcService; |
... | ... | @@ -260,7 +258,12 @@ public class EvalCalculateTaskService { |
260 | 258 | continue; |
261 | 259 | } |
262 | 260 | try { |
263 | - this.extractEvalUser(bo); | |
261 | + //实时计算抽取每天的人员数据 | |
262 | + if (Boolean.TRUE.equals(bo.getRealTimeCalc())) { | |
263 | + this.extractStageEveryDateEvalUser(bo); | |
264 | + } else { | |
265 | + this.extractEvalUser(bo); | |
266 | + } | |
264 | 267 | } catch (Exception re) { |
265 | 268 | log.error("考评人员抽取异常", re); |
266 | 269 | bo.getAtomicInteger().incrementAndGet(); |
... | ... | @@ -314,7 +317,7 @@ public class EvalCalculateTaskService { |
314 | 317 | for (Long postId : rewardDim.getPostIds()) { |
315 | 318 | List<EvalGroupUser> manageEvalGroupUsers = evalGroupUserBizService.fetchPostUsers(groupId, postId, rewardDim.getShopIds(), dataDate); |
316 | 319 | if (PublicUtil.isNotEmpty(manageEvalGroupUsers)) { |
317 | - this.addManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId); | |
320 | + this.initManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId); | |
318 | 321 | managerEvalGroupUsersForSave.addAll(manageEvalGroupUsers); |
319 | 322 | } |
320 | 323 | } |
... | ... | @@ -353,7 +356,85 @@ public class EvalCalculateTaskService { |
353 | 356 | |
354 | 357 | } |
355 | 358 | |
356 | - public void addManageEvalUser(List<EvalGroupUser> manageEvalGroupUsers, Long evalGroupRankId, Long evalGroupRankStageId) { | |
359 | + public void extractStageEveryDateEvalUser(EvalExtractUserBO bo) { | |
360 | + final Long evalCalcId = bo.getEvalCalcId(); | |
361 | + final Long evalGroupRankId = bo.getEvalGroupRankId(); | |
362 | + final Boolean realTimeCalc = bo.getRealTimeCalc(); | |
363 | + final LocalDate yesterday = bo.getLocalDate(); | |
364 | + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroupRankId); | |
365 | + if (PublicUtil.isEmpty(evalGroupRank)) { | |
366 | + log.error("考评抽取人员找不到考评排名组信息:{}", JSON.toJSONString(bo)); | |
367 | + return; | |
368 | + } | |
369 | + final Long groupId = evalGroupRank.getGroupId(); | |
370 | + List<EvalGroupRankStage> stages = evalGroupRankStageService.getRankStages(evalGroupRankId, yesterday, realTimeCalc); | |
371 | + TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition); | |
372 | + try { | |
373 | + Set<Long> repeatUserIds = new HashSet<>(); | |
374 | + for (EvalGroupRankStage stage : stages) { | |
375 | + final Long evalGroupRankStageId = stage.getId(); | |
376 | + List<EvalGroupUser> evalGroupUsersForSave = Lists.newArrayListWithCapacity(100); | |
377 | + List<EvalGroupUser> managerEvalGroupUsersForSave = Lists.newArrayListWithCapacity(100); | |
378 | + List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery() | |
379 | + .eq(EvalGroup::getEvalGroupRankStageId, evalGroupRankStageId) | |
380 | + .eq(EvalGroup::getYn, Boolean.TRUE) | |
381 | + ); | |
382 | + LocalDate stageEveryDataTime = stage.getBeginTime(); | |
383 | + LocalDate stageEndTime = stage.getBeginTime(); | |
384 | + //阶段开始时间大于 阶段结束时间 | |
385 | + while (stageEndTime.compareTo(stageEveryDataTime) > 0) { | |
386 | + //普通岗位员工 | |
387 | + for (EvalGroup evalGroup : evalGroups) { | |
388 | + for (Long postId : Optional.ofNullable(evalGroup.getPostIds()).orElse(new ArrayList<>())) { | |
389 | + List<EvalGroupUser> evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(groupId, postId, evalGroup, stageEveryDataTime); | |
390 | + for (EvalGroupUser evalGroupUser : evalGroupUsers) { | |
391 | + evalPoolCommonService.createUserPool(evalGroupUser, EvalScopeEnum.STAFF); | |
392 | + } | |
393 | + } | |
394 | + } | |
395 | + //管理层人员 | |
396 | + List<EvalGroupRewardDim> rewardDims = evalGroupRewardDimService.getManageReward(evalGroupRankStageId); | |
397 | + for (EvalGroupRewardDim rewardDim : rewardDims) { | |
398 | + for (Long postId : rewardDim.getPostIds()) { | |
399 | + List<EvalGroupUser> manageEvalGroupUsers = evalGroupUserBizService.fetchPostUsers(groupId, postId, rewardDim.getShopIds(), stageEveryDataTime); | |
400 | + this.initManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId); | |
401 | + for (EvalGroupUser evalGroupUser : manageEvalGroupUsers) { | |
402 | + evalPoolCommonService.createUserPool(evalGroupUser, EvalScopeEnum.MANAGEMENT); | |
403 | + } | |
404 | + } | |
405 | + } | |
406 | + repeatUserIds.addAll(this.queryRepeatUserEvalIds(evalGroupRankStageId, stageEveryDataTime)); | |
407 | + //日期+1 | |
408 | + stageEveryDataTime = stageEveryDataTime.plusDays(1); | |
409 | + } | |
410 | + //去重 | |
411 | + if (PublicUtil.isNotEmpty(repeatUserIds)) { | |
412 | + evalGroupUserService.removeByIds(repeatUserIds); | |
413 | + } | |
414 | + if (PublicUtil.isNotEmpty(evalGroupUsersForSave)) { | |
415 | + evalGroupUserService.insertBatchSomeColumn(evalGroupUsersForSave); | |
416 | + } | |
417 | + if (PublicUtil.isNotEmpty(managerEvalGroupUsersForSave)) { | |
418 | + evalGroupUserService.insertBatchSomeColumn(managerEvalGroupUsersForSave); | |
419 | + } | |
420 | + } | |
421 | + } catch (Exception e) { | |
422 | + platformTransactionManager.rollback(transactionStatus); | |
423 | + throw e; | |
424 | + } | |
425 | + } | |
426 | + | |
427 | + public Set<Long> queryRepeatUserEvalIds(Long evalGroupRankStageId, LocalDate dataDate) { | |
428 | + List<EvalGroupUser> repeatUsers = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() | |
429 | + .eq(EvalGroupUser::getEvalGroupRankStageId, evalGroupRankStageId) | |
430 | + .eq(EvalGroupUser::getDataDate, dataDate) | |
431 | + .eq(EvalGroupUser::getYn, Boolean.TRUE) | |
432 | + .select(EvalGroupUser::getId) | |
433 | + ); | |
434 | + return repeatUsers.stream().map(EvalGroupUser::getId).collect(Collectors.toSet()); | |
435 | + } | |
436 | + | |
437 | + public void initManageEvalUser(List<EvalGroupUser> manageEvalGroupUsers, Long evalGroupRankId, Long evalGroupRankStageId) { | |
357 | 438 | if (PublicUtil.isEmpty(manageEvalGroupUsers)) { |
358 | 439 | return; |
359 | 440 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java
... | ... | @@ -181,6 +181,58 @@ public class EvalPoolCommonService { |
181 | 181 | } |
182 | 182 | |
183 | 183 | /** |
184 | + * 查询薪酬池 | |
185 | + * | |
186 | + * @param user | |
187 | + * @return | |
188 | + */ | |
189 | + @Transactional(rollbackFor = Exception.class) | |
190 | + public void createUserPool(EvalGroupUser user, EvalScopeEnum scopeType) { | |
191 | + EvalPoolBusinessTypeEnum businessType = EvalScopeEnum.MANAGEMENT.equals(scopeType) | |
192 | + ? EvalPoolBusinessTypeEnum.REWARD : EvalPoolBusinessTypeEnum.SCORE_REWARD; | |
193 | + | |
194 | + EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery() | |
195 | + .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId()) | |
196 | + .eq(EvalUserPool::getUserId, user.getUserId()) | |
197 | + .eq(EvalUserPool::getPostId, user.getPostId()) | |
198 | + .eq(EvalUserPool::getShopId, user.getShopId()) | |
199 | + .eq(EvalUserPool::getBusinessType, businessType) | |
200 | + .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) | |
201 | + .eq(EvalUserPool::getYn, Boolean.TRUE) | |
202 | + , Boolean.FALSE); | |
203 | + if (PublicUtil.isNotEmpty(evalUserPool)) { | |
204 | + Boolean inclusion = Boolean.TRUE.equals(user.getIgnored()) ? Boolean.FALSE : Boolean.TRUE; | |
205 | + evalUserPool.setInclusion(inclusion); | |
206 | + //不纳入计算,奖惩清空 | |
207 | + if (Boolean.FALSE.equals(inclusion)) { | |
208 | + evalUserPool.setReward(BigDecimal.ZERO); | |
209 | + } | |
210 | + evalUserPoolService.updateById(evalUserPool); | |
211 | + } | |
212 | + //同一个考评组的 调岗员工 修改调岗数据(调岗同岗位,合并数据,不同岗位,两条数据) | |
213 | + evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery() | |
214 | + .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId()) | |
215 | + .eq(EvalUserPool::getEvalGroupId, user.getEvalGroupId()) | |
216 | + .eq(EvalUserPool::getUserId, user.getUserId()) | |
217 | + .eq(EvalUserPool::getPostId, user.getPostId()) | |
218 | + .eq(EvalUserPool::getBusinessType, businessType) | |
219 | + .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) | |
220 | + .eq(EvalUserPool::getYn, Boolean.TRUE) | |
221 | + , Boolean.FALSE); | |
222 | + if (PublicUtil.isNotEmpty(evalUserPool)) { | |
223 | + evalUserPool.setPostId(user.getPostId()); | |
224 | + evalUserPool.setPostName(user.getPostName()); | |
225 | + evalUserPool.setShopId(user.getShopId()); | |
226 | + evalUserPool.setShopName(user.getShopName()); | |
227 | + if (PublicUtil.isNotEmpty(user.getEgc())) { | |
228 | + evalUserPool.setEgc(user.getEgc()); | |
229 | + } | |
230 | + evalUserPoolService.updateById(evalUserPool); | |
231 | + } | |
232 | + this.createUserPoolData(user, scopeType); | |
233 | + } | |
234 | + | |
235 | + /** | |
184 | 236 | * 获取员工社保公积金门店 |
185 | 237 | * |
186 | 238 | * @param userId | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalUserPoolService.java
... | ... | @@ -7,6 +7,7 @@ import cn.fw.morax.domain.enums.EvalScopeEnum; |
7 | 7 | import cn.fw.morax.domain.vo.eval.EvalUserPoolVO; |
8 | 8 | import com.baomidou.mybatisplus.extension.service.IService; |
9 | 9 | |
10 | +import java.time.LocalDate; | |
10 | 11 | import java.time.YearMonth; |
11 | 12 | import java.util.List; |
12 | 13 | |
... | ... | @@ -37,4 +38,12 @@ public interface EvalUserPoolService extends IService<EvalUserPool> { |
37 | 38 | List<EvalUserPool> getPools(Long evalGroupRankStageId, YearMonth monthly); |
38 | 39 | |
39 | 40 | List<EvalUserPool> getRankPools(Long evalGroupRankStageId, YearMonth monthly, EvalScopeEnum scopeType); |
41 | + | |
42 | + /** | |
43 | + * 获取离职或调岗人员 | |
44 | + * @param evalGroupRankStageId | |
45 | + * @param monthly | |
46 | + * @return | |
47 | + */ | |
48 | + List<EvalUserPool> getLeaveOrChangePostPools(Long evalGroupRankStageId, LocalDate stageEndTime); | |
40 | 49 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalUserPoolServiceImpl.java
... | ... | @@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
14 | 14 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
15 | 15 | import org.springframework.stereotype.Service; |
16 | 16 | |
17 | +import java.time.LocalDate; | |
17 | 18 | import java.time.YearMonth; |
18 | 19 | import java.util.ArrayList; |
19 | 20 | import java.util.List; |
... | ... | @@ -87,4 +88,21 @@ public class EvalUserPoolServiceImpl extends ServiceImpl<EvalUserPoolDao, EvalUs |
87 | 88 | ); |
88 | 89 | return pools; |
89 | 90 | } |
91 | + | |
92 | + @Override | |
93 | + public List<EvalUserPool> getLeaveOrChangePostPools(Long evalGroupRankStageId, LocalDate stageEndTime) { | |
94 | + if (PublicUtil.isEmpty(evalGroupRankStageId)) { | |
95 | + return new ArrayList<>(); | |
96 | + } | |
97 | + YearMonth monthly = YearMonth.from(stageEndTime); | |
98 | + //在考评期间,但结束日期不是阶段结束日期 | |
99 | + List<EvalUserPool> pools = this.list(Wrappers.<EvalUserPool>lambdaQuery() | |
100 | + .in(EvalUserPool::getEvalGroupRankStageId, evalGroupRankStageId) | |
101 | + .eq(EvalUserPool::getMonthly, monthly) | |
102 | + .ne(EvalUserPool::getDataDate, stageEndTime) | |
103 | + .eq(EvalUserPool::getBusinessType, EvalPoolBusinessTypeEnum.SCORE_REWARD) | |
104 | + .eq(EvalUserPool::getYn, Boolean.TRUE) | |
105 | + ); | |
106 | + return pools; | |
107 | + } | |
90 | 108 | } | ... | ... |