Commit 51066fcacc79d96466041c98980c4ce8b3831b95

Authored by 姜超
1 parent a3e9e920

feature(*): 考评人员维度数据处理

考评人员维度数据处理
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&lt;EvalUserPool&gt; {
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&lt;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 }
... ...