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;
|
2ac0c565
姜超
feature(*): 修改个人考评
|
8
|
import cn.fw.morax.common.constant.Constant;
|
347b9a76
姜超
feature(*): 考评审批
|
9
|
import cn.fw.morax.common.pojo.event.ApprovalResultEvent;
|
6216249c
姜超
feature(*): 修改bug
|
10
|
import cn.fw.morax.common.utils.DateUtil;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
11
12
13
|
import cn.fw.morax.common.utils.PublicUtil;
import cn.fw.morax.common.utils.ThreadPoolUtil;
import cn.fw.morax.domain.bo.eval.EvalGroupRewardDistributionBO;
|
347b9a76
姜超
feature(*): 考评审批
|
14
|
import cn.fw.morax.domain.db.ApprovalRecord;
|
6216249c
姜超
feature(*): 修改bug
|
15
|
import cn.fw.morax.domain.db.eval.*;
|
edc57409
姜超
feature(*): 考评奖惩分配
|
16
17
|
import cn.fw.morax.domain.dto.eval.EvalRewardDistDTO;
import cn.fw.morax.domain.dto.eval.EvalRewardDistDetailDTO;
|
6216249c
姜超
feature(*): 修改bug
|
18
|
import cn.fw.morax.domain.enums.*;
|
9ecc8f2d
姜超
feature(*): 数据录入修改
|
19
|
import cn.fw.morax.domain.vo.eval.EvalRewardDistDetailVO;
|
edc57409
姜超
feature(*): 考评奖惩分配
|
20
21
|
import cn.fw.morax.domain.vo.eval.EvalRewardDistVO;
import cn.fw.morax.domain.vo.eval.EvalShopPoolVO;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
22
|
import cn.fw.morax.rpc.backlog.TodoRpcService;
|
edc57409
姜超
feature(*): 考评奖惩分配
|
23
|
import cn.fw.morax.rpc.backlog.dto.BackLogItemDTO;
|
6216249c
姜超
feature(*): 修改bug
|
24
25
|
import cn.fw.morax.rpc.backlog.dto.BacklogBatchPlanItemReqDTO;
import cn.fw.morax.rpc.backlog.dto.BacklogBatchPlanReqDTO;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
26
27
|
import cn.fw.morax.rpc.erp.ErpRpcService;
import cn.fw.morax.rpc.erp.dto.RpcUserRoleInfoDTO;
|
6216249c
姜超
feature(*): 修改bug
|
28
|
import cn.fw.morax.rpc.erp.dto.RpcUserRoleShopDTO;
|
347b9a76
姜超
feature(*): 考评审批
|
29
|
import cn.fw.morax.service.biz.ApprovalBizService;
|
dc3c54cf
姜超
feature(*): 修改上传
|
30
|
import cn.fw.morax.service.data.ApprovalRecordService;
|
6216249c
姜超
feature(*): 修改bug
|
31
|
import cn.fw.morax.service.data.eval.*;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
32
33
34
35
|
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(*): 考评奖惩分配
|
36
|
import com.google.common.collect.Lists;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
37
38
39
40
41
42
43
44
45
46
|
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(*): 考评奖惩分配
|
47
|
import java.math.BigDecimal;
|
2ac0c565
姜超
feature(*): 修改个人考评
|
48
|
import java.text.DateFormat;
|
6216249c
姜超
feature(*): 修改bug
|
49
|
import java.text.DecimalFormat;
|
eccb0d64
姜超
feature(*): 考评详情查询
|
50
|
import java.time.LocalDate;
|
6216249c
姜超
feature(*): 修改bug
|
51
|
import java.time.LocalDateTime;
|
2ac0c565
姜超
feature(*): 修改个人考评
|
52
|
import java.time.format.DateTimeFormatter;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
53
54
55
56
|
import java.util.*;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.locks.Lock;
|
6216249c
姜超
feature(*): 修改bug
|
57
|
import java.util.stream.Collectors;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
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(*): 修改代码格式
|
72
73
|
private final ErpRpcService erpRpcService;
private final TodoRpcService todoRpcService;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
74
|
private final EvalGroupService evalGroupService;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
75
|
private final DistributedLocker distributedLocker;
|
2188d9d0
姜超
feature(*): 修改代码格式
|
76
77
78
|
private final ApprovalBizService approvalBizService;
private final StringRedisTemplate stringRedisTemplate;
private final EvalShopPoolService evalShopPoolService;
|
dc3c54cf
姜超
feature(*): 修改上传
|
79
|
private final ApprovalRecordService approvalRecordService;
|
2188d9d0
姜超
feature(*): 修改代码格式
|
80
|
private final EvalRewardDistService evalRewardDistService;
|
6216249c
姜超
feature(*): 修改bug
|
81
82
83
|
private final EvalGroupRankService evalGroupRankService;
private final EvalGroupRankStageService evalGroupRankStageService;
private final EvalGroupRewardDimService evalGroupRewardDimService;
|
2188d9d0
姜超
feature(*): 修改代码格式
|
84
|
private final EvalRewardDistDetailService evalRewardDistDetailService;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
85
86
87
88
89
90
91
92
93
94
|
@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(*): 查询指标排名
|
95
|
public void cacheDistEvalShopPoolIds(LocalDate localDate) {
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
96
97
98
99
100
101
102
|
Lock lock = distributedLocker.lock(REWARD_LOCK_KEY);
if (! ((RLock) lock).isLocked()) {
return;
}
try {
log.info("定时任务【考评奖惩待办】开始执行");
|
bdcc7a51
姜超
feature(*): 查询指标排名
|
103
|
Set<Long> evalGroupIds = evalGroupService.queryDistributionShopReward(localDate);
|
eccb0d64
姜超
feature(*): 考评详情查询
|
104
|
if (PublicUtil.isEmpty(evalGroupIds)) {
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
105
106
|
return;
}
|
eccb0d64
姜超
feature(*): 考评详情查询
|
107
108
|
String[] array = evalGroupIds.stream()
.map(evalGroupId -> new EvalGroupRewardDistributionBO(evalGroupId))
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
109
110
111
112
113
114
115
116
117
118
119
120
|
.map(JSONObject::toJSONString)
.toArray(String[]::new);
stringRedisTemplate.opsForSet().add(getDistributionKey(), array);
} catch (Exception e){
log.error(e.getMessage(), e);
} finally {
lock.unlock();
}
}
|
edc57409
姜超
feature(*): 考评奖惩分配
|
121
122
123
|
/**
* 分配奖惩
*/
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
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(*): 修改考评审批
|
140
|
log.error("计算考评数据失败:{}", bo, ex);
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
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(*): 考评详情查询
|
157
158
|
final Long evalGroupId = bo.getEvalGroupId();
log.info("分配奖惩的考评组:{}", evalGroupId);
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
159
|
EvalGroup evalGroup = evalGroupService.getById(evalGroupId);
|
eccb0d64
姜超
feature(*): 考评详情查询
|
160
|
BV.notNull(evalGroup, "考评组不存在,终止计算!");
|
6216249c
姜超
feature(*): 修改bug
|
161
162
163
164
|
EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId());
BV.notNull(evalGroupRank, "考评排名组不存在,终止计算!");
EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getById(evalGroup.getEvalGroupRankStageId());
BV.notNull(evalGroupRankStage, "考评阶段不存在,终止计算!");
|
eccb0d64
姜超
feature(*): 考评详情查询
|
165
|
|
6216249c
姜超
feature(*): 修改bug
|
166
167
168
169
170
171
172
173
174
|
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;
}
|
2ac0c565
姜超
feature(*): 修改个人考评
|
175
|
sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage);
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
176
177
178
179
180
181
182
183
|
}
/**
* 发送绩效组变动通知
*
* @param
*/
@Transactional(rollbackFor = Exception.class)
|
6216249c
姜超
feature(*): 修改bug
|
184
185
|
public void sendDistRewardTodo(List<EvalGroupRewardDim> shopRewardDims, EvalGroup evalGroup,
EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) {
|
2ac0c565
姜超
feature(*): 修改个人考评
|
186
|
List<BacklogBatchPlanItemReqDTO> itemList = new ArrayList<>();
|
6216249c
姜超
feature(*): 修改bug
|
187
|
List<Long> distPoolIds = new ArrayList<>();
|
6216249c
姜超
feature(*): 修改bug
|
188
189
190
|
for (EvalGroupRewardDim rewardDim : shopRewardDims) {
final String roleCode = rewardDim.getDistRoleCode();
List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
|
e376b24c
姜超
feature(*): 修改个人考评
|
191
|
.ne(EvalShopPool::getReward, BigDecimal.ZERO)
|
6216249c
姜超
feature(*): 修改bug
|
192
193
194
195
196
197
198
199
|
.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;
}
|
e376b24c
姜超
feature(*): 修改个人考评
|
200
|
List<Long> distShopIds = pools.stream().map(EvalShopPool::getShopId).collect(Collectors.toList());
|
6216249c
姜超
feature(*): 修改bug
|
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
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) {
|
2ac0c565
姜超
feature(*): 修改个人考评
|
220
|
continue;
|
6216249c
姜超
feature(*): 修改bug
|
221
222
|
}
|
2ac0c565
姜超
feature(*): 修改个人考评
|
223
|
EvalRewardDist rewardDist = this.convertRewardDist(evalGroup, evalGroupRank, evalGroupRankStage, poolIds, manageShopIds);
|
6216249c
姜超
feature(*): 修改bug
|
224
|
rewardDist.setUserId(user.getUserId());
|
6216249c
姜超
feature(*): 修改bug
|
225
226
|
rewardDist.setReward(reward);
evalRewardDistService.save(rewardDist);
|
2ac0c565
姜超
feature(*): 修改个人考评
|
227
|
BacklogBatchPlanItemReqDTO planItemReq = this.createBacklog(rewardDist, user.getUserId());
|
f945186c
姜超
feature(*): 修改个人考评
|
228
|
planItemReq.setDynamicMap(rewardDistDynamicMap(rewardDist, evalGroupRank, evalGroupRankStage));
|
6216249c
姜超
feature(*): 修改bug
|
229
230
|
itemList.add(planItemReq);
}
|
6216249c
姜超
feature(*): 修改bug
|
231
|
}
|
e376b24c
姜超
feature(*): 修改个人考评
|
232
233
234
235
236
237
238
|
if (PublicUtil.isNotEmpty(itemList)) {
//推送待办
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));
}
|
6216249c
姜超
feature(*): 修改bug
|
239
|
|
e376b24c
姜超
feature(*): 修改个人考评
|
240
241
242
243
244
245
246
247
|
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::getUpdateTime, new Date())
);
}
|
6216249c
姜超
feature(*): 修改bug
|
248
249
|
}
}
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
250
251
|
}
|
2ac0c565
姜超
feature(*): 修改个人考评
|
252
253
254
255
256
257
258
259
260
261
262
263
|
public BacklogBatchPlanItemReqDTO createBacklog(EvalRewardDist rewardDist, Long userId) {
Date expireTime = DateUtil.localDateTime2Date(LocalDateTime.now().plusDays(2L));
BacklogBatchPlanItemReqDTO planItemReq = new BacklogBatchPlanItemReqDTO();
planItemReq.setDataId(rewardDist.getId().toString());
planItemReq.setUserId(userId);
planItemReq.setPlanTime(new Date());
planItemReq.setExpireTime(expireTime);
planItemReq.setExtraData(new HashMap<>());
return planItemReq;
}
|
f945186c
姜超
feature(*): 修改个人考评
|
264
265
266
267
268
269
270
|
public Map<String, String> rewardDistDynamicMap(EvalRewardDist rewardDist, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String beginTimeStr = dtf.format(rewardDist.getBeginTime());
String endTimeStr = dtf.format(rewardDist.getOverTime());
String timeStr = beginTimeStr + Constant.TIME_SEPARATOR + endTimeStr;
String evalGroupRankStageName = (evalGroupRank.getMultiStage()) ? evalGroupRankStage.getName() : "---";
|
2ac0c565
姜超
feature(*): 修改个人考评
|
271
272
|
DecimalFormat decimalFormat = new DecimalFormat("##########.##");
Map<String, String> dynamicMap = new HashMap<>(8);
|
f945186c
姜超
feature(*): 修改个人考评
|
273
|
dynamicMap.put("evalGroupRankName", evalGroupRank.getName());
|
2ac0c565
姜超
feature(*): 修改个人考评
|
274
275
276
277
278
279
280
281
|
dynamicMap.put("evalGroupRankStageName", evalGroupRankStageName);
dynamicMap.put("evalGroupRankStageTime", timeStr);
dynamicMap.put("amount", decimalFormat.format(rewardDist.getReward()));
return dynamicMap;
}
public EvalRewardDist convertRewardDist(EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage,
List<Long> poolIds, List<Long> manageShopIds) {
|
f53a1f59
姜超
feature(*): 百分率处理
|
282
|
EvalRewardDist rewardDist = new EvalRewardDist();
|
f53a1f59
姜超
feature(*): 百分率处理
|
283
|
rewardDist.setEvalGroupId(evalGroup.getId());
|
2ac0c565
姜超
feature(*): 修改个人考评
|
284
285
286
287
288
289
290
291
292
293
294
|
rewardDist.setEvalGroupRankId(evalGroupRank.getId());
rewardDist.setEvalGroupRankStageId(evalGroupRankStage.getId());
rewardDist.setEvalGroupRankName(evalGroupRank.getName());
String evalGroupRankStageName = (PublicUtil.isNotEmpty(evalGroupRankStage.getName()) ? evalGroupRankStage.getName() : "---");
rewardDist.setEvalGroupRankStageName(evalGroupRankStageName);
rewardDist.setBeginTime(evalGroupRankStage.getBeginTime());
rewardDist.setOverTime(evalGroupRankStage.getOverTime());
rewardDist.setEvalShopPoolIds(poolIds);
rewardDist.setShopIds(manageShopIds);
rewardDist.setEvalGroupId(evalGroup.getId());
|
f53a1f59
姜超
feature(*): 百分率处理
|
295
296
297
298
299
300
|
rewardDist.setStatus(EvalRewardDistStatusEnum.NO_DIST);
rewardDist.setGroupId(evalGroup.getGroupId());
rewardDist.setYn(Boolean.TRUE);
return rewardDist;
}
|
edc57409
姜超
feature(*): 考评奖惩分配
|
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
/**
* 对查询的人员去重
*
* @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(*): 门店奖惩分配
|
322
323
|
|
edc57409
姜超
feature(*): 考评奖惩分配
|
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
|
/**
* 奖惩分配详情
* @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(*): 数据录入修改
|
341
|
|
beac6c98
姜超
feature(*): 分配查询
|
342
343
|
if (EvalRewardDistStatusEnum.APPROVAL.equals(rewardDist.getStatus()) ||
EvalRewardDistStatusEnum.APPROVAL_REJECT.equals(rewardDist.getStatus())) {
|
9ecc8f2d
姜超
feature(*): 数据录入修改
|
344
|
List<EvalRewardDistDetail> details = evalRewardDistDetailService.list(Wrappers.<EvalRewardDistDetail>lambdaQuery()
|
beac6c98
姜超
feature(*): 分配查询
|
345
|
.eq(EvalRewardDistDetail::getDistId, rewardDistVO.getId())
|
9ecc8f2d
姜超
feature(*): 数据录入修改
|
346
347
348
349
|
.eq(EvalRewardDistDetail::getYn, Boolean.TRUE)
);
List<EvalRewardDistDetailVO> detailVOS = PublicUtil.copyList(details, EvalRewardDistDetailVO.class);
rewardDistVO.setRewardDetails(detailVOS);
|
dc3c54cf
姜超
feature(*): 修改上传
|
350
351
352
353
354
355
356
357
|
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(*): 数据录入修改
|
358
359
|
}
|
edc57409
姜超
feature(*): 考评奖惩分配
|
360
361
362
|
return rewardDistVO;
}
|
347b9a76
姜超
feature(*): 考评审批
|
363
364
|
@Transactional(rollbackFor = Exception.class)
public void rewardDist(EvalRewardDistDTO rewardDistDTO, LoginAuthBean currentUser) {
|
edc57409
姜超
feature(*): 考评奖惩分配
|
365
366
367
368
369
370
371
372
373
374
375
376
|
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(*): 数据录入修改
|
377
378
|
//删除之前的分配
evalRewardDistDetailService.update(Wrappers.<EvalRewardDistDetail>lambdaUpdate()
|
beac6c98
姜超
feature(*): 分配查询
|
379
|
.eq(EvalRewardDistDetail::getDistId, rewardDistId)
|
9ecc8f2d
姜超
feature(*): 数据录入修改
|
380
381
382
|
.set(EvalRewardDistDetail::getYn, Boolean.FALSE)
);
|
edc57409
姜超
feature(*): 考评奖惩分配
|
383
384
|
List<EvalRewardDistDetail> distDetails = Lists.newArrayListWithCapacity(rewardDistDTO.getUsers().size());
for (EvalRewardDistDetailDTO distDetailDTO : rewardDistDTO.getUsers()) {
|
9ecc8f2d
姜超
feature(*): 数据录入修改
|
385
386
|
EvalRewardDistDetail evalRewardDistDetail = distDetailDTO.convertPo(rewardDistId);
distDetails.add(evalRewardDistDetail);
|
edc57409
姜超
feature(*): 考评奖惩分配
|
387
388
|
}
|
347b9a76
姜超
feature(*): 考评审批
|
389
390
391
392
393
|
approvalBizService.applyApproveDistReward(rewardDist, currentUser);
evalRewardDistDetailService.saveBatch(distDetails);
rewardDist.setStatus(EvalRewardDistStatusEnum.APPROVAL);
evalRewardDistService.saveOrUpdate(rewardDist);
}
|
edc57409
姜超
feature(*): 考评奖惩分配
|
394
|
|
347b9a76
姜超
feature(*): 考评审批
|
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
|
@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(*): 奖惩分配状态设置
|
413
414
415
416
417
418
|
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(*): 考评审批
|
419
420
|
}
evalRewardDistService.saveOrUpdate(rewardDist);
|
edc57409
姜超
feature(*): 考评奖惩分配
|
421
|
}
|
347b9a76
姜超
feature(*): 考评审批
|
422
|
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
423
|
}
|