liujunchi 3 лет назад
Родитель
Сommit
2eecb28566
40 измененных файлов с 1098 добавлено и 160 удалено
  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 javax.sound.sampled.AudioFormat;
 
 
+import com.yonge.cooleshow.common.enums.HardLevelEnum;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 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;
 import com.yonge.toolset.base.enums.BaseEnum;
 
 
 public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
 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);
 	PERFORMER("大师级", 3, 3, 5, 10, 13, 15, 95, 10);
+	@EnumValue
+	private String code;
 
 
 	private String msg;
 	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,
 	HardLevelEnum(String msg, int amplitudeThreshold, int frequencyThreshold, int tempoEffectiveRangeOf1, int tempoEffectiveRangeOf2,
 			int tempoEffectiveRangeOf4, int tempoEffectiveRangeOf8, int integrityRange,
 			int tempoEffectiveRangeOf4, int tempoEffectiveRangeOf8, int integrityRange,
 			int notPlayRange) {
 			int notPlayRange) {
+		this.code = this.name();
 		this.msg = msg;
 		this.msg = msg;
 		this.amplitudeThreshold = amplitudeThreshold;
 		this.amplitudeThreshold = amplitudeThreshold;
 		this.frequencyThreshold = frequencyThreshold;
 		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;
 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.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -50,7 +51,7 @@ public class ActivityPlanController extends BaseController {
 	 */
 	 */
 	@PostMapping("/save")
 	@PostMapping("/save")
 	@ApiOperation(value = "新增", notes = "传入activityPlan")
 	@ApiOperation(value = "新增", notes = "传入activityPlan")
-	public HttpResponseResult save(@Valid @RequestBody ActivityPlan activityPlan) {
+	public HttpResponseResult save(@Valid @RequestBody ActivityPlanDto activityPlan) {
     	return status(activityPlanService.save(activityPlan));
     	return status(activityPlanService.save(activityPlan));
 	}
 	}
     
     
@@ -62,25 +63,6 @@ public class ActivityPlanController extends BaseController {
 	public HttpResponseResult update(@Valid @RequestBody ActivityPlan activityPlan) {
 	public HttpResponseResult update(@Valid @RequestBody ActivityPlan activityPlan) {
         return status(activityPlanService.updateById(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.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 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);
 	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);
 	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
      * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationRecordVo
 	 */
 	 */
 	List<ActivityEvaluationRecordVo> selectPage(@Param("page") IPage page, @Param("param") ActivityEvaluationRecordSearch activityEvaluationRecord);
 	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;
 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);
 	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);
 	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;
 package com.yonge.cooleshow.biz.dal.dao;
 
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 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.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>{
 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;
 package com.yonge.cooleshow.biz.dal.dto;
 
 
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 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.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.Valid;
 
 
 /**
 /**
  * @Author: liweifan
  * @Author: liweifan
@@ -10,4 +14,16 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "ActivityPlanDto对象", description = "活动计划表数据传输对象")
 @ApiModel(value = "ActivityPlanDto对象", description = "活动计划表数据传输对象")
 public class ActivityPlanDto extends ActivityPlan{
 public class ActivityPlanDto extends ActivityPlan{
 	private static final long serialVersionUID = 1L;
 	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)
     @ApiModelProperty(value = "订单名称 ", required = true)
     private String orderName;
     private String orderName;
     @NotNull(message = "订单类型不能为空")
     @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;
     private OrderTypeEnum orderType;
     @ApiModelProperty(value = "订单描述信息 ")
     @ApiModelProperty(value = "订单描述信息 ")
     private String orderDesc;
     private String orderDesc;
@@ -61,7 +61,7 @@ public class OrderReq {
         @ApiModelProperty(value = "订单详情号", hidden = true)
         @ApiModelProperty(value = "订单详情号", hidden = true)
         private String subOrderNo;
         private String subOrderNo;
         @NotNull(message = "商品类型不能为空")
         @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;
         private GoodTypeEnum goodType;
         @ApiModelProperty("商品名称 ")
         @ApiModelProperty("商品名称 ")
         private String goodName;
         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;
 package com.yonge.cooleshow.biz.dal.dto.search;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 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
  * @Author: liweifan
@@ -10,5 +16,62 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "ActivityPlanSearch对象", description = "活动计划表查询对象")
 @ApiModel(value = "ActivityPlanSearch对象", description = "活动计划表查询对象")
 public class ActivityPlanSearch extends QueryInfo{
 public class ActivityPlanSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 	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;
 package com.yonge.cooleshow.biz.dal.dto.search;
 
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.page.QueryInfo;
@@ -8,7 +7,6 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
-import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.LocalTime;
 
 
@@ -68,7 +66,9 @@ public class PianoRoomChangeRecordSearch extends QueryInfo{
 	}
 	}
 
 
 	public void setStartTime(LocalDateTime startTime) {
 	public void setStartTime(LocalDateTime startTime) {
-		this.startTime = startTime;
+		if(null != startTime){
+			this.startTime = LocalDateTime.of(startTime.toLocalDate(), LocalTime.MIN);
+		}
 	}
 	}
 
 
 	public LocalDateTime getEndTime() {
 	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.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 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.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
@@ -11,6 +13,10 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 
 
 /**
 /**
@@ -23,17 +29,21 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("主键 ")
     @ApiModelProperty("主键 ")
     @TableId(value = "id_", type = IdType.AUTO)
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
     private Long id;
-    @ApiModelProperty("活动类型 EVALUATION 评测活动 ")
+    @ApiModelProperty(value = "活动类型 EVALUATION 评测活动 ",required = true)
 	@TableField(value = "activity_type_")
 	@TableField(value = "activity_type_")
-    private String activityType;
+    @NotNull(message = "活动类型不能为空")
+    private ActivityTypeEnum activityType;
     @ApiModelProperty("活动名称 ")
     @ApiModelProperty("活动名称 ")
 	@TableField(value = "activity_name_")
 	@TableField(value = "activity_name_")
+    @NotBlank(message = "活动名称不能为空")
     private String activityName;
     private String activityName;
     @ApiModelProperty("活动描述 ")
     @ApiModelProperty("活动描述 ")
 	@TableField(value = "describe_")
 	@TableField(value = "describe_")
+    @NotBlank(message = "活动描述不能为空")
     private String describe;
     private String describe;
     @ApiModelProperty("规则描述 ")
     @ApiModelProperty("规则描述 ")
 	@TableField(value = "rule_describe_")
 	@TableField(value = "rule_describe_")
+    @NotBlank(message = "活动规则不能为空")
     private String ruleDescribe;
     private String ruleDescribe;
     @ApiModelProperty("主题图片 ")
     @ApiModelProperty("主题图片 ")
 	@TableField(value = "subject_url_")
 	@TableField(value = "subject_url_")
@@ -41,19 +51,25 @@ public class ActivityPlan implements Serializable {
     @ApiModelProperty("平铺背景 ")
     @ApiModelProperty("平铺背景 ")
 	@TableField(value = "background_url_")
 	@TableField(value = "background_url_")
     private String backgroundUrl;
     private String backgroundUrl;
+    @ApiModelProperty("活动链接 ")
+    @TableField(value = "activity_url_")
+    private String activityUrl;
     @ApiModelProperty("活动时间-开始 ")
     @ApiModelProperty("活动时间-开始 ")
 	@TableField(value = "activity_start_")
 	@TableField(value = "activity_start_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @NotNull(message = "活动开始时间不能为空")
     private Date activityStart;
     private Date activityStart;
     @ApiModelProperty("活动时间-结束 ")
     @ApiModelProperty("活动时间-结束 ")
 	@TableField(value = "activity_end_")
 	@TableField(value = "activity_end_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @NotNull(message = "活动结束时间不能为空")
     private Date activityEnd;
     private Date activityEnd;
     @ApiModelProperty("报名方式 FREE 免费 CHARGE 收费 ")
     @ApiModelProperty("报名方式 FREE 免费 CHARGE 收费 ")
 	@TableField(value = "registration_method_")
 	@TableField(value = "registration_method_")
-    private String registrationMethod;
+    @NotBlank(message = "报名缴费方式不能为空")
+    private RegistrationMethodEnum registrationMethod;
     @ApiModelProperty("报名价格 ")
     @ApiModelProperty("报名价格 ")
 	@TableField(value = "registration_price_")
 	@TableField(value = "registration_price_")
     private BigDecimal registrationPrice;
     private BigDecimal registrationPrice;
@@ -88,11 +104,11 @@ public class ActivityPlan implements Serializable {
         this.id = id;
         this.id = id;
     }
     }
     
     
-	public String getActivityType() {
+	public ActivityTypeEnum getActivityType() {
         return activityType;
         return activityType;
     }
     }
 
 
-    public void setActivityType(String activityType) {
+    public void setActivityType(ActivityTypeEnum activityType) {
         this.activityType = activityType;
         this.activityType = activityType;
     }
     }
     
     
@@ -152,11 +168,11 @@ public class ActivityPlan implements Serializable {
         this.activityEnd = activityEnd;
         this.activityEnd = activityEnd;
     }
     }
     
     
-	public String getRegistrationMethod() {
+	public RegistrationMethodEnum getRegistrationMethod() {
         return registrationMethod;
         return registrationMethod;
     }
     }
 
 
-    public void setRegistrationMethod(String registrationMethod) {
+    public void setRegistrationMethod(RegistrationMethodEnum registrationMethod) {
         this.registrationMethod = registrationMethod;
         this.registrationMethod = registrationMethod;
     }
     }
     
     
@@ -215,5 +231,12 @@ public class ActivityPlan implements Serializable {
     public void setUpdateBy(Long updateBy) {
     public void setUpdateBy(Long updateBy) {
         this.updateBy = 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.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.common.enums.HardLevelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
@@ -13,18 +14,18 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
 /**
 /**
- * 活动计划表
+ * 活动计划-评测活动拓展字段
  */
  */
 @TableName("activity_plan_evaluation")
 @TableName("activity_plan_evaluation")
-@ApiModel(value = "ActivityPlanEvaluation对象", description = "活动计划表")
+@ApiModel(value = "ActivityPlanEvaluation对象", description = "活动计划-评测活动拓展字段表")
 public class ActivityPlanEvaluation implements Serializable {
 public class ActivityPlanEvaluation implements Serializable {
 	private static final long serialVersionUID = 1L;
 	private static final long serialVersionUID = 1L;
     @ApiModelProperty("主键(活动id) ")
     @ApiModelProperty("主键(活动id) ")
-    @TableId(value = "id_", type = IdType.AUTO)
+    @TableId(value = "id_")
     private Long id;
     private Long id;
     @ApiModelProperty("评测难度 BEGINNER 入门级 ADVANCED 进阶级 PERFORMER 大师级 ")
     @ApiModelProperty("评测难度 BEGINNER 入门级 ADVANCED 进阶级 PERFORMER 大师级 ")
 	@TableField(value = "evaluation_difficulty_")
 	@TableField(value = "evaluation_difficulty_")
-    private String evaluationDifficulty;
+    private HardLevelEnum evaluationDifficulty;
     @ApiModelProperty("创建时间 ")
     @ApiModelProperty("创建时间 ")
 	@TableField(value = "create_time_")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -50,11 +51,11 @@ public class ActivityPlanEvaluation implements Serializable {
         this.id = id;
         this.id = id;
     }
     }
     
     
-	public String getEvaluationDifficulty() {
+	public HardLevelEnum getEvaluationDifficulty() {
         return evaluationDifficulty;
         return evaluationDifficulty;
     }
     }
 
 
-    public void setEvaluationDifficulty(String evaluationDifficulty) {
+    public void setEvaluationDifficulty(HardLevelEnum evaluationDifficulty) {
         this.evaluationDifficulty = 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;
     private BigDecimal coursePrice;
 
 
     @TableField("status_")
     @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;
     private String status;
 
 
     @TableField("reason_")
     @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:是")
 	@ApiModelProperty("音乐过期 0:否 1:是")
 	private Integer expire;
 	private Integer expire;
 
 
+	@ApiModelProperty("活动项目id")
+	private Long evaluationId;
+
+	public Long getEvaluationId() {
+		return evaluationId;
+	}
+
+	public void setEvaluationId(Long evaluationId) {
+		this.evaluationId = evaluationId;
+	}
+
 	public String getCustomConfiguration() {
 	public String getCustomConfiguration() {
 		return customConfiguration;
 		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.dto.search.ActivityEvaluationRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
 
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
 /**
  * 评测活动参与记录表 服务类
  * 评测活动参与记录表 服务类
  * @author liweifan
  * @author liweifan
@@ -26,4 +29,22 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
  	 * @date 2022-08-04
  	 * @date 2022-08-04
      */
      */
     IPage<ActivityEvaluationRecordVo> selectPage(IPage<ActivityEvaluationRecordVo> page, ActivityEvaluationRecordSearch query);
     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.vo.ActivityEvaluationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 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
  	 * @date 2022-08-04
      */
      */
     IPage<ActivityEvaluationVo> selectPage(IPage<ActivityEvaluationVo> page, ActivityEvaluationSearch query);
     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.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 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.vo.ActivityPlanVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 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);
 	ActivityPlanVo detail(Long id);
 
 
+	/**
+	 * 新增活动
+	 * @param activityPlan
+	 * @return
+	 */
+	Boolean save(ActivityPlanDto activityPlan);
+
     /**
     /**
      * 分页查询
      * 分页查询
      * @author liweifan
      * @author liweifan
  	 * @date 2022-08-04
  	 * @date 2022-08-04
      */
      */
     IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query);
     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.vo.ActivityRegistrationVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRegistrationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRegistrationSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRegistration;
 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
  	 * @date 2022-08-04
      */
      */
     IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query);
     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.dto.search.ActivityRewardSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 
 
+import java.util.List;
+
 /**
 /**
  * 活动奖品表 服务类
  * 活动奖品表 服务类
  * @author liweifan
  * @author liweifan
@@ -26,4 +28,12 @@ public interface ActivityRewardService extends IService<ActivityReward>  {
  	 * @date 2022-08-04
  	 * @date 2022-08-04
      */
      */
     IPage<ActivityRewardVo> selectPage(IPage<ActivityRewardVo> page, ActivityRewardSearch query);
     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.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 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.dao.ActivityEvaluationRecordDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 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
 @Service
 public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEvaluationRecordDao, ActivityEvaluationRecord> implements ActivityEvaluationRecordService {
 public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEvaluationRecordDao, ActivityEvaluationRecord> implements ActivityEvaluationRecordService {
     private final static Logger log = LoggerFactory.getLogger(ActivityEvaluationRecordServiceImpl.class);
     private final static Logger log = LoggerFactory.getLogger(ActivityEvaluationRecordServiceImpl.class);
 
 
+    @Autowired
+    private ActivityEvaluationService activityEvaluationService;
+
 	@Override
 	@Override
     public ActivityEvaluationRecordVo detail(Long id) {
     public ActivityEvaluationRecordVo detail(Long id) {
         return baseMapper.detail(id);
         return baseMapper.detail(id);
@@ -25,5 +38,28 @@ public class ActivityEvaluationRecordServiceImpl extends ServiceImpl<ActivityEva
     public IPage<ActivityEvaluationRecordVo> selectPage(IPage<ActivityEvaluationRecordVo> page, ActivityEvaluationRecordSearch query){
     public IPage<ActivityEvaluationRecordVo> selectPage(IPage<ActivityEvaluationRecordVo> page, ActivityEvaluationRecordSearch query){
         return page.setRecords(baseMapper.selectPage(page, 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.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 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.dao.ActivityEvaluationDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 
 
 @Service
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
 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){
     public IPage<ActivityEvaluationVo> selectPage(IPage<ActivityEvaluationVo> page, ActivityEvaluationSearch query){
         return page.setRecords(baseMapper.selectPage(page, 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;
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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.Logger;
 import org.slf4j.LoggerFactory;
 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
 @Service
 public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, ActivityPlan> implements ActivityPlanService {
 public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, ActivityPlan> implements ActivityPlanService {
     private final static Logger log = LoggerFactory.getLogger(ActivityPlanServiceImpl.class);
     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
 	@Override
     public ActivityPlanVo detail(Long id) {
     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
     @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));
         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.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -25,5 +26,16 @@ public class ActivityRegistrationServiceImpl extends ServiceImpl<ActivityRegistr
     public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query){
     public IPage<ActivityRegistrationVo> selectPage(IPage<ActivityRegistrationVo> page, ActivityRegistrationSearch query){
         return page.setRecords(baseMapper.selectPage(page, 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.dao.ActivityRewardDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 
 
+import java.util.List;
+
 
 
 @Service
 @Service
 public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, ActivityReward> implements ActivityRewardService {
 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){
     public IPage<ActivityRewardVo> selectPage(IPage<ActivityRewardVo> page, ActivityRewardSearch query){
         return page.setRecords(baseMapper.selectPage(page, 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.Set;
 import java.util.stream.Collectors;
 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.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,7 +51,8 @@ import com.yonge.toolset.utils.date.DateUtil;
 
 
 @Service
 @Service
 public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysMusicCompareRecord>  implements SysMusicCompareRecordService {
 public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysMusicCompareRecord>  implements SysMusicCompareRecordService {
-	
+
+	private final static Logger log = LoggerFactory.getLogger(SysMusicCompareRecordServiceImpl.class);
 	@Autowired
 	@Autowired
 	private SysMusicCompareRecordDao sysMusicCompareRecordDao;
 	private SysMusicCompareRecordDao sysMusicCompareRecordDao;
 	@Autowired
 	@Autowired
@@ -65,6 +69,9 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	private SysConfigService sysConfigService;
 	private SysConfigService sysConfigService;
 
 
 	@Autowired
 	@Autowired
+	private ActivityEvaluationRecordService activityEvaluationRecordService;
+
+	@Autowired
 	private MusicSheetDao musicSheetDao;
 	private MusicSheetDao musicSheetDao;
 
 
 	@Override
 	@Override
@@ -74,7 +81,19 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
 
 	@Override
 	@Override
 	public long insert(SysMusicCompareRecord bean) {
 	public long insert(SysMusicCompareRecord bean) {
+		// 保存评测记录
 		long insert = super.insert(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;
 		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
     @Autowired
     private PaymentProperties paymentProperties;
     private PaymentProperties paymentProperties;
 
 
+    @Autowired
+    private ActivityPlanService activityPlanService;
+
     //验证订单是否可以下单,获取订单金额信息
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     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.MUSIC, musicSheetService::buyMusicSheetCheck);
         //琴房时长
         //琴房时长
         orderCreate.put(GoodTypeEnum.PINAO_ROOM, pianoRoomBuyRecordService::orderCreate);
         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.MUSIC, musicSheetService::buyMusicSheetSuccess);
         //琴房时长
         //琴房时长
         orderSuccess.put(GoodTypeEnum.PINAO_ROOM, pianoRoomBuyRecordService::orderSuccess);
         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;
 package com.yonge.cooleshow.biz.dal.vo;
 
 
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 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.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 
 /**
 /**
  * @Author: liweifan
  * @Author: liweifan
@@ -10,4 +12,37 @@ import io.swagger.annotations.ApiModel;
 @ApiModel(value = "ActivityPlanVo对象", description = "活动计划表查询视图对象")
 @ApiModel(value = "ActivityPlanVo对象", description = "活动计划表查询视图对象")
 public class ActivityPlanVo extends ActivityPlan{
 public class ActivityPlanVo extends ActivityPlan{
 	private static final long serialVersionUID = 1L;
 	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" />
         <include refid="baseColumns" />
         FROM activity_evaluation t
         FROM activity_evaluation t
     </select>
     </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>
 </mapper>

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

@@ -32,4 +32,10 @@
         <include refid="baseColumns" />
         <include refid="baseColumns" />
         FROM activity_evaluation_record t
         FROM activity_evaluation_record t
     </select>
     </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>
 </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="rule_describe_" property="ruleDescribe" />
 	        <result column="subject_url_" property="subjectUrl" />
 	        <result column="subject_url_" property="subjectUrl" />
 	        <result column="background_url_" property="backgroundUrl" />
 	        <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="activity_end_" property="activityEnd" />
 	        <result column="registration_method_" property="registrationMethod" />
 	        <result column="registration_method_" property="registrationMethod" />
 	        <result column="registration_price_" property="registrationPrice" />
 	        <result column="registration_price_" property="registrationPrice" />
@@ -30,6 +31,7 @@
         , t.rule_describe_ as ruleDescribe
         , t.rule_describe_ as ruleDescribe
         , t.subject_url_ as subjectUrl
         , t.subject_url_ as subjectUrl
         , t.background_url_ as backgroundUrl
         , t.background_url_ as backgroundUrl
+        , t.activity_url_ as activityUrl
         , t.activity_start_ as activityStart
         , t.activity_start_ as activityStart
         , t.activity_end_ as activityEnd
         , t.activity_end_ as activityEnd
         , t.registration_method_ as registrationMethod
         , t.registration_method_ as registrationMethod
@@ -51,7 +53,33 @@
     
     
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo">
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo">
 		SELECT         
 		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
 		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>
+
+	<select id="selectActivityPlanEvaluation" resultType="java.lang.String">
+        select evaluation_difficulty_
+        from activity_plan_evaluation
+        where id_ = #{activityPlanId}
+    </select>
 </mapper>
 </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));
+    }
+
+}
+