Blame view

fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java 18.8 KB
ea6b2fd6   姜超   feature(*): 门店奖惩分配
1
2
  package cn.fw.morax.service.biz.eval;
  
6216249c   姜超   feature(*): 修改bug
3
  import cn.fw.backlog.sdk.api.result.FailBacklogItem;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
4
  import cn.fw.common.cache.locker.DistributedLocker;
edc57409   姜超   feature(*): 考评奖惩分配
5
  import cn.fw.common.exception.BusinessException;
347b9a76   姜超   feature(*): 考评审批
6
  import cn.fw.common.web.auth.LoginAuthBean;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
7
  import cn.fw.morax.common.config.TodoVal;
347b9a76   姜超   feature(*): 考评审批
8
  import cn.fw.morax.common.pojo.event.ApprovalResultEvent;
6216249c   姜超   feature(*): 修改bug
9
  import cn.fw.morax.common.utils.DateUtil;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
10
11
12
  import cn.fw.morax.common.utils.PublicUtil;
  import cn.fw.morax.common.utils.ThreadPoolUtil;
  import cn.fw.morax.domain.bo.eval.EvalGroupRewardDistributionBO;
347b9a76   姜超   feature(*): 考评审批
13
  import cn.fw.morax.domain.db.ApprovalRecord;
6216249c   姜超   feature(*): 修改bug
14
  import cn.fw.morax.domain.db.eval.*;
edc57409   姜超   feature(*): 考评奖惩分配
15
16
  import cn.fw.morax.domain.dto.eval.EvalRewardDistDTO;
  import cn.fw.morax.domain.dto.eval.EvalRewardDistDetailDTO;
6216249c   姜超   feature(*): 修改bug
17
  import cn.fw.morax.domain.enums.*;
9ecc8f2d   姜超   feature(*): 数据录入修改
18
  import cn.fw.morax.domain.vo.eval.EvalRewardDistDetailVO;
edc57409   姜超   feature(*): 考评奖惩分配
19
20
  import cn.fw.morax.domain.vo.eval.EvalRewardDistVO;
  import cn.fw.morax.domain.vo.eval.EvalShopPoolVO;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
21
  import cn.fw.morax.rpc.backlog.TodoRpcService;
edc57409   姜超   feature(*): 考评奖惩分配
22
  import cn.fw.morax.rpc.backlog.dto.BackLogItemDTO;
6216249c   姜超   feature(*): 修改bug
23
24
  import cn.fw.morax.rpc.backlog.dto.BacklogBatchPlanItemReqDTO;
  import cn.fw.morax.rpc.backlog.dto.BacklogBatchPlanReqDTO;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
25
26
  import cn.fw.morax.rpc.erp.ErpRpcService;
  import cn.fw.morax.rpc.erp.dto.RpcUserRoleInfoDTO;
6216249c   姜超   feature(*): 修改bug
27
  import cn.fw.morax.rpc.erp.dto.RpcUserRoleShopDTO;
347b9a76   姜超   feature(*): 考评审批
28
  import cn.fw.morax.service.biz.ApprovalBizService;
dc3c54cf   姜超   feature(*): 修改上传
29
  import cn.fw.morax.service.data.ApprovalRecordService;
6216249c   姜超   feature(*): 修改bug
30
  import cn.fw.morax.service.data.eval.*;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
31
32
33
34
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONObject;
  import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  import com.baomidou.mybatisplus.core.toolkit.Wrappers;
edc57409   姜超   feature(*): 考评奖惩分配
35
  import com.google.common.collect.Lists;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
36
37
38
39
40
41
42
43
44
45
  import lombok.Getter;
  import lombok.RequiredArgsConstructor;
  import lombok.extern.slf4j.Slf4j;
  import org.redisson.api.RLock;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.data.redis.core.BoundSetOperations;
  import org.springframework.data.redis.core.StringRedisTemplate;
  import org.springframework.stereotype.Service;
  import org.springframework.transaction.annotation.Transactional;
  
edc57409   姜超   feature(*): 考评奖惩分配
46
  import java.math.BigDecimal;
6216249c   姜超   feature(*): 修改bug
47
  import java.text.DecimalFormat;
eccb0d64   姜超   feature(*): 考评详情查询
48
  import java.time.LocalDate;
6216249c   姜超   feature(*): 修改bug
49
  import java.time.LocalDateTime;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
50
51
52
53
  import java.util.*;
  import java.util.concurrent.RejectedExecutionException;
  import java.util.concurrent.ThreadPoolExecutor;
  import java.util.concurrent.locks.Lock;
