Quellcode durchsuchen

Merge branch 'dev_v1.3.4_20220914' of http://git.dayaedu.com/yonge/cooleshow into dev_v1.3.4_20220914

liujunchi vor 2 Jahren
Ursprung
Commit
ccd74d6275

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserFirstTimeSearch.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.ConditionMethodEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -36,6 +37,8 @@ public class UserFirstTimeSearch extends QueryInfo{
 	private Long activityId;
 	// 活动参与用户ID
 	private List<Long> userIds;
+	// 达标活动计算方式
+	private ConditionMethodEnum calculationMethod;
 
 	public Long getUserId() {
 		return userId;
@@ -93,6 +96,13 @@ public class UserFirstTimeSearch extends QueryInfo{
 		this.userIds = userIds;
 	}
 
+	public ConditionMethodEnum getCalculationMethod() {
+		return calculationMethod;
+	}
+
+	public void setCalculationMethod(ConditionMethodEnum calculationMethod) {
+		this.calculationMethod = calculationMethod;
+	}
 
 	public UserFirstTimeSearch activityId(Long activityId) {
 		this.activityId = activityId;

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

@@ -721,8 +721,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         List<Long> collect = saveOrUpdateRewardDto.getUpdateRewardDtoList().stream()
                 .map(ActivityPlanReward::getRewardId).distinct().collect(Collectors.toList());
 
+        String clientType = activityPlan.getActivityClient().getCode();
         long validRewardNums = activityRewardService.listByIds(collect).stream()
-                .filter(x -> x.getRewardClient().equals(activityPlan.getActivityClient().getCode()))
+                .filter(x -> Lists.newArrayList(x.getRewardClient().split(",")).contains(clientType))
                 .count();
         if (saveOrUpdateRewardDto.getUpdateRewardDtoList().size() != validRewardNums) {
             throw new BizException("添加奖品与活动客户端不匹配");

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanStandardDao;
 import com.yonge.cooleshow.biz.dal.dao.UserFirstTimeDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
@@ -119,6 +120,7 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
         search.setStartTime(detail.getActivityStart());
         search.setEndTime(detail.getActivityEnd());
         search.setUserType(detail.getActivityClient().getCode());
+        search.setCalculationMethod(planStandard.getCalculationMethod());
         search.setTimeType(planStandard.getCondition());
 
         // 达标活动匹配条件数
@@ -151,7 +153,7 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
             //log.info("dealActivityIng query={}", JSON.toJSONString(query));
 
             // 用户达标活动获奖发送记录
-            activityUserSendRewardRecordInfo(activityId, detail, planStandard, query, conditionNum);
+            activityUserSendRewardRecordInfo(userIds, activityId, detail, planStandard, query, conditionNum);
         }
 
         return true;
@@ -159,17 +161,19 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 
     /**
      * 活动用户发奖记录信息
+     * @param userIds 发奖用户顺序
      * @param activityId 活动ID
      * @param detail ActivityPlanVo
      * @param planStandard ActivityPlanStandard
      * @param search UserFirstTimeSearch
      * @param conditionNum 达标活动匹配条件
      */
-    private void activityUserSendRewardRecordInfo(Long activityId,
-                                                     ActivityPlanVo detail,
-                                                     ActivityPlanStandard planStandard,
-                                                     UserFirstTimeSearch search,
-                                                     int conditionNum) {
+    private void activityUserSendRewardRecordInfo(List<Long> userIds,
+                                                  Long activityId,
+                                                  ActivityPlanVo detail,
+                                                  ActivityPlanStandard planStandard,
+                                                  UserFirstTimeSearch search,
+                                                  int conditionNum) {
         // 用户激活时间
         Map<Long, List<Long>> userActiveTimeMap = userFirstTimeService.selectAllList(search).stream()
                 .collect(Collectors.groupingBy(UserFirstTime::getUserId,
@@ -181,31 +185,38 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
 
         List<ActivityPlanRewardDto> activityPlanRewardDtos = activityPlanRewardService.queryActivityPlanReward(activityId);
 
-        // 用户信息
-        for (Map.Entry<Long, List<Long>> entry : userActiveTimeMap.entrySet()) {
+        // 获然用户顺序信息
+        List<Long> collect;
+        for (Long userId : userIds) {
+
+            collect = userActiveTimeMap.getOrDefault(userId, Lists.newArrayList());
+            if (CollectionUtils.isEmpty(collect)) {
+                // 没有匹配用户信息
+                continue;
+            }
 
             if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
 
                 // 满足其一
-                long timestamp = entry.getValue().stream().mapToLong(Long::longValue).min().orElse(0L);
+                long timestamp = collect.stream().mapToLong(Long::longValue).min().orElse(0L);
 
                 if (timestamp > 0) {
                     //给用户发奖
-                    sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
+                    sendUserReward(userId, detail.getId(), new Date(timestamp), activityPlanRewardDtos);
                 }
 
             } else {
 
                 // 全部满足
-                long timestamp = entry.getValue().stream().mapToLong(Long::longValue).max().orElse(0L);
+                long timestamp = collect.stream().mapToLong(Long::longValue).max().orElse(0L);
 
-                if (timestamp > 0 && entry.getValue().size() == conditionNum) {
+                if (timestamp > 0 && collect.size() == conditionNum) {
                     //给用户发奖
-                    sendUserReward(entry.getKey(), detail.getId(), new Date(timestamp), activityPlanRewardDtos);
+                    sendUserReward(userId, detail.getId(), new Date(timestamp), activityPlanRewardDtos);
                 }
             }
-
         }
+
     }
 
     private void sendUserReward(Long userId, Long activityId, Date winningTime, List<ActivityPlanRewardDto> activityPlanRewardDtos) {

+ 20 - 15
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserFirstTimeMapper.xml

@@ -50,25 +50,30 @@
     <!--达标活动参与用户-->
     <select id="selectActivityParticipateUserPage"
             resultType="com.yonge.cooleshow.biz.dal.entity.UserFirstTime">
-        SELECT t1.user_id_ AS userId FROM user_first_time t1
+        SELECT t.user_id_ AS userId FROM (
+            SELECT t1.user_id_, t1.user_type_, <choose><when test="record.calculationMethod.code == 'AND'">MAX(t1.time_)</when><otherwise>MIN(t1.time_)</otherwise></choose>  AS time_ FROM user_first_time t1
+            <where>
+                <if test="record.userType != null and record.userType != ''">
+                    and find_in_set(t1.user_type_ , #{record.userType})
+                </if>
+                <if test="record.timeType != null and record.timeType != ''">
+                    and find_in_set(t1.time_type_ , #{record.timeType})
+                </if>
+                <if test="record.startTime != null">
+                    and t1.time_ &gt;= #{record.startTime}
+                </if>
+                <if test="record.endTime != null">
+                    and t1.time_ &lt;= #{record.endTime}
+                </if>
+            </where>
+            GROUP BY t1.user_id_ ORDER BY t1.time_ ASC
+        ) t
         <where>
-            <if test="record.userType != null and record.userType != ''">
-                and find_in_set(t1.user_type_ , #{record.userType})
-            </if>
-            <if test="record.timeType != null and record.timeType != ''">
-                and find_in_set(t1.time_type_ , #{record.timeType})
-            </if>
-            <if test="record.startTime != null">
-                and t1.time_ &gt;= #{record.startTime}
-            </if>
-            <if test="record.endTime != null">
-                and t1.time_ &lt;= #{record.endTime}
-            </if>
             <if test="record.activityId != null">
-                AND t1.user_id_ NOT IN (SELECT t2.user_id_ FROM activity_user_reward t2 WHERE t2.activity_id_ = #{record.activityId})
+                AND t.user_id_ NOT IN (SELECT t2.user_id_ FROM activity_user_reward t2 WHERE t2.activity_id_ = #{record.activityId})
             </if>
         </where>
-        GROUP BY t1.user_id_ ORDER BY t1.user_id_ ASC
+        ORDER BY t.time_ ASC
     </select>
     <!--达标活动参与用户-->