Selaa lähdekoodia

修复奖品关联优惠券逻辑

Eric 2 vuotta sitten
vanhempi
commit
fee00a104e

+ 33 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityUserRewardServiceImpl.java

@@ -6,8 +6,10 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.yonge.cooleshow.biz.dal.dao.ActivityUserRewardDao;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityUserRewardSearch;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
@@ -20,6 +22,7 @@ import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,6 +31,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -36,7 +40,8 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
 
     @Autowired
     private ActivityPlanService activityPlanService;
-
+    @Autowired
+    private ActivityEvaluationRecordService activityEvaluationRecordService;
     @Autowired
     private ActivityRewardService activityRewardService;
 
@@ -61,6 +66,33 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
         // 活动获奖用户信息
         List<UserRewardVo> userRewards = baseMapper.selectPage(page, query);
 
+        if (CollectionUtils.isEmpty(userRewards)) {
+            // 直接返回数据,忽略后续流程
+            return page.setRecords(userRewards);
+        }
+
+        List<Long> userIds = userRewards.stream().map(UserRewardVo::getUserId).distinct().collect(Collectors.toList());
+
+        // 评测活动,获奖记录时间
+        if (ActivityTypeEnum.EVALUATION == activityPlan.getActivityType()) {
+
+            Map<Long, ActivityEvaluationRecord> collect = activityEvaluationRecordService.queryActivityUserHighestRankingInfo(query.getActivityId(), userIds).stream()
+                    .collect(Collectors.toMap(ActivityEvaluationRecord::getUserId, Function.identity(), (o, n) -> n));
+
+            ActivityEvaluationRecord record;
+            for (UserRewardVo item : userRewards) {
+
+                if (collect.containsKey(item.getUserId())) {
+
+                    record = collect.get(item.getUserId());
+                    // 重置当前获奖用户分数,评测次数,评测时间
+                    item.score(record.getScore())
+                            .times(record.getTimes())
+                            .setEvaluationTime(record.getCreateTime());
+                }
+            }
+        }
+
         // 分享活动关联老师信息
         if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()) {
 
@@ -69,8 +101,6 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
             // 关联老师ID
             Map<Long, String> teacherIdMap = Maps.newConcurrentMap();
 
-            List<Long> userIds = userRewards.stream().map(UserRewardVo::getUserId).distinct().collect(Collectors.toList());
-
             Lists.partition(userIds, 30).parallelStream().forEach(item -> {
 
                 List<UserRewardVo> retlist = getBaseMapper().selectActivityShareTeacher(activityPlan.getId(), item);

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponInfoServiceImp.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.CouponInfo;
 import com.yonge.cooleshow.biz.dal.entity.CouponInventory;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
@@ -19,6 +20,7 @@ import com.yonge.cooleshow.biz.dal.mapper.CouponIssueMapper;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponInventoryQuery;
+import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 import com.yonge.cooleshow.biz.dal.service.CouponInfoService;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponInfoWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
@@ -56,6 +58,8 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     private CouponInventoryMapper couponInventoryMapper;
     @Autowired
     private CouponIssueMapper couponIssueMapper;
+    @Autowired
+    private ActivityRewardService activityRewardService;
 
     /**
      * 分页查询优惠券信息
@@ -199,6 +203,13 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
                     throw new BizException("已过期优惠券不允许修改");
                 }
 
+                // 优惠券已关联奖品,不能停用
+                int ret = activityRewardService.count(Wrappers.<ActivityReward>lambdaQuery()
+                        .eq(ActivityReward::getCouponId, couponInfo.getId()));
+                if (ret > 0 && EStatus.DISABLE.match(couponInfo.getStatus())) {
+                    throw new BizException("优惠券已被奖品关联");
+                }
+
             } else {
 
                 // 优惠券已过期

+ 33 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserRewardVo.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.cooleshow.common.enums.UnitEnum;
@@ -30,11 +31,24 @@ public class UserRewardVo implements Serializable {
 	@ApiModelProperty("手机号")
 	private String phone;
 
-	@ApiModelProperty("获奖时间")
+	@ApiModelProperty("获奖/达标时间")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
 	private Date  createTime;
 
+	@ApiModelProperty("评测时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private Date evaluationTime;
+
+	@ApiModelProperty("分数 ")
+	@TableField(value = "score_")
+	private Double score;
+
+	@ApiModelProperty("次数")
+	@TableField(value = "times_")
+	private int times;
+
 	@ApiModelProperty("奖品名 逗号隔开")
 	private String rewardNames;
 
@@ -158,6 +172,14 @@ public class UserRewardVo implements Serializable {
 		this.teacherIds = teacherIds;
 	}
 
+	public Date getEvaluationTime() {
+		return evaluationTime;
+	}
+
+	public void setEvaluationTime(Date evaluationTime) {
+		this.evaluationTime = evaluationTime;
+	}
+
 	public UserRewardVo teacherName(String teacherName) {
 		this.teacherName = teacherName;
 		return this;
@@ -177,4 +199,14 @@ public class UserRewardVo implements Serializable {
 		this.amount = amount;
 		return this;
 	}
+
+	public UserRewardVo score(Double score) {
+		this.score = score;
+		return this;
+	}
+
+	public UserRewardVo times(int times) {
+		this.times = times;
+		return this;
+	}
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityUserRewardMapper.xml

@@ -78,7 +78,7 @@
                 and  t.create_time_ &lt;= #{param.endTime}
             </if>
         </where>
-        <if test="param.activityGroupBy == 1">GROUP BY t.user_id_ , t.activity_id_</if>
+        <if test="param.activityGroupBy == 1">GROUP BY t.user_id_ , t.activity_id_ ORDER BY t.create_time_ ASC </if>
     </select>
 
     <!--分享活动关联老师-->