diff --git a/doc/2023-05-18_update.sql b/doc/2023-05-18_update.sql index 869dd83..e3f2896 100644 --- a/doc/2023-05-18_update.sql +++ b/doc/2023-05-18_update.sql @@ -9,3 +9,26 @@ ALTER TABLE `fw_morax`.`eval_group_user` ALTER TABLE `fw_morax`.`eval_group_indicator_target_hit_log` ADD COLUMN `extra_reach_value` decimal(18, 4) NULL COMMENT '额外达成目标' AFTER `reach_value`, ADD COLUMN `use_target` tinyint(4) NULL DEFAULT 1 COMMENT '考评使用目标; 1:无目标 2:第一目标 3:额外目标值' AFTER `extra_reach_value`; + + +CREATE TABLE `eval_reward_dist` ( +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', +`user_id` bigint(20) NOT NULL COMMENT '用户id', +`eval_group_rank_id` bigint(20) NOT NULL COMMENT '考评排名组id', +`eval_group_rank_stage_id` bigint(20) NOT NULL COMMENT '考评排名组阶段id', +`eval_group_id` bigint(20) NOT NULL COMMENT '考评组id', +`eval_group_rank_name` varchar(255) DEFAULT NULL COMMENT '考评排名组名称', +`eval_group_rank_stage_name` varchar(255) DEFAULT NULL COMMENT '考评排名组阶段名称', +`begin_time` date DEFAULT NULL COMMENT '阶段开始时间', +`over_time` date DEFAULT NULL COMMENT '阶段结束时间', +`eval_shop_pool_ids` varchar(512) NOT NULL COMMENT '门店考评池id', +`shop_ids` varchar(512) NOT NULL COMMENT '门店id', +`reward` decimal(18,2) NOT NULL COMMENT '考评奖惩', +`status` tinyint(4) DEFAULT NULL COMMENT '状态', +`group_id` bigint(20) NOT NULL COMMENT '集团id', +`yn` tinyint(1) DEFAULT '1' COMMENT '逻辑删除', +`create_time` datetime DEFAULT NULL COMMENT '创建时间', +`update_time` datetime DEFAULT NULL COMMENT '更新时间', +PRIMARY KEY (`id`), +KEY `eval_pool_salary_group_id_index` (`eval_shop_pool_ids`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='考评门店奖惩分配'; \ No newline at end of file diff --git a/fw-morax-common/src/main/java/cn/fw/morax/common/constant/Constant.java b/fw-morax-common/src/main/java/cn/fw/morax/common/constant/Constant.java index c43d592..bfc6327 100644 --- a/fw-morax-common/src/main/java/cn/fw/morax/common/constant/Constant.java +++ b/fw-morax-common/src/main/java/cn/fw/morax/common/constant/Constant.java @@ -52,6 +52,11 @@ public class Constant { public final static String SEPARATOR = "_"; /** + * 时间分隔符 + */ + public final static String TIME_SEPARATOR = "—"; + + /** * 薪酬报表车系名称 */ public final static String REPORT_CAR_SERIES_NAME = "carSeriesName"; diff --git a/fw-morax-dao/src/main/resources/mapper/eval/EvalShopPoolDao.xml b/fw-morax-dao/src/main/resources/mapper/eval/EvalShopPoolDao.xml index 63ca173..870e86d 100644 --- a/fw-morax-dao/src/main/resources/mapper/eval/EvalShopPoolDao.xml +++ b/fw-morax-dao/src/main/resources/mapper/eval/EvalShopPoolDao.xml @@ -4,23 +4,31 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - id,eval_id,egc,eval_group_id,shop_id,shop_name,reward,status,score,score_ratio,monthly,group_id + id,eval_group_rank_id,eval_group_rank_stage_id + ,egc,eval_group_id,shop_id,shop_name,reward + ,status,score,score_ratio,rank,data_date + ,monthly,group_id,yn,create_time,update_time SELECT - id, - eval_id, - egc, - eval_group_id, - shop_id, - shop_name, - reward, - status, - score, - score_ratio, - monthly, - group_id + id + ,eval_group_rank_id + ,eval_group_rank_stage_id + ,egc + ,eval_group_id + ,shop_id + ,shop_name + ,reward + ,status + ,score + ,score_ratio + ,rank + ,data_date + ,monthly + ,group_id + ,yn + ,create_time + ,update_time from eval_shop_pool where yn = 1 and group_id = #{condition.groupId} diff --git a/fw-morax-dao/src/main/resources/mapper/eval/EvalUserPoolDao.xml b/fw-morax-dao/src/main/resources/mapper/eval/EvalUserPoolDao.xml index 504b097..4223dc4 100644 --- a/fw-morax-dao/src/main/resources/mapper/eval/EvalUserPoolDao.xml +++ b/fw-morax-dao/src/main/resources/mapper/eval/EvalUserPoolDao.xml @@ -4,43 +4,63 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + id,eval_group_rank_id,eval_group_rank_stage_id,egc,eval_group_id,user_id,user_name,post_id + ,post_name,shop_id,shop_name,fund_shop_id,fund_shop_name + ,reward,score,score_ratio,rank,inclusion,data_date + ,monthly,group_id,yn,create_time,update_time + + + SELECT - * + from eval_user_pool where yn = 1 and group_id = #{condition.groupId} diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java index c9e381c..84d7430 100644 --- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java +++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java @@ -65,10 +65,10 @@ public class EvalGroupUserShop { */ private Long referId; -// /** -// * 多阶段 -// */ -// private Boolean multiStage; + /** + * 多阶段 + */ + private Boolean multiStage; /** * 数据开始日期 diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java index f6d30d6..2e93512 100644 --- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java +++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java @@ -13,6 +13,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -36,31 +37,37 @@ public class EvalRewardDist extends BaseAuditableTimeEntity { * 考评组编码 */ private String egc; - - /** - * 考评id - */ - private Long evalId; /** * 考评组id */ @@ -48,26 +43,6 @@ public class EvalShopPool extends BaseAuditableTimeEntity { */ private Long evalGroupRankStageId; -// /** -// * 用户id -// */ -// private Long userId; -// -// /** -// * 用户名称 -// */ -// private String userName; - -// /** -// * 岗位id -// */ -// private Long postId; -// -// /** -// * 岗位名称 -// */ -// private String postName; - /** * 门店id */ @@ -78,16 +53,6 @@ public class EvalShopPool extends BaseAuditableTimeEntity { */ private String shopName; -// /** -// * 社保公积金门店id -// */ -// private Long fundShopId; -// -// /** -// * 社保公积金门店名称 -// */ -// private String fundShopName; - /** * 考评奖惩 */ diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java index 2f4a02d..cce6dfe 100644 --- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java +++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; /** @@ -37,31 +38,37 @@ public class EvalRewardDistVO { * 用户id */ private Long userId; - /** - * 考评id + * 考评组id */ - private Long evalId; - + private Long evalGroupId; /** - * 考评组编码 + * 考评排名组id */ - private Long evalGroupId; + private Long evalGroupRankId; + /** + * 考评排名组阶段id + */ + private Long evalGroupRankStageId; + /** + * 考评排名组名称 + */ + private String evalGroupRankName; /** - * 考评类型; 1:活动考评 2:其他考评 + * 考评排名组阶段名称 */ - private EvalTypeEnum evalType; + private String evalGroupRankStageName; /** - * 考评 + * 生效时间 */ - private String evalName; + private LocalDate beginTime; /** - * 考评组 + * 结束时间 */ - private String evalGroupName; + private LocalDate overTime; /** * 考评组id diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalShopPoolVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalShopPoolVO.java index b3bf033..6f92e3d 100644 --- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalShopPoolVO.java +++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalShopPoolVO.java @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.YearMonth; import java.util.List; /** @@ -27,56 +28,26 @@ import java.util.List; public class EvalShopPoolVO { private static final long serialVersionUID = 1L; - /** - * 考评池id + * id */ private Long id; - /** * 考评组编码 */ private String egc; - - /** - * 考评组 - */ - private String evalGroupName; - - /** - * 考评id - */ - private Long evalId; /** * 考评组id */ private Long evalGroupId; - - /** - * 考评类型; 1:活动考评 2:其他考评 + * 考评排名组id */ - private EvalTypeEnum evalType; - -// /** -// * 用户id -// */ -// private Long userId; -// -// /** -// * 用户名称 -// */ -// private String userName; - -// /** -// * 岗位id -// */ -// private Long postId; -// -// /** -// * 岗位名称 -// */ -// private String postName; + private Long evalGroupRankId; + /** + * 考评排名组阶段id + */ + private Long evalGroupRankStageId; /** * 门店id @@ -88,16 +59,6 @@ public class EvalShopPoolVO { */ private String shopName; -// /** -// * 社保公积金门店id -// */ -// private Long fundShopId; -// -// /** -// * 社保公积金门店名称 -// */ -// private String fundShopName; - /** * 考评奖惩 */ @@ -124,10 +85,14 @@ public class EvalShopPoolVO { private String scoreRatioFormat; /** - * 月度 + * 排名 */ - private String monthly; + private Integer rank; + /** + * 月度 + */ + private YearMonth monthly; /** * 数据日期 diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java b/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java index 6ec3046..8383c62 100644 --- a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java +++ b/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java @@ -90,28 +90,19 @@ public class EvalPoolController { if (Objects.isNull(userId)) { userId = user.getUserId(); } -// return success(evalGroupPoolService.evalPoolSelector(userId, monthly)); - return success(); + return success(evalGroupPoolService.evalPoolSelector(userId, monthly)); } -// /** -// * 考评详情查询 (查看自己考评详情) -// */ -// @GetMapping("/own-detail") -// @ControllerMethod("考评详情查询") -// public Message> evalPoolOwnDetail(@CurrentUser Long userId, -// @Valid EvalUserRankDTO dto) { -// dto.initMonthly(); -// dto.setUserId(userId); -// return success(evalGroupPoolService.queryRankStagePools(dto)); -// } /** * 考评详情查询 (查看自己考评详情) */ @GetMapping("/own-detail") @ControllerMethod("考评详情查询") - public Message> evalPoolOwnDetail(@CurrentUser Long userId) { - return success(); + public Message> evalPoolOwnDetail(@CurrentUser Long userId, + @Valid EvalUserRankDTO dto) { + dto.initMonthly(); + dto.setUserId(userId); + return success(evalGroupPoolService.queryRankStagePools(dto)); } /** @@ -120,22 +111,13 @@ public class EvalPoolController { */ @GetMapping("/detail") @ControllerMethod("考评详情查询") - public Message> evalPoolDetail() { - return success(); + public Message> evalPoolDetail(@Valid EvalUserRankDTO dto) { + dto.initMonthly(); + if (PublicUtil.isEmpty(dto.getUserId())) { + throw new BusinessException("人员信息不能为空"); + } + return success(evalGroupPoolService.queryRankStagePools(dto)); } -// /** -// * 考评详情查询 (查看他人考评详情) -// * -// */ -// @GetMapping("/detail") -// @ControllerMethod("考评详情查询") -// public Message> evalPoolDetail(@Valid EvalUserRankDTO dto) { -// dto.initMonthly(); -// if (PublicUtil.isEmpty(dto.getUserId())) { -// throw new BusinessException("人员信息不能为空"); -// } -// return success(evalGroupPoolService.queryRankStagePools(dto)); -// } /** * 员工考评得分详情 diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/ApprovalBizService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/ApprovalBizService.java index 2b10818..c39c46d 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/ApprovalBizService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/ApprovalBizService.java @@ -517,6 +517,7 @@ public class ApprovalBizService { InitiateApprovalParam.Condition shopCondition = new InitiateApprovalParam.Condition(); shopCondition.setParamName("shopId"); shopCondition.setValue(staffInfo.getShopId().toString()); + conditions.add(shopCondition); Map extDataMap = new HashMap() {{ put("id", rewardDist.getId().toString()); }}; @@ -525,9 +526,8 @@ public class ApprovalBizService { .approvalNo(flowVal.getEvalShopReward()) .briefContent(Lists.newArrayList( "申请人:" + user.getUserName(), - "考评/活动名称:" + user.getUserName(), - "考评类型:" + rewardDist.getEvalType().getName(), - "考评组:" + rewardDist.getEvalGroupName(), + "考评排名组:" + rewardDist.getEvalGroupRankName(), + "考评排名组阶段:" + rewardDist.getEvalGroupRankStageName(), "门店奖惩金额:" + rewardDist.getReward(), "申请时间:" + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(LocalDateTime.now()) )) diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java index adc5c42..8dd2076 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java @@ -169,10 +169,11 @@ public abstract class EvalKpiBaseCalculator implements Calculator 0)) { + //只配置了时间进度 时间进度大于阶段目标 并且 时间进度大于1,取时间进度 + if (PublicUtil.isEmpty(reachValue) || ((extraReachValue.compareTo(reachValue) > 0) && (extraReachValue.compareTo(BigDecimal.ONE) >= 0))) { indicatorValue = extraReachValue; useTarget = EvalUseTargetEnum.EXTRA_TARGET; } @@ -225,20 +226,37 @@ public abstract class EvalKpiBaseCalculator implements Calculator queryValue(EvalGroupUserShop obj, IndicatorCodeTypeEnum codeType, String indicatorCode) { DimensionTypeEnum dimensionType = EvalScopeEnum.STAFF.equals(obj.getScopeType()) ? DimensionTypeEnum.STAFF : DimensionTypeEnum.SHOP; if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() - .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) - .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) - .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) - .eq(IndicatorUserStageValue::getDimensionType, dimensionType) - .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) - .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); + //多阶段查询 + if (Boolean.TRUE.equals(obj.getMultiStage())) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() + .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) + .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) + .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) + .eq(IndicatorUserStageValue::getDimensionType, dimensionType) + .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) + .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); + if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { + queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); + } else { + queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); + } + IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); + return queryKpiIndicatorValue(indicatorUserStageValue); + } + //单阶段查询 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() + .eq(IndicatorUserValue::getIndicatorCode, indicatorCode) + .eq(IndicatorUserValue::getDataDate, obj.getDataDate()) + .eq(IndicatorUserValue::getDimensionType, dimensionType) + .eq(IndicatorUserValue::getYn, Boolean.TRUE) + .eq(IndicatorUserValue::getGroupId, obj.getGroupId()); if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { - queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); + queryWrapper.eq(IndicatorUserValue::getUserId, obj.getReferId()); } else { - queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); + queryWrapper.eq(IndicatorUserValue::getShopId, obj.getReferId()); } - IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); - return queryKpiIndicatorValue(indicatorUserStageValue); + IndicatorUserValue indicatorUserValue = indicatorUserValueService.getOne(queryWrapper, Boolean.FALSE); + return queryKpiIndicatorValue(indicatorUserValue); } EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(obj.getReferId(), diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java index 0197d8d..f449f58 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java @@ -183,7 +183,12 @@ public class EvalCalculateService { log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); return; } - List userShops = this.buildEvalGroupObj(evalGroup, evalGroupRankStage, localDate, scopeType); + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId()); + if (Objects.isNull(evalGroupRank)) { + log.error("考评组[{}]排名组不存在,终止计算!", evalGroup.getEvalGroupRankId()); + return; + } + List userShops = this.buildEvalGroupObj(evalGroup, evalGroupRank, evalGroupRankStage, localDate, scopeType); if (CollectionUtils.isEmpty(userShops)) { log.error("考评组[{}]人员为空,终止计算!", evalGroupId); return; @@ -269,8 +274,7 @@ public class EvalCalculateService { } - public List buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) { - LocalDate beginDate = evalGroupRankStage.getBeginTime(); + public List buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) { List userShops = new ArrayList<>(); if (EvalScopeEnum.STAFF.equals(scopeType)) { List users = evalGroupUserService.list(Wrappers.lambdaQuery() @@ -282,7 +286,7 @@ public class EvalCalculateService { Map userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); for (EvalGroupUser user : users) { EvalUserPool userPool = userPoolMap.get(user.getUserId()); - userShops.add(convertBO(user, userPool)); + userShops.add(convertBO(user, userPool, evalGroupRank, evalGroupRankStage)); } return userShops; } @@ -291,7 +295,7 @@ public class EvalCalculateService { for (Long shopId : evalGroup.getShopIds()) { EvalShopPool shopPool = shopPoolBOMap.get(shopId); Boolean ignored = ! distShopIds.contains(shopId); - userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate, ignored)); + userShops.add(convertBO(shopPool, evalGroup, evalGroupRank, evalGroupRankStage, localDate, ignored)); } return userShops; } @@ -619,7 +623,7 @@ public class EvalCalculateService { return poolDetail; } - public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool) { + public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) { EvalGroupUserShop userShop = new EvalGroupUserShop(); userShop.setName(user.getUserName()); userShop.setScopeType(EvalScopeEnum.STAFF); @@ -628,7 +632,9 @@ public class EvalCalculateService { userShop.setPostId(userPool.getPostId()); userShop.setShopId(userPool.getShopId()); userShop.setReferId(user.getUserId()); + userShop.setBeginDate(evalGroupRankStage.getBeginTime()); userShop.setDataDate(user.getDataDate()); + userShop.setMultiStage(evalGroupRank.getMultiStage()); userShop.setGroupId(user.getGroupId()); userShop.setScore(BigDecimal.ZERO); userShop.setReward(BigDecimal.ZERO); @@ -636,7 +642,7 @@ public class EvalCalculateService { return userShop; } - public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate, Boolean ignored) { + public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate dataDate, Boolean ignored) { EvalGroupUserShop userShop = new EvalGroupUserShop(); userShop.setName(shopPool.getShopName()); userShop.setReferId(shopPool.getShopId()); @@ -645,8 +651,9 @@ public class EvalCalculateService { userShop.setScopeType(EvalScopeEnum.SHOP); userShop.setEvalId(userShop.getEvalId()); userShop.setEvalGroupId(evalGroup.getId()); - userShop.setBeginDate(beginDate); + userShop.setBeginDate(evalGroupRankStage.getBeginTime()); userShop.setDataDate(dataDate); + userShop.setMultiStage(evalGroupRank.getMultiStage()); userShop.setGroupId(evalGroup.getGroupId()); userShop.setIgnored(ignored); userShop.setScore(BigDecimal.ZERO); diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java index 4fcea01..aa442f8 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java @@ -94,10 +94,6 @@ public class EvalGroupPoolService { this.setShopRewardDetails(evalShopPoolVO, dataDate); evalShopPoolVO.setDataDate(dataDate); - Eval eval = evalService.getById(pool.getEvalId()); - BV.notNull(pool, "考评池不存在"); - evalShopPoolVO.setEvalType(eval.getType()); - return evalShopPoolVO; } @@ -289,14 +285,14 @@ public class EvalGroupPoolService { //排名维度 for (Map.Entry> rankEntry : rankPools.entrySet()) { List userRankPools = rankEntry.getValue(); - double averageKpiScoreRatio = userRankPools.stream() + Double averageKpiScoreRatio = userRankPools.stream() .mapToDouble(r -> Optional.ofNullable(r.getScoreRatio()).orElse(BigDecimal.ZERO).doubleValue()) .average() .orElse(0); BigDecimal reward = userRankPools.stream().map(EvalUserPool::getReward).reduce(BigDecimal.ZERO, BigDecimal::add); EvalUserGroupRankVO rank = new EvalUserGroupRankVO(); rank.setEvalGroupRankName(rankNameMap.getOrDefault(rankEntry.getKey(), "")); - rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio).multiply(Constant.ONE_HUNDRED)); + rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio.toString()).multiply(Constant.ONE_HUNDRED)); rank.setReward(reward); rank.setEvalGroupRankId(rankEntry.getKey()); ranks.add(rank); @@ -500,6 +496,10 @@ public class EvalGroupPoolService { if (! TargetTypeEnum.NO.equals(paramVO.getTargetType())) { paramVO.setReachValue(Optional.ofNullable(paramVO.getReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); } + //有目标 + if (PublicUtil.isNotEmpty(paramVO.getExtraTargetType()) && (! TargetTypeEnum.NO.equals(paramVO.getExtraTargetType()))) { + paramVO.setExtraReachValue(Optional.ofNullable(paramVO.getExtraReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); + } } for (EvalGroupIndicatorParamVO paramVO : Optional.ofNullable(detail.getLadderParams()).orElse(new ArrayList<>())) { @@ -511,6 +511,10 @@ public class EvalGroupPoolService { if (! TargetTypeEnum.NO.equals(paramVO.getTargetType())) { paramVO.setReachValue(Optional.ofNullable(paramVO.getReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); } + //有目标 + if (PublicUtil.isNotEmpty(paramVO.getExtraTargetType()) && (! TargetTypeEnum.NO.equals(paramVO.getExtraTargetType()))) { + paramVO.setExtraReachValue(Optional.ofNullable(paramVO.getExtraReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); + } } for (EvalGroupIndicatorPreconditionVO preconditionVO : Optional.ofNullable(detail.getConds()).orElse(new ArrayList<>())) { @@ -543,7 +547,6 @@ public class EvalGroupPoolService { scopeType, dataDate, paramVos); for (EvalGroupIndicatorParamVO paramVO : paramVos) { - String code = paramVO.getCode(); Long paramId = paramVO.getId(); //无目标 // if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) { @@ -556,8 +559,15 @@ public class EvalGroupPoolService { Optional hitLogOptional = Optional.ofNullable(paramTargetHitLogMap.get(paramId)); paramVO.setIndicatorValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getValue).orElse(BigDecimal.ZERO)); paramVO.setReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); - paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); + paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getExtraReachValue).orElse(BigDecimal.ZERO)); paramVO.setUseTarget(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getUseTarget).orElse(EvalUseTargetEnum.NO)); + +// paramVO.setTargetCalcType(paramVO.getTargetCalcType()); +// paramVO.setTargetType(paramVO.getTargetType()); +// paramVO.setTargetValue(paramVO.getTargetValue()); +// paramVO.setExtraTargetCalcType(paramVO.getExtraTargetCalcType()); +// paramVO.setExtraTargetType(paramVO.getExtraTargetType()); +// paramVO.setExtraTargetValue(paramVO.getExtraTargetValue()); } Map> indicatorParamMap = paramVos.stream() diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java index e2b7fa1..4cb4a59 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java @@ -5,6 +5,7 @@ import cn.fw.common.cache.locker.DistributedLocker; import cn.fw.common.exception.BusinessException; import cn.fw.common.web.auth.LoginAuthBean; import cn.fw.morax.common.config.TodoVal; +import cn.fw.morax.common.constant.Constant; import cn.fw.morax.common.pojo.event.ApprovalResultEvent; import cn.fw.morax.common.utils.DateUtil; import cn.fw.morax.common.utils.PublicUtil; @@ -44,9 +45,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.text.DateFormat; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ThreadPoolExecutor; @@ -169,7 +172,7 @@ public class EvalRewardService { log.error("考评奖惩没有门店:{}", JSON.toJSONString(evalGroup)); return; } -// sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage); + sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage); } /** @@ -180,13 +183,8 @@ public class EvalRewardService { @Transactional(rollbackFor = Exception.class) public void sendDistRewardTodo(List shopRewardDims, EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) { - String evalGroupRankName = evalGroupRank.getName(); - String evalGroupRankStageName = evalGroupRankStage.getName(); - DecimalFormat decimalFormat = new DecimalFormat("##########.##"); List itemList = new ArrayList<>(); - List distPoolIds = new ArrayList<>(); - final Date expireTime = DateUtil.localDateTime2Date(LocalDateTime.now().plusDays(2L)); for (EvalGroupRewardDim rewardDim : shopRewardDims) { final String roleCode = rewardDim.getDistRoleCode(); List pools = evalShopPoolService.list(Wrappers.lambdaQuery() @@ -219,33 +217,15 @@ public class EvalRewardService { } //奖惩为0不分配 if (BigDecimal.ZERO.compareTo(reward) == 0) { - return; + continue; } - EvalRewardDist rewardDist = transferPo(evalGroup); + EvalRewardDist rewardDist = this.convertRewardDist(evalGroup, evalGroupRank, evalGroupRankStage, poolIds, manageShopIds); 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 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 extraData = new HashMap<>(); - planItemReq.setExtraData(extraData); + BacklogBatchPlanItemReqDTO planItemReq = this.createBacklog(rewardDist, user.getUserId()); + planItemReq.setDynamicMap(rewardDistDynamicMap(rewardDist, evalGroupRank, evalGroupRankStage)); itemList.add(planItemReq); } } @@ -269,11 +249,49 @@ public class EvalRewardService { } } - public EvalRewardDist transferPo(EvalGroup evalGroup) { + + 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; + } + + public Map 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() : "---"; + + DecimalFormat decimalFormat = new DecimalFormat("##########.##"); + Map dynamicMap = new HashMap<>(8); + dynamicMap.put("evalGroupRankName", evalGroupRank.getName()); + 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 poolIds, List manageShopIds) { EvalRewardDist rewardDist = new EvalRewardDist(); - rewardDist.setEvalId(evalGroup.getEvalGroupRankId()); rewardDist.setEvalGroupId(evalGroup.getId()); -// rewardDist.setEvalGroupName(evalGroup.getName()); + 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()); rewardDist.setStatus(EvalRewardDistStatusEnum.NO_DIST); rewardDist.setGroupId(evalGroup.getGroupId()); rewardDist.setYn(Boolean.TRUE);