瀏覽代碼

feat:学生端智能陪练排行优化

Joburgess 3 年之前
父節點
當前提交
e6fe2d4161

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareWeekDataDao.java

@@ -1,12 +1,19 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareWeekData;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface SysMusicCompareWeekDataDao extends BaseDAO<Integer, SysMusicCompareWeekData> {
 
     SysMusicCompareWeekData getWithUserAndMonday(@Param("userId") Integer userId,
                                                  @Param("monday") String monday);
+
+    List<MusicCompareRankingDto> getUserTrainStat(@Param("monday") String monday,
+                                                  @Param("orderType") Integer orderType,
+                                                  @Param("heardLevel") String heardLevel);
 	
 }

+ 7 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -13,6 +13,7 @@ import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
+import com.ym.mec.biz.service.SysMusicCompareWeekDataService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -37,6 +38,10 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	@Autowired
 	private SysMusicCompareRecordDao sysMusicCompareRecordDao;
 	@Autowired
+	private SysMusicCompareWeekDataService sysMusicCompareWeekDataService;
+	@Autowired
+	private SysMusicCompareWeekDataDao sysMusicCompareWeekDataDao;
+	@Autowired
 	private SysMusicScoreDao sysMusicScoreDao;
 	@Autowired
 	private TeacherDao teacherDao;
@@ -95,6 +100,7 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		sysMusicCompareRecord.setFeature(FeatureType.CLOUD_STUDY_EVALUATION);
 		sysMusicCompareRecordDao.insert(sysMusicCompareRecord);
 		studentDao.addStudentCloudStudySequenceDays(user.getId());
+		sysMusicCompareWeekDataService.updateUserWeekTrainData(user.getId(), LocalDate.now().with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()));
 	}
 
 	@Override
@@ -132,19 +138,8 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		StatDto result = new StatDto();
 		MusicCompareRankingDto head = new MusicCompareRankingDto();
 		head.setUserId(queryInfo.getUserId());
-		List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(queryInfo.getStartTime(), queryInfo.getEndTime(), queryInfo.getHeardLevel());
+		List<MusicCompareRankingDto> userTrainStat = sysMusicCompareWeekDataDao.getUserTrainStat(queryInfo.getStartTime(), queryInfo.getOrderType(), Objects.isNull(queryInfo.getHeardLevel())?null:queryInfo.getHeardLevel().getCode());
 		List<MusicCompareRankingDto> detail = new ArrayList<>();
-		switch (queryInfo.getOrderType()){
-			case 1:
-				userTrainStat.sort(Comparator.comparing(MusicCompareRankingDto::getScore, Comparator.reverseOrder()).thenComparing(MusicCompareRankingDto::getUserId));
-				break;
-			case 2:
-				userTrainStat.sort(Comparator.comparing(MusicCompareRankingDto::getTrainDays, Comparator.reverseOrder()).thenComparing(MusicCompareRankingDto::getUserId));
-				break;
-			default:
-				userTrainStat.sort(Comparator.comparing(MusicCompareRankingDto::getTrainTime, Comparator.reverseOrder()).thenComparing(MusicCompareRankingDto::getUserId));
-				break;
-		}
 
 		List<Integer> studentIds = userTrainStat.stream().limit(10).map(MusicCompareRankingDto::getUserId).collect(Collectors.toList());
 		Map<Integer, String> studentSubjectMap = new HashMap<>();

+ 56 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicCompareWeekDataMapper.xml

@@ -74,4 +74,60 @@
 	<select id="getWithUserAndMonday" resultMap="SysMusicCompareWeekData">
 		SELECT * FROM sys_music_compare_week_data WHERE user_id_=#{userId} AND monday_=#{monday}
 	</select>
+
+	<select id="getUserTrainStat" resultType="com.ym.mec.biz.dal.dto.MusicCompareRankingDto">
+		SELECT
+		smcwd.user_id_ userId,
+			su.avatar_ avatar,
+			su.username_ studentName,
+			smcwd.train_num_ trainNum,
+			<if test="orderType==1">
+				<if test="heardLevel==null">
+					smcwd.advanced_max_score_ score,
+				</if>
+				<if test="heardLevel=='BEGINNER'">
+					smcwd.beginner_max_score_ score,
+				</if>
+				<if test="heardLevel=='ADVANCED'">
+					smcwd.advanced_max_score_ score,
+				</if>
+				<if test="heardLevel=='PERFORMER'">
+					smcwd.performer_max_score_ score,
+				</if>
+			</if>
+			smcwd.train_days_ trainDays,
+			smcwd.train_time_ trainTime
+		FROM sys_music_compare_week_data smcwd
+		LEFT JOIN sys_user su ON smcwd.user_id_=su.id_
+		WHERE EXISTS (SELECT user_id_ FROM student WHERE user_id_=smcwd.user_id_)
+			AND smcwd.monday_ = #{monday}
+			<if test="heardLevel!=null">
+				AND smcr.heard_level_ = #{heardLevel, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			ORDER BY
+			<if test="orderType==null">
+				smcwd.train_time_
+			</if>
+			<if test="orderType==0">
+				smcwd.train_time_
+			</if>
+			<if test="orderType==1">
+				<if test="heardLevel==null">
+					smcwd.advanced_max_score_
+				</if>
+				<if test="heardLevel=='BEGINNER'">
+					smcwd.beginner_max_score_
+				</if>
+				<if test="heardLevel=='ADVANCED'">
+					smcwd.advanced_max_score_
+				</if>
+				<if test="heardLevel=='PERFORMER'">
+					smcwd.performer_max_score_
+				</if>
+			</if>
+			<if test="orderType==2">
+				smcwd.train_days_
+			</if>
+			DESC
+	</select>
 </mapper>