liujunchi 3 yıl önce
ebeveyn
işleme
2eecb28566
40 değiştirilmiş dosya ile 1098 ekleme ve 160 silme
  1. 1 0
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java
  2. 34 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityTypeEnum.java
  3. 5 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/HardLevelEnum.java
  4. 35 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/RegistrationMethodEnum.java
  5. 3 21
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java
  6. 27 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java
  7. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java
  8. 17 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanDao.java
  9. 0 22
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanEvaluationDao.java
  10. 16 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java
  11. 0 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanEvaluationDto.java
  12. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanPayDto.java
  13. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  14. 0 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityPlanEvaluationSearch.java
  15. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityPlanSearch.java
  16. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PianoRoomChangeRecordSearch.java
  17. 31 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java
  18. 7 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanEvaluation.java
  19. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java
  20. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMusicCompareRecord.java
  21. 21 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java
  22. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java
  23. 50 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java
  24. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRegistrationService.java
  25. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java
  26. 37 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationRecordServiceImpl.java
  27. 26 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
  28. 231 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  29. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRegistrationServiceImpl.java
  30. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  31. 20 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java
  32. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  33. 118 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityMusicVo.java
  34. 35 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityPlanVo.java
  35. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicActivityVo.java
  36. 48 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml
  37. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml
  38. 0 35
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanEvaluationMapper.xml
  39. 30 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml
  40. 60 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentActivityController.java

+ 1 - 0
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -15,6 +15,7 @@ import java.util.stream.Collectors;
 
 import javax.sound.sampled.AudioFormat;
 
+import com.yonge.cooleshow.common.enums.HardLevelEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

