瀏覽代碼

增加声部用户排名计算方式

Eric 2 年之前
父節點
當前提交
ded51b0aa5

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanDao.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.entity.ActivityEvaluationRecord;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
@@ -82,4 +83,12 @@ public interface ActivityPlanDao extends BaseMapper<ActivityPlan> {
 	 * @return List<StatGroupWrapper>
 	 */
 	List<StatGroupWrapper> selectActivityWinnerStatInfo(@Param("activityIds") List<Long> activityIds);
+
+	/**
+	 * 活动总分用户排名
+	 * @param activityId 活动ID
+	 * @param subjectId 声部ID
+	 * @return List<ActivityEvaluationRecord>
+	 */
+    List<ActivityEvaluationRecord> selectActivityHighestScoreRankingInfo(@Param("activityId") Long activityId, @Param("subjectId") String subjectId, @Param("rankingScore") Double rankingScore);
 }

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

@@ -521,12 +521,19 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             // 计算评测活动声部最高分
             if (ActivityRankingMethodEnum.TOTAL_SCORE == activityPlan.getRankingMethod()) {
 
-                Map<Long, List<ActivityMusicVo>> collect = activityMusicVoList.stream()
-                        .collect(Collectors.groupingBy(x -> Long.parseLong(x.getSubjectId().split(",")[0])));
+                Map<String, List<ActivityMusicVo>> collect = activityMusicVoList.stream()
+                        .collect(Collectors.groupingBy(x -> x.getSubjectId().split(",")[0]));
+
+                // 计算声部评测最高分
+                collect.entrySet().parallelStream().forEach(item -> {
+
+                    // 单声部计算用户总分排名用户信息
+                    List<ActivityEvaluationRecord> records = getBaseMapper().selectActivityHighestScoreRankingInfo(activityPlanId, item.getKey(), activityPlan.getRankingScore());
+                });
 
                 List<MusicActivityVo.SubjectInfo> subjectInfos = Lists.newArrayList();
                 ActivityMusicVo musicVo;
-                for (Map.Entry<Long, List<ActivityMusicVo>> entry : collect.entrySet()) {
+                for (Map.Entry<String, List<ActivityMusicVo>> entry : collect.entrySet()) {
 
                     if (CollectionUtils.isEmpty(entry.getValue())) {
                         continue;
@@ -537,7 +544,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
                     subjectInfos.add(MusicActivityVo.SubjectInfo.builder()
                                     .subjectId(musicVo.getSubjectId().split(",")[0])
                                     .subjectName(musicVo.getMusicSubject())
-                                    .join(entry.getValue().stream().anyMatch(x -> x.getJoin() == YesOrNoEnum.YES))
+                                    .join(entry.getValue().stream().anyMatch(x -> x.getJoin() == YesOrNoEnum.YES) ? 1 : 0)
                                     .userId(musicVo.getUserId())
                                     .username(musicVo.getUsername())
                                     .userAvatar(musicVo.getUserAvatar())

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

@@ -53,8 +53,8 @@ public class ActivityMusicVo {
     @ApiModelProperty("作曲人")
     private String composer;
 
-    @ApiModelProperty("声部图片")
-    private String subjectImage;
+    @ApiModelProperty("曲目图片")
+    private String musicImage;
 
     public Long getUserId() {
         return userId;
@@ -152,11 +152,11 @@ public class ActivityMusicVo {
         this.composer = composer;
     }
 
-    public String getSubjectImage() {
-        return subjectImage;
+    public String getMusicImage() {
+        return musicImage;
     }
 
-    public void setSubjectImage(String subjectImage) {
-        this.subjectImage = subjectImage;
+    public void setMusicImage(String musicImage) {
+        this.musicImage = musicImage;
     }
 }

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

@@ -93,7 +93,7 @@ public class MusicActivityVo extends ActivityPlan {
         private String subjectName;
 
         @ApiModelProperty("是否已经报名参与 ")
-        private Boolean join;
+        private Integer join;
 
         @ApiModelProperty("最高分")
         private double score;

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

@@ -67,9 +67,9 @@
         select ms.id_ as musicSheetId
         ,ms.music_sheet_name_ as musicSheetName
         , ms.music_subject_ AS subjectId
+        , ms.title_img_ AS musicImage
         ,s.name_ as musicSubject
         , ms.composer_ AS composer
-        , s.img_ AS subjectImage
         ,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

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

@@ -165,4 +165,24 @@
     </select>
     <!--活动参与人数、获奖人数统计-->
 
+    <!--活动总分用户排名-->
+    <select id="selectActivityHighestScoreRankingInfo"
+            resultType="com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord">
+        SELECT t.user_id_, t.create_time_ FROM (
+           SELECT
+               t0.user_id_,
+               SUM(t0.score_) AS socre_,
+               MIN(t0.create_time_) AS create_time_
+           FROM (
+                    SELECT t1.user_id_, t2.music_sheet_id_, MAX(IFNULL(t1.score_, 0)) AS score_, MIN(t1.create_time_) AS create_time_
+                    FROM activity_evaluation_record t1 JOIN activity_evaluation t2 ON (t1.evaluation_id_ = t2.id_) JOIN `music_sheet` t3 ON (t2.music_sheet_id_ = t3.id_)
+                    WHERE t1.activity_id_ = #{activityId} AND t3.music_subject_ = #{subjectId}
+                    GROUP BY
+                        t1.user_id_,
+                        t2.music_sheet_id_
+                ) t0
+           GROUP BY t0.user_id_
+       ) t WHERE t.socre_ > #{rankingScore} ORDER BY t.socre_ DESC, t.create_time_ ASC LIMIT 1
+    </select>
+    <!--活动总分用户排名-->
 </mapper>