Bladeren bron

调整活动用户接口

1、修复接口反馈问题
Eric 2 jaren geleden
bovenliggende
commit
6c993f7cd0

+ 0 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityShareEnum.java

@@ -17,7 +17,6 @@ public enum ActivityShareEnum implements BaseEnum<String, ActivityShareEnum> {
     VIDEO("视频"),
     LIVE("直播"),
     GOODS("商品"),
-    DEFAULT("默认"),
     ;
 
     @EnumValue

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityUserRewardDao.java

@@ -27,5 +27,12 @@ public interface ActivityUserRewardDao extends BaseMapper<ActivityUserReward>{
      * @return: com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo
 	 */
 	List<UserRewardVo> selectPage(@Param("page") IPage page, @Param("param") ActivityUserRewardSearch activityUserReward);
-	
+
+	/**
+	 * 用户关联活动分享老师信息
+	 * @param activityId 活动ID
+	 * @param userIds 用户ID
+	 * @return List<UserRewardVo>
+	 */
+	List<UserRewardVo> selectActivityShareTeacher(@Param("activityId") Long activityId, @Param("userIds") List<Long> userIds);
 }

+ 12 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityEvaluationDto.java

@@ -4,7 +4,6 @@ import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 /**
@@ -19,8 +18,18 @@ public class ActivityEvaluationDto extends BaseEntity {
 	@NotNull(message = "活动id不能为空")
 	private Long activityId;
 	@ApiModelProperty("曲目id 多个用,分割 ")
-	@NotBlank(message = "曲子id不能为空")
-	private String musicSheetIds;
+	//@NotBlank(message = "曲子id不能为空")
+	private String musicSheetIds; // 评测活动曲目ID
+	@ApiModelProperty("活动老师id 多个用,分割 ")
+	private String teacherIds; // 分享活动老师ID
+
+	public String getTeacherIds() {
+		return teacherIds;
+	}
+
+	public void setTeacherIds(String teacherIds) {
+		this.teacherIds = teacherIds;
+	}
 
 	public Long getActivityId() {
 		return activityId;

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java

@@ -29,7 +29,7 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("主键 ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
-    @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 STANDARD_GIFT 达标赠送", required = true)
+    @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 STANDARD_GIFT 达标赠送 SHARE分享活动", required = true)
     @TableField(value = "activity_type_")
     @NotNull(message = "活动类型不能为空")
     private ActivityTypeEnum activityType;
@@ -90,7 +90,7 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("发奖状态(完成状态) 0 未发奖 1 已发奖 ")
     @TableField(value = "reward_flag_")
     private Integer rewardFlag;
-    @ApiModelProperty(value = "活动分类类型")
+    @ApiModelProperty(value = "活动分类类型, MUSIC_SHEET(曲谱) MUSIC(音乐) VIP(会员) VIDEO(视频) LIVE(直播) GOODS(商品)")
     @TableField(value = "share_type_")
     private String shareType;
     @ApiModelProperty("创建时间 ")

+ 39 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 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.google.common.collect.Maps;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityEvaluationDao;
@@ -65,7 +66,40 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
 
     @Override
     public Boolean addBatch(ActivityEvaluationDto param, SysUser user) {
-        List<Long> musicSheetIds = WrapperUtil.toLongList(param.getMusicSheetIds());
+
+        // 活动信息
+        ActivityPlan activity = activityPlanService.getBaseMapper().selectById(param.getActivityId());
+        if (Objects.isNull(activity)) {
+            throw new BizException("无效的活动ID");
+        }
+
+        List<Long> activityContentIds = Lists.newArrayList();
+        switch (activity.getActivityType()) {
+            case EVALUATION: // 评测活动
+                if (StringUtils.isEmpty(param.getMusicSheetIds())) {
+                    throw new BizException("曲子id不能为空");
+                }
+
+                // 活动曲目ID
+                activityContentIds = WrapperUtil.toLongList(param.getMusicSheetIds());
+                break;
+            case SHARE: // 分享活动
+                if (StringUtils.isEmpty(param.getTeacherIds())) {
+                    throw new BizException("老师ID不能为空");
+                }
+
+                // 活动关联老师ID
+                activityContentIds = WrapperUtil.toLongList(param.getTeacherIds());
+                break;
+            case STANDARD_GIFT:
+            default:
+                break;
+        }
+
+        if (CollectionUtils.isEmpty(activityContentIds)) {
+            // 活动内容请求ID为空,直接忽略后面业务逻辑流程
+            return true;
+        }
 
         List<ActivityEvaluation> activityEvaluations = baseMapper.selectList(Wrappers.<ActivityEvaluation>lambdaQuery()
                 .eq(ActivityEvaluation::getActivityId, param.getActivityId())
@@ -96,15 +130,15 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
         }
 
         List<Long> oldMusicSheetIds = activityEvaluations.stream().map(ActivityEvaluation::getMusicSheetId).collect(Collectors.toList());
-        musicSheetIds.removeAll(oldMusicSheetIds);
+        activityContentIds.removeAll(oldMusicSheetIds);
 
-        if ((oldMusicSheetIds.size() + musicSheetIds.size()) > 10
+        if ((oldMusicSheetIds.size() + activityContentIds.size()) > 10
                 && activityType == ActivityTypeEnum.EVALUATION) {
 
             throw new BizException("添加的曲目不能多余10首");
         }
-        if (CollectionUtils.isNotEmpty(musicSheetIds)) {
-            baseMapper.addBatch(param.getActivityId(), user.getId(), musicSheetIds, resourceType);
+        if (CollectionUtils.isNotEmpty(activityContentIds)) {
+            baseMapper.addBatch(param.getActivityId(), user.getId(), activityContentIds, resourceType);
             //更新修改人和修改时间
             activityPlanService.update(Wrappers.<ActivityPlan>lambdaUpdate()
                     .set(ActivityPlan::getUpdateBy, user.getId())

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

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.vo.UserRewardVo;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 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;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
@@ -17,6 +21,7 @@ import com.yonge.cooleshow.biz.dal.dao.ActivityUserRewardDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -41,14 +46,35 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
             throw  new BizException("无效的活动ID");
         }
 
+        // 活动获奖用户信息
         List<UserRewardVo> userRewards = baseMapper.selectPage(page, query);
 
-        // 分享活动查询关联老师信息
+        // 分享活动关联老师信息
         if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()) {
 
+            Map<Long, String> teacherNameMap = Maps.newConcurrentMap();
             List<Long> userIds = userRewards.stream().map(UserRewardVo::getUserId).distinct().collect(Collectors.toList());
 
+            Lists.partition(userIds, 30).parallelStream().forEach(item -> {
 
+                // 同一个活动,用户关联多个老师信息
+                Map<Long, String> collect = getBaseMapper().selectActivityShareTeacher(activityPlan.getId(), item).stream()
+                        .collect(Collectors.groupingBy(UserRewardVo::getUserId, Collectors.mapping(x -> {
+
+                            if (StringUtils.isNotEmpty(x.getRealName())) {
+                                return x.getRealName();
+                            }
+                            return x.getUsername();
+                        }, Collectors.joining("、"))));
+
+                teacherNameMap.putAll(collect);
+            });
+
+            // 填充老师信息
+            for (UserRewardVo item : userRewards) {
+
+                item.setTeacherName(teacherNameMap.getOrDefault(item.getUserId(), ""));
+            }
         }
 
         return page.setRecords(userRewards);

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

@@ -45,6 +45,10 @@ public class UserRewardVo implements Serializable {
 	private RewardTypeEnum rewardType;
 	@ApiModelProperty("单位 ")
 	private UnitEnum unit;
+	@ApiModelProperty("关联老师 ")
+	private String teacherName;
+	@ApiModelProperty("关联老师ID ")
+	private Long teacherId;
 
 	public Long getAmount() {
 		return amount;
@@ -101,4 +105,46 @@ public class UserRewardVo implements Serializable {
 	public void setRewardNames(String rewardNames) {
 		this.rewardNames = rewardNames;
 	}
+
+	public RewardTypeEnum getRewardType() {
+		return rewardType;
+	}
+
+	public void setRewardType(RewardTypeEnum rewardType) {
+		this.rewardType = rewardType;
+	}
+
+	public UnitEnum getUnit() {
+		return unit;
+	}
+
+	public void setUnit(UnitEnum unit) {
+		this.unit = unit;
+	}
+
+	public String getTeacherName() {
+		return teacherName;
+	}
+
+	public void setTeacherName(String teacherName) {
+		this.teacherName = teacherName;
+	}
+
+	public Long getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Long teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public UserRewardVo teacherName(String teacherName) {
+		this.teacherName = teacherName;
+		return this;
+	}
+
+	public UserRewardVo teacherId(Long teacherId) {
+		this.teacherId = teacherId;
+		return this;
+	}
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/activity/ActivityTeacherWrapper.java

@@ -24,6 +24,7 @@ import java.util.stream.Collectors;
 public class ActivityTeacherWrapper implements Serializable {
 
     private Long id;
+    private Long teacherId;
     private String username;
     private String realName;
     private String phone;

+ 3 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml

@@ -137,14 +137,15 @@
 
     <!--活动老师信息-->
     <resultMap id="ActivityTeacherPageInfoResultMap" type="com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper">
-        <id column="id_" jdbcType="BIGINT" property="id" />
+        <result column="id_" jdbcType="BIGINT" property="id" />
         <result column="real_name_" jdbcType="BIGINT" property="realName" />
         <result column="username_" jdbcType="VARCHAR" property="username" />
         <result column="phone_" jdbcType="VARCHAR" property="phone" />
         <result column="subject_id_" jdbcType="VARCHAR" property="subjectId" />
+        <result column="teacher_id" jdbcType="BIGINT" property="teacherId" />
     </resultMap>
     <sql id="ActivityTeacherPageInfo_Column_List">
-        t1.id_, t1.real_name_, t1.username_, t1.phone_, t2.subject_id_
+        t1.id_ AS teacher_id, t1.real_name_, t1.username_, t1.phone_, t2.subject_id_, <if test="record.activityId != null"> t3.id_ AS id</if>
     </sql>
     <sql id="ActivityTeacherPageInfo_Condition_List">
         <if test="record.id != null">

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

@@ -42,6 +42,7 @@
         , t.registration_method_ as registrationMethod
         , t.registration_price_ as registrationPrice
         , t.share_rate_ as shareRate
+        , t.share_type_ as shareType
         , t.draft_flag_ as draftFlag
         , if(t.activity_state_ = 1, 1, 0) as activityState
         , t.create_time_ as createTime

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

@@ -16,7 +16,7 @@
         , t.reward_id_ as rewardId
         , t.reward_num_ as rewardNum
         , t.create_time_ as createTime
-        </sql> 
+        </sql>
     
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanRewardVo">
         SELECT

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

@@ -40,7 +40,7 @@
             su.username_ as username,
             su.phone_ as phone,
             min(t.create_time_) as createTime,
-            COUNT(DISTINCT t.id) AS amount,
+            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
@@ -68,4 +68,13 @@
         </where>
         GROUP BY t.user_id_,t.activity_id_
     </select>
+
+    <!--分享活动关联老师-->
+    <select id="selectActivityShareTeacher" resultType="com.yonge.cooleshow.biz.dal.vo.UserRewardVo">
+        SELECT t1.id_ AS teacherId, t1.username_ AS username, t1.real_name_ AS realName, t3.user_id_ AS userId
+        FROM sys_user t1 JOIN activity_evaluation t2 ON t1.id_ = t2.music_sheet_id_ JOIN activity_evaluation_record t3 ON t2.id = t3.evaluation_id_
+        WHERE t3.activity_id_ = #{activityId} AND t3.user_id_ =  IN (<foreach collection="userIds" separator="," item="item">#{item}</foreach>)
+    </select>
+    <!--分享活动关联老师-->
+
 </mapper>