Selaa lähdekoodia

Merge branch 'dev_v1.3.4_20220914'

liujunchi 2 vuotta sitten
vanhempi
commit
87371303dc

+ 14 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanReward.java

@@ -37,6 +37,11 @@ public class ActivityPlanReward implements Serializable {
     @NotNull(message = "奖品数量不能为空")
     @PositiveOrZero(message = "奖品数量必须大于等于0")
     private Integer rewardNum;
+
+    @ApiModelProperty("奖品库存 ")
+    @TableField(value = "reward_stock_")
+    private Integer rewardStock;
+
     @ApiModelProperty("创建时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -47,7 +52,15 @@ public class ActivityPlanReward implements Serializable {
     @TableField(value = "group_")
     private String group;
 
-	public Long getId() {
+    public Integer getRewardStock() {
+        return rewardStock;
+    }
+
+    public void setRewardStock(Integer rewardStock) {
+        this.rewardStock = rewardStock;
+    }
+
+    public Long getId() {
         return id;
     }
 

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

@@ -650,6 +650,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
                 item.setGroup("1");
             }
 
+            item.setRewardStock(item.getRewardNum());
             // 评测活动
             if (ActivityTypeEnum.EVALUATION == activityPlan.getActivityType()) {
                 item.setRewardNum(ret);

+ 56 - 45
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanStandardServiceImpl.java

@@ -1,25 +1,41 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.search.UserFirstTimeSearch;
-import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanStandard;
+import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
+import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
+import com.yonge.cooleshow.biz.dal.entity.UserFirstTime;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanStandardService;
+import com.yonge.cooleshow.biz.dal.service.ActivityRegistrationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
+import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
+import com.yonge.cooleshow.biz.dal.service.UserFirstTimeService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
-import com.yonge.cooleshow.common.enums.*;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.ConditionMethodEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.payment.util.DistributedLock;
+import org.apache.commons.collections.MapUtils;
+import org.joda.time.DateTime;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 
@@ -94,52 +110,47 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 
         String timeType = planStandard.getCondition();
         search.setTimeType(timeType);
-        List<String> timeTypes = WrapperUtil.toList(timeType);
 
-        List<UserFirstTime> userFirstTimes = userFirstTimeService.selectAllList(search);
-        if (CollectionUtils.isEmpty(userFirstTimes)) {
+        // 达标活动匹配条件数
+        int conditionNum = planStandard.getCondition().split(",").length;
+
+        // 用户激活时间
+        Map<Long, List<Long>> userActiveTimeMap = userFirstTimeService.selectAllList(search).stream()
+                .collect(Collectors.groupingBy(UserFirstTime::getUserId,
+                        Collectors.mapping(x -> new DateTime(x.getTime()).getMillis(), Collectors.toList())));
+
+        if (MapUtils.isEmpty(userActiveTimeMap)) {
             return true;
         }
-        Map<Long, Date> userIdSortMap = new LinkedHashMap<>();
-        if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
-            for (int i = 0; i < userFirstTimes.size(); i++) {
-                UserFirstTime userFirstTime = userFirstTimes.get(i);
-                if (null == userIdSortMap.get(userFirstTime.getUserId())) {
-                    userIdSortMap.put(userFirstTime.getUserId(), userFirstTime.getTime());
-                }
-            }
-        } else {
-            for (int i = (userFirstTimes.size() - 1); i >= 0; i--) {
-                UserFirstTime userFirstTime = userFirstTimes.get(i);
-                if (null == userIdSortMap.get(userFirstTime.getUserId())) {
-                    userIdSortMap.put(userFirstTime.getUserId(), userFirstTime.getTime());
-                }
-            }
-        }
 
         List<ActivityPlanRewardDto> activityPlanRewardDtos = activityPlanRewardService.queryActivityPlanReward(activityId);
-        Map<Long, List<UserFirstTime>> userMap = userFirstTimes.stream().collect(Collectors.groupingBy(UserFirstTime::getUserId));
 
-        if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
-            for (Long userId : userIdSortMap.keySet()) {
-                Date createTime = userIdSortMap.get(userId);
-                //给用户发奖
-                sendUserReward(userId, detail.getId(), createTime, activityPlanRewardDtos);
-            }
-        } else {
-            List<Long> mainList = new ArrayList<>();
-            mainList.addAll(userIdSortMap.keySet());
-            Collections.reverse(mainList);
-
-            for (Long userId : mainList) {
-                Date createTime = userIdSortMap.get(userId);
-                List<UserFirstTime> firstTimes = userMap.get(userId);
-                if (firstTimes.size() == timeTypes.size()) {
+        // 用户信息
+        for (Map.Entry<Long, List<Long>> entry : userActiveTimeMap.entrySet()) {
+
+            if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
+
+                // 满足其一
+                long timestamp = entry.getValue().stream().mapToLong(Long::longValue).min().orElse(0L);
+
+                if (timestamp > 0) {
                     //给用户发奖
-                    sendUserReward(userId, detail.getId(), createTime, activityPlanRewardDtos);
+                    sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
+                }
+
+            } else {
+
+                // 全部满足
+                long timestamp = entry.getValue().stream().mapToLong(Long::longValue).max().orElse(0L);
+
+                if (timestamp > 0 && entry.getValue().size() == conditionNum) {
+                    //给用户发奖
+                    sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
                 }
             }
+
         }
+
         return true;
     }
 

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

@@ -6,6 +6,7 @@
 	        <result column="activity_id_" property="activityId" />
 	        <result column="reward_id_" property="rewardId" />
 	        <result column="reward_num_" property="rewardNum" />
+	        <result column="reward_stock_" property="rewardStock" />
 	        <result column="create_time_" property="createTime" />
 		</resultMap>  
     
@@ -15,6 +16,7 @@
         , t.activity_id_ as activityId
         , t.reward_id_ as rewardId
         , t.reward_num_ as rewardNum
+        , t.reward_stock_ as rewardStock
         , t.group_ AS `group`
         , t.create_time_ as createTime
         </sql>
@@ -84,6 +86,6 @@
 
 
 	<update id="reduceStock">
-        update activity_plan_reward set reward_num_ = reward_num_ - 1 where #{activityId} = activity_id_ and #{rewardId} = reward_id_ and reward_num_ > 0
+        update activity_plan_reward set reward_stock_ = reward_stock_ - 1 where #{activityId} = activity_id_ and #{rewardId} = reward_id_ and reward_stock_ > 0
     </update>
 </mapper>