Browse Source

Merge remote-tracking branch 'origin/dev_1_2_20220802' into dev_1_2_20220802

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
#	cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml
liweifan 3 years ago
parent
commit
4b09e7108c
25 changed files with 778 additions and 24 deletions
  1. 17 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationDao.java
  2. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityEvaluationRecordDao.java
  3. 17 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanDao.java
  4. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanPayDto.java
  5. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  6. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java
  7. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMusicCompareRecord.java
  8. 21 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java
  9. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationService.java
  10. 47 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java
  11. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRegistrationService.java
  12. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java
  13. 37 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationRecordServiceImpl.java
  14. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
  15. 181 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  16. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRegistrationServiceImpl.java
  17. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  18. 20 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java
  19. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  20. 118 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityMusicVo.java
  21. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicActivityVo.java
  22. 48 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml
  23. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationRecordMapper.xml
  24. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml
  25. 60 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentActivityController.java

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

@@ -4,6 +4,7 @@ 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;
@@ -19,7 +20,6 @@ public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
      * @return: com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationVo
      */
     ActivityEvaluationVo detail(@Param("id") Long id);
-
     /**
      * 分页查询
      *
@@ -40,4 +40,20 @@ public interface ActivityEvaluationDao extends BaseMapper<ActivityEvaluation> {
      */
     Integer addBatch(@Param("activityId") Long activityId, @Param("musicSheetIds") List<Long> musicSheetIds);
 
+	/**
+	 * 获取活动曲目信息
+	 *
+	 * @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);
 }

+ 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;

+ 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

@@ -6,6 +6,9 @@ import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
 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;
 
 /**
  * 评测活动表 服务类
@@ -34,4 +37,13 @@ public interface ActivityEvaluationService extends IService<ActivityEvaluation>
 	 * @return
 	 */
     Boolean addBatch(ActivityEvaluationDto param);
+
+	/**
+	 * 获取活动曲目细腻
+	 *
+	 * @param activityPlanId 活动id
+	 * @param userId
+	 * @return
+	 */
+    List<ActivityMusicVo> getActivityMusic(Long activityPlanId, Long userId);
 }

+ 47 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanService.java

@@ -3,10 +3,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.auth.api.entity.SysUser;
+
 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;
 
 /**
  * 活动计划表 服务类
@@ -21,12 +30,12 @@ public interface ActivityPlanService extends IService<ActivityPlan>  {
  	 * @date 2022-08-04
      */
 	ActivityPlanVo detail(Long id);
-	/**
-	 * 分页查询
-	 * @author liweifan
-	 * @date 2022-08-04
-	 */
-	IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query);
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-08-04
+     */
+    IPage<ActivityPlanVo> selectPage(IPage<ActivityPlanVo> page, ActivityPlanSearch query);
 	/**
 	 * 新增活动
 	 * @param activityPlan
@@ -36,4 +45,36 @@ public interface ActivityPlanService extends IService<ActivityPlan>  {
 	Boolean submit(ActivityPlanDto activityPlan, SysUser user);
 
 	Boolean updateActivityState(Long activityId, Integer activityState, Long id);
+	/**
+	 * 活动信息
+	 *
+	 * @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 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationDto;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+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;
@@ -15,6 +17,10 @@ import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
 
 import java.util.List;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
@@ -40,4 +46,24 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
         return null;
     }
 
+
+    @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;
+    }
+
 }

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

@@ -1,15 +1,31 @@
 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 com.yonge.cooleshow.auth.api.entity.SysUser;
+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.entity.ActivityPlanEvaluation;
+import com.yonge.cooleshow.biz.dal.dto.ActivityPlanPayDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanSearch;
+import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.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.springframework.stereotype.Service;
+import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
@@ -18,10 +34,16 @@ 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.transaction.annotation.Transactional;
+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.Date;
+import java.util.List;
+import java.util.Optional;
 
 
 @Service
@@ -30,7 +52,22 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     @Resource
     private ActivityPlanEvaluationDao activityPlanEvaluationDao;
 
-    @Override
+    @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) {
         ActivityPlanVo detail = baseMapper.detail(id);
         if (null != detail) {
@@ -116,4 +153,147 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
 
 
 
+
+    @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;
+    }
+}

+ 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

@@ -42,4 +42,52 @@
         </foreach>
     </insert>
 
+
+    <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>

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

@@ -77,4 +77,10 @@
         </where>
         order by t.id_ desc
 	</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));
+    }
+
+}
+