Commit 4964363d45a9ae28e9b3d5ed885ea2170cdd0403

Authored by 姜超
1 parent d192a480

feature(*): 考评阶段指标上报

考评阶段指标上报
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupIndicatorMapper.xml
... ... @@ -27,11 +27,11 @@
27 27 <!-- 通用查询映射结果 -->
28 28 <resultMap id="StageIndicatorResultMap" type="cn.fw.morax.domain.bo.StageIndicatorBO">
29 29 <result column="groupId" property="groupId"/>
30   - <result column="code" property="code"/>
  30 + <result column="code" property="indicatorCode"/>
31 31 <result column="evalGroupId" property="evalGroupId"/>
32 32 <result column="eval_group_rank_id" property="evalGroupRankId"/>
33 33 <result column="begin_time" property="beginTime"/>
34   - <result column="over_time" property="overTime"/>
  34 + <result column="over_time" property="endTime"/>
35 35 <result column="shop_ids" property="shopIds" typeHandler="cn.fw.common.data.mybatis.handler.LongListTypeHandler"/>
36 36 </resultMap>
37 37  
... ...
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupMapper.xml
... ... @@ -7,14 +7,20 @@
7 7 shop_names,indicator_num,group_id,yn,create_time,update_time
8 8 </sql>
9 9  
  10 + <sql id="left_join_columns">
  11 + t1.id,t1.eval_group_rank_id,
  12 + t1.eval_group_rank_stage_id,t1.egc,t1.post_ids,t1.post_names,
  13 + t1.shop_ids,t1.shop_names,t1.indicator_num,t1.group_id
  14 + </sql>
  15 +
10 16 <!-- 通用查询映射结果 -->
11 17 <resultMap id="BaseResultMap" type="cn.fw.morax.domain.db.eval.EvalGroup">
12 18 <result column="id" property="id"/>
13 19 <result column="egc" property="egc"/>
14 20 <result column="eval_group_rank_id" property="evalGroupRankId"/>
15 21 <result column="eval_group_rank_stage_id" property="evalGroupRankStageId"/>
16   - <result column="post_id" property="postId"/>
17   - <result column="post_name" property="postName"/>
  22 + <result column="post_ids" property="postIds" typeHandler="cn.fw.common.data.mybatis.handler.LongListTypeHandler"/>
  23 + <result column="post_names" property="postNames" typeHandler="cn.fw.common.data.mybatis.handler.StringListTypeHandler"/>
18 24 <result column="shop_ids" property="shopIds" typeHandler="cn.fw.common.data.mybatis.handler.LongListTypeHandler"/>
19 25 <result column="shop_names" property="shopNames" typeHandler="cn.fw.common.data.mybatis.handler.StringListTypeHandler"/>
20 26 <result column="indicator_num" property="indicatorNum"/>
... ... @@ -25,7 +31,7 @@
25 31  
26 32 <select id="getAllEffectGroups" resultMap="BaseResultMap">
27 33 select
28   - <include refid="all_columns"/>
  34 + <include refid="left_join_columns"/>
