Commit 6216249c6b7483d0e3f56cad3f1d066de59970de

Authored by 姜超
1 parent b1c2250d

feature(*): 修改bug

修改bug
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupMapper.xml
@@ -72,13 +72,15 @@ @@ -72,13 +72,15 @@
72 t3.id 72 t3.id
73 FROM 73 FROM
74 eval_group_rank t1 74 eval_group_rank t1
75 - LEFT JOIN eval_group_rank_stage t2 ON t1.id = t2.eval_group_rank_id AND t2.yn = 1  
76 - LEFT JOIN eval_group t3 ON t2.id = t3.eval_group_rank_stage_id AND t3.yn = 1 75 + INNER JOIN eval_group_rank_stage t2 ON t1.id = t2.eval_group_rank_id AND t2.yn = 1
  76 + INNER JOIN eval_group t3 ON t2.id = t3.eval_group_rank_stage_id AND t3.yn = 1
  77 + INNER JOIN eval_group_reward_dim t4 ON t3.id = t4.eval_group_id AND t4.yn = 1
77 WHERE 78 WHERE
78 t1.yn = 1 79 t1.yn = 1
79 AND t1.`status` IN ( 3, 4 ) 80 AND t1.`status` IN ( 3, 4 )
80 and DATE_FORMAT(t2.begin_time, '%Y-%m-%d') <= DATE_FORMAT(#{day}, '%Y-%m-%d') 81 and DATE_FORMAT(t2.begin_time, '%Y-%m-%d') <= DATE_FORMAT(#{day}, '%Y-%m-%d')
81 and DATE_FORMAT(t2.over_time, '%Y-%m-%d') = DATE_FORMAT(#{day}, '%Y-%m-%d') 82 and DATE_FORMAT(t2.over_time, '%Y-%m-%d') = DATE_FORMAT(#{day}, '%Y-%m-%d')
  83 + AND t4.`type` = 2
82 </select> 84 </select>
83 85
84 <select id="getEffectsByRankId" resultMap="BaseResultMap"> 86 <select id="getEffectsByRankId" resultMap="BaseResultMap">
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java
@@ -105,7 +105,7 @@ public class EvalGroupUserTask { @@ -105,7 +105,7 @@ public class EvalGroupUserTask {
105 List<EvalGroupUser> evalGroupUsers = null; 105 List<EvalGroupUser> evalGroupUsers = null;
106 for (EvalGroup evalGroup : evalGroups) { 106 for (EvalGroup evalGroup : evalGroups) {
107 for (Long postId : evalGroup.getPostIds()) { 107 for (Long postId : evalGroup.getPostIds()) {
108 - evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(postId, evalGroups, yesterday); 108 + evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(postId, evalGroup, yesterday);
109 evalGroupUsersForSave.addAll(evalGroupUsers); 109 evalGroupUsersForSave.addAll(evalGroupUsers);
110 } 110 }
111 } 111 }
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
@@ -184,7 +184,7 @@ public class EvalCalculateService { @@ -184,7 +184,7 @@ public class EvalCalculateService {
184 log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); 184 log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup));
185 return; 185 return;
186 } 186 }
187 - List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, evalGroupRankStage.getBeginTime(), localDate, scopeType); 187 + List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, evalGroupRankStage, localDate, scopeType);
188 if (CollectionUtils.isEmpty(userShops)) { 188 if (CollectionUtils.isEmpty(userShops)) {
189 log.error("考评组[{}]人员为空,终止计算!", evalGroupId); 189 log.error("考评组[{}]人员为空,终止计算!", evalGroupId);
190 return; 190 return;
@@ -269,16 +269,17 @@ public class EvalCalculateService { @@ -269,16 +269,17 @@ public class EvalCalculateService {
269 } 269 }
270 270
271 271
272 - public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate beginDate, LocalDate localDate, EvalScopeEnum scopeType) { 272 + public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) {
  273 + LocalDate beginDate = evalGroupRankStage.getBeginTime();
273 List<EvalGroupUserShop> userShops = new ArrayList<>(); 274 List<EvalGroupUserShop> userShops = new ArrayList<>();
274 if (EvalScopeEnum.STAFF.equals(scopeType)) { 275 if (EvalScopeEnum.STAFF.equals(scopeType)) {
275 List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() 276 List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
276 - .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId()) 277 + .eq(EvalGroupUser::getEvalGroupRankStageId, evalGroupRankStage.getId())
277 .eq(EvalGroupUser::getDataDate, localDate) 278 .eq(EvalGroupUser::getDataDate, localDate)
278 .eq(EvalGroupUser::getYn, Boolean.TRUE) 279 .eq(EvalGroupUser::getYn, Boolean.TRUE)
279 ); 280 );
280 281
281 - Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, users, localDate); 282 + Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate);
282 for (EvalGroupUser user : users) { 283 for (EvalGroupUser user : users) {
283 if (Boolean.TRUE.equals(user.getIgnored())) { 284 if (Boolean.TRUE.equals(user.getIgnored())) {
284 continue; 285 continue;
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
@@ -69,24 +69,11 @@ public class EvalGroupUserBizService { @@ -69,24 +69,11 @@ public class EvalGroupUserBizService {
69 * @return 69 * @return
70 */ 70 */
71 @Transactional(rollbackFor = Exception.class) 71 @Transactional(rollbackFor = Exception.class)
72 - public List<EvalGroupUser> fetchBuildKpiUser(Long postId, List<EvalGroup> evalGroups, LocalDate localDate){  
73 - Set<Long> shopIds = new HashSet<>();  
74 - Map<Long, EvalGroup> shopKpiGroupMap = new HashMap<>();  
75 - for (EvalGroup evalGroup : evalGroups) {  
76 - shopIds.addAll(evalGroup.getShopIds());  
77 - for (Long shopId : evalGroup.getShopIds()) {  
78 - shopKpiGroupMap.put(shopId, evalGroup);  
79 - }  
80 - }  
81 - List<EvalGroupUser> evalGroupUsers = this.fetchPostUsers(postId, new ArrayList<>(shopIds), localDate); 72 + public List<EvalGroupUser> fetchBuildKpiUser(Long postId, EvalGroup evalGroup, LocalDate localDate){
  73 + List<EvalGroupUser> evalGroupUsers = this.fetchPostUsers(postId, evalGroup.getShopIds(), localDate);
82 74
83 //构建考评组信息 75 //构建考评组信息
84 for (EvalGroupUser user : evalGroupUsers) { 76 for (EvalGroupUser user : evalGroupUsers) {
85 - if (! shopKpiGroupMap.containsKey(user.getShopId())) {  
86 - log.error("员工门店没有绩效组配置,门店:{},岗位:{},员工:{}", user.getShopId(), user.getPostId(), user.getId());  
87 - continue;  
88 - }  
89 - EvalGroup evalGroup = shopKpiGroupMap.get(user.getShopId());  
90 user.setEvalGroupRankId(evalGroup.getEvalGroupRankId()); 77 user.setEvalGroupRankId(evalGroup.getEvalGroupRankId());
91 user.setEvalGroupRankStageId(evalGroup.getEvalGroupRankStageId()); 78 user.setEvalGroupRankStageId(evalGroup.getEvalGroupRankStageId());
92 user.setEvalGroupId(evalGroup.getId()); 79 user.setEvalGroupId(evalGroup.getId());
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java
@@ -46,13 +46,13 @@ public class EvalPoolCommonService { @@ -46,13 +46,13 @@ public class EvalPoolCommonService {
46 private EhrRpcService ehrRpcService; 46 private EhrRpcService ehrRpcService;
47 private OopRpcService oopRpcService; 47 private OopRpcService oopRpcService;
48 48
49 - public Map<Long, EvalUserPool> inspectionUserPoolMap(EvalGroup evalGroup, List<EvalGroupUser> users, LocalDate localDate) { 49 + public Map<Long, EvalUserPool> inspectionUserPoolMap(EvalGroup evalGroup, EvalGroupRankStage evalGroupRankStage, List<EvalGroupUser> users, LocalDate localDate) {
50 if (PublicUtil.isEmpty(users)) { 50 if (PublicUtil.isEmpty(users)) {
51 return new HashMap<>(); 51 return new HashMap<>();
52 } 52 }
53 Set<Long> userIds = users.stream().map(EvalGroupUser::getUserId).collect(Collectors.toSet()); 53 Set<Long> userIds = users.stream().map(EvalGroupUser::getUserId).collect(Collectors.toSet());
54 List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery() 54 List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
55 - .eq(EvalUserPool::getEvalGroupId, evalGroup.getId()) 55 + .eq(EvalUserPool::getEvalGroupRankStageId, evalGroupRankStage.getId())
56 .eq(EvalUserPool::getMonthly, YearMonth.from(localDate)) 56 .eq(EvalUserPool::getMonthly, YearMonth.from(localDate))
57 .in(EvalUserPool::getUserId, userIds) 57 .in(EvalUserPool::getUserId, userIds)
58 .eq(EvalUserPool::getYn, Boolean.TRUE) 58 .eq(EvalUserPool::getYn, Boolean.TRUE)
@@ -157,7 +157,7 @@ public class EvalPoolCommonService { @@ -157,7 +157,7 @@ public class EvalPoolCommonService {
157 @Transactional(rollbackFor = Exception.class) 157 @Transactional(rollbackFor = Exception.class)
158 public EvalUserPool inspectionUserPool(EvalGroupUser user) { 158 public EvalUserPool inspectionUserPool(EvalGroupUser user) {
159 EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery() 159 EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery()
160 - .eq(EvalUserPool::getEgc, user.getEgc()) 160 + .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId())
161 .eq(EvalUserPool::getUserId, user.getUserId()) 161 .eq(EvalUserPool::getUserId, user.getUserId())
162 .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) 162 .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate()))
163 .eq(EvalUserPool::getYn, Boolean.TRUE) 163 .eq(EvalUserPool::getYn, Boolean.TRUE)
@@ -165,21 +165,21 @@ public class EvalPoolCommonService { @@ -165,21 +165,21 @@ public class EvalPoolCommonService {
165 if (PublicUtil.isNotEmpty(evalUserPool)) { 165 if (PublicUtil.isNotEmpty(evalUserPool)) {
166 return evalUserPool; 166 return evalUserPool;
167 } 167 }
168 - evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery()  
169 - .eq(EvalUserPool::getEgc, user.getEgc())  
170 - .eq(EvalUserPool::getUserId, user.getUserId())  
171 - .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate()).minusMonths(1))  
172 - .eq(EvalUserPool::getYn, Boolean.TRUE)  
173 - , Boolean.FALSE);  
174 - if (PublicUtil.isNotEmpty(evalUserPool)) {  
175 - evalUserPoolService.update(Wrappers.<EvalUserPool>lambdaUpdate()  
176 - .eq(EvalUserPool::getId, evalUserPool.getId())  
177 - .set(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate()))  
178 - .set(EvalUserPool::getUpdateTime, new Date())  
179 - );  
180 - evalUserPool.setMonthly(YearMonth.from(user.getDataDate()));  
181 - return evalUserPool;  
182 - } 168 +// evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery()
  169 +// .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId())
  170 +// .eq(EvalUserPool::getUserId, user.getUserId())
  171 +// .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate()).minusMonths(1))
  172 +// .eq(EvalUserPool::getYn, Boolean.TRUE)
  173 +// , Boolean.FALSE);
  174 +// if (PublicUtil.isNotEmpty(evalUserPool)) {
  175 +// evalUserPoolService.update(Wrappers.<EvalUserPool>lambdaUpdate()
  176 +// .eq(EvalUserPool::getId, evalUserPool.getId())
  177 +// .set(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate()))
  178 +// .set(EvalUserPool::getUpdateTime, new Date())
  179 +// );
  180 +// evalUserPool.setMonthly(YearMonth.from(user.getDataDate()));
  181 +// return evalUserPool;
  182 +// }
183 return this.createUserPoolData(user); 183 return this.createUserPoolData(user);
184 } 184 }
185 185
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java
1 package cn.fw.morax.service.biz.eval; 1 package cn.fw.morax.service.biz.eval;
2 2
  3 +import cn.fw.backlog.sdk.api.result.FailBacklogItem;
3 import cn.fw.common.cache.locker.DistributedLocker; 4 import cn.fw.common.cache.locker.DistributedLocker;
4 import cn.fw.common.exception.BusinessException; 5 import cn.fw.common.exception.BusinessException;
5 import cn.fw.common.web.auth.LoginAuthBean; 6 import cn.fw.common.web.auth.LoginAuthBean;
6 import cn.fw.morax.common.config.TodoVal; 7 import cn.fw.morax.common.config.TodoVal;
7 import cn.fw.morax.common.pojo.event.ApprovalResultEvent; 8 import cn.fw.morax.common.pojo.event.ApprovalResultEvent;
  9 +import cn.fw.morax.common.utils.DateUtil;
8 import cn.fw.morax.common.utils.PublicUtil; 10 import cn.fw.morax.common.utils.PublicUtil;
9 import cn.fw.morax.common.utils.ThreadPoolUtil; 11 import cn.fw.morax.common.utils.ThreadPoolUtil;
10 import cn.fw.morax.domain.bo.eval.EvalGroupRewardDistributionBO; 12 import cn.fw.morax.domain.bo.eval.EvalGroupRewardDistributionBO;
11 import cn.fw.morax.domain.db.ApprovalRecord; 13 import cn.fw.morax.domain.db.ApprovalRecord;
12 -import cn.fw.morax.domain.db.eval.EvalGroup;  
13 -import cn.fw.morax.domain.db.eval.EvalRewardDist;  
14 -import cn.fw.morax.domain.db.eval.EvalRewardDistDetail;  
15 -import cn.fw.morax.domain.db.eval.EvalShopPool; 14 +import cn.fw.morax.domain.db.eval.*;
16 import cn.fw.morax.domain.dto.eval.EvalRewardDistDTO; 15 import cn.fw.morax.domain.dto.eval.EvalRewardDistDTO;
17 import cn.fw.morax.domain.dto.eval.EvalRewardDistDetailDTO; 16 import cn.fw.morax.domain.dto.eval.EvalRewardDistDetailDTO;
18 -import cn.fw.morax.domain.enums.ApprovalTypeEnum;  
19 -import cn.fw.morax.domain.enums.EvalRewardDistStatusEnum;  
20 -import cn.fw.morax.domain.enums.EvalRewardPushStatusEnum; 17 +import cn.fw.morax.domain.enums.*;
21 import cn.fw.morax.domain.vo.eval.EvalRewardDistDetailVO; 18 import cn.fw.morax.domain.vo.eval.EvalRewardDistDetailVO;
22 import cn.fw.morax.domain.vo.eval.EvalRewardDistVO; 19 import cn.fw.morax.domain.vo.eval.EvalRewardDistVO;
23 import cn.fw.morax.domain.vo.eval.EvalShopPoolVO; 20 import cn.fw.morax.domain.vo.eval.EvalShopPoolVO;
24 import cn.fw.morax.rpc.backlog.TodoRpcService; 21 import cn.fw.morax.rpc.backlog.TodoRpcService;
25 import cn.fw.morax.rpc.backlog.dto.BackLogItemDTO; 22 import cn.fw.morax.rpc.backlog.dto.BackLogItemDTO;
  23 +import cn.fw.morax.rpc.backlog.dto.BacklogBatchPlanItemReqDTO;
  24 +import cn.fw.morax.rpc.backlog.dto.BacklogBatchPlanReqDTO;
26 import cn.fw.morax.rpc.erp.ErpRpcService; 25 import cn.fw.morax.rpc.erp.ErpRpcService;
27 import cn.fw.morax.rpc.erp.dto.RpcUserRoleInfoDTO; 26 import cn.fw.morax.rpc.erp.dto.RpcUserRoleInfoDTO;
  27 +import cn.fw.morax.rpc.erp.dto.RpcUserRoleShopDTO;
28 import cn.fw.morax.service.biz.ApprovalBizService; 28 import cn.fw.morax.service.biz.ApprovalBizService;
29 import cn.fw.morax.service.data.ApprovalRecordService; 29 import cn.fw.morax.service.data.ApprovalRecordService;
30 -import cn.fw.morax.service.data.eval.EvalGroupService;  
31 -import cn.fw.morax.service.data.eval.EvalRewardDistDetailService;  
32 -import cn.fw.morax.service.data.eval.EvalRewardDistService;  
33 -import cn.fw.morax.service.data.eval.EvalShopPoolService; 30 +import cn.fw.morax.service.data.eval.*;
34 import com.alibaba.fastjson.JSON; 31 import com.alibaba.fastjson.JSON;
35 import com.alibaba.fastjson.JSONObject; 32 import com.alibaba.fastjson.JSONObject;
36 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 33 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -47,11 +44,14 @@ import org.springframework.stereotype.Service; @@ -47,11 +44,14 @@ import org.springframework.stereotype.Service;
47 import org.springframework.transaction.annotation.Transactional; 44 import org.springframework.transaction.annotation.Transactional;
48 45
49 import java.math.BigDecimal; 46 import java.math.BigDecimal;
  47 +import java.text.DecimalFormat;
50 import java.time.LocalDate; 48 import java.time.LocalDate;
  49 +import java.time.LocalDateTime;
51 import java.util.*; 50 import java.util.*;
52 import java.util.concurrent.RejectedExecutionException; 51 import java.util.concurrent.RejectedExecutionException;
53 import java.util.concurrent.ThreadPoolExecutor; 52 import java.util.concurrent.ThreadPoolExecutor;
54 import java.util.concurrent.locks.Lock; 53 import java.util.concurrent.locks.Lock;
  54 +import java.util.stream.Collectors;
55 55
56 import static cn.fw.common.businessvalidator.Validator.BV; 56 import static cn.fw.common.businessvalidator.Validator.BV;
57 57
@@ -75,6 +75,9 @@ public class EvalRewardService { @@ -75,6 +75,9 @@ public class EvalRewardService {
75 private final EvalShopPoolService evalShopPoolService; 75 private final EvalShopPoolService evalShopPoolService;
76 private final ApprovalRecordService approvalRecordService; 76 private final ApprovalRecordService approvalRecordService;
77 private final EvalRewardDistService evalRewardDistService; 77 private final EvalRewardDistService evalRewardDistService;
  78 + private final EvalGroupRankService evalGroupRankService;
  79 + private final EvalGroupRankStageService evalGroupRankStageService;
  80 + private final EvalGroupRewardDimService evalGroupRewardDimService;
78 private final EvalRewardDistDetailService evalRewardDistDetailService; 81 private final EvalRewardDistDetailService evalRewardDistDetailService;
79 82
80 @Value("${spring.cache.custom.global-prefix}:dist:eval-reward") 83 @Value("${spring.cache.custom.global-prefix}:dist:eval-reward")
@@ -152,14 +155,32 @@ public class EvalRewardService { @@ -152,14 +155,32 @@ public class EvalRewardService {
152 log.info("分配奖惩的考评组:{}", evalGroupId); 155 log.info("分配奖惩的考评组:{}", evalGroupId);
153 EvalGroup evalGroup = evalGroupService.getById(evalGroupId); 156 EvalGroup evalGroup = evalGroupService.getById(evalGroupId);
154 BV.notNull(evalGroup, "考评组不存在,终止计算!"); 157 BV.notNull(evalGroup, "考评组不存在,终止计算!");
  158 + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId());
  159 + BV.notNull(evalGroupRank, "考评排名组不存在,终止计算!");
  160 + EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getById(evalGroup.getEvalGroupRankStageId());
  161 + BV.notNull(evalGroupRankStage, "考评阶段不存在,终止计算!");
  162 +
  163 +
  164 +// List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
  165 +// .eq(EvalShopPool::getEvalGroupId, evalGroupId)
  166 +// .eq(EvalShopPool::getYn, Boolean.TRUE)
  167 +// );
  168 +// if (PublicUtil.isEmpty(pools)) {
  169 +// log.error("考评池不存在,终止计算!");
  170 +// return;
  171 +// }
  172 +// BV.isNotEmpty(pools, "考评池不存在,终止计算!");
155 173
156 - List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()  
157 - .eq(EvalShopPool::getEvalGroupId, evalGroupId)  
158 - .eq(EvalShopPool::getYn, Boolean.TRUE) 174 + List<EvalGroupRewardDim> shopRewardDims = evalGroupRewardDimService.list(Wrappers.<EvalGroupRewardDim>lambdaQuery()
  175 + .eq(EvalGroupRewardDim::getEvalGroupId, evalGroup.getId())
  176 + .eq(EvalGroupRewardDim::getType, EvalScopeEnum.SHOP)
  177 + .eq(EvalGroupRewardDim::getYn, Boolean.TRUE)
159 ); 178 );
160 - BV.isNotEmpty(pools, "考评池不存在,终止计算!");  
161 -  
162 - sendDistRewardTodo(pools, evalGroup ); 179 + if (PublicUtil.isEmpty(shopRewardDims)) {
  180 + log.error("考评奖惩没有门店:{}", JSON.toJSONString(evalGroup));
  181 + return;
  182 + }
  183 + sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage);
163 } 184 }
164 185
165 /** 186 /**
@@ -168,81 +189,98 @@ public class EvalRewardService { @@ -168,81 +189,98 @@ public class EvalRewardService {
168 * @param 189 * @param
169 */ 190 */
170 @Transactional(rollbackFor = Exception.class) 191 @Transactional(rollbackFor = Exception.class)
171 - public void sendDistRewardTodo(List<EvalShopPool> pools, EvalGroup evalGroup) {  
172 -// Eval eval = evalService.getById(evalGroup.getEvalGroupRankId());  
173 -// BV.notNull(eval, "考评配置不存在,请重试");  
174 -//  
175 -// DecimalFormat decimalFormat = new DecimalFormat("##########.##");  
176 -// final String roleCode = evalGroup.getRoleCodes().stream().findFirst().get();  
177 -// final String evalGroupName = evalGroup.getName();  
178 -// final String evalName = eval.getName();  
179 -// final EvalTypeEnum evalType = eval.getType();  
180 -// List<Long> shopIds = evalGroup.getShopIds();  
181 -//  
182 -// Date expireTime = DateUtil.localDateTime2Date(LocalDateTime.now().plusDays(2L));  
183 -//  
184 -// List<BacklogBatchPlanItemReqDTO> itemList = new ArrayList<>();  
185 -// List<RpcUserRoleInfoDTO> users = this.getUserEnableRoleInfos(roleCode, shopIds);  
186 -// for (RpcUserRoleInfoDTO user : users) {  
187 -// List<Long> manageShopIds = user.getRangeList().stream()  
188 -// .filter(range -> shopIds.contains(range.getShopId()))  
189 -// .map(RpcUserRoleShopDTO::getShopId).distinct().collect(Collectors.toList());  
190 -// if (PublicUtil.isEmpty(manageShopIds)) {  
191 -// continue;  
192 -// }  
193 -//  
194 -// List<Long> poolIds = new ArrayList<>();  
195 -// BigDecimal reward = BigDecimal.ZERO;  
196 -// for (EvalShopPool pool : pools) {  
197 -// if (manageShopIds.contains(pool.getShopId())) {  
198 -// poolIds.add(pool.getId());  
199 -// reward = reward.add(pool.getReward());  
200 -// }  
201 -// }  
202 -// //奖惩为0不分配  
203 -// if (BigDecimal.ZERO.compareTo(reward) == 0) {  
204 -// return;  
205 -// }  
206 -//  
207 -// EvalRewardDist rewardDist = transferPo(evalGroup);  
208 -// rewardDist.setUserId(user.getUserId());  
209 -// rewardDist.setEvalShopPoolIds(poolIds);  
210 -// rewardDist.setShopIds(manageShopIds);  
211 -// rewardDist.setEvalName(evalName);  
212 -// rewardDist.setEvalType(evalType);  
213 -// rewardDist.setReward(reward);  
214 -// evalRewardDistService.save(rewardDist);  
215 -//  
216 -// BacklogBatchPlanItemReqDTO planItemReq = new BacklogBatchPlanItemReqDTO();  
217 -// planItemReq.setDataId(rewardDist.getId().toString());  
218 -// planItemReq.setUserId(user.getUserId());  
219 -// planItemReq.setPlanTime(new Date());  
220 -// planItemReq.setExpireTime(expireTime);  
221 -//  
222 -// Map<String, String> dynamicMap = new HashMap<>(8);  
223 -// dynamicMap.put("evalGroupName", evalGroupName);  
224 -// dynamicMap.put("evalName", evalName);  
225 -// dynamicMap.put("evalType", evalType.getName());  
226 -// dynamicMap.put("amount", decimalFormat.format(rewardDist.getReward()));  
227 -// planItemReq.setDynamicMap(dynamicMap);  
228 -//  
229 -// Map<String, Object> extraData = new HashMap<>();  
230 -// planItemReq.setExtraData(extraData);  
231 -// itemList.add(planItemReq);  
232 -// }  
233 -//  
234 -//  
235 -// //推送待办  
236 -// BacklogBatchPlanReqDTO batchPlanReq = new BacklogBatchPlanReqDTO(todoVal.getDistEvalReward(), itemList);  
237 -// List<FailBacklogItem> failItems = Optional.ofNullable(todoRpcService.batchPush(batchPlanReq)).orElse(new ArrayList<>());  
238 -// if (PublicUtil.isNotEmpty(failItems)) {  
239 -// log.error("发送分配考评奖励待办失败,失败人员信息:{}", JSON.toJSONString(failItems));  
240 -// } 192 + public void sendDistRewardTodo(List<EvalGroupRewardDim> shopRewardDims, EvalGroup evalGroup,
  193 + EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) {
  194 + String evalGroupRankName = evalGroupRank.getName();
  195 + String evalGroupRankStageName = evalGroupRankStage.getName();
  196 + DecimalFormat decimalFormat = new DecimalFormat("##########.##");
  197 + List<BacklogBatchPlanItemReqDTO> itemList = new ArrayList<>();
  198 +
  199 + List<Long> distPoolIds = new ArrayList<>();
  200 + final Date expireTime = DateUtil.localDateTime2Date(LocalDateTime.now().plusDays(2L));
  201 + for (EvalGroupRewardDim rewardDim : shopRewardDims) {
  202 + final String roleCode = rewardDim.getDistRoleCode();
  203 + List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
  204 + .eq(EvalShopPool::getEvalGroupId, evalGroup.getId())
  205 + .in(EvalShopPool::getShopId, rewardDim.getShopIds())
  206 + .eq(EvalShopPool::getYn, Boolean.TRUE)
  207 + );
  208 + if (PublicUtil.isEmpty(pools)) {
  209 + log.error("分配奖惩待办,未找到考评池:{}", JSON.toJSONString(rewardDim));
  210 + continue;
  211 + }
  212 + List<Long> distShopIds = pools.stream().filter(pool -> pool.getReward().compareTo(BigDecimal.ZERO) == 0)
  213 + .map(EvalShopPool::getShopId).collect(Collectors.toList());
  214 +
  215 + List<RpcUserRoleInfoDTO> users = this.getUserEnableRoleInfos(roleCode, distShopIds);
  216 + for (RpcUserRoleInfoDTO user : users) {
  217 + List<Long> manageShopIds = user.getRangeList().stream()
  218 + .filter(range -> distShopIds.contains(range.getShopId()))
  219 + .map(RpcUserRoleShopDTO::getShopId).distinct().collect(Collectors.toList());
  220 + if (PublicUtil.isEmpty(manageShopIds)) {
  221 + continue;
  222 + }
  223 + List<Long> poolIds = new ArrayList<>();
  224 + BigDecimal reward = BigDecimal.ZERO;
  225 + for (EvalShopPool pool : pools) {
  226 + if (manageShopIds.contains(pool.getShopId())) {
  227 + poolIds.add(pool.getId());
  228 + distPoolIds.add(pool.getId());
  229 + reward = reward.add(pool.getReward());
  230 + }
  231 + }
  232 + //奖惩为0不分配
  233 + if (BigDecimal.ZERO.compareTo(reward) == 0) {
  234 + return;
  235 + }
  236 +
  237 + EvalRewardDist rewardDist = transferPo(evalGroup);
  238 + rewardDist.setUserId(user.getUserId());
  239 + rewardDist.setEvalShopPoolIds(poolIds);
  240 + rewardDist.setShopIds(manageShopIds);
  241 + rewardDist.setEvalName(evalGroupRankName);
  242 +// rewardDist.setEvalType(evalType);
  243 + rewardDist.setReward(reward);
  244 + evalRewardDistService.save(rewardDist);
  245 +
  246 + BacklogBatchPlanItemReqDTO planItemReq = new BacklogBatchPlanItemReqDTO();
  247 + planItemReq.setDataId(rewardDist.getId().toString());
  248 + planItemReq.setUserId(user.getUserId());
  249 + planItemReq.setPlanTime(new Date());
  250 + planItemReq.setExpireTime(expireTime);
  251 +
  252 + Map<String, String> dynamicMap = new HashMap<>(8);
  253 + dynamicMap.put("evalGroupName", evalGroupRankName);
  254 + dynamicMap.put("evalName", evalGroupRankStageName);
  255 +// dynamicMap.put("evalType", evalType.getName());
  256 + dynamicMap.put("amount", decimalFormat.format(rewardDist.getReward()));
  257 + planItemReq.setDynamicMap(dynamicMap);
  258 +
  259 + Map<String, Object> extraData = new HashMap<>();
  260 + planItemReq.setExtraData(extraData);
  261 + itemList.add(planItemReq);
  262 + }
241 263
242 -// if (PublicUtil.isEmpty(failItems) || itemList.size() > failItems.size()) {  
243 -// pool.setStatus(EvalShopPoolStatusEnum.WAIT_DIST_REWARD);  
244 -// evalShopPoolService.updateById(pool);  
245 -// } 264 + }
  265 +
  266 +
  267 + //推送待办
  268 + BacklogBatchPlanReqDTO batchPlanReq = new BacklogBatchPlanReqDTO(todoVal.getDistEvalReward(), itemList);
  269 + List<FailBacklogItem> failItems = Optional.ofNullable(todoRpcService.batchPush(batchPlanReq)).orElse(new ArrayList<>());
  270 + if (PublicUtil.isNotEmpty(failItems)) {
  271 + log.error("发送分配考评奖励待办失败,失败人员信息:{}", JSON.toJSONString(failItems));
  272 + }
  273 +
  274 + if (PublicUtil.isEmpty(failItems) || itemList.size() > failItems.size()) {
  275 + if (PublicUtil.isNotEmpty(distPoolIds)) {
  276 + evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()
  277 + .in(EvalShopPool::getId, distPoolIds)
  278 + .set(EvalShopPool::getStatus, EvalShopPoolStatusEnum.WAIT_DIST_REWARD)
  279 + .set(EvalShopPool::getYn, Boolean.FALSE)
  280 + .set(EvalShopPool::getUpdateTime, new Date())
  281 + );
  282 + }
  283 + }
246 } 284 }
247 285
248 public EvalRewardDist transferPo(EvalGroup evalGroup) { 286 public EvalRewardDist transferPo(EvalGroup evalGroup) {