6216249c   姜超   feature(*): 修改bug
54
  import java.util.stream.Collectors;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  
  import static cn.fw.common.businessvalidator.Validator.BV;
  
  /**
   * @author jiangchao
   * @des: 考评计算
   * @date 2023/1/12 17:39
   */
  @Slf4j
  @Service
  @RequiredArgsConstructor
  public class EvalRewardService {
  
      private final TodoVal todoVal;
2188d9d0   姜超   feature(*): 修改代码格式
69
70
      private final ErpRpcService erpRpcService;
      private final TodoRpcService todoRpcService;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
71
      private final EvalGroupService evalGroupService;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
72
      private final DistributedLocker distributedLocker;
2188d9d0   姜超   feature(*): 修改代码格式
73
74
75
      private final ApprovalBizService approvalBizService;
      private final StringRedisTemplate stringRedisTemplate;
      private final EvalShopPoolService evalShopPoolService;
dc3c54cf   姜超   feature(*): 修改上传
76
      private final ApprovalRecordService approvalRecordService;
2188d9d0   姜超   feature(*): 修改代码格式
77
      private final EvalRewardDistService evalRewardDistService;
6216249c   姜超   feature(*): 修改bug
78
79
80
      private final EvalGroupRankService evalGroupRankService;
      private final EvalGroupRankStageService evalGroupRankStageService;
      private final EvalGroupRewardDimService evalGroupRewardDimService;
2188d9d0   姜超   feature(*): 修改代码格式
81
      private final EvalRewardDistDetailService evalRewardDistDetailService;
ea6b2fd6   姜超   feature(*): 门店奖惩分配
82
83
84
85
86
87
88
89
90
91
  
      @Value("${spring.cache.custom.global-prefix}:dist:eval-reward")
      @Getter
      private String distributionKey;
      private final static String REWARD_LOCK_KEY = "eval:group:reward";
  
      /**
       * 缓存分配奖惩的考评池
       *
       */
bdcc7a51   姜超   feature(*): 查询指标排名
92
      public void cacheDistEvalShopPoolIds(LocalDate localDate) {
ea6b2fd6   姜超   feature(*): 门店奖惩分配
93
94
95
96
97
98
99
          Lock lock = distributedLocker.lock(REWARD_LOCK_KEY);
          if (! ((RLock) lock).isLocked()) {
              return;
          }
          try {
              log.info("定时任务【考评奖惩待办】开始执行");
  
bdcc7a51   姜超   feature(*): 查询指标排名
100
              Set<Long> evalGroupIds = evalGroupService.queryDistributionShopReward(localDate);
eccb0d64   姜超   feature(*): 考评详情查询
101
              if (PublicUtil.isEmpty(evalGroupIds)) {
ea6b2fd6   姜超   feature(*): 门店奖惩分配
102
103
                  return;
              }
eccb0d64   姜超   feature(*): 考评详情查询
104
105
              String[] array = evalGroupIds.stream()
                      .map(evalGroupId -> new EvalGroupRewardDistributionBO(evalGroupId))
ea6b2fd6   姜超   feature(*): 门店奖惩分配
106
107
108
109
110
111
112
113
114
115
116
117
                      .map(JSONObject::toJSONString)
                      .toArray(String[]::new);
              stringRedisTemplate.opsForSet().add(getDistributionKey(), array);
  
          } catch (Exception e){
              log.error(e.getMessage(), e);
          } finally {
              lock.unlock();
          }
      }
  
  
edc57409   姜超   feature(*): 考评奖惩分配
118
119
120
      /**
       * 分配奖惩
       */
ea6b2fd6   姜超   feature(*): 门店奖惩分配
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
      public void distributionEvalReward() {
          BoundSetOperations<String, String> setOps = stringRedisTemplate.boundSetOps(getDistributionKey());
          ThreadPoolExecutor threadPool = ThreadPoolUtil.getInstance().getThreadPool();
          List<String> overflowsList = new ArrayList<>();
          String str;
          while ((str = setOps.pop()) != null) {
              final EvalGroupRewardDistributionBO bo = JSONObject.parseObject(str, EvalGroupRewardDistributionBO.class);
              if (Objects.isNull(bo)) {
                  continue;
              }
              try {
                  String finalStr = str;
                  threadPool.execute(() -> {
                      try {
                          distributionEvalGroupReward(bo);
                      } catch (Exception ex) {
e1206478   姜超   feature(*): 修改考评审批
137
                          log.error("计算考评数据失败:{}", bo, ex);
ea6b2fd6   姜超   feature(*): 门店奖惩分配
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
                          setOps.add(finalStr);
                      }
                  });
              } catch (RejectedExecutionException re) {
                  overflowsList.add(str);
              }
          }
          if (!CollectionUtils.isEmpty(overflowsList)) {
              for (String s : overflowsList) {
                  setOps.add(s);
              }
          }
      }
  
  
      private void distributionEvalGroupReward(EvalGroupRewardDistributionBO bo) {
eccb0d64   姜超   feature(*): 考评详情查询
154
155
          final Long evalGroupId = bo.getEvalGroupId();
          log.info("分配奖惩的考评组:{}", evalGroupId);
ea6b2fd6   姜超   feature(*): 门店奖惩分配
156
          EvalGroup evalGroup = evalGroupService.getById(evalGroupId);
eccb0d64   姜超   feature(*): 考评详情查询
157
          BV.notNull(evalGroup, "考评组不存在,终止计算!");
6216249c   姜超   feature(*): 修改bug
158
159
160
161
          EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId());
          BV.notNull(evalGroupRank, "考评排名组不存在,终止计算!");
          EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getById(evalGroup.getEvalGroupRankStageId());
          BV.notNull(evalGroupRankStage, "考评阶段不存在,终止计算!");
eccb0d64   姜超   feature(*): 考评详情查询
162
  
ea6b2fd6   姜超   feature(*): 门店奖惩分配
163
  
6216249c   姜超   feature(*): 修改bug
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
  //        List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
  //                .eq(EvalShopPool::getEvalGroupId, evalGroupId)
  //                .eq(EvalShopPool::getYn, Boolean.TRUE)
  //        );
  //        if (PublicUtil.isEmpty(pools)) {
  //            log.error("考评池不存在,终止计算!");
  //            return;
  //        }
  //        BV.isNotEmpty(pools, "考评池不存在,终止计算!");
  
          List<EvalGroupRewardDim> shopRewardDims = evalGroupRewardDimService.list(Wrappers.<EvalGroupRewardDim>lambdaQuery()
                  .eq(EvalGroupRewardDim::getEvalGroupId, evalGroup.getId())
                  .eq(EvalGroupRewardDim::getType, EvalScopeEnum.SHOP)
                  .eq(EvalGroupRewardDim::getYn, Boolean.TRUE)
          );
          if (PublicUtil.isEmpty(shopRewardDims)) {
              log.error("考评奖惩没有门店:{}", JSON.toJSONString(evalGroup));
              return;
          }
601b158c   姜超   feature(*): 注释分配奖惩
183
  //        sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage);
ea6b2fd6   姜超   feature(*): 门店奖惩分配
184
185
186
187
188
189
190
191
      }
  
      /**
       * 发送绩效组变动通知
       *
       * @param
       */
      @Transactional(rollbackFor = Exception.class)
