Browse Source

Merge branch 'dev_1_3_4_20220825' into online

liujunchi 3 years ago
parent
commit
0077ae3147

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityUserRewardSearch.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.EStatus;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,6 +9,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.Optional;
 
 /**
  * @Author: liweifan
@@ -39,6 +41,9 @@ public class ActivityUserRewardSearch extends QueryInfo{
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
 	private Date endTime;
 
+	@ApiModelProperty(hidden = true)
+	private Integer activityGroupBy;
+
 	public Long getActivityId() {
 		return activityId;
 	}
@@ -80,4 +85,12 @@ public class ActivityUserRewardSearch extends QueryInfo{
 	public void setEndTime(Date endTime) {
 		this.endTime = endTime;
 	}
+
+	public Integer getActivityGroupBy() {
+		return Optional.ofNullable(activityGroupBy).orElse(EStatus.ENABLE.getValue());
+	}
+
+	public void setActivityGroupBy(Integer activityGroupBy) {
+		this.activityGroupBy = activityGroupBy;
+	}
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MK.java

@@ -7,7 +7,7 @@ package com.yonge.cooleshow.biz.dal.enums;
 public interface MK {
 
     // 手机号
-    String EXP_MOBILE_NUMBER = "^\\d{3,11}$";
+    String EXP_MOBILE_NUMBER = "^1(3\\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\\d|9[0-35-9])\\d{8}$";
     // 正型
     String EXP_INT = "^\\d+$";
 }

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

@@ -163,7 +163,19 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
 
     @Override
     public IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query) {
-        return page.setRecords(baseMapper.selectPage(page, query));
+
+        List<ActivityPlanVo> wrappers = baseMapper.selectPage(page, query);
+
+        // 分享活动-参与人数获奖人数相等
+        for (ActivityPlanVo item : wrappers) {
+
+            // 重置分享活动获奖与参与人数
+            if (ActivityTypeEnum.SHARE == item.getActivityType()) {
+                item.setRegistrationNum(item.getRewardNum());
+            }
+        }
+
+        return page.setRecords(wrappers);
     }
 
     @Override
@@ -190,38 +202,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             // 分享活动-活动时间修改需要先校验与老师其他分享活动是否存在冲突
             if (ActivityTypeEnum.SHARE == old.getActivityType()) {
 
-                if (activityPlan.getActivityStart().getTime() != old.getActivityStart().getTime()
-                        || activityPlan.getActivityEnd().getTime() != old.getActivityEnd().getTime()) {
-
-                    // 排除当前活动,其他活动时间存在重复
-                    ActivityTeacherQuery query = ActivityTeacherQuery.builder()
-                            .activityId(activityPlan.getId())
-                            .activityType(ActivityTypeEnum.SHARE.getCode())
-                            .resourceType(ActivityResourceEnum.TEACHER.getCode())
-                            .activityState(EStatus.ENABLE.getValue())
-                            .startTime(Optional.ofNullable(activityPlan.getActivityStart()).map(x -> x.getTime() / 1000).orElse(null))
-                            .endTime(Optional.ofNullable(activityPlan.getActivityEnd()).map(x -> x.getTime() / 1000).orElse(null))
-                            .build();
-
-                    // 分页查询条件
-                    IPage<ActivityTeacherWrapper> page = new Page<>(1, 1000);
-
-                    IPage<ActivityTeacherWrapper> wrapper = activityEvaluationService.activityTeacherByTimePageInfo(page, query);
-
-                    if (CollectionUtils.isNotEmpty(wrapper.getRecords())) {
-
-                        String collect = wrapper.getRecords().stream().map(x -> {
-                            if (StringUtils.isNotEmpty(x.getRealName())) {
-                                return x.getRealName();
-                            }
-                            return x.getUsername();
-                        }).collect(Collectors.joining("、"));
-
-                        throw new BizException("以下老师存在时间冲突:" + collect);
-                    }
-
-                }
-
+                validActivityTeacherDuplicatTimeParam(activityPlan, old);
             }
 
             //启用状态,只能修改活动结束时间
@@ -255,6 +236,46 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     }
 
     /**
+     * 校验活动时间,添加老师是否重复
+     * @param activityPlan 更新数据
+     * @param old 原始数据
+     */
+    private void validActivityTeacherDuplicatTimeParam(ActivityPlanDto activityPlan, ActivityPlan old) {
+
+        if (activityPlan.getActivityStart().getTime() != old.getActivityStart().getTime()
+                || activityPlan.getActivityEnd().getTime() != old.getActivityEnd().getTime()) {
+
+            // 排除当前活动,其他活动时间存在重复
+            ActivityTeacherQuery query = ActivityTeacherQuery.builder()
+                    .activityId(activityPlan.getId())
+                    .activityType(ActivityTypeEnum.SHARE.getCode())
+                    .resourceType(ActivityResourceEnum.TEACHER.getCode())
+                    .activityState(EStatus.ENABLE.getValue())
+                    .startTime(Optional.ofNullable(activityPlan.getActivityStart()).map(x -> x.getTime() / 1000).orElse(null))
+                    .endTime(Optional.ofNullable(activityPlan.getActivityEnd()).map(x -> x.getTime() / 1000).orElse(null))
+                    .build();
+
+            // 分页查询条件
+            IPage<ActivityTeacherWrapper> page = new Page<>(1, 1000);
+
+            IPage<ActivityTeacherWrapper> wrapper = activityEvaluationService.activityTeacherByTimePageInfo(page, query);
+
+            if (CollectionUtils.isNotEmpty(wrapper.getRecords())) {
+
+                String collect = wrapper.getRecords().stream().map(x -> {
+                    if (StringUtils.isNotEmpty(x.getUsername())) {
+                        return x.getUsername();
+                    }
+                    return x.getRealName();
+                }).distinct().collect(Collectors.joining("、"));
+
+                throw new BizException("以下老师存在时间冲突:" + collect);
+            }
+
+        }
+    }
+
+    /**
      * 分享活动奖品信息
      * @param activityPlan ActivityPlanDto
      * @param activityId 活动ID

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

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo;
 import com.yonge.cooleshow.biz.dal.vo.UserRewardVo;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+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;
@@ -50,7 +51,11 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
         // 活动信息
         ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(query.getActivityId());
         if (Objects.isNull(activityPlan)) {
-            throw  new BizException("无效的活动ID");
+            throw new BizException("无效的活动ID");
+        }
+
+        if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()) {
+            query.setActivityGroupBy(EStatus.DISABLE.getValue());
         }
 
         // 活动获奖用户信息
@@ -69,22 +74,25 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
             Lists.partition(userIds, 30).parallelStream().forEach(item -> {
 
                 List<UserRewardVo> retlist = getBaseMapper().selectActivityShareTeacher(activityPlan.getId(), item);
+
                 // 同一个活动,用户关联多个老师信息
                 Map<Long, String> collect = retlist.stream()
                         .collect(Collectors.groupingBy(UserRewardVo::getUserId, Collectors.mapping(x -> {
 
-                            if (StringUtils.isNotEmpty(x.getRealName())) {
-                                return x.getRealName();
+                            if (StringUtils.isNotEmpty(x.getUsername())) {
+                                return x.getUsername();
                             }
-                            return x.getUsername();
-                        }, Collectors.joining("、"))));
+                            return x.getRealName();
+                        }, Collectors.toSet()))).entrySet().stream()
+                        .collect(Collectors.toMap(Map.Entry::getKey, x -> String.join("、", x.getValue())));
 
                 teacherNameMap.putAll(collect);
 
                 // 老师ID
                 teacherIdMap.putAll(retlist.stream()
                         .collect(Collectors.groupingBy(UserRewardVo::getUserId,
-                                Collectors.mapping(UserRewardVo::getTeacherId, Collectors.joining("、")))));
+                                Collectors.mapping(UserRewardVo::getTeacherId, Collectors.toSet()))).entrySet().stream()
+                        .collect(Collectors.toMap(Map.Entry::getKey, x -> String.join("、", x.getValue()))));
 
             });
 
@@ -93,6 +101,7 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
 
                 item.rewardType(RewardTypeEnum.valueOf(activityPlan.getShareType()))
                         .shareType(activityPlan.getShareType())
+                        .amount(1L)
                         .teacherName(teacherNameMap.getOrDefault(item.getUserId(), ""))
                         .setTeacherIds(teacherIdMap.getOrDefault(item.getUserId(), ""));
             }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserRewardVo.java

@@ -172,4 +172,9 @@ public class UserRewardVo implements Serializable {
 		this.shareType = shareType;
 		return this;
 	}
+
+	public UserRewardVo amount(Long amount) {
+		this.amount = amount;
+		return this;
+	}
 }

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

@@ -41,14 +41,21 @@
             su.real_name_ as realName,
             su.username_ as username,
             su.phone_ as phone,
-            min(t.create_time_) as createTime,
-            COUNT(DISTINCT t.id_) AS amount,
-            ar.reward_type_ AS rewardType,
-            ar.unit_ AS unit,
-            group_concat(if(t.grant_flag_ = 1,ar.reward_name_,null)) as rewardNames
-        FROM activity_user_reward t
-        left join activity_reward ar on ar.id_ = t.reward_id_
-        left join sys_user su on t.user_id_ = su.id_
+            IFNULL(ar.reward_type_, "VIP") AS rewardType,
+            <choose>
+                <when test="param.activityGroupBy == 1">
+                    /*按用户、活动分组统计*/
+                    MIN(t.create_time_) as createTime,
+                    COUNT(DISTINCT t.id_) AS amount,
+                    group_concat(if(t.grant_flag_ = 1,ar.reward_name_,null)) as rewardNames,
+                </when>
+                <otherwise>
+                    /*分享活动,直接查询用户购买记录*/
+                    t.create_time_ as createTime,
+                    IF(t.grant_flag_ = 1,ar.reward_name_,null) AS rewardNames,
+                </otherwise>
+            </choose>
+            IFNULL(ar.unit_, t.unit_) AS unit
         <where>
             <if test="param.activityId != null">
                 and t.activity_id_ = #{param.activityId}
@@ -68,7 +75,7 @@
                 and  t.create_time_ &lt;= #{param.endTime}
             </if>
         </where>
-        GROUP BY t.user_id_,t.activity_id_
+        <if test="param.activityGroupBy == 1">GROUP BY t.user_id_ , t.activity_id_</if>
     </select>
 
     <!--分享活动关联老师-->