Browse Source

分享活动-后端接口

Eric 2 years ago
parent
commit
f8c8428900
23 changed files with 895 additions and 80 deletions
  1. 69 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EStatus.java
  2. 6 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UnitEnum.java
  3. 42 10
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityEvaluationController.java
  4. 8 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java
  5. 0 11
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/ActivityTeacherInfoRequest.java
  6. 133 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/ActivityTeacherVO.java
  7. 0 11
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/response/ActivityTeacherResponse.java
  8. 10 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java
  9. 103 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java
  10. 102 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/activity/ActivityTeacherQuery.java
  11. 4 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java
  12. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityReward.java
  13. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MK.java
  14. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java
  15. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java
  16. 104 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
  17. 95 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  18. 32 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityUserRewardServiceImpl.java
  19. 20 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserRewardVo.java
  20. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/activity/ActivityTeacherWrapper.java
  21. 67 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml
  22. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityUserRewardMapper.xml
  23. 17 0
      toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/PageUtil.java

+ 69 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EStatus.java

@@ -0,0 +1,69 @@
+package com.yonge.cooleshow.common.enums;
+
+import lombok.Getter;
+
+import java.util.Optional;
+
+/**
+ * @author: James
+ * @date: 2018/8/20 上午11:29
+ * @description:
+ */
+@Getter
+public enum EStatus {
+
+    DELETE(-1, "删除"),
+    DISABLE(0, "禁用"),
+    ENABLE(1, "启用"),
+    SELECTED(2, "选择");
+
+    private final int value;
+    private final String name;
+
+    EStatus(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    /**
+     * 校验参数合法性
+     * @param value 数据状态
+     * @return boolean
+     */
+    public static boolean invalid(Integer value) {
+        if (value != null) {
+            EStatus[] values = EStatus.values();
+            for (EStatus item : values) {
+                if (item.getValue() == value) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 数据状态
+     * @param value 状态值
+     * @return EStatus
+     */
+    public static EStatus get(int value) {
+        EStatus[] values = EStatus.values();
+        for (EStatus item : values) {
+            if (item.getValue() == value) {
+                return item;
+            }
+        }
+        return ENABLE;
+    }
+
+    /**
+     * 状态匹配
+     * @param dataType 匹配类型
+     * @return boolean
+     */
+    public boolean match(Integer dataType) {
+        return getValue() == Optional.ofNullable(dataType).orElse(-99);
+    }
+
+}

+ 6 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UnitEnum.java

@@ -16,6 +16,12 @@ public enum UnitEnum implements BaseEnum<String, UnitEnum> {
     YEAR("年"),
     MINUTE("分钟数"),
     PCS("个"),
+
+//    DAY("日"),
+//    MONTH("月"),
+//    YEAR("年"),
+    QUARTERLY("季度"),
+    YEAR_HALF("半年"),
     ;
 
     @EnumValue

+ 42 - 10
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityEvaluationController.java

@@ -1,33 +1,41 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.admin.io.request.ActivityTeacherVO;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.mybatis.support.PageUtil;
-
 import com.yonge.toolset.base.util.StringUtil;
-import io.swagger.annotations.*;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
-import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
-
 import java.util.List;
+import java.util.Objects;
 
 @RestController
 @RequestMapping("/activityEvaluation")
@@ -103,4 +111,28 @@ public class ActivityEvaluationController extends BaseController {
 		return succeed(PageUtil.pageInfo(musicSheetVoIPage));
 	}
 
+	/**
+	 * 分享活动老师信息
+	 * @param request ActivityTeacherInfoRequest
+	 * @return HttpResponseResult<PageInfo<ActivityTeacherResponse>>
+	 */
+	@ApiOperation(value = "分页查询活动老师信息", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PostMapping(value="/teachers", consumes="application/json", produces="application/json")
+	public HttpResponseResult<PageInfo<ActivityTeacherVO.ResponseInfo>> activityTeacherPageInfo(@RequestBody ActivityTeacherVO.RequestInfo request) {
+
+		if(Objects.isNull(request.getActivityId())){
+			return failed("活动id不能为空");
+		}
+
+		// 老师信息
+		IPage<ActivityTeacherWrapper> wrapper = activityEvaluationService.activityTeacherPageInfo(PageUtil.getPage(request),
+				ActivityTeacherQuery.from(request.jsonString()));
+
+		// 数据转换
+		List<ActivityTeacherVO.ResponseInfo> responses = JSON.parseArray(JSON.toJSONString(wrapper.getRecords()),
+				ActivityTeacherVO.ResponseInfo.class);
+
+		// 分页数据信息
+		return succeed(PageUtil.getPageInfo(wrapper, responses));
+	}
 }

+ 8 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.dto.SaveOrUpdateRewardDto;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
@@ -74,6 +75,13 @@ public class ActivityPlanController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         activityPlan.setUserId(user.getId());
+
+        // 分享活动奖品校验
+        if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()
+                && CollectionUtils.isEmpty(activityPlan.getRewardItems())) {
+            return failed("分享活动奖品信息为空");
+        }
+
         try {
             return HttpResponseResult.succeed(activityPlanService.submit(activityPlan));
         } catch (BizException e) {

+ 0 - 11
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/ActivityTeacherInfoRequest.java

@@ -1,11 +0,0 @@
-package com.yonge.cooleshow.admin.io.request;
-
-import java.io.Serializable;
-
-/**
- * 分享活动参与老师信息请求
- * <p>
- * Created by Eric.Shang on 2022/8/29.
- */
-public class ActivityTeacherInfoRequest implements Serializable {
-}

+ 133 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/ActivityTeacherVO.java

@@ -0,0 +1,133 @@
+package com.yonge.cooleshow.admin.io.request;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.MK;
+import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.base.util.StringUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 活动老师信息
+ * Created by Eric.Shang on 2022/8/29.
+ */
+public class ActivityTeacherVO {
+
+    /**
+     * 活动老师请求信息
+     */
+    @Data
+    @EqualsAndHashCode(callSuper = false)
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(value = "分享活动老师请求", description = "分享活动老师信息")
+    public static class RequestInfo extends QueryInfo {
+
+        @ApiModelProperty("活动ID")
+        private Long activityId;
+        @ApiModelProperty("老师编号/真实姓名/昵称/手机号")
+        private String keyword;
+        @ApiModelProperty("声部id(多个逗号隔开)")
+        private String subjectIds;
+        @ApiModelProperty("新增老师搜索, 1: 新增搜索; 0:已添加老师")
+        private Integer addType;
+
+        @ApiModelProperty(hidden = true)
+        private List<Long> subjectIdList;
+        @ApiModelProperty(hidden = true)
+        private Long id;
+        @ApiModelProperty(hidden = true)
+        private String mobile;
+        @ApiModelProperty(hidden = true)
+        private String name;
+
+        public String jsonString() {
+
+            return JSON.toJSONString(this);
+        }
+
+        public Integer getAddType() {
+            return Optional.ofNullable(addType).orElse(0);
+        }
+
+        public List<Long> getSubjectIdList() {
+
+            if (StringUtils.isNotEmpty(getSubjectIds())) {
+                this.subjectIdList = StringUtil.toLongList(subjectIds);
+            }
+
+            return subjectIdList;
+        }
+
+        public Long getId() {
+
+            if (StringUtils.isNotEmpty(getKeyword())
+                    && !getKeyword().matches(MK.EXP_MOBILE_NUMBER)
+                    && getKeyword().matches(MK.EXP_INT)) {
+
+                return Long.parseLong(getKeyword());
+            }
+            return id;
+        }
+
+        public String getMobile() {
+            if (StringUtils.isNotEmpty(getKeyword())
+                    && getKeyword().matches(MK.EXP_MOBILE_NUMBER)) {
+                return getKeyword();
+            }
+            return mobile;
+        }
+
+        public String getName() {
+
+            if (StringUtils.isNotEmpty(getKeyword())
+                    && !getKeyword().matches(MK.EXP_MOBILE_NUMBER)
+                    && !getKeyword().matches(MK.EXP_INT)) {
+
+                return getKeyword();
+            }
+
+            return name;
+        }
+
+        public Long getActivityId() {
+
+            if (Optional.ofNullable(this.activityId).orElse(0L) > 0) {
+                return this.activityId;
+            }
+            return null;
+        }
+    }
+
+    /**
+     * 活动老师响应信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(value = "分享活动老师响应", description = "分享活动老师信息")
+    public static class ResponseInfo implements Serializable {
+
+        @ApiModelProperty(value = "老师编号")
+        private Long id;
+        @ApiModelProperty("昵称")
+        private String username;
+        @ApiModelProperty("真实姓名")
+        private String realName;
+        @ApiModelProperty("手机号")
+        private String phone;
+        @ApiModelProperty("声部ID")
+        private String subjectId;
+        @ApiModelProperty("声部")
+        private String subjectName;
+    }
+}

+ 0 - 11
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/response/ActivityTeacherResponse.java

@@ -1,11 +0,0 @@
-package com.yonge.cooleshow.admin.io.response;
-
-import java.io.Serializable;
-
-/**
- * 分享活动参与老师信息响应
- * <p>
- * Created by Eric.Shang on 2022/8/29.
- */
-public class ActivityTeacherResponse implements Serializable {
-}

+ 10 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java

@@ -4,9 +4,11 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
@@ -40,7 +42,7 @@ public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
      * @param musicSheetIds
      * @return
      */
-    Integer addBatch(@Param("activityId") Long activityId,@Param("userId") Long userId , @Param("musicSheetIds") List<Long> musicSheetIds);
+    Integer addBatch(@Param("activityId") Long activityId,@Param("userId") Long userId , @Param("musicSheetIds") List<Long> musicSheetIds, @Param("resourceType") String resourceType);
 
 	/**
 	 * 获取活动曲目信息
@@ -67,4 +69,11 @@ public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
 	 */
 	List<MusicSheetVo> musicPage(@Param("page") IPage<MusicSheetVo> page, @Param("param") MusicSheetSearch query);
 
+	/**
+	 * 活动老师信息
+	 * @param page IPage<ActivityTeacherWrapper>
+	 * @param query ActivityTeacherQuery
+	 * @return List<ActivityTeacherWrapper>
+	 */
+	List<ActivityTeacherWrapper> selectActivityTeacherPageInfo(@Param("page") IPage<ActivityTeacherWrapper> page, @Param("record") ActivityTeacherQuery query);
 }

+ 103 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java

@@ -1,12 +1,24 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanStandard;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.common.enums.EStatus;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.cooleshow.common.enums.UnitEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import javax.validation.Valid;
+import java.io.Serializable;
+import java.text.MessageFormat;
+import java.util.List;
+import java.util.Optional;
 
 /**
  * @Author: liweifan
@@ -24,6 +36,8 @@ public class ActivityPlanDto extends ActivityPlan{
 
 	@ApiModelProperty(value = "活动计划-达标赠送活动拓展")
 	private ActivityPlanStandard planStandard;
+	@ApiModelProperty(value = "分享活动-奖品信息")
+	private List<RewardItem> rewardItems;
 
 	public Long getUserId() {
 		return userId;
@@ -48,4 +62,92 @@ public class ActivityPlanDto extends ActivityPlan{
 	public void setPlanStandard(ActivityPlanStandard planStandard) {
 		this.planStandard = planStandard;
 	}
+
+	public List<RewardItem> getRewardItems() {
+		return Optional.ofNullable(rewardItems).orElse(Lists.newArrayList());
+	}
+
+	public void setRewardItems(List<RewardItem> rewardItems) {
+		this.rewardItems = rewardItems;
+	}
+
+	/**
+	 * 分享活动-奖品信息
+	 */
+	@Data
+	@NoArgsConstructor
+	@AllArgsConstructor
+	public static class RewardItem implements Serializable {
+
+		private Long activityId; // 业务更新活动ID
+		private String rewardClient;
+		private String rewardName;
+		private RewardTypeEnum rewardType;
+		private String rewardDescribe;
+		private String imgUrl;
+		private Integer stock;
+		private Integer num;
+		private UnitEnum unit; // 更新奖品会员类型
+		private Integer status;
+		private Double discountPrice; // 更新优惠价格
+
+		public Long getActivityId() {
+			return activityId;
+		}
+
+		public String getRewardClient() {
+			return Optional.ofNullable(rewardClient).orElse(ClientEnum.STUDENT.getCode());
+		}
+
+		public String getRewardName() {
+			return Optional.ofNullable(rewardName).orElse(MessageFormat.format("{0}会员", getUnit().getMsg()));
+		}
+
+		public RewardTypeEnum getRewardType() {
+			return Optional.ofNullable(rewardType).orElse(RewardTypeEnum.VIP);
+		}
+
+		public String getRewardDescribe() {
+
+			return Optional.ofNullable(rewardDescribe).orElse(getRewardName());
+		}
+
+		public String getImgUrl() {
+			return Optional.ofNullable(imgUrl).orElse("");
+		}
+
+		public Integer getStock() {
+			return Optional.ofNullable(stock).orElse(1);
+		}
+
+		public Integer getNum() {
+			return Optional.ofNullable(num).orElse(1);
+		}
+
+		public UnitEnum getUnit() {
+			return Optional.ofNullable(unit).orElse(UnitEnum.MONTH);
+		}
+
+		public Integer getStatus() {
+			return Optional.ofNullable(status).orElse(EStatus.DISABLE.getValue());
+		}
+
+		public Double getDiscountPrice() {
+			return Optional.ofNullable(discountPrice).orElse(0D);
+		}
+	}
+
+	/**
+	 * 活动奖品-逻辑映射关系
+	 */
+	@Data
+	@Builder
+	@NoArgsConstructor
+	@AllArgsConstructor
+	public static class ActivityRewardRecord implements Serializable {
+
+		private Long activityId;
+		private Long rewardId;
+		private Integer rewardNum;
+	}
 }

+ 102 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/activity/ActivityTeacherQuery.java

@@ -0,0 +1,102 @@
+package com.yonge.cooleshow.biz.dal.dto.activity;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.common.enums.EStatus;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 分享活动老师查询信息
+ * Created by Eric.Shang on 2022/8/29.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityTeacherQuery implements Serializable {
+
+    // 活动ID
+    private Long activityId;
+    // 声音ID
+    private List<Long> subjectIdList;
+    // 老师编号
+    private Long id;
+    // 老师手机号
+    private String mobile;
+    // 老师姓名或昵称
+    private String name;
+    // 锁定状态
+    private Integer lockFlag;
+    // 删除状态
+    private Integer deleteFlag;
+    // 新增搜索
+    private Integer addType;
+
+    // 活动开始时间
+    private Long startTime;
+    // 活动结束时间
+    private Long endTime;
+    private String resourceType;
+    private String activityType;
+    private Integer activityState;
+
+
+    /**
+     * 构建对象
+     * @param recv 数据信息
+     * @return ActivityTeacherQuery
+     */
+    public static ActivityTeacherQuery from(String recv) {
+
+        return JSON.parseObject(recv, ActivityTeacherQuery.class);
+    }
+
+    public Integer getLockFlag() {
+        return Optional.ofNullable(lockFlag).orElse(EStatus.DISABLE.getValue());
+    }
+
+    public Integer getDeleteFlag() {
+        return Optional.ofNullable(deleteFlag).orElse(EStatus.DISABLE.getValue());
+    }
+
+    public Integer getAddType() {
+        return Optional.ofNullable(addType).orElse(EStatus.DISABLE.getValue());
+    }
+
+
+    public ActivityTeacherQuery startTime(Long startTime) {
+        this.startTime = startTime;
+        return this;
+    }
+
+    public ActivityTeacherQuery endTime(Long endTime) {
+        this.endTime = endTime;
+        return this;
+    }
+
+    public ActivityTeacherQuery activityId(Long activityId) {
+        this.activityId = activityId;
+        return this;
+    }
+
+    public ActivityTeacherQuery resourceType(String resourceType) {
+        this.resourceType = resourceType;
+        return this;
+    }
+
+    public ActivityTeacherQuery activityType(String activityType) {
+        this.activityType = activityType;
+        return this;
+    }
+
+    public ActivityTeacherQuery activityState(Integer activityState) {
+        this.activityState = activityState;
+        return this;
+    }
+}

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

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.common.enums.ActivityShareEnum;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
 import io.swagger.annotations.ApiModel;
@@ -93,7 +92,7 @@ public class ActivityPlan implements Serializable {
     private Integer rewardFlag;
     @ApiModelProperty(value = "活动分类类型")
     @TableField(value = "share_type_")
-    private ActivityShareEnum shareType;
+    private String shareType;
     @ApiModelProperty("创建时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -215,11 +214,11 @@ public class ActivityPlan implements Serializable {
         this.activityState = activityState;
     }
 
-    public ActivityShareEnum getShareType() {
-        return Optional.ofNullable(shareType).orElse(ActivityShareEnum.DEFAULT);
+    public String getShareType() {
+        return Optional.ofNullable(shareType).orElse("");
     }
 
-    public void setShareType(ActivityShareEnum shareType) {
+    public void setShareType(String shareType) {
         this.shareType = shareType;
     }
 

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityReward.java

@@ -62,6 +62,9 @@ public class ActivityReward implements Serializable {
     @ApiModelProperty("数量(每个奖品) ")
     @TableField(value = "num_")
     private Integer num;
+    @ApiModelProperty("优惠金额 ")
+    @TableField(value = "discount_price_")
+    private Double discountPrice;
     @ApiModelProperty("单位 DAY 天 MONTH 月 YEAR 年")
     @TableField(value = "unit_")
     private UnitEnum unit;
@@ -204,4 +207,12 @@ public class ActivityReward implements Serializable {
     public void setUpdateBy(Long updateBy) {
         this.updateBy = updateBy;
     }
+
+    public Double getDiscountPrice() {
+        return discountPrice;
+    }
+
+    public void setDiscountPrice(Double discountPrice) {
+        this.discountPrice = discountPrice;
+    }
 }

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

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+/**
+ * 常用数据类型正则
+ * Created by Eric.Shang on 2022/8/29.
+ */
+public interface MK {
+
+    // 手机号
+    String EXP_MOBILE_NUMBER = "^\\d{3,11}$";
+    // 正型
+    String EXP_INT = "^\\d+$";
+}

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java

@@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 
 import java.util.List;
 
@@ -60,4 +62,11 @@ public interface ActivityEvaluationService extends IService<ActivityEvaluation>
 	 */
 	IPage<MusicSheetVo> musicPage(IPage<MusicSheetVo> page, MusicSheetSearch query);
 
+	/**
+	 * 活动老师信息
+	 * @param page ActivityTeacherWrapper
+	 * @param query ActivityTeacherQuery
+	 * @return IPage<ActivityTeacherWrapper>
+	 */
+	IPage<ActivityTeacherWrapper> activityTeacherPageInfo(IPage<ActivityTeacherWrapper> page, ActivityTeacherQuery query);
 }

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

@@ -104,6 +104,7 @@ public interface ActivityPlanService extends IService<ActivityPlan>  {
 
 	/**
 	 * 变更活动奖品
+	 *
 	 * @param saveOrUpdateRewardDto
 	 * @return
 	 */

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

@@ -3,38 +3,50 @@ 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.Maps;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.ActivityEvaluationDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
+import com.yonge.cooleshow.biz.dal.dto.activity.ActivityTeacherQuery;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
+import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+import com.yonge.cooleshow.common.enums.EStatus;
 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 org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
-import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
-import com.yonge.cooleshow.biz.dal.dao.ActivityEvaluationDao;
-import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
-
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
-
+@Slf4j
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
-    private final static Logger log = LoggerFactory.getLogger(ActivityEvaluationServiceImpl.class);
+
     @Autowired
     private ActivityPlanService activityPlanService;
+    @Autowired
+    private SubjectService subjectService;
 
     @Override
     public ActivityEvaluationVo detail(Long id) {
@@ -59,14 +71,40 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
                 .eq(ActivityEvaluation::getActivityId, param.getActivityId())
         );
 
-        List<Long> oldMusicSheetIds = activityEvaluations.stream().map(o -> o.getMusicSheetId()).collect(Collectors.toList());
+        // 活动类型
+        ActivityTypeEnum activityType = ActivityTypeEnum.EVALUATION;
+        String resourceType = ActivityResourceEnum.MUSIC_SHEET.getCode();
+
+        if (Objects.nonNull(param.getActivityId())) {
+            ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(param.getActivityId());
+
+            if (Objects.isNull(activityPlan)) {
+                throw new BizException("当前活动ID无效");
+            }
+            activityType = activityPlan.getActivityType();
+
+            switch (activityType) {
+                case SHARE: // 活动分享老师
+                    resourceType = ActivityResourceEnum.TEACHER.getCode();
+                    break;
+                case EVALUATION: // 曲目分享
+                    resourceType = ActivityResourceEnum.MUSIC_SHEET.getCode();
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        List<Long> oldMusicSheetIds = activityEvaluations.stream().map(ActivityEvaluation::getMusicSheetId).collect(Collectors.toList());
         musicSheetIds.removeAll(oldMusicSheetIds);
 
-        if ((oldMusicSheetIds.size() + musicSheetIds.size()) > 10) {
+        if ((oldMusicSheetIds.size() + musicSheetIds.size()) > 10
+                && activityType == ActivityTypeEnum.EVALUATION) {
+
             throw new BizException("添加的曲目不能多余10首");
         }
         if (CollectionUtils.isNotEmpty(musicSheetIds)) {
-            baseMapper.addBatch(param.getActivityId(), user.getId(), musicSheetIds);
+            baseMapper.addBatch(param.getActivityId(), user.getId(), musicSheetIds, resourceType);
             //更新修改人和修改时间
             activityPlanService.update(Wrappers.<ActivityPlan>lambdaUpdate()
                     .set(ActivityPlan::getUpdateBy, user.getId())
@@ -102,4 +140,57 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
         return page.setRecords(baseMapper.musicPage(page, query));
     }
 
+    /**
+     * 活动老师信息
+     *
+     * @param page  ActivityTeacherWrapper
+     * @param query ActivityTeacherQuery
+     * @return IPage<ActivityTeacherWrapper>
+     */
+    @Override
+    public IPage<ActivityTeacherWrapper> activityTeacherPageInfo(IPage<ActivityTeacherWrapper> page, ActivityTeacherQuery query) {
+
+        // 排除存在时间冲突的已参加活动老师
+        if (EStatus.ENABLE.match(query.getAddType())) {
+
+            ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(query.getActivityId());
+
+            if (Objects.nonNull(activityPlan)) {
+
+                // 排除存在时间冲突的老师
+                query.activityType(ActivityTypeEnum.SHARE.getCode())
+                        .resourceType(ActivityResourceEnum.TEACHER.getCode())
+                        .activityState(EStatus.ENABLE.getValue())
+                        .startTime(Optional.ofNullable(activityPlan.getActivityStart()).map(Date::getTime).orElse(null))
+                        .endTime(Optional.ofNullable(activityPlan.getActivityEnd()).map(Date::getTime).orElse(null))
+                        .activityId(null); // 重置活动匹配
+            }
+        }
+
+        List<ActivityTeacherWrapper> wrappers = baseMapper.selectActivityTeacherPageInfo(page, query);
+
+        // 查询老师声部信息
+        List<Long> subjectIds = wrappers.stream()
+                .filter(x -> StringUtils.isNotEmpty(x.getSubjectId()))
+                .flatMap(x -> Arrays.stream(x.getSubjectId().split(",")))
+                .map(Long::parseLong).distinct().collect(Collectors.toList());
+
+        Map<Long, String> subjectNameMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(subjectIds)) {
+
+            subjectNameMap = subjectService.findBySubjectByIdList(subjectIds).stream()
+                    .collect(Collectors.toMap(Subject::getId, Subject::getName, (o, n) -> n));
+        }
+
+        for (ActivityTeacherWrapper item : wrappers) {
+
+            item.setSubjectName(subjectNameMap.entrySet().stream()
+                    .filter(x -> item.getSubjectIds().contains(x.getKey()))
+                    .map(Map.Entry::getValue)
+                    .collect(Collectors.joining("、")));
+        }
+
+        return page.setRecords(wrappers);
+    }
+
 }

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

@@ -2,27 +2,39 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.api.R;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanDao;
-import com.yonge.cooleshow.biz.dal.dao.ActivityPlanEvaluationDao;
-import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
+import com.yonge.cooleshow.biz.dal.dto.ActivityPlanPayDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.SaveOrUpdateRewardDto;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
-import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
-import com.yonge.cooleshow.biz.dal.dto.ActivityPlanPayDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
-import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.*;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
-import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
+import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
+import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
+import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanEvaluationService;
+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.SysMessageService;
+import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
+import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
@@ -32,24 +44,24 @@ import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.util.DistributedLock;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import org.redisson.api.RedissonClient;
-import org.springframework.stereotype.Service;
 import org.apache.commons.collections.CollectionUtils;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
 import java.util.Date;
-
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
@@ -155,11 +167,16 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             throw new BizException("参数异常");
         }
 
+        // 活动ID
+        long activityId;
         if (null == activityPlan.getId()) {
             activityPlan.setDraftFlag(1);
             activityPlan.setCreateBy(activityPlan.getUserId());
             activityPlan.setUpdateBy(activityPlan.getUserId());
             save(activityPlan);
+
+            // 更新分享活动奖品信息
+            activityId = activityPlan.getId();
         } else {
             ActivityPlan old = getById(activityPlan.getId());
             //启用状态,只能修改活动结束时间
@@ -173,6 +190,15 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
                 activityPlan.setUpdateBy(activityPlan.getUserId());
                 updateById(activityPlan);
             }
+
+            // 更新活动ID
+            activityId = old.getId();
+        }
+
+        // 分享活动-奖品信息
+        if (CollectionUtils.isNotEmpty(activityPlan.getRewardItems())) {
+
+            insertActivityRewardSelectiveInfo(activityPlan, activityId);
         }
 
         //修改拓展信息
@@ -183,6 +209,55 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         return activityPlan;
     }
 
+    /**
+     * 分享活动奖品信息
+     * @param activityPlan ActivityPlanDto
+     * @param activityId 活动ID
+     */
+    private void insertActivityRewardSelectiveInfo(ActivityPlanDto activityPlan, long activityId) {
+
+        for (ActivityPlanDto.RewardItem item : activityPlan.getRewardItems()) {
+            // 更新活动ID
+            item.setActivityId(activityId);
+        }
+
+        List<Long> deleteRewardIds = activityPlanRewardService.getBaseMapper().selectBatchIds(Lists.newArrayList(activityId)).stream()
+                .map(ActivityPlanReward::getRewardId).distinct().collect(Collectors.toList());
+
+        // 删除原始活动奖品映射关系
+        activityPlanRewardService.getBaseMapper().delete(Wrappers.<ActivityPlanReward>lambdaQuery().eq(ActivityPlanReward::getActivityId, activityId));
+
+        // 删除原始活动奖品信息
+        if (CollectionUtils.isNotEmpty(deleteRewardIds)) {
+
+            activityRewardService.getBaseMapper().deleteBatchIds(deleteRewardIds);
+        }
+
+        // 重新插入奖品信息
+        List<ActivityReward> rewards = JSON.parseArray(JSON.toJSONString(activityPlan.getRewardItems()), ActivityReward.class);
+
+        if (CollectionUtils.isNotEmpty(rewards)) {
+
+            activityRewardService.saveBatch(rewards, 30);
+        }
+
+        // 重新插入活动奖品映射关系
+        List<ActivityPlanDto.ActivityRewardRecord> records = Lists.newArrayList();
+
+        for (ActivityReward item : rewards) {
+
+            records.add(ActivityPlanDto.ActivityRewardRecord.builder()
+                            .activityId(activityId)
+                            .rewardId(item.getId())
+                            .rewardNum(1)
+                    .build());
+        }
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            activityPlanRewardService.saveBatch(JSON.parseArray(JSON.toJSONString(records), ActivityPlanReward.class), 30);
+        }
+    }
+
     @Override
     public Boolean updateActivityState(Long activityId, Integer activityState, Long id) {
         ActivityPlanVo detail = detail(activityId);

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

@@ -2,29 +2,56 @@ 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.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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
 import com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityUserRewardSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityUserRewardDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
 
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewardDao, ActivityUserReward> implements ActivityUserRewardService {
-    private final static Logger log = LoggerFactory.getLogger(ActivityUserRewardServiceImpl.class);
+
+    @Autowired
+    private ActivityPlanService activityPlanService;
 
 	@Override
     public ActivityUserRewardVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
+
     @Override
     public IPage<UserRewardVo> selectPage(IPage<UserRewardVo> page, ActivityUserRewardSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
+
+        // 活动信息
+        ActivityPlan activityPlan = activityPlanService.getBaseMapper().selectById(query.getActivityId());
+        if (Objects.isNull(activityPlan)) {
+            throw  new BizException("无效的活动ID");
+        }
+
+        List<UserRewardVo> userRewards = baseMapper.selectPage(page, query);
+
+        // 分享活动查询关联老师信息
+        if (ActivityTypeEnum.SHARE == activityPlan.getActivityType()) {
+
+            List<Long> userIds = userRewards.stream().map(UserRewardVo::getUserId).distinct().collect(Collectors.toList());
+
+
+        }
+
+        return page.setRecords(userRewards);
     }
 	
 }

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

@@ -1,10 +1,13 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.cooleshow.common.enums.UnitEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -12,7 +15,7 @@ import java.util.Date;
  * @Data: 2022-08-04 10:19:49
  */
 @ApiModel(value = "UserRewardVo对象", description = "获奖名单")
-public class UserRewardVo{
+public class UserRewardVo implements Serializable {
 
 
 	@ApiModelProperty("用户id")
@@ -35,6 +38,22 @@ public class UserRewardVo{
 	@ApiModelProperty("奖品名 逗号隔开")
 	private String rewardNames;
 
+	// 分享活动拓展信息
+	@ApiModelProperty("数量")
+	private Long amount;
+	@ApiModelProperty("购买内容")
+	private RewardTypeEnum rewardType;
+	@ApiModelProperty("单位 ")
+	private UnitEnum unit;
+
+	public Long getAmount() {
+		return amount;
+	}
+
+	public void setAmount(Long amount) {
+		this.amount = amount;
+	}
+
 	public Long getUserId() {
 		return userId;
 	}

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

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.biz.dal.vo.activity;
+
+import com.google.common.collect.Lists;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * 分享活动老师信息
+ * Created by Eric.Shang on 2022/8/29.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityTeacherWrapper implements Serializable {
+
+    private Long id;
+    private String username;
+    private String realName;
+    private String phone;
+    private String subjectId;
+
+    private List<Long> subjectIds;
+    private String subjectName;
+
+    public List<Long> getSubjectIds() {
+        if (StringUtils.isNotEmpty(getSubjectId())) {
+
+            return Arrays.stream(getSubjectId().split(",")).map(Long::parseLong).collect(Collectors.toList());
+        }
+        return Optional.ofNullable(subjectIds).orElse(Lists.newArrayList());
+    }
+
+    public String getSubjectName() {
+        return Optional.ofNullable(subjectName).orElse("");
+    }
+}

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

@@ -54,9 +54,9 @@
     </select>
 
     <insert id="addBatch">
-        insert into activity_evaluation (activity_id_,create_by_, music_sheet_id_) values
+        insert into activity_evaluation (activity_id_,create_by_, music_sheet_id_, resource_type_) values
         <foreach collection="musicSheetIds" item="item" separator="," index="index">
-            (#{activityId,jdbcType=BIGINT},#{userId,jdbcType=BIGINT},#{item,jdbcType=BIGINT})
+            (#{activityId,jdbcType=BIGINT},#{userId,jdbcType=BIGINT},#{item,jdbcType=BIGINT}, #{resourceType,jdbcType=VARCHAR})
         </foreach>
     </insert>
 
@@ -132,4 +132,69 @@
         </where>
         order by t.id_ desc
     </select>
+
+    <!--活动老师信息-->
+    <resultMap id="ActivityTeacherPageInfoResultMap" type="com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper">
+        <id 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" />
+    </resultMap>
+    <sql id="ActivityTeacherPageInfo_Column_List">
+        t1.id_, t1.real_name_, t1.username_, t1.phone_, t2.subject_id_
+    </sql>
+    <sql id="ActivityTeacherPageInfo_Condition_List">
+        <if test="record.id != null">
+            AND t1.id_ = #{record.id}
+        </if>
+        <if test="record.mobile != null">
+            AND t1.phone_ = #{record.mobile}
+        </if>
+        <if test="record.name != null">
+            AND (t1.real_name_ LIKE '%${record.name}%' OR t1.username_ LIKE '%${record.name}%')
+        </if>
+        <if test="record.lockFlag != null">
+            AND t1.lock_flag_ = #{record.lockFlag}
+        </if>
+        <if test="record.deleteFlag != null">
+            AND t1.del_flag_ = #{record.deleteFlag}
+        </if>
+        <if test="record.addType == 1">
+            AND t4.user_id IS NULL
+        </if>
+    </sql>
+    <sql id="ActivityTeacherNotIn_Condition_List">
+        <if test="record.activityType != null">
+            AND t1.activity_type_ = #{record.activityType}
+        </if>
+        <if test="record.activityState != null">
+            AND t1.activity_state_ = #{record.activityState}
+        </if>
+        <if test="record.resourceType != null">
+            AND t2.resource_type_ = #{record.resourceType})
+        </if>
+        <if test="record.startTime != null and record.endTime != null">
+            AND (unix_timestamp(t1.activity_start_) &lt;= #{record.startTime} AND #{record.startTime} &lt;= unix_timestamp(t1.activity_end_) OR unix_timestamp(t1.activity_start_) &lt;= #{record.endTime} AND #{record.endTime} &lt;= unix_timestamp(t1.activity_end_))
+        </if>
+    </sql>
+    <select id="selectActivityTeacherPageInfo" resultMap="ActivityTeacherPageInfoResultMap">
+        SELECT <include refid="ActivityTeacherPageInfo_Column_List" />
+        FROM sys_user t1 JOIN teacher t2 ON (t1.id_ = t2.user_id_ <if test="record.lockFlag !=null"> AND t2.lock_flag_ = #{record.lockFlag} </if> )
+        <choose>
+            <when test="record.addType == 1">
+                LEFT JOIN (SELECT t2.music_sheet_id_ AS user_id FROM activity_plan t1 JOIN activity_evaluation t2 ON (t1.id_ = t2.activity_id_ <include refid="ActivityTeacherNotIn_Condition_List"/> ) t4 ON (t4.user_id = t1.id_)
+            </when>
+            <otherwise>
+                <if test="record.activityId != null"> JOIN activity_evaluation t3 ON (t1.id_ = t3.music_sheet_id_ AND t3.activity_id_ = #{record.activityId}) </if>
+            </otherwise>
+        </choose>
+        <where>
+            <include refid="ActivityTeacherPageInfo_Condition_List" />
+            <if test="record.subjectIdList != null">
+                AND <foreach collection="record.subjectIdList" separator="or" item="item" open="(" close=")"> FIND_IN_SET(#{item}, t2.subject_id_) </foreach>
+            </if>
+        </where>
+    </select>
+    <!--活动老师信息-->
 </mapper>

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

@@ -40,6 +40,9 @@
             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_

+ 17 - 0
toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/support/PageUtil.java

@@ -8,6 +8,7 @@ import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
 import org.springframework.beans.BeanUtils;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
@@ -109,6 +110,22 @@ public class PageUtil {
         return resultPage;
     }
 
+    /**
+     * 将mybatisPlus的分页模型 转换为本项目的分页模型
+     * @param wrapper IPage<?>
+     * @param responses List<T>
+     * @return PageInfo<T>
+     * @param <T> 返回的类
+     */
+    public static<T> PageInfo<T> getPageInfo(IPage<?> wrapper, List<T> responses) {
+
+        PageInfo<T> pageInfo = new PageInfo<>((int) wrapper.getCurrent(), (int) wrapper.getSize());
+
+        pageInfo.setRows(responses);
+        pageInfo.setLimit((int) wrapper.getSize());
+        pageInfo.setTotal((int) wrapper.getTotal());
+        return pageInfo;
+    }
 
     /**
      * 获取Map中的关键字获取分页数据