6216249c   姜超   feature(*): 修改bug
192
193
194
195
196
197
      public void sendDistRewardTodo(List<EvalGroupRewardDim> shopRewardDims, EvalGroup evalGroup,
                                     EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) {
          String evalGroupRankName = evalGroupRank.getName();
          String evalGroupRankStageName = evalGroupRankStage.getName();
          DecimalFormat decimalFormat = new DecimalFormat("##########.##");
          List<BacklogBatchPlanItemReqDTO> itemList = new ArrayList<>();
edc57409   姜超   feature(*): 考评奖惩分配
198
  
6216249c   姜超   feature(*): 修改bug
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
          List<Long> distPoolIds = new ArrayList<>();
          final Date expireTime = DateUtil.localDateTime2Date(LocalDateTime.now().plusDays(2L));
          for (EvalGroupRewardDim rewardDim : shopRewardDims) {
              final String roleCode = rewardDim.getDistRoleCode();
              List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
                  .eq(EvalShopPool::getEvalGroupId, evalGroup.getId())
                  .in(EvalShopPool::getShopId, rewardDim.getShopIds())
                  .eq(EvalShopPool::getYn, Boolean.TRUE)
              );
              if (PublicUtil.isEmpty(pools)) {
                  log.error("分配奖惩待办,未找到考评池:{}", JSON.toJSONString(rewardDim));
                  continue;
              }
              List<Long> distShopIds = pools.stream().filter(pool -> pool.getReward().compareTo(BigDecimal.ZERO) == 0)
                      .map(EvalShopPool::getShopId).collect(Collectors.toList());
  
              List<RpcUserRoleInfoDTO> users = this.getUserEnableRoleInfos(roleCode, distShopIds);
              for (RpcUserRoleInfoDTO user : users) {
                  List<Long> manageShopIds = user.getRangeList().stream()
                          .filter(range -> distShopIds.contains(range.getShopId()))
                          .map(RpcUserRoleShopDTO::getShopId).distinct().collect(Collectors.toList());
                  if (PublicUtil.isEmpty(manageShopIds)) {
                      continue;
                  }
                  List<Long> poolIds = new ArrayList<>();
                  BigDecimal reward = BigDecimal.ZERO;
                  for (EvalShopPool pool : pools) {
                      if (manageShopIds.contains(pool.getShopId())) {
                          poolIds.add(pool.getId());
                          distPoolIds.add(pool.getId());
                          reward = reward.add(pool.getReward());
                      }
                  }
                  //奖惩为0不分配
                  if (BigDecimal.ZERO.compareTo(reward) == 0) {
                      return;
                  }
  
                  EvalRewardDist rewardDist = transferPo(evalGroup);
                  rewardDist.setUserId(user.getUserId());
                  rewardDist.setEvalShopPoolIds(poolIds);
                  rewardDist.setShopIds(manageShopIds);
                  rewardDist.setEvalName(evalGroupRankName);
  //                rewardDist.setEvalType(evalType);
                  rewardDist.setReward(reward);
                  evalRewardDistService.save(rewardDist);
  
                  BacklogBatchPlanItemReqDTO planItemReq = new BacklogBatchPlanItemReqDTO();
                  planItemReq.setDataId(rewardDist.getId().toString());
                  planItemReq.setUserId(user.getUserId());
                  planItemReq.setPlanTime(new Date());
                  planItemReq.setExpireTime(expireTime);
  
                  Map<String, String> dynamicMap = new HashMap<>(8);
                  dynamicMap.put("evalGroupName", evalGroupRankName);
                  dynamicMap.put("evalName", evalGroupRankStageName);
  //                dynamicMap.put("evalType", evalType.getName());
                  dynamicMap.put("amount", decimalFormat.format(rewardDist.getReward()));
                  planItemReq.setDynamicMap(dynamicMap);
  
                  Map<String, Object> extraData = new HashMap<>();
                  planItemReq.setExtraData(extraData);
                  itemList.add(planItemReq);
              }
  
          }
  
  
          //推送待办
          BacklogBatchPlanReqDTO batchPlanReq = new BacklogBatchPlanReqDTO(todoVal.getDistEvalReward(), itemList);
          List<FailBacklogItem> failItems = Optional.ofNullable(todoRpcService.batchPush(batchPlanReq)).orElse(new ArrayList<>());
          if (PublicUtil.isNotEmpty(failItems)) {
              log.error("发送分配考评奖励待办失败,失败人员信息:{}", JSON.toJSONString(failItems));
          }
  
          if (PublicUtil.isEmpty(failItems) || itemList.size() > failItems.size()) {
              if (PublicUtil.isNotEmpty(distPoolIds)) {
                  evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()
                          .in(EvalShopPool::getId, distPoolIds)
                          .set(EvalShopPool::getStatus, EvalShopPoolStatusEnum.WAIT_DIST_REWARD)
                          .set(EvalShopPool::getYn, Boolean.FALSE)
                          .set(EvalShopPool::getUpdateTime, new Date())
                  );
              }
          }