29 35 from eval_group
30 36 where yn = 1
31 37 and DATE_FORMAT(begin_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{day}, '%Y-%m-%d')
... ... @@ -59,12 +65,16 @@
59 65  
60 66 <select id="queryCalculableEvalGroupIds" resultType="java.lang.Long">
61 67 select
62   - id
63   - from eval_group
64   - where yn = 1
65   - and DATE_FORMAT(begin_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{day}, '%Y-%m-%d')
66   - and DATE_FORMAT(over_time, '%Y-%m-%d') >= DATE_FORMAT(#{day}, '%Y-%m-%d')
67   - and eval_id in (select id from eval where `status` IN (3, 4) and yn = 1)
  68 + t3.id
  69 + FROM
  70 + eval_group_rank t1
  71 + LEFT JOIN eval_group_rank_stage t2 ON t1.id = t2.eval_group_rank_id AND t2.yn = 1
  72 + LEFT JOIN eval_group t3 ON t2.id = t3.eval_group_rank_stage_id AND t3.yn = 1
  73 + WHERE
  74 + t1.yn = 1
  75 + AND t1.`status` IN ( 3, 4 )
  76 + and DATE_FORMAT(t2.begin_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{day}, '%Y-%m-%d')
  77 + and DATE_FORMAT(t2.over_time, '%Y-%m-%d') >= DATE_FORMAT(#{day}, '%Y-%m-%d')
68 78 </select>
69 79  
70 80 <select id="queryDistributionShopReward" resultType="java.lang.Long">
... ...
fw-morax-dao/src/main/resources/mapper/kpi/KpiStageMqLogDao.xml
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3   -<mapper namespace="com.jc.generator.code.test.mapper.KpiStageMqLogMapper">
  3 +<mapper namespace="cn.fw.morax.dao.kpi.KpiStageMqLogDao">
4 4  
5 5 <!-- 通用查询映射结果 -->
6   - <resultMap id="BaseResultMap" type="com.jc.generator.code.test.entity.KpiStageMqLog">
  6 + <resultMap id="BaseResultMap" type="cn.fw.morax.domain.db.kpi.KpiStageMqLog">
7 7 <result column="id" property="id"/>
8 8 <result column="eval_group_rank_id" property="evalGroupRankId"/>
9 9 <result column="eval_group_id" property="evalGroupId"/>
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... ... @@ -144,7 +144,8 @@ public class EvalCalculateService {
144 144 threadPool.execute(() -> {
145 145 TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
146 146 try {
147   - calculateEvalGroup(bo);
  147 + calculateEvalGroup(bo, EvalScopeEnum.STAFF);
  148 + calculateEvalGroup(bo, EvalScopeEnum.SHOP);
148 149 platformTransactionManager.commit(transactionStatus);
149 150 } catch (Exception ex) {
150 151 platformTransactionManager.rollback(transactionStatus);
... ... @@ -163,7 +164,7 @@ public class EvalCalculateService {
163 164 }
164 165 }
165 166  
166   - public void calculateEvalGroup(EvalGroupCalculableBO bo) {
  167 + public void calculateEvalGroup(EvalGroupCalculableBO bo, EvalScopeEnum scopeType) {
167 168 log.info("考评组计算:{}", JSON.toJSONString(bo));
168 169 final Long evalGroupId = bo.getEvalGroupId();
169 170 final LocalDate localDate = bo.getLocalDate();
... ... @@ -173,7 +174,7 @@ public class EvalCalculateService {
173 174 log.error("考评组[{}]不存在,终止计算!", evalGroupId);
174 175 return;
175 176 }
176   - List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, localDate, Boolean.TRUE);
  177 + List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, localDate, scopeType);
177 178 if (CollectionUtils.isEmpty(userShops)) {
178 179 log.error("考评组[{}]人员为空,终止计算!", evalGroupId);
179 180 return;
... ... @@ -201,10 +202,11 @@ public class EvalCalculateService {
201 202 calcRewardMoney(rewards, userShop, rewardDetails);
202 203 calcEvalKpi(userShop, indicators);
203 204 }
204   - updatePool(evalGroup, localDate, rewardDetails, userShops);
  205 + updatePool(evalGroup, localDate, scopeType, rewardDetails, userShops);
205 206 }
206 207  
207   - public void updatePool(EvalGroup evalGroup, LocalDate localDate, List<EvalPoolRewardDetail> rewardDetails, List<EvalGroupUserShop> userShops) {
  208 + public void updatePool(EvalGroup evalGroup, LocalDate localDate, EvalScopeEnum scopeType,
  209 + List<EvalPoolRewardDetail> rewardDetails, List<EvalGroupUserShop> userShops) {
208 210 final Long evalGroupId = evalGroup.getId();
209 211 List<Long> poolIds = userShops.stream().map(EvalGroupUserShop::getPoolId).collect(Collectors.toList());
210 212 if (PublicUtil.isNotEmpty(rewardDetails)) {
... ... @@ -215,49 +217,69 @@ public class EvalCalculateService {
215 217 );
216 218 evalPoolRewardDetailService.saveBatch(rewardDetails);
217 219 }
  220 + if (EvalScopeEnum.STAFF.equals(scopeType)) {
  221 + for (EvalGroupUserShop userShop : userShops) {
  222 + BigDecimal scoreRatio = BigDecimal.ZERO;
  223 + if (userShop.getIndicatorTotalScore().compareTo(BigDecimal.ZERO) > 0) {
  224 + scoreRatio = userShop.getScore().divide(userShop.getIndicatorTotalScore(), 2, RoundingMode.DOWN);
  225 + }
  226 + evalUserPoolService.update(Wrappers.<EvalUserPool>lambdaUpdate()
  227 + .eq(EvalUserPool::getId, userShop.getPoolId())
  228 + .eq(EvalUserPool::getYn, Boolean.TRUE)
  229 + .set(EvalUserPool::getReward, userShop.getReward())
  230 + .set(EvalUserPool::getScore, userShop.getScore())
  231 + .set(EvalUserPool::getScoreRatio, scoreRatio)
  232 + .set(EvalUserPool::getMonthly, YearMonth.from(localDate))
  233 + .set(EvalUserPool::getDataDate, localDate)
  234 + );
  235 + }
  236 + return;
  237 + }
218 238 for (EvalGroupUserShop userShop : userShops) {
219 239 BigDecimal scoreRatio = BigDecimal.ZERO;
220 240 if (userShop.getIndicatorTotalScore().compareTo(BigDecimal.ZERO) > 0) {
221 241 scoreRatio = userShop.getScore().divide(userShop.getIndicatorTotalScore(), 2, RoundingMode.DOWN);
222 242 }
223   - evalUserPoolService.update(Wrappers.<EvalUserPool>lambdaUpdate()
224   - .eq(EvalUserPool::getId, userShop.getPoolId())
225   - .eq(EvalUserPool::getYn, Boolean.TRUE)
226   - .set(EvalUserPool::getReward, userShop.getReward())
227   - .set(EvalUserPool::getScore, userShop.getScore())
228   - .set(EvalUserPool::getScoreRatio, scoreRatio)
229   - .set(EvalUserPool::getMonthly, YearMonth.from(localDate))
230   - .set(EvalUserPool::getDataDate, localDate)
  243 + evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()
  244 + .eq(EvalShopPool::getId, userShop.getPoolId())
  245 + .eq(EvalShopPool::getYn, Boolean.TRUE)
  246 + .set(EvalShopPool::getReward, userShop.getReward())
  247 + .set(EvalShopPool::getScore, userShop.getScore())
  248 + .set(EvalShopPool::getScoreRatio, scoreRatio)
  249 + .set(EvalShopPool::getMonthly, YearMonth.from(localDate))
  250 + .set(EvalShopPool::getDataDate, localDate)
231 251 );
232 252 }
233 253 }
234 254  
235 255  
236   - public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate localDate, Boolean filterUser) {
  256 + public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate localDate, EvalScopeEnum scopeType) {
237 257 List<EvalGroupUserShop> userShops = new ArrayList<>();
238   - List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
239   - .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
240   - .eq(EvalGroupUser::getDataDate, localDate)
241   - .eq(EvalGroupUser::getYn, Boolean.TRUE)
242   - );
  258 + if (EvalScopeEnum.STAFF.equals(scopeType)) {
  259 + List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
  260 + .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
  261 + .eq(EvalGroupUser::getDataDate, localDate)
  262 + .eq(EvalGroupUser::getYn, Boolean.TRUE)
  263 + );
243 264  
244   - Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, users, localDate);
245   - for (EvalGroupUser user : users) {
246   - if (Boolean.TRUE.equals(user.getIgnored())) {
247   - continue;
  265 + Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, users, localDate);
  266 + for (EvalGroupUser user : users) {
  267 + if (Boolean.TRUE.equals(user.getIgnored())) {
  268 + continue;
  269 + }
  270 + EvalUserPool userPool = userPoolMap.get(user.getUserId());
  271 + userShops.add(convertBO(user, userPool));
248 272 }
249   - EvalUserPool userPool = userPoolMap.get(user.getUserId());
250   - userShops.add(convertBO(user, userPool));
  273 + return userShops;
251 274 }
252   - return userShops;
253 275  
254   -// List<Long> shopIds = evalGroup.getShopIds();
255   -// Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate);
256   -// for (Long shopId : shopIds) {
257   -// EvalShopPool shopPool = shopPoolBOMap.get(shopId);
258   -// userShops.add(convertBO(shopPool, evalGroup, localDate));
259   -// }
260   -// return userShops;
  276 + List<Long> shopIds = evalGroup.getShopIds();
  277 + Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate);
  278 + for (Long shopId : shopIds) {
  279 + EvalShopPool shopPool = shopPoolBOMap.get(shopId);
  280 + userShops.add(convertBO(shopPool, evalGroup, localDate));
  281 + }
  282 + return userShops;
261 283 }
262 284  
263 285  
... ...