Blame view

fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java 4.75 KB
ac84063e   姜超   feature(*): 考评人员
1
2
3
4
5
6
7
  package cn.fw.morax.server.task;
  
  import cn.fw.common.cache.locker.DistributedLocker;
  import cn.fw.morax.common.constant.TimeTaskConstant;
  import cn.fw.morax.common.utils.PublicUtil;
  import cn.fw.morax.domain.db.eval.EvalGroup;
  import cn.fw.morax.domain.db.eval.EvalGroupUser;
ac84063e   姜超   feature(*): 考评人员
8
9
10
11
12
13
  import cn.fw.morax.service.biz.eval.EvalGroupBizService;
  import cn.fw.morax.service.biz.eval.EvalGroupUserBizService;
  import cn.fw.morax.service.data.eval.EvalGroupUserService;
  import cn.hutool.core.date.StopWatch;
  import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  import com.google.common.collect.Lists;
7d59a85e   姜超   feature(*): redis...
14
  import lombok.Getter;
ac84063e   姜超   feature(*): 考评人员
15
16
17
  import lombok.RequiredArgsConstructor;
  import lombok.extern.slf4j.Slf4j;
  import org.redisson.api.RLock;
7d59a85e   姜超   feature(*): redis...
18
  import org.springframework.beans.factory.annotation.Value;
ac84063e   姜超   feature(*): 考评人员
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  import org.springframework.scheduling.annotation.Scheduled;
  import org.springframework.stereotype.Component;
  import org.springframework.transaction.annotation.Transactional;
  
  import java.time.LocalDate;
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.locks.Lock;
  import java.util.stream.Collectors;
  
  /**
   * @author : jiangchao
   * @className : KpiGroupStatusTask
   * @description : 考评组人员定时器
   * @date : 2022-04-07 15:29
   */
  @Component
  @Slf4j
  @RequiredArgsConstructor
  @ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
  public class EvalGroupUserTask {
  
      private final EvalGroupUserBizService evalGroupUserBizService;
      private final EvalGroupUserService evalGroupUserService;
ac84063e   姜超   feature(*): 考评人员
46
47
      private final DistributedLocker distributedLocker;
  
7d59a85e   姜超   feature(*): redis...
48
49
50
      @Value("${spring.cache.custom.global-prefix}:eval:group:user")
      @Getter
      private String evalGroupUserDistKey;
ac84063e   姜超   feature(*): 考评人员
51
52
53
54
55
56
57
58
59
  
      /**
       * 每天凌晨30分执行(人事角色、岗位调整在5点执行)
       * 1. 将待生效数据改为生效中
       * 2. 将之前的配置设置为失效
       * 3. 处理重复数据,合并、拆分门店的考评组配置需要把其他的重复配置失效
       */
      @Scheduled(cron = TimeTaskConstant.EVAL_GROUP_USER)
      @Transactional(rollbackFor = Exception.class)
936e630c   姜超   feature(*): 门店奖惩分配
60
      public void processEvalUser() {
7d59a85e   姜超   feature(*): redis...
61
          Lock lock = distributedLocker.lock(getEvalGroupUserDistKey());
ac84063e   姜超   feature(*): 考评人员
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
          if (((RLock) lock).isLocked()) {
              try {
                  log.info("定时任务【考评组人员更新】开始执行");
                  StopWatch stopWatch = new StopWatch();
                  stopWatch.start("考评组人员更新,查询人事系统人员状态");
                  //查询员工
                  LocalDate yesterday = LocalDate.now().minusDays(1);
                  List<EvalGroupUser> evalGroupUsersForSave = this.queryKpiStaff(yesterday);
                  stopWatch.stop();
                  if (PublicUtil.isEmpty(evalGroupUsersForSave)) {
                      log.info(stopWatch.prettyPrint());
                      return;
                  }
                  stopWatch.start("考评组人员保存,保存条数:"+ evalGroupUsersForSave.size());
                  //逻辑删除今天已保存人员,保存人员
71e4eae7   姜超   feature(*): 绩效分数展示修改
77
                  Set<Long> evalGroupIds = evalGroupUsersForSave.stream().map(EvalGroupUser::getEvalGroupId).collect(Collectors.toSet());
ac84063e   姜超   feature(*): 考评人员
78
                  evalGroupUserService.update(Wrappers.<EvalGroupUser>lambdaUpdate()
71e4eae7   姜超   feature(*): 绩效分数展示修改
79
                          .in(EvalGroupUser::getEvalGroupId, evalGroupIds)
ac84063e   姜超   feature(*): 考评人员
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
                          .eq(EvalGroupUser::getDataDate, yesterday)
                          .eq(EvalGroupUser::getYn, Boolean.TRUE)
                          .set(EvalGroupUser::getYn, Boolean.FALSE)
                  );
                  evalGroupUserService.saveBatch(evalGroupUsersForSave);
                  stopWatch.stop();
                  log.info(stopWatch.prettyPrint(TimeUnit.SECONDS));
              } catch (Exception e){
                  log.error(e.getMessage(), e);
              } finally {
                  lock.unlock();
              }
          }
      }
  
      /**
       * 查询考评员工
       * @return
       */
      private List<EvalGroupUser> queryKpiStaff(LocalDate yesterday) {
c043db4c   姜超   feature(*): 查看考评详情
100
          List<EvalGroup> evalGroups = evalGroupUserBizService.postEffectEvalGroups(yesterday);
f727712b   姜超   feature(*): 考评阶段指标上报
101
102
          if (! evalGroups.isEmpty()) {
              log.info("需要生成考评组人员的考评组:{}", evalGroups);
ac84063e   姜超   feature(*): 考评人员
103
          }
ac84063e   姜超   feature(*): 考评人员
104
          List<EvalGroupUser> evalGroupUsersForSave = Lists.newArrayListWithCapacity(300);
f727712b   姜超   feature(*): 考评阶段指标上报
105
106
107
          List<EvalGroupUser> evalGroupUsers = null;
          for (EvalGroup evalGroup : evalGroups) {
              for (Long postId : evalGroup.getPostIds()) {
c043db4c   姜超   feature(*): 查看考评详情
108
                  evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(postId, evalGroup, yesterday);
f727712b   姜超   feature(*): 考评阶段指标上报
109
110
                  evalGroupUsersForSave.addAll(evalGroupUsers);
              }
ac84063e   姜超   feature(*): 考评人员
111
112
113
114
115
          }
          return evalGroupUsersForSave;
      }
  
  }