ea6b2fd6   姜超   feature(*): 门店奖惩分配
284
285
      }
  
f53a1f59   姜超   feature(*): 百分率处理
286
287
      public EvalRewardDist transferPo(EvalGroup evalGroup) {
          EvalRewardDist rewardDist = new EvalRewardDist();
8945afe5   姜超   feature(*): 考评保存修改
288
          rewardDist.setEvalId(evalGroup.getEvalGroupRankId());
f53a1f59   姜超   feature(*): 百分率处理
289
          rewardDist.setEvalGroupId(evalGroup.getId());
f727712b   姜超   feature(*): 考评阶段指标上报
290
  //        rewardDist.setEvalGroupName(evalGroup.getName());
f53a1f59   姜超   feature(*): 百分率处理
291
292
293
294
295
296
          rewardDist.setStatus(EvalRewardDistStatusEnum.NO_DIST);
          rewardDist.setGroupId(evalGroup.getGroupId());
          rewardDist.setYn(Boolean.TRUE);
          return rewardDist;
      }
  
edc57409   姜超   feature(*): 考评奖惩分配
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
      /**
       * 对查询的人员去重
       *
       * @param roleCode
       * @param shopIds
       * @return
       */
      public List<RpcUserRoleInfoDTO> getUserEnableRoleInfos(String roleCode, List<Long> shopIds) {
          List<RpcUserRoleInfoDTO> userRoleInfos = erpRpcService.getUserEnableRoleInfos(roleCode, shopIds);
          if (PublicUtil.isEmpty(userRoleInfos)) {
              return new ArrayList<>();
          }
          Set<Long> staffIds = new HashSet<>();
          List<RpcUserRoleInfoDTO> repeatUserRoleInfos = Lists.newArrayListWithCapacity(userRoleInfos.size());
          for (RpcUserRoleInfoDTO rpcUserRoleInfoDTO : userRoleInfos) {
              if (staffIds.add(rpcUserRoleInfoDTO.getUserId())) {
                  repeatUserRoleInfos.add(rpcUserRoleInfoDTO);
              }
          }
          return repeatUserRoleInfos;
      }