+ 34 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ActivityTypeEnum.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 活动类型 EVALUATION 评测活动
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum ActivityTypeEnum implements BaseEnum<String, ActivityTypeEnum> {
+
+    EVALUATION("评测活动")
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    ActivityTypeEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 5 - 1
audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java → cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/HardLevelEnum.java

@@ -1,5 +1,6 @@
-package com.yonge.netty.dto;
+package com.yonge.cooleshow.common.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
@@ -23,6 +24,8 @@ public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
 	 * 完成度范围, 未演奏的范围
 	 */
 	PERFORMER("大师级", 3, 3, 5, 10, 13, 15, 95, 10);
+	@EnumValue
+	private String code;
 
 	private String msg;
 
@@ -58,6 +61,7 @@ public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
 	HardLevelEnum(String msg, int amplitudeThreshold, int frequencyThreshold, int tempoEffectiveRangeOf1, int tempoEffectiveRangeOf2,
 			int tempoEffectiveRangeOf4, int tempoEffectiveRangeOf8, int integrityRange,
 			int notPlayRange) {
+		this.code = this.name();
 		this.msg = msg;
 		this.amplitudeThreshold = amplitudeThreshold;
 		this.frequencyThreshold = frequencyThreshold;

+ 35 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/RegistrationMethodEnum.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 报名方式 FREE 免费 CHARGE 收费
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum RegistrationMethodEnum implements BaseEnum<String, RegistrationMethodEnum> {
+
+    FREE("免费"),
+    CHARGE("收费")
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    RegistrationMethodEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 3 - 21
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -50,7 +51,7 @@ public class ActivityPlanController extends BaseController {
 	 */
 	@PostMapping("/save")
 	@ApiOperation(value = "新增", notes = "传入activityPlan")
-	public HttpResponseResult save(@Valid @RequestBody ActivityPlan activityPlan) {
+	public HttpResponseResult save(@Valid @RequestBody ActivityPlanDto activityPlan) {
     	return status(activityPlanService.save(activityPlan));
 	}
     
@@ -62,25 +63,6 @@ public class ActivityPlanController extends BaseController {
 	public HttpResponseResult update(@Valid @RequestBody ActivityPlan activityPlan) {
         return status(activityPlanService.updateById(activityPlan));
 	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入activityPlan")
-	public HttpResponseResult submit(@Valid @RequestBody ActivityPlan activityPlan) {
-        return status(activityPlanService.saveOrUpdate(activityPlan));
-    }
 
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(activityPlanService.removeByIds(StringUtil.toLongList(ids)));
-	}
+
 }

+ 27 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java

@@ -4,27 +4,46 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import org.apache.ibatis.annotations.Param;
 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;
 
 
-public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation>{
+public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
 	/**
 	 * 查询详情
-     * @author liweifan
-     * @date 2022-08-04 10:19:49
-     * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo
+	 *
+	 * @author liweifan
+	 * @date 2022-08-04 10:19:49
+	 * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo
 	 */
 	ActivityEvaluationVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
-     * @author liweifan
-     * @date 2022-08-04 10:19:49
-     * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo
+	 *
+	 * @author liweifan
+	 * @date 2022-08-04 10:19:49
+	 * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo
 	 */
 	List<ActivityEvaluationVo> selectPage(@Param("page") IPage page, @Param("param") ActivityEvaluationSearch activityEvaluation);
-	
+
+	/**
+	 * 获取活动曲目信息
+	 *
+	 * @param activityPlanId 活动id
+	 * @param userId         用户id
+	 * @return
+	 */
+    List<ActivityMusicVo> selectActivityMusic(@Param("activityPlanId") Long activityPlanId, @Param("userId") Long userId);
+
+	/**
+	 * 获取活动排名用户信息
+	 *
+	 * @param activityPlanId 活动id
+	 * @return
+	 */
+	List<ActivityMusicVo> selectActivityUser(@Param("activityPlanId") Long activityPlanId);
 }

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java

@@ -26,5 +26,13 @@ public interface ActivityEvaluationRecordDao extends BaseMapper<ActivityEvaluati
      * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationRecordVo
 	 */
 	List<ActivityEvaluationRecordVo> selectPage(@Param("page") IPage page, @Param("param") ActivityEvaluationRecordSearch activityEvaluationRecord);
-	
+
+	/**
+	 * 获取参与 的活动项目id集合
+	 *
+	 * @param userId     用户id
+	 * @param activityId 活动id
+	 * @return
+	 */
+    List<Long> getJoinEvaluationIdList(@Param("activityId") Long activityId, @Param("userId") Long userId);
 }

+ 17 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanDao.java

@@ -10,21 +10,30 @@ import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
 
 
-public interface ActivityPlanDao extends BaseMapper<ActivityPlan>{
+public interface ActivityPlanDao extends BaseMapper<ActivityPlan> {
 	/**
 	 * 查询详情
-     * @author liweifan
-     * @date 2022-08-04 10:19:49
-     * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo
+	 *
+	 * @author liweifan
+	 * @date 2022-08-04 10:19:49
+	 * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo
 	 */
 	ActivityPlanVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
-     * @author liweifan
-     * @date 2022-08-04 10:19:49
-     * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo
+	 *
+	 * @author liweifan
+	 * @date 2022-08-04 10:19:49
+	 * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo
 	 */
 	List<ActivityPlanVo> selectPage(@Param("page") IPage page, @Param("param") ActivityPlanSearch activityPlan);
-	
+
+	/**
+	 * 评测活动 活动难度
+	 *
+	 * @param activityPlanId 活动id
+	 * @return
+	 */
+	String selectActivityPlanEvaluation(@Param("activityPlanId") Long activityPlanId);
 }

+ 0 - 22
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanEvaluationDao.java

@@ -1,30 +1,8 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
-import com.yonge.cooleshow.biz.dal.vo.ActivityPlanEvaluationVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanEvaluationSearch;
 
 
 public interface ActivityPlanEvaluationDao extends BaseMapper<ActivityPlanEvaluation>{
-	/**
-	 * 查询详情
-     * @author liweifan
-     * @date 2022-08-04 10:19:49
-     * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanEvaluationVo
-	 */
-	ActivityPlanEvaluationVo detail(@Param("id") Long id);
-
-	/**
-	 * 分页查询
-     * @author liweifan
-     * @date 2022-08-04 10:19:49
-     * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanEvaluationVo
-	 */
-	List<ActivityPlanEvaluationVo> selectPage(@Param("page") IPage page, @Param("param") ActivityPlanEvaluationSearch activityPlanEvaluation);
-	
 }

+ 16 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java

@@ -1,7 +1,11 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.Valid;
 
 /**
  * @Author: liweifan
@@ -10,4 +14,16 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "ActivityPlanDto对象", description = "活动计划表数据传输对象")
 public class ActivityPlanDto extends ActivityPlan{
 	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "活动计划-评测活动拓展")
+	private ActivityPlanEvaluation planEvaluation;
+
+
+	public ActivityPlanEvaluation getPlanEvaluation() {
+		return planEvaluation;
+	}
+
+	public void setPlanEvaluation(ActivityPlanEvaluation planEvaluation) {
+		this.planEvaluation = planEvaluation;
+	}
 }

+ 0 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanEvaluationDto.java

@@ -1,13 +0,0 @@
-package com.yonge.cooleshow.biz.dal.dto;
-
-import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-08-04 10:19:49
- */
-@ApiModel(value = "ActivityPlanEvaluationDto对象", description = "活动计划表数据传输对象")
-public class ActivityPlanEvaluationDto extends ActivityPlanEvaluation{
-	private static final long serialVersionUID = 1L;
-}

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanPayDto.java

@@ -0,0 +1,23 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-05
+ */
+@ApiModel("活动购买信息")
+public class ActivityPlanPayDto {
+
+    private Long activityId;
+
+    public Long getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(Long activityId) {
+        this.activityId = activityId;
+    }
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -32,7 +32,7 @@ public class OrderReq {
     @ApiModelProperty(value = "订单名称 ", required = true)
     private String orderName;
     @NotNull(message = "订单类型不能为空")
-    @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PINAO_ROOM、琴房时长)", required = true)
+    @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PINAO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
     private OrderTypeEnum orderType;
     @ApiModelProperty(value = "订单描述信息 ")
     private String orderDesc;
@@ -61,7 +61,7 @@ public class OrderReq {
         @ApiModelProperty(value = "订单详情号", hidden = true)
         private String subOrderNo;
         @NotNull(message = "商品类型不能为空")
-        @ApiModelProperty(value = "商品类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端( PINAO_ROOM、琴房时长)", required = true)
+        @ApiModelProperty(value = "商品类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端( PINAO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
         private GoodTypeEnum goodType;
         @ApiModelProperty("商品名称 ")
         private String goodName;

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

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.biz.dal.dto.search;
-
-import com.yonge.toolset.base.page.QueryInfo;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-08-04 10:19:49
- */
-@ApiModel(value = "ActivityPlanEvaluationSearch对象", description = "活动计划表查询对象")
-public class ActivityPlanEvaluationSearch extends QueryInfo{
-	private static final long serialVersionUID = 1L;
-
-}

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

@@ -1,7 +1,13 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 
 /**
  * @Author: liweifan
@@ -10,5 +16,62 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "ActivityPlanSearch对象", description = "活动计划表查询对象")
 public class ActivityPlanSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
+	@ApiModelProperty("活动名称 ")
+	private String activityName;
+	@ApiModelProperty("创建状态 0 正式 1 草稿 ")
+	private Integer draftFlag;
+	@ApiModelProperty("活动状态 0 停用 1 启用 ")
+	private Integer activityState;
+	@ApiModelProperty(value = "交易开始时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private LocalDateTime startTime;
+	@ApiModelProperty(value = "交易结束时间")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+	private LocalDateTime endTime;
+
+	public String getActivityName() {
+		return activityName;
+	}
+
+	public void setActivityName(String activityName) {
+		this.activityName = activityName;
+	}
+
+	public Integer getDraftFlag() {
+		return draftFlag;
+	}
+
+	public void setDraftFlag(Integer draftFlag) {
+		this.draftFlag = draftFlag;
+	}
+
+	public Integer getActivityState() {
+		return activityState;
+	}
+
+	public void setActivityState(Integer activityState) {
+		this.activityState = activityState;
+	}
+
+	public LocalDateTime getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(LocalDateTime startTime) {
+		if(null != startTime){
+			this.startTime = LocalDateTime.of(startTime.toLocalDate(), LocalTime.MIN);
+		}
+	}
+
+	public LocalDateTime getEndTime() {
+		return endTime;
+	}
 
+	public void setEndTime(LocalDateTime endTime) {
+		if(null != endTime){
+			this.endTime = LocalDateTime.of(endTime.toLocalDate(), LocalTime.MAX);
+		}
+	}
 }

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PianoRoomChangeRecordSearch.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.toolset.base.page.QueryInfo;
@@ -8,7 +7,6 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 
@@ -68,7 +66,9 @@ public class PianoRoomChangeRecordSearch extends QueryInfo{
 	}
 
 	public void setStartTime(LocalDateTime startTime) {
-		this.startTime = startTime;
+		if(null != startTime){
+			this.startTime = LocalDateTime.of(startTime.toLocalDate(), LocalTime.MIN);
+		}
 	}
 
 	public LocalDateTime getEndTime() {

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

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -11,6 +13,10 @@ import java.io.Serializable;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 /**
@@ -23,17 +29,21 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("主键 ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
-    @ApiModelProperty("活动类型 EVALUATION 评测活动 ")
+    @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 ",required = true)
 	@TableField(value = "activity_type_")
-    private String activityType;
+    @NotNull(message = "活动类型不能为空")
+    private ActivityTypeEnum activityType;
     @ApiModelProperty("活动名称 ")
 	@TableField(value = "activity_name_")
+    @NotBlank(message = "活动名称不能为空")
     private String activityName;
     @ApiModelProperty("活动描述 ")
 	@TableField(value = "describe_")
+    @NotBlank(message = "活动描述不能为空")
     private String describe;
     @ApiModelProperty("规则描述 ")
 	@TableField(value = "rule_describe_")
+    @NotBlank(message = "活动规则不能为空")
     private String ruleDescribe;
     @ApiModelProperty("主题图片 ")
 	@TableField(value = "subject_url_")
@@ -41,19 +51,25 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("平铺背景 ")
 	@TableField(value = "background_url_")
     private String backgroundUrl;
+    @ApiModelProperty("活动链接 ")
+    @TableField(value = "activity_url_")
+    private String activityUrl;
     @ApiModelProperty("活动时间-开始 ")
 	@TableField(value = "activity_start_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @NotNull(message = "活动开始时间不能为空")
     private Date activityStart;
     @ApiModelProperty("活动时间-结束 ")
 	@TableField(value = "activity_end_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @NotNull(message = "活动结束时间不能为空")
     private Date activityEnd;
     @ApiModelProperty("报名方式 FREE 免费 CHARGE 收费 ")
 	@TableField(value = "registration_method_")
-    private String registrationMethod;
+    @NotBlank(message = "报名缴费方式不能为空")
+    private RegistrationMethodEnum registrationMethod;
     @ApiModelProperty("报名价格 ")
 	@TableField(value = "registration_price_")
     private BigDecimal registrationPrice;
@@ -88,11 +104,11 @@ public class ActivityPlan implements Serializable {
         this.id = id;
     }
     
-	public String getActivityType() {
+	public ActivityTypeEnum getActivityType() {
         return activityType;
     }
 
-    public void setActivityType(String activityType) {
+    public void setActivityType(ActivityTypeEnum activityType) {
         this.activityType = activityType;
     }
     
@@ -152,11 +168,11 @@ public class ActivityPlan implements Serializable {
         this.activityEnd = activityEnd;
     }
     
-	public String getRegistrationMethod() {
+	public RegistrationMethodEnum getRegistrationMethod() {
         return registrationMethod;
     }
 
-    public void setRegistrationMethod(String registrationMethod) {
+    public void setRegistrationMethod(RegistrationMethodEnum registrationMethod) {
         this.registrationMethod = registrationMethod;
     }
     
@@ -215,5 +231,12 @@ public class ActivityPlan implements Serializable {
     public void setUpdateBy(Long updateBy) {
         this.updateBy = updateBy;
     }
-    
+
+    public String getActivityUrl() {
+        return activityUrl;
+    }
+
+    public void setActivityUrl(String activityUrl) {
+        this.activityUrl = activityUrl;
+    }
 }

+ 7 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanEvaluation.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.common.enums.HardLevelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -13,18 +14,18 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 /**
- * 活动计划表
+ * 活动计划-评测活动拓展字段
  */
 @TableName("activity_plan_evaluation")
-@ApiModel(value = "ActivityPlanEvaluation对象", description = "活动计划表")
+@ApiModel(value = "ActivityPlanEvaluation对象", description = "活动计划-评测活动拓展字段表")
 public class ActivityPlanEvaluation implements Serializable {
 	private static final long serialVersionUID = 1L;
     @ApiModelProperty("主键(活动id) ")
-    @TableId(value = "id_", type = IdType.AUTO)
+    @TableId(value = "id_")
     private Long id;
     @ApiModelProperty("评测难度 BEGINNER 入门级 ADVANCED 进阶级 PERFORMER 大师级 ")
 	@TableField(value = "evaluation_difficulty_")
-    private String evaluationDifficulty;
+    private HardLevelEnum evaluationDifficulty;
     @ApiModelProperty("创建时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -50,11 +51,11 @@ public class ActivityPlanEvaluation implements Serializable {
         this.id = id;
     }
     
-	public String getEvaluationDifficulty() {
+	public HardLevelEnum getEvaluationDifficulty() {
         return evaluationDifficulty;
     }
 
-    public void setEvaluationDifficulty(String evaluationDifficulty) {
+    public void setEvaluationDifficulty(HardLevelEnum evaluationDifficulty) {
         this.evaluationDifficulty = evaluationDifficulty;
     }
     

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

@@ -61,7 +61,7 @@ public class CourseGroup implements Serializable {
     private BigDecimal coursePrice;
 
     @TableField("status_")
-    @ApiModelProperty(value = "课程组状态 ING进行中 COMPLETE已完成 DISSOLVE-未成课(解散课程) CANCEL已取消-未开始报名前可取消 APPLY报名中 NOT_SALE未开售")
+    @ApiModelProperty(value = "课程组状态 ING进行中 COMPLETE已完成 DISSOLVE-未成课(解散课程) CANCEL已取消-未开始报名前可取消 APPLY报名中 NOT_SALE未开售 OUT_SALE:下架")
     private String status;
 
     @TableField("reason_")

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

@@ -83,6 +83,17 @@ public class SysMusicCompareRecord extends BaseEntity {
 	@ApiModelProperty("音乐过期 0:否 1:是")
 	private Integer expire;
 
+	@ApiModelProperty("活动项目id")
+	private Long evaluationId;
+
+	public Long getEvaluationId() {
+		return evaluationId;
+	}
+
+	public void setEvaluationId(Long evaluationId) {
+		this.evaluationId = evaluationId;
+	}
+
 	public String getCustomConfiguration() {
 		return customConfiguration;
 	}

+ 21 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java

@@ -6,6 +6,9 @@ import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * 评测活动参与记录表 服务类
  * @author liweifan
@@ -26,4 +29,22 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
  	 * @date 2022-08-04
      */
     IPage<ActivityEvaluationRecordVo> selectPage(IPage<ActivityEvaluationRecordVo> page, ActivityEvaluationRecordSearch query);
+
+	/**
+	 * 获取参与 的活动项目id集合
+	 *
+	 * @param userId 用户id
+	 * @param activityId 活动id
+	 * @return
+	 */
+    List<Long> getJoinEvaluationIdList(Long activityId, Long userId);
+
+	/**
+	 * 保存活动评测分数
+	 *
+	 * @param evaluationId 活动项目id
+	 * @param userId 用户id
+	 * @param score 分数
+	 */
+    void saveRecord(Long evaluationId, Long userId, BigDecimal score);
 }

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

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 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 java.util.List;
 
 /**
  * 评测活动表 服务类
@@ -26,4 +29,13 @@ public interface ActivityEvaluationService extends IService<ActivityEvaluation>
  	 * @date 2022-08-04
      */
     IPage<ActivityEvaluationVo> selectPage(IPage<ActivityEvaluationVo> page, ActivityEvaluationSearch query);
+
+	/**
+	 * 获取活动曲目细腻
+	 *
+	 * @param activityPlanId 活动id
+	 * @param userId
+	 * @return
+	 */
+    List<ActivityMusicVo> getActivityMusic(Long activityPlanId, Long userId);
 }

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

@@ -2,9 +2,19 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
+
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+
 import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+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;
 
 /**
  * 活动计划表 服务类
@@ -20,10 +30,50 @@ public interface ActivityPlanService extends IService<ActivityPlan>  {
      */
 	ActivityPlanVo detail(Long id);
 
+	/**
+	 * 新增活动
+	 * @param activityPlan
+	 * @return
+	 */
+	Boolean save(ActivityPlanDto activityPlan);
+
     /**
      * 分页查询
      * @author liweifan
  	 * @date 2022-08-04
      */
     IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query);
+
+	/**
+	 * 活动信息
+	 *
+	 * @param activityPlanId 活动id
+	 * @param user 用户
+	 * @return
+	 */
+    MusicActivityVo getActivityInfo(Long activityPlanId, SysUser user);
+
+	/**
+	 * 活动报名下单验证
+	 *
+	 * @param orderReqInfo
+	 * @return
+	 */
+    HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo);
+
+	/**
+	 * 活动购买
+	 *
+	 * @param userOrderDetailVo
+	 */
+    void orderSuccess(UserOrderDetailVo userOrderDetailVo);
+
+	/**
+	 * 参与活动项目
+	 *
+	 * @param evaluationId 活动项目id
+	 * @param user 用户
+	 * @return
+	 */
+	Boolean joinEvaluation(Long evaluationId, SysUser user);
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRegistrationService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRegistrationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRegistrationSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 
 /**
  * 活动报名表 服务类
@@ -26,4 +27,14 @@ public interface ActivityRegistrationService extends IService<ActivityRegistrati
  	 * @date 2022-08-04
      */
     IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query);
+
+	/**
+	 * 是否参与活动
+	 *
+	 * @param userId 用户id
+	 * @param activityPlanId
+	 * @return
+	 */
+    YesOrNoEnum getRegistration(Long userId, Long activityPlanId);
+
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java

@@ -6,6 +6,8 @@ import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 
+import java.util.List;
+
 /**
  * 活动奖品表 服务类
  * @author liweifan
@@ -26,4 +28,12 @@ public interface ActivityRewardService extends IService<ActivityReward>  {
  	 * @date 2022-08-04
      */
     IPage<ActivityRewardVo> selectPage(IPage<ActivityRewardVo> page, ActivityRewardSearch query);
+
+	/**
+	 * 获取活动所有奖品
+	 *
+	 * @param activityPlanId 活动id
+	 * @return
+	 */
+    List<ActivityReward> getActivityReward(Long activityPlanId);
 }

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

@@ -2,6 +2,11 @@ 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.ActivityEvaluation;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.toolset.base.exception.BizException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,11 +16,19 @@ import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationRecordSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityEvaluationRecordDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 
 @Service
 public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEvaluationRecordDao, ActivityEvaluationRecord> implements ActivityEvaluationRecordService {
     private final static Logger log = LoggerFactory.getLogger(ActivityEvaluationRecordServiceImpl.class);
 
+    @Autowired
+    private ActivityEvaluationService activityEvaluationService;
+
 	@Override
     public ActivityEvaluationRecordVo detail(Long id) {
         return baseMapper.detail(id);
@@ -25,5 +38,28 @@ public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEva
     public IPage<ActivityEvaluationRecordVo> selectPage(IPage<ActivityEvaluationRecordVo> page, ActivityEvaluationRecordSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public List<Long> getJoinEvaluationIdList(Long activityId, Long userId) {
+        return baseMapper.getJoinEvaluationIdList(activityId,userId);
+    }
+
+    @Override
+    public void saveRecord(Long evaluationId, Long userId, BigDecimal score) {
+        if (evaluationId == null) {
+            throw new BizException("评测项目id不能为空");
+        }
+        ActivityEvaluation activityEvaluation = activityEvaluationService.getById(evaluationId);
+        if (activityEvaluation == null) {
+            throw new BizException("未找到评测项目");
+        }
+        ActivityEvaluationRecord activityEvaluationRecord = new ActivityEvaluationRecord();
+        activityEvaluationRecord.setActivityId(activityEvaluation.getActivityId());
+        activityEvaluationRecord.setUserId(userId);
+        activityEvaluationRecord.setEvaluationId(evaluationId);
+        activityEvaluationRecord.setCreateTime(new Date());
+        activityEvaluationRecord.setScore(score == null ? 0:score.doubleValue());
+        save(activityEvaluationRecord);
+    }
+
 }

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

@@ -2,6 +2,8 @@ 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.vo.ActivityMusicVo;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,6 +13,10 @@ 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.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
@@ -25,5 +31,24 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
     public IPage<ActivityEvaluationVo> selectPage(IPage<ActivityEvaluationVo> page, ActivityEvaluationSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public List<ActivityMusicVo> getActivityMusic(Long activityPlanId, Long userId) {
+        List<ActivityMusicVo> result = baseMapper.selectActivityMusic(activityPlanId,userId);
+        List<ActivityMusicVo> activityMusicVoList = baseMapper.selectActivityUser(activityPlanId);
+        Map<Long, List<ActivityMusicVo>> collect = activityMusicVoList.stream()
+                                                                      .collect(Collectors.groupingBy(
+                                                                              ActivityMusicVo::getEvaluationId));
+        for (ActivityMusicVo activityMusicVo : result) {
+            List<ActivityMusicVo> activityUserList = collect.get(activityMusicVo.getEvaluationId());
+            if (!CollectionUtils.isEmpty(activityUserList)) {
+                activityMusicVo.setUserSubject(activityUserList.get(0).getUserSubject());
+                activityMusicVo.setScore(activityUserList.get(0).getScore());
+                activityMusicVo.setUserAvatar(activityUserList.get(0).getUserAvatar());
+                activityMusicVo.setUsername(activityUserList.get(0).getUsername());
+            }
+        }
+        return result;
+    }
+
 }

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

@@ -1,29 +1,250 @@
 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.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
+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.dto.ActivityPlanDto;
+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.service.*;
+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;
+import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
+import com.yonge.toolset.base.exception.BizException;
+import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
-import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
-import com.yonge.cooleshow.biz.dal.dao.ActivityPlanDao;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
 
 
 @Service
 public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, ActivityPlan> implements ActivityPlanService {
     private final static Logger log = LoggerFactory.getLogger(ActivityPlanServiceImpl.class);
+    @Resource
+    private ActivityPlanEvaluationDao activityPlanEvaluationDao;
+
+    @Autowired
+    private ActivityEvaluationService activityEvaluationService;
+
+    @Autowired
+    private ActivityRewardService activityRewardService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private ActivityRegistrationService activityRegistrationService;
+
+    @Autowired
+    private ActivityEvaluationRecordService activityEvaluationRecordService;
 
 	@Override
     public ActivityPlanVo detail(Long id) {
-        return baseMapper.detail(id);
+        ActivityPlanVo detail = baseMapper.detail(id);
+        if (null != detail) {
+            if (ActivityTypeEnum.EVALUATION.equals(detail.getActivityType())) {
+                detail.setPlanEvaluation(activityPlanEvaluationDao.selectById(detail.getId()));
+            }
+        }
+        return detail;
     }
-    
+
     @Override
-    public IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query){
+    public Boolean save(ActivityPlanDto activityPlan) {
+        //验证参数
+        if (validParam(activityPlan)) {
+            return false;
+        }
+        activityPlan.setDraftFlag(1);
+        save(activityPlan);
+        ActivityPlanEvaluation planEvaluation = activityPlan.getPlanEvaluation();
+        planEvaluation.setId(activityPlan.getId());
+        activityPlanEvaluationDao.insert(planEvaluation);
+        return true;
+    }
+
+    private Boolean validParam(ActivityPlanDto activityPlan) {
+        if (null == activityPlan) {
+            return false;
+        }
+        if (RegistrationMethodEnum.CHARGE.equals(activityPlan.getRegistrationMethod())
+                &&(null == activityPlan.getRegistrationPrice() || BigDecimal.ZERO.compareTo(activityPlan.getRegistrationPrice()) > 0)
+        ) {
+            throw new BizException("活动收费时,报名金额不能为空");
+        }
+
+        if (ActivityTypeEnum.EVALUATION.equals(activityPlan.getActivityType())
+                && (null == activityPlan.getPlanEvaluation() || null == activityPlan.getPlanEvaluation().getEvaluationDifficulty())) {
+            throw new BizException("活动类型为评测活动时,评测难度不能为空");
+        }
+        return true;
+    }
+
+    @Override
+    public IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+
+    @Override
+    public MusicActivityVo getActivityInfo(Long activityPlanId, SysUser user) {
+        ActivityPlan activityPlan = this.getById(activityPlanId);
+
+        MusicActivityVo activityVo = new MusicActivityVo();
+        BeanUtils.copyProperties(activityPlan,activityVo);
+
+        // 活动曲目
+        List<ActivityMusicVo> activityMusicVoList = activityEvaluationService.getActivityMusic(activityPlanId,user.getId());
+        activityVo.setActivityMusicVoList(activityMusicVoList);
+
+        // 报名状态
+        activityVo.setJoin(activityRegistrationService.getRegistration(user.getId(),activityPlanId));
+
+        // 活动奖品
+        List<ActivityReward> activityRewardList = activityRewardService.getActivityReward(activityPlanId);
+        activityVo.setActivityRewardList(activityRewardList);
+
+        // 评测难度
+        String evaluationDifficulty = baseMapper.selectActivityPlanEvaluation(activityPlanId);
+
+        activityVo.setEvaluationDifficulty(evaluationDifficulty);
+        return activityVo;
+    }
+
+    @Override
+    public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo) {
+
+        getSysUser(orderReqInfo.getUserId());
+        ActivityPlanPayDto activityPlanPayDto = JSON.parseObject(
+                JSON.toJSONString(orderReqInfo.getBizContent()), ActivityPlanPayDto.class);
+
+        // 检查活动购买
+
+        checkActivityPay(activityPlanPayDto.getActivityId());
+
+
+        if (checkoutJoinActivity(activityPlanPayDto.getActivityId(), orderReqInfo.getUserId())) {
+            throw new BizException("您已经参与了活动");
+        }
+
+
+        OrderCreateRes orderCreateRes = new OrderCreateRes();
+        if (activityPlanPayDto.getActivityId() == null) {
+            throw new BizException("活动id不能为空");
+        }
+        ActivityPlan activityPlan = getById(activityPlanPayDto.getActivityId() );
+
+        orderCreateRes.setRes(true);
+        orderCreateRes.setGoodType(orderCreateRes.getGoodType());
+        orderCreateRes.setBizId(activityPlanPayDto.getActivityId());
+        orderCreateRes.setGoodNum(1);
+        orderCreateRes.setOriginalPrice(activityPlan.getRegistrationPrice());
+        orderCreateRes.setExpectPrice(activityPlan.getRegistrationPrice());
+        return HttpResponseResult.succeed(orderCreateRes);
+    }
+
+    private boolean checkoutJoinActivity(Long activityId, Long userId) {
+        return activityRegistrationService.lambdaQuery()
+                                                   .eq(ActivityRegistration::getActivityId, activityId)
+                                                   .eq(ActivityRegistration::getUserId, userId)
+                                                   .count() >0;
+    }
+
+    @Override
+    public void orderSuccess(UserOrderDetailVo userOrderDetailVo) {
+        ActivityRegistration activityRegistration = new ActivityRegistration();
+        activityRegistration.setUserId(userOrderDetailVo.getUserId());
+        activityRegistration.setOrderNo(userOrderDetailVo.getOrderNo());
+        activityRegistration.setSubOrderNo(userOrderDetailVo.getSubOrderNo());
+        activityRegistration.setActivityId(userOrderDetailVo.getBizId());
+        activityRegistration.setCreateTime(new Date());
+        activityRegistrationService.save(activityRegistration);
+    }
+
+    @Override
+    public Boolean joinEvaluation(Long evaluationId, SysUser user) {
+        ActivityEvaluation activityEvaluation = activityEvaluationService.getById(evaluationId);
+        if (activityEvaluation == null) {
+            throw new BizException("未找到活动信息");
+        }
+
+        checkActivityPay(activityEvaluation.getActivityId());
+        if (!checkoutJoinActivity(activityEvaluation.getActivityId(),user.getId())) {
+            ActivityPlan activityPlan = this.getById(activityEvaluation.getActivityId());
+            if (RegistrationMethodEnum.FREE.equals(activityPlan.getRegistrationMethod())) {
+
+                // 免费活动 参与时 添加报名记录
+                ActivityRegistration activityRegistration = new ActivityRegistration();
+                activityRegistration.setUserId(user.getId());
+                activityRegistration.setOrderNo(null);
+                activityRegistration.setSubOrderNo(null);
+                activityRegistration.setActivityId(activityEvaluation.getActivityId());
+                activityRegistration.setCreateTime(new Date());
+                activityRegistrationService.save(activityRegistration);
+
+
+            } else {
+                throw new BizException("请先报名参与");
+            }
+        }
+
+        List<Long> joinEvaluationIdList = activityEvaluationRecordService.getJoinEvaluationIdList(activityEvaluation.getActivityId(),user.getId());
+
+        // 保存参与活动项目记录
+        if (CollectionUtils.isEmpty(joinEvaluationIdList)) {
+            ActivityEvaluationRecord activityEvaluationRecord = new ActivityEvaluationRecord();
+            activityEvaluationRecord.setActivityId(activityEvaluation.getActivityId());
+            activityEvaluationRecord.setUserId(user.getId());
+            activityEvaluationRecord.setEvaluationId(evaluationId);
+            activityEvaluationRecord.setCreateTime(new Date());
+
+            return activityEvaluationRecordService.save(activityEvaluationRecord);
+        }
+        if (!joinEvaluationIdList.contains(evaluationId)) {
+            throw new BizException("已经参与其他项目");
+        }
+        return true;
+    }
+
+    private void checkActivityPay(Long planId) {
+        if (planId == null) {
+            throw new BizException("活动id不能为空");
+        }
+        ActivityPlan activityPlan = getById(planId);
+
+        if (activityPlan.getActivityState() == 0) {
+            throw new BizException("活动已停止");
+        }
+        if (new Date().compareTo(activityPlan.getActivityStart()) <0) {
+            throw  new BizException("活动未开始");
+        }
+        if (new Date().compareTo(activityPlan.getActivityEnd()) >0) {
+            throw new BizException("活动已结束");
+        }
+    }
+
+    private SysUser getSysUser(Long userId) {
+        return Optional.ofNullable(userId)
+                       .map(sysUserFeignService::queryUserById)
+                       .orElseThrow(() -> new BizException("用户不存在"));
+    }
 }

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

@@ -2,6 +2,7 @@ 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.common.enums.YesOrNoEnum;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,5 +26,16 @@ public class ActivityRegistrationServiceImpl extends ServiceImpl<ActivityRegistr
     public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public YesOrNoEnum getRegistration(Long userId, Long activityPlanId) {
+
+        Integer count = this.lambdaQuery()
+                            .eq(ActivityRegistration::getUserId, userId)
+                            .eq(ActivityRegistration::getActivityId, activityPlanId)
+                            .count();
+        return count>0? YesOrNoEnum.YES:YesOrNoEnum.NO;
+
+    }
+
 }

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

@@ -11,6 +11,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRewardDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 
+import java.util.List;
+
 
 @Service
 public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, ActivityReward> implements ActivityRewardService {
@@ -25,5 +27,14 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
     public IPage<ActivityRewardVo> selectPage(IPage<ActivityRewardVo> page, ActivityRewardSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public List<ActivityReward> getActivityReward(Long activityPlanId) {
+
+        return this.lambdaQuery()
+                .eq(ActivityReward::getActivityId,activityPlanId)
+                .list();
+
+    }
+
 }

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

@@ -14,9 +14,12 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,7 +51,8 @@ import com.yonge.toolset.utils.date.DateUtil;
 
 @Service
 public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysMusicCompareRecord>  implements SysMusicCompareRecordService {
-	
+
+	private final static Logger log = LoggerFactory.getLogger(SysMusicCompareRecordServiceImpl.class);
 	@Autowired
 	private SysMusicCompareRecordDao sysMusicCompareRecordDao;
 	@Autowired
@@ -65,6 +69,9 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	private SysConfigService sysConfigService;
 
 	@Autowired
+	private ActivityEvaluationRecordService activityEvaluationRecordService;
+
+	@Autowired
 	private MusicSheetDao musicSheetDao;
 
 	@Override
@@ -74,7 +81,19 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
 	@Override
 	public long insert(SysMusicCompareRecord bean) {
+		// 保存评测记录
 		long insert = super.insert(bean);
+
+		// 判断是否为活动评测 活动评测 记录活动记录
+		if (bean.getEvaluationId() != null) {
+			try {
+				activityEvaluationRecordService.saveRecord(bean.getEvaluationId(),bean.getUserId(),bean.getScore());
+			} catch (Exception e) {
+				e.printStackTrace();
+				log.error("活动评测记录保存失败,{}",e.fillInStackTrace());
+			}
+		}
+
 		return insert;
 	}
 

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

@@ -84,6 +84,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private PaymentProperties paymentProperties;
 
+    @Autowired
+    private ActivityPlanService activityPlanService;
+
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
@@ -108,6 +111,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderCreate.put(GoodTypeEnum.MUSIC, musicSheetService::buyMusicSheetCheck);
         //琴房时长
         orderCreate.put(GoodTypeEnum.PINAO_ROOM, pianoRoomBuyRecordService::orderCreate);
+        //活动报名
+        orderCreate.put(GoodTypeEnum.ACTI_REGIST, activityPlanService::orderCreate);
 
         /**********订单生成后******************/
         //曲目购买
@@ -126,6 +131,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderSuccess.put(GoodTypeEnum.MUSIC, musicSheetService::buyMusicSheetSuccess);
         //琴房时长
         orderSuccess.put(GoodTypeEnum.PINAO_ROOM, pianoRoomBuyRecordService::orderSuccess);
+        //活动报名
+        orderSuccess.put(GoodTypeEnum.ACTI_REGIST, activityPlanService::orderSuccess);
 
         /**********订单取消后******************/
         //陪练课购买

+ 118 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityMusicVo.java

@@ -0,0 +1,118 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 活动页曲目信息
+ *
+ * @author liujunchi
+ * @date 2022-08-05
+ */
+@ApiModel("活动页曲目信息")
+public class ActivityMusicVo {
+
+    @ApiModelProperty("评测项目id")
+    private Long evaluationId;
+
+    @ApiModelProperty("曲目id")
+    private Long musicSheetId;
+
+    @ApiModelProperty("曲目名")
+    private String musicSheetName;
+
+
+    @ApiModelProperty("曲目声部")
+    private String musicSubject;
+
+
+    @ApiModelProperty("是否参与 0:否 1:是")
+    private YesOrNoEnum join;
+
+
+    @ApiModelProperty("最高分")
+    private double score;
+
+
+    @ApiModelProperty("最高分用户头像")
+    private String userAvatar;
+
+    @ApiModelProperty("最高分用户名")
+    private String username;
+
+    @ApiModelProperty("最高分用户声部")
+    private String userSubject;
+
+    public Long getEvaluationId() {
+        return evaluationId;
+    }
+
+    public void setEvaluationId(Long evaluationId) {
+        this.evaluationId = evaluationId;
+    }
+
+    public Long getMusicSheetId() {
+        return musicSheetId;
+    }
+
+    public void setMusicSheetId(Long musicSheetId) {
+        this.musicSheetId = musicSheetId;
+    }
+
+    public String getMusicSheetName() {
+        return musicSheetName;
+    }
+
+    public void setMusicSheetName(String musicSheetName) {
+        this.musicSheetName = musicSheetName;
+    }
+
+    public String getMusicSubject() {
+        return musicSubject;
+    }
+
+    public void setMusicSubject(String musicSubject) {
+        this.musicSubject = musicSubject;
+    }
+
+    public YesOrNoEnum getJoin() {
+        return join;
+    }
+
+    public void setJoin(YesOrNoEnum join) {
+        this.join = join;
+    }
+
+    public double getScore() {
+        return score;
+    }
+
+    public void setScore(double score) {
+        this.score = score;
+    }
+
+    public String getUserAvatar() {
+        return userAvatar;
+    }
+
+    public void setUserAvatar(String userAvatar) {
+        this.userAvatar = userAvatar;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getUserSubject() {
+        return userSubject;
+    }
+
+    public void setUserSubject(String userSubject) {
+        this.userSubject = userSubject;
+    }
+}

+ 35 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityPlanVo.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author: liweifan
@@ -10,4 +12,37 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "ActivityPlanVo对象", description = "活动计划表查询视图对象")
 public class ActivityPlanVo extends ActivityPlan{
 	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "活动计划-评测活动拓展")
+	private ActivityPlanEvaluation planEvaluation;
+
+	@ApiModelProperty("参与人数")
+	private Integer registrationNum;
+
+	@ApiModelProperty("最后操作人")
+	private String updateByName;
+
+	public ActivityPlanEvaluation getPlanEvaluation() {
+		return planEvaluation;
+	}
+
+	public void setPlanEvaluation(ActivityPlanEvaluation planEvaluation) {
+		this.planEvaluation = planEvaluation;
+	}
+
+	public Integer getRegistrationNum() {
+		return registrationNum;
+	}
+
+	public void setRegistrationNum(Integer registrationNum) {
+		this.registrationNum = registrationNum;
+	}
+
+	public String getUpdateByName() {
+		return updateByName;
+	}
+
+	public void setUpdateByName(String updateByName) {
+		this.updateByName = updateByName;
+	}
 }

+ 63 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicActivityVo.java

@@ -0,0 +1,63 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * Description 活动信息
+ *
+ * @author liujunchi
+ * @date 2022-08-04
+ */
+@ApiModel("活动信息")
+public class MusicActivityVo extends ActivityPlan {
+
+    @ApiModelProperty("活动曲目")
+    private List<ActivityMusicVo> activityMusicVoList;
+
+    @ApiModelProperty("活动奖品")
+    private List<ActivityReward> activityRewardList;
+
+    @ApiModelProperty("评测难度 BEGINNER 入门级 ADVANCED 进阶级 PERFORMER 大师级")
+    private String  evaluationDifficulty;
+
+    @ApiModelProperty("是否已经报名参与 0 :否 1:是")
+    private YesOrNoEnum join;
+
+    public YesOrNoEnum getJoin() {
+        return join;
+    }
+
+    public void setJoin(YesOrNoEnum join) {
+        this.join = join;
+    }
+
+    public List<ActivityMusicVo> getActivityMusicVoList() {
+        return activityMusicVoList;
+    }
+
+    public void setActivityMusicVoList(List<ActivityMusicVo> activityMusicVoList) {
+        this.activityMusicVoList = activityMusicVoList;
+    }
+
+    public List<ActivityReward> getActivityRewardList() {
+        return activityRewardList;
+    }
+
+    public void setActivityRewardList(List<ActivityReward> activityRewardList) {
+        this.activityRewardList = activityRewardList;
+    }
+
+    public String getEvaluationDifficulty() {
+        return evaluationDifficulty;
+    }
+
+    public void setEvaluationDifficulty(String evaluationDifficulty) {
+        this.evaluationDifficulty = evaluationDifficulty;
+    }
+}

+ 48 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml

@@ -30,4 +30,52 @@
         <include refid="baseColumns" />
         FROM activity_evaluation t
     </select>
+
+    <select id="selectActivityMusic" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo">
+
+        select ms.id_ as musciSheetId
+        ,ms.music_sheet_name_ as musicSheetName
+        ,s.name_ as musicSubject
+        ,ae.id_ as evaluationId
+        ,(select if(count(1)>0,1,0) as `join` from activity_evaluation_record aer
+            where aer.evaluation_id_ = ae.id_ and aer.user_id_ = #{userId}
+        ) as `join`
+        from activity_evaluation ae
+        left join music_sheet ms on ms.id_ = ae.music_sheet_id_
+        left join subject s on s.id_ = ms.music_subject_
+        <where>
+            <if test="activityPlanId != null">
+                ae.activity_id_ = #{activityPlanId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectActivityUser" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo">
+        select t.score
+        ,t.username_ as username
+        ,t.avatar_ as userAvatar
+        ,s.name_ as userSubject
+        ,t.evaluationId
+        from
+        (select
+            max(aem.score_) as score,
+            aem.evaluation_id_,
+            aem.user_id_,
+        su.username_,
+        su.avatar_,
+        aem.evaluation_id_ as evaluationId
+
+        from  activity_evaluation_record aem
+        left join sys_user su on su.id_ = aem.user_id_
+        <where>
+            su.del_flag_ = 0 and aem.score_ is not null
+            <if test="activityPlanId != null">
+                and aem.activity_id_ = #{activityPlanId}
+            </if>
+        </where>
+        group by aem.evaluation_id_) t
+        left join student stu on stu.user_id_ = t.user_id_
+        left join subject s on s.id_ = stu.subject_id_
+
+    </select>
 </mapper>

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml

@@ -32,4 +32,10 @@
         <include refid="baseColumns" />
         FROM activity_evaluation_record t
     </select>
+
+    <select id="getJoinEvaluationIdList" resultType="java.lang.Long">
+        select distinct evaluation_id_
+        from activity_evaluation_record
+        where activity_id_ = #{activityId} and user_id_ = #{userId}
+    </select>
 </mapper>

+ 0 - 35
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanEvaluationMapper.xml

@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.yonge.cooleshow.biz.dal.dao.ActivityPlanEvaluationDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation">
-            <result column="id_" property="id" />
-	        <result column="evaluation_difficulty_" property="evaluationDifficulty" />
-	        <result column="create_time_" property="createTime" />
-	        <result column="create_by_" property="createBy" />
-	        <result column="update_time_" property="updateTime" />
-	        <result column="update_by_" property="updateBy" />
-		</resultMap>  
-    
-    <!-- 表字段 -->
-    <sql id="baseColumns">
-         t.id_ as id
-        , t.evaluation_difficulty_ as evaluationDifficulty
-        , t.create_time_ as createTime
-        , t.create_by_ as createBy
-        , t.update_time_ as updateTime
-        , t.update_by_ as updateBy
-        </sql> 
-    
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanEvaluationVo">
-        SELECT
-            <include refid="baseColumns"/>
-        FROM activity_plan_evaluation t
-        where t.id_ = #{id}
-    </select>
-    
-    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanEvaluationVo">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM activity_plan_evaluation t
-	</select>
-</mapper>

+ 30 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml

@@ -9,7 +9,8 @@
 	        <result column="rule_describe_" property="ruleDescribe" />
 	        <result column="subject_url_" property="subjectUrl" />
 	        <result column="background_url_" property="backgroundUrl" />
-	        <result column="activity_start_" property="activityStart" />
+            <result column="activity_url_" property="activityUrl" />
+            <result column="activity_start_" property="activityStart" />
 	        <result column="activity_end_" property="activityEnd" />
 	        <result column="registration_method_" property="registrationMethod" />
 	        <result column="registration_price_" property="registrationPrice" />
@@ -30,6 +31,7 @@
         , t.rule_describe_ as ruleDescribe
         , t.subject_url_ as subjectUrl
         , t.background_url_ as backgroundUrl
+        , t.activity_url_ as activityUrl
         , t.activity_start_ as activityStart
         , t.activity_end_ as activityEnd
         , t.registration_method_ as registrationMethod
@@ -51,7 +53,33 @@
     
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo">
 		SELECT         
-        	<include refid="baseColumns" />
+        	<include refid="baseColumns" />,
+		       u.username_ as updateByName,
+		       (select count(1) from activity_registration r where t.id_ = r.activity_id_) as registrationNum
 		FROM activity_plan t
+        LEFT JOIN  sys_user u on t.update_by_ = u.id_
+        <where>
+            <if test="param.activityName != null and param.activityName != ''">
+                and t.activity_name_ like concat('%',#{param.activityName},'%')
+            </if>
+            <if test="param.draftFlag != null">
+                and t.draft_flag_ = #{param.draftFlag}
+            </if>
+            <if test="param.activityState != null">
+                and t.activity_state_ = #{param.activityState}
+            </if>
+            <if test="param.startTime !=null">
+                <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
+            </if>
+            <if test="param.endTime !=null">
+                <![CDATA[AND t.create_time_ <= #{param.endTime} ]]>
+            </if>
+        </where>
 	</select>
+
+	<select id="selectActivityPlanEvaluation" resultType="java.lang.String">
+        select evaluation_difficulty_
+        from activity_plan_evaluation
+        where id_ = #{activityPlanId}
+    </select>
 </mapper>

+ 60 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentActivityController.java

@@ -0,0 +1,60 @@
+package com.yonge.cooleshow.student.controller;
+
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Api(tags = "学生活动接口")
+@RestController
+@RequestMapping("/activity")
+public class StudentActivityController extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(StudentActivityController.class);
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private ActivityPlanService activityPlanService;
+
+
+    @ApiOperation(value = "活动信息", notes = "活动id")
+    @PostMapping(value = "/info/{id}")
+    public HttpResponseResult<MusicActivityVo> getDetail(@PathVariable Long id) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        MusicActivityVo activityVo = activityPlanService.getActivityInfo(id, user);
+
+        return succeed(activityVo);
+    }
+
+
+    @ApiOperation(value = "评测活动参与项目", notes = "评测项目id")
+    @PostMapping(value = "/evaluation/{evaluationId}")
+    public HttpResponseResult<Boolean> joinEvaluation(@PathVariable Long evaluationId) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        return succeed(activityPlanService.joinEvaluation(evaluationId, user));
+    }
+
+}
+