Browse Source

feat:学员云教练使用数据统计

Joburgess 3 years ago
parent
commit
d4d95f6701

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -351,4 +351,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     List<Map<Integer, Integer>> getTeacherExperienceMemberStudentNum(@Param("teacherIds") List<Integer> teacherIds,
                                                                      @Param("organId") Integer organId);
+
+    List<Map<Integer, String>> getStudentSubjectMapList(@Param("studentIds") List<Integer> studentIds);
 }

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicCompareRankingDto.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Author Joburgess
  * @Date 2021/8/11 0011
@@ -17,9 +19,21 @@ public class MusicCompareRankingDto {
     @ApiModelProperty("学员姓名")
     private String studentName;
 
+    @ApiModelProperty("声部编号")
+    private Integer subjectId;
+
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+
+    @ApiModelProperty("演奏曲目")
+    private String musicScoreName;
+
     @ApiModelProperty("排名")
     private int rankNum = -1;
 
+    @ApiModelProperty("得分")
+    private int score;
+
     @ApiModelProperty("训练天数")
     private int trainDays = 0;
 
@@ -64,6 +78,22 @@ public class MusicCompareRankingDto {
         this.rankNum = rankNum;
     }
 
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
     public int getTrainDays() {
         return trainDays;
     }
@@ -72,6 +102,14 @@ public class MusicCompareRankingDto {
         this.trainDays = trainDays;
     }
 
+    public String getMusicScoreName() {
+        return musicScoreName;
+    }
+
+    public void setMusicScoreName(String musicScoreName) {
+        this.musicScoreName = musicScoreName;
+    }
+
     public int getTrainTime() {
         return trainTime;
     }
@@ -95,4 +133,12 @@ public class MusicCompareRankingDto {
     public void setVipUser(int vipUser) {
         this.vipUser = vipUser;
     }
+
+    public int getScore() {
+        return score;
+    }
+
+    public void setScore(int score) {
+        this.score = score;
+    }
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java

@@ -31,7 +31,7 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
      * @param endDate:
      * @return com.ym.mec.biz.dal.dto.StatDto
      */
-    StatDto rankingList(Integer headUserId, String startDate, String endDate);
+    StatDto rankingList(Integer headUserId, int type, String startDate, String endDate);
 
     /**
      * @describe 学员训练数据统计

+ 28 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -76,28 +76,42 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	}
 
 	@Override
-	public StatDto rankingList(Integer headUserId, String startDate, String endDate) {
-		SysUser user = teacherDao.getUser(headUserId);
+	public StatDto rankingList(Integer headUserId,int type, String startDate, String endDate) {
 		StatDto result = new StatDto();
 		MusicCompareRankingDto head = new MusicCompareRankingDto();
 		head.setUserId(headUserId);
 		List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(startDate, endDate);
 		List<MusicCompareRankingDto> detail = new ArrayList<>();
-		userTrainStat.sort(Comparator.comparing(m->m.getTrainDays()+m.getTrainNum()+m.getTrainTime()));
-		for (int i = 0; i < userTrainStat.size(); i++) {
-			userTrainStat.get(i).setRankNum(userTrainStat.size()-i);
-			userTrainStat.get(i).setTrainTime(userTrainStat.get(i).getTrainTime()/60);
-			if(userTrainStat.get(i).getUserId().equals(headUserId)){
-				head = userTrainStat.get(i);
+		switch (type){
+			case 1:
+				userTrainStat.sort(Comparator.comparing(m->m.getScore(), Comparator.reverseOrder()));
+				break;
+			case 2:
+				userTrainStat.sort(Comparator.comparing(m->m.getTrainDays(), Comparator.reverseOrder()));
+				break;
+			default:
+				userTrainStat.sort(Comparator.comparing(m->m.getTrainTime(), Comparator.reverseOrder()));
+				break;
+		}
+
+		detail = userTrainStat.subList(0, 10);
+		List<Integer> studentIds = detail.stream().map(MusicCompareRankingDto::getUserId).collect(Collectors.toList());
+		Map<Integer, String> studentSubjectMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(studentIds)){
+			List<Map<Integer, String>> studentSubjectMapList = studentDao.getStudentSubjectMapList(studentIds);
+			studentSubjectMap = MapUtil.convertIntegerMap(studentSubjectMapList);
+		}
+
+		for (int i = 0; i < detail.size(); i++) {
+			detail.get(i).setRankNum(i+1);
+			detail.get(i).setTrainTime(detail.get(i).getTrainTime()/60);
+			if(detail.get(i).getUserId().equals(headUserId)){
+				head = detail.get(i);
 			}
-			if(userTrainStat.get(i).getRankNum()<=10){
-				detail.add(userTrainStat.get(i));
+			if(studentSubjectMap.containsKey(detail.get(i).getUserId())){
+				detail.get(i).setSubjectName(studentSubjectMap.get(detail.get(i).getUserId()));
 			}
 		}
-		if(Objects.isNull(head.getRankNum())&&Objects.nonNull(user)){
-			head.setAvatar(user.getAvatar());
-			head.setStudentName(user.getUsername());
-		}
 		result.setHead(head);
 		detail.sort(Comparator.comparing(MusicCompareRankingDto::getRankNum).thenComparing(MusicCompareRankingDto::getUserId));
 		result.setDetail(detail);

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1140,6 +1140,16 @@
         GROUP BY stu.teacher_id_
     </select>
 
+    <select id="getStudentSubjectMapList" resultType="java.util.Map">
+        SELECT stu.user_id_ 'key',sub.name_ 'value'
+        FROM student stu
+             LEFT JOIN `subject` sub ON stu.subject_id_list_ = sub.id_
+        WHERE stu.user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+    </select>
+
     <update id="updateGrade"><![CDATA[
         UPDATE student SET current_grade_num_=current_grade_num_+1
         WHERE current_grade_num_>=1

+ 5 - 2
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -140,11 +140,14 @@
 			smcr.user_id_ userId,
 			su.avatar_ avatar,
 		    su.username_ studentName,
+		    sms.name_ musicScoreName,
 			COUNT(smcr.id_) trainNum,
-			COUNT(DISTINCT DAY(smcr.create_time_)) trainDays,
+		    SUM(smcr.score_)/COUNT(smcr.id_) score,
+			COUNT(DISTINCT DATE(smcr.create_time_)) trainDays,
 			SUM(smcr.play_time_) trainTime
 		FROM sys_music_compare_record smcr
-				 LEFT JOIN sys_user su ON smcr.user_id_=su.id_
+			LEFT JOIN sys_user su ON smcr.user_id_=su.id_
+			LEFT JOIN sys_music_score sms ON smcr.sys_music_score_id_ = sms.id_
 		WHERE EXISTS (SELECT user_id_ FROM student WHERE user_id_=smcr.user_id_)
 		AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
 		GROUP BY smcr.user_id_

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/CloudStudyController.java

@@ -32,12 +32,12 @@ public class CloudStudyController extends BaseController {
 
     @ApiOperation("云教练排行榜")
     @GetMapping("rankingList")
-    public HttpResponseResult rankingList(String startDate, String endDate){
+    public HttpResponseResult rankingList(Integer orderType, String startDate, String endDate){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("获取用户信息失败");
         }
-        return succeed(sysMusicCompareRecordService.rankingList(sysUser.getId(), startDate, endDate));
+        return succeed(sysMusicCompareRecordService.rankingList(sysUser.getId(), orderType, startDate, endDate));
     }
 
     @ApiOperation("学员训练数据统计")