ea6b2fd6   姜超   feature(*): 门店奖惩分配
318
319
  
  
edc57409   姜超   feature(*): 考评奖惩分配
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
      /**
       * 奖惩分配详情
       * @param id
       * @return
       */
      public EvalRewardDistVO rewardDistDetail(Long id) {
          EvalRewardDist rewardDist = evalRewardDistService.getById(id);
          BV.notNull(rewardDist, "奖惩分配不存在,请重试");
          EvalRewardDistVO rewardDistVO = PublicUtil.copy(rewardDist, EvalRewardDistVO.class);
  
          List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
                  .in(EvalShopPool::getId, rewardDistVO.getEvalShopPoolIds())
                  .eq(EvalShopPool::getYn, Boolean.TRUE)
          );
          BV.isNotEmpty(pools, "奖惩分配不存在,请重试");
          List<EvalShopPoolVO> shopPools = PublicUtil.copyList(pools, EvalShopPoolVO.class);
          rewardDistVO.setShopPools(shopPools);
9ecc8f2d   姜超   feature(*): 数据录入修改
337
  
beac6c98   姜超   feature(*): 分配查询
338
339
          if (EvalRewardDistStatusEnum.APPROVAL.equals(rewardDist.getStatus()) ||
                  EvalRewardDistStatusEnum.APPROVAL_REJECT.equals(rewardDist.getStatus())) {
9ecc8f2d   姜超   feature(*): 数据录入修改
340
              List<EvalRewardDistDetail> details = evalRewardDistDetailService.list(Wrappers.<EvalRewardDistDetail>lambdaQuery()
beac6c98   姜超   feature(*): 分配查询
341
                      .eq(EvalRewardDistDetail::getDistId, rewardDistVO.getId())
9ecc8f2d   姜超   feature(*): 数据录入修改
342
343
344
345
                      .eq(EvalRewardDistDetail::getYn, Boolean.TRUE)
              );
              List<EvalRewardDistDetailVO> detailVOS = PublicUtil.copyList(details, EvalRewardDistDetailVO.class);
              rewardDistVO.setRewardDetails(detailVOS);
dc3c54cf   姜超   feature(*): 修改上传
346
347
348
349
350
351
352
353
  
              ApprovalRecord approvalRecord = approvalRecordService.getOne(Wrappers.<ApprovalRecord>lambdaQuery()
                      .eq(ApprovalRecord::getDataId, id)
                      .eq(ApprovalRecord::getApprovalType, ApprovalTypeEnum.EVAL_REWARD_DIST)
                      .eq(ApprovalRecord::getYn, Boolean.TRUE)
                      .last("ORDER BY id DESC LIMIT 1")
              );
              rewardDistVO.setApprovalNo(Optional.ofNullable(approvalRecord).map(ApprovalRecord::getApprovalNo).orElse(""));
9ecc8f2d   姜超   feature(*): 数据录入修改
354
355
          }
  
edc57409   姜超   feature(*): 考评奖惩分配
356
357
358
          return rewardDistVO;
      }
  
