Commit 4964363d45a9ae28e9b3d5ed885ea2170cdd0403
1 parent
d192a480
feature(*): 考评阶段指标上报
考评阶段指标上报
Showing
4 changed files
with
78 additions
and
46 deletions
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') <= 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') <= 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') <= 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 | ... | ... |