347b9a76   姜超   feature(*): 考评审批
359
360
      @Transactional(rollbackFor = Exception.class)
      public void rewardDist(EvalRewardDistDTO rewardDistDTO, LoginAuthBean currentUser) {
edc57409   姜超   feature(*): 考评奖惩分配
361
362
363
364
365
366
367
368
369
370
371
372
          Long rewardDistId = rewardDistDTO.getEvalShopDistId();
          EvalRewardDist rewardDist = evalRewardDistService.getById(rewardDistId);
          BV.notNull(rewardDist, "奖惩分配不存在,请重试");
          BV.isNotEmpty(rewardDistDTO.getUsers(), "奖惩分配为空,请重试");
  
          BigDecimal totalReward = rewardDistDTO.getUsers().stream()
                                  .map(EvalRewardDistDetailDTO::getReward)
                                  .reduce(BigDecimal.ZERO, BigDecimal::add);
          if (totalReward.compareTo(totalReward) != 0) {
              throw new BusinessException("分配金额不等于总金额,请重试");
          }
  
9ecc8f2d   姜超   feature(*): 数据录入修改
373
374
          //删除之前的分配
          evalRewardDistDetailService.update(Wrappers.<EvalRewardDistDetail>lambdaUpdate()
beac6c98   姜超   feature(*): 分配查询
375
                  .eq(EvalRewardDistDetail::getDistId, rewardDistId)
9ecc8f2d   姜超   feature(*): 数据录入修改
376
377
378
                  .set(EvalRewardDistDetail::getYn, Boolean.FALSE)
          );
  
edc57409   姜超   feature(*): 考评奖惩分配
379
380
          List<EvalRewardDistDetail> distDetails = Lists.newArrayListWithCapacity(rewardDistDTO.getUsers().size());
          for (EvalRewardDistDetailDTO distDetailDTO : rewardDistDTO.getUsers()) {
9ecc8f2d   姜超   feature(*): 数据录入修改
381
382
              EvalRewardDistDetail evalRewardDistDetail = distDetailDTO.convertPo(rewardDistId);
              distDetails.add(evalRewardDistDetail);
edc57409   姜超   feature(*): 考评奖惩分配
383
384
          }
  
347b9a76   姜超   feature(*): 考评审批
385
386
387
388
389
          approvalBizService.applyApproveDistReward(rewardDist, currentUser);
          evalRewardDistDetailService.saveBatch(distDetails);
          rewardDist.setStatus(EvalRewardDistStatusEnum.APPROVAL);
          evalRewardDistService.saveOrUpdate(rewardDist);
      }
edc57409   姜超   feature(*): 考评奖惩分配
390
  
347b9a76   姜超   feature(*): 考评审批
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
      @Transactional(rollbackFor = Exception.class)
      public void approvalEvalRewardDist(ApprovalRecord approvalRecord, ApprovalResultEvent result) {
          log.info("收到考评门店奖惩分配审批信息:{}", JSON.toJSONString(result));
          Boolean agree = result.getAgree();
          Long rewardDistId = approvalRecord.getDataId();
          EvalRewardDist rewardDist = evalRewardDistService.getById(rewardDistId);
          BV.notNull(rewardDist, "奖惩分配不存在,请重试");
          rewardDist.setStatus(EvalRewardDistStatusEnum.APPROVAL_REJECT);
          if (agree) {
              BackLogItemDTO dto = new BackLogItemDTO(rewardDist.getUserId(), todoVal.getDistEvalReward(),
                      String.valueOf(rewardDist.getId()), new Date(), null);
              if (todoRpcService.cancel(dto)) {
  
              } else {
                  log.error("奖惩分配待办取消失败:{}", JSON.toJSONString(rewardDist));
                  throw new BusinessException("奖惩分配失败,请重试");
              }
              rewardDist.setStatus(EvalRewardDistStatusEnum.APPROVAL_AGREE);
2b241dae   姜超   feature(*): 奖惩分配状态设置
409
410
411
412
413
414
              evalRewardDistDetailService.update(Wrappers.<EvalRewardDistDetail>lambdaUpdate()
                      .eq(EvalRewardDistDetail::getDistId, rewardDistId)
                      .eq(EvalRewardDistDetail::getYn, Boolean.TRUE)
                      .set(EvalRewardDistDetail::getStatus, EvalRewardPushStatusEnum.WAIT_PUSH)
                      .set(EvalRewardDistDetail::getUpdateTime, new Date())
              );
347b9a76   姜超   feature(*): 考评审批
415
416
          }
          evalRewardDistService.saveOrUpdate(rewardDist);
edc57409   姜超   feature(*): 考评奖惩分配
417
      }
347b9a76   姜超   feature(*): 考评审批
418
  
ea6b2fd6   姜超   feature(*): 门店奖惩分配
419
  }