Ver código fonte

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

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
zouxuan 3 anos atrás
pai
commit
c2a84f4ed1
21 arquivos alterados com 885 adições e 28 exclusões
  1. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  2. 43 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  4. 98 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicCompareRankingDto.java
  5. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StatDto.java
  6. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentTrainChartDto.java
  7. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentTrainOverviewDto.java
  8. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicStudentOverViewDto.java
  9. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicCompareRecord.java
  10. 63 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java
  11. 40 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java
  12. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  13. 118 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  14. 23 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  15. 19 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  16. 118 2
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  17. 31 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  18. 54 0
      mec-student/src/main/java/com/ym/mec/student/controller/CloudStudyController.java
  19. 46 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CloudStudyController.java
  20. 12 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  21. 0 3
      mec-web/src/main/java/com/ym/mec/web/controller/SysSuggestionController.java

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -460,4 +460,13 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     List<MusicMemberDto> queryMusicMemberList(Map<String, Object> params);
     
 	int updateIsShowRecordOfStudent(@Param("musicGroupId") String musicGroupId, @Param("isShowRecordOfStudent") Boolean isShowRecordOfStudent);
+
+	/**
+	 * @describe 查询乐团相关学员数量
+	 * @author Joburgess
+	 * @date 2021/8/12 0012
+	 * @param params:
+	 * @return java.util.List<java.lang.String>
+	 */
+    List<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(@Param("musicGroupIds") List<String> musicGroupIds);
 }

+ 43 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -1,9 +1,51 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
+import com.ym.mec.biz.dal.dto.StudentTrainChartDto;
+import com.ym.mec.biz.dal.dto.StudentTrainOverviewDto;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareRecord> {
 
+    /**
+     * @describe 获取用户训练汇总数据
+     * @author Joburgess
+     * @date 2021/8/11 0011
+     * @param startTime:
+     * @param endTime:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.MusicCompareRankingDto>
+     */
+    List<MusicCompareRankingDto> getUserTrainStat(@Param("startTime") String startTime,
+                                                  @Param("endTime") String endTime);
+
+    /**
+     * @describe 获取用户训练总览
+     * @author Joburgess
+     * @date 2021/8/11 0011
+     * @param userId:
+     * @return com.ym.mec.biz.dal.dto.StudentTrainOverviewDto
+     */
+    StudentTrainOverviewDto getUserTrainOverView(@Param("userId") Integer userId);
+
+    /**
+     * @describe 获取用户训练图表数据
+     * @author Joburgess
+     * @date 2021/8/12 0012
+     * @param userId:
+     * @param startTime:
+     * @param endTime:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.StudentTrainChartDto>
+     */
+    List<StudentTrainChartDto> getUserTrainChartData(@Param("userId") Integer userId,
+                                                     @Param("startTime") String startTime,
+                                                     @Param("endTime") String endTime);
+
+    List<MusicCompareRankingDto> queryMusicGroupStudentTrainData(Map<String, Object> params);
+    int countMusicGroupStudentTrainData(Map<String, Object> params);
 	
-}
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -504,4 +504,14 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     List<Integer> queryAllIds();
 
     void eduUpdateTeacher(Teacher teacher);
+
+    /**
+     * @describe 查询教师关联的乐团编号
+     * @author Joburgess
+     * @date 2021/8/12 0012
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto>
+     */
+    List<String> queryTeacherMusicIds(Map<String, Object> params);
+    int countTeacherMusics(Map<String, Object> params);
 }

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

@@ -0,0 +1,98 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/11 0011
+ */
+public class MusicCompareRankingDto {
+
+    @ApiModelProperty("用户编号")
+    private Integer userId;
+
+    @ApiModelProperty("头像")
+    private String avatar;
+
+    @ApiModelProperty("学员姓名")
+    private String studentName;
+
+    @ApiModelProperty("排名")
+    private int rankNum = -1;
+
+    @ApiModelProperty("训练天数")
+    private int trainDays = 0;
+
+    @ApiModelProperty("训练时长")
+    private int trainTime = 0;
+
+    @ApiModelProperty("训练次数")
+    private int trainNum = 0;
+
+    @ApiModelProperty("是否是会员")
+    private int vipUser;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public int getRankNum() {
+        return rankNum;
+    }
+
+    public void setRankNum(int rankNum) {
+        this.rankNum = rankNum;
+    }
+
+    public int getTrainDays() {
+        return trainDays;
+    }
+
+    public void setTrainDays(int trainDays) {
+        this.trainDays = trainDays;
+    }
+
+    public int getTrainTime() {
+        return trainTime;
+    }
+
+    public void setTrainTime(int trainTime) {
+        this.trainTime = trainTime;
+    }
+
+    public int getTrainNum() {
+        return trainNum;
+    }
+
+    public void setTrainNum(int trainNum) {
+        this.trainNum = trainNum;
+    }
+
+    public int getVipUser() {
+        return vipUser;
+    }
+
+    public void setVipUser(int vipUser) {
+        this.vipUser = vipUser;
+    }
+}

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StatDto.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.dto;
+
+/**
+ * @Author Joburgess
+ * 统计用
+ * @Date 2021/8/11 0011
+ */
+public class StatDto {
+
+    private Object head;
+
+    private Object detail;
+
+    public Object getHead() {
+        return head;
+    }
+
+    public void setHead(Object head) {
+        this.head = head;
+    }
+
+    public Object getDetail() {
+        return detail;
+    }
+
+    public void setDetail(Object detail) {
+        this.detail = detail;
+    }
+}

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentTrainChartDto.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.time.LocalDate;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/12 0012
+ */
+public class StudentTrainChartDto {
+
+    @ApiModelProperty("训练时长")
+    private int trainTime = 0;
+
+    @ApiModelProperty("训练次数")
+    private int trainNum = 0;
+
+    @ApiModelProperty("训练日期")
+    private LocalDate trainDate;
+
+    public StudentTrainChartDto() {
+    }
+
+    public StudentTrainChartDto(int trainTime, int trainNum, LocalDate trainDate) {
+        this.trainTime = trainTime;
+        this.trainNum = trainNum;
+        this.trainDate = trainDate;
+    }
+
+    public int getTrainTime() {
+        return trainTime;
+    }
+
+    public void setTrainTime(int trainTime) {
+        this.trainTime = trainTime;
+    }
+
+    public int getTrainNum() {
+        return trainNum;
+    }
+
+    public void setTrainNum(int trainNum) {
+        this.trainNum = trainNum;
+    }
+
+    public LocalDate getTrainDate() {
+        return trainDate;
+    }
+
+    public void setTrainDate(LocalDate trainDate) {
+        this.trainDate = trainDate;
+    }
+}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentTrainOverviewDto.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/11 0011
+ */
+public class StudentTrainOverviewDto {
+
+    @ApiModelProperty("训练天数")
+    private int trainDays = 0;
+
+    @ApiModelProperty("训练时长")
+    private int trainTime = 0;
+
+    @ApiModelProperty("训练次数")
+    private int trainNum = 0;
+
+    public int getTrainDays() {
+        return trainDays;
+    }
+
+    public void setTrainDays(int trainDays) {
+        this.trainDays = trainDays;
+    }
+
+    public int getTrainTime() {
+        return trainTime;
+    }
+
+    public void setTrainTime(int trainTime) {
+        this.trainTime = trainTime;
+    }
+
+    public int getTrainNum() {
+        return trainNum;
+    }
+
+    public void setTrainNum(int trainNum) {
+        this.trainNum = trainNum;
+    }
+}

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicStudentOverViewDto.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/12 0012
+ */
+public class TeacherMusicStudentOverViewDto {
+
+    @ApiModelProperty("乐团编号")
+    private String musicGroupId;
+
+    @ApiModelProperty("乐团名称")
+    private String musicGroupName;
+
+    @ApiModelProperty("在读学员数")
+    private int normalStudentNum;
+
+    @ApiModelProperty("会员数")
+    private int vipStudentNum;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public int getNormalStudentNum() {
+        return normalStudentNum;
+    }
+
+    public void setNormalStudentNum(int normalStudentNum) {
+        this.normalStudentNum = normalStudentNum;
+    }
+
+    public int getVipStudentNum() {
+        return vipStudentNum;
+    }
+
+    public void setVipStudentNum(int vipStudentNum) {
+        this.vipStudentNum = vipStudentNum;
+    }
+}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicCompareRecord.java

@@ -22,6 +22,8 @@ public class SysMusicCompareRecord {
 	
 	/** 教程编号 */
 	private Integer sysMusicScoreId;
+
+	private String sysMusicScoreName;
 	
 	/** 评分数据 */
 	private String scoreData;
@@ -86,7 +88,15 @@ public class SysMusicCompareRecord {
 	public Integer getSysMusicScoreId(){
 		return this.sysMusicScoreId;
 	}
-			
+
+	public String getSysMusicScoreName() {
+		return sysMusicScoreName;
+	}
+
+	public void setSysMusicScoreName(String sysMusicScoreName) {
+		this.sysMusicScoreName = sysMusicScoreName;
+	}
+
 	public void setScoreData(String scoreData){
 		this.scoreData = scoreData;
 	}

+ 63 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java

@@ -0,0 +1,63 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/11 0011
+ */
+public class SysMusicCompareRecordQueryInfo extends QueryInfo {
+
+    private Integer userId;
+
+    private String startTime;
+
+    private String endTime;
+
+    private String musicGroupId;
+
+    @ApiModelProperty("排序字段:TRAINDAYS(训练天数);TRAINTIME(训练时长);TRAINNUM(训练次数)")
+    private String sortField = "TRAINDAYS";
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getSortField() {
+        return sortField;
+    }
+
+    public void setSortField(String sortField) {
+        this.sortField = sortField;
+    }
+}

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

@@ -1,10 +1,13 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
 import com.ym.mec.biz.dal.dto.SoundCompareHelper;
+import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.math.BigDecimal;
 import java.util.Map;
 
 public interface SysMusicCompareRecordService extends BaseService<Long, SysMusicCompareRecord> {
@@ -19,4 +22,40 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
      */
     void saveMusicCompareData(String phone, SoundCompareHelper soundCompareInfo);
 
+    /**
+     * @describe 云教练排行榜
+     * @author Joburgess
+     * @date 2021/8/11 0011
+     * @param startDate:
+     * @param endDate:
+     * @return com.ym.mec.biz.dal.dto.StatDto
+     */
+    StatDto rankingList(Integer headUserId, String startDate, String endDate);
+
+    /**
+     * @describe 学员训练数据统计
+     * @author Joburgess
+     * @date 2021/8/12 0012
+     * @param queryInfo:
+     * @return java.util.Map<java.lang.String,java.lang.Object>
+     */
+    Map<String, Object> studentTrainData(SysMusicCompareRecordQueryInfo queryInfo);
+
+    /**
+     * @describe 查询乐团学员训练数据
+     * @author Joburgess
+     * @date 2021/8/12 0012
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.MusicCompareRankingDto>
+     */
+    PageInfo<MusicCompareRankingDto> queryMusicGroupStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo);
+
+    /**
+     * @describe 学员训练数据
+     * @author Joburgess
+     * @date 2021/8/12 0012
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.entity.SysMusicCompareRecord>
+     */
+    PageInfo<SysMusicCompareRecord> queryStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java

@@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 public interface TeacherService extends BaseService<Integer, Teacher> {
 
@@ -214,4 +215,13 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @return
      */
     List<Integer> queryAllIds();
+
+    /**
+     * @describe 查询教师关联的乐团预览信息
+     * @author Joburgess
+     * @date 2021/8/12 0012
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto>
+     */
+    PageInfo<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo);
 }

+ 118 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -4,21 +4,25 @@ import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.SoundCompareHelper;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
-import com.ym.mec.biz.dal.enums.FeatureType;
+import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysMusicCompareRecord>  implements SysMusicCompareRecordService {
@@ -56,7 +60,116 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		if(Objects.nonNull(soundCompareInfo.getFile())){
 			sysMusicCompareRecord.setPlayTime(soundCompareInfo.getFile().length()/(SoundCompareHandler.soundCompareConfig.audioFormat.getFrameSize()*SoundCompareHandler.soundCompareConfig.audioFormat.getFrameRate()));
 		}
-		sysMusicCompareRecord.setFeature(FeatureType.CLOUD_STUDY_EVALUATION);
+		sysMusicCompareRecord.setMonday(LocalDate.now().with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).toString());
 		sysMusicCompareRecordDao.insert(sysMusicCompareRecord);
 	}
+
+	@Override
+	public StatDto rankingList(Integer headUserId, String startDate, String endDate) {
+		SysUser user = teacherDao.getUser(headUserId);
+		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);
+			}
+			if(userTrainStat.get(i).getRankNum()<=10){
+				detail.add(userTrainStat.get(i));
+			}
+		}
+		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);
+		return result;
+	}
+
+	@Override
+	public Map<String, Object> studentTrainData(SysMusicCompareRecordQueryInfo queryInfo) {
+		StudentTrainOverviewDto userTrainOverView = new StudentTrainOverviewDto();
+
+		List<StudentTrainChartDto> userTrainChartData = new ArrayList<>();
+		if(queryInfo.getPage()==1){
+			userTrainOverView = sysMusicCompareRecordDao.getUserTrainOverView(queryInfo.getUserId());
+			userTrainChartData = sysMusicCompareRecordDao.getUserTrainChartData(queryInfo.getUserId(), queryInfo.getStartTime(), queryInfo.getEndTime());
+		}
+
+		if(CollectionUtils.isEmpty(userTrainChartData)||userTrainChartData.size()!=7){
+			Set<LocalDate> trainDates = userTrainChartData.stream().map(StudentTrainChartDto::getTrainDate).collect(Collectors.toSet());
+			LocalDate startLocalDate = LocalDate.parse(queryInfo.getStartTime(), DateUtil.dateFormatter);
+			for (int i = 1; i <= 7; i++) {
+				if(!trainDates.contains(startLocalDate)){
+					userTrainChartData.add(new StudentTrainChartDto(0, 0, startLocalDate));
+				}
+				startLocalDate=startLocalDate.plusDays(1);
+			}
+		}
+
+		PageInfo<SysMusicCompareRecord> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<SysMusicCompareRecord> dataList = null;
+		int count = this.findCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = this.getDAO().queryPage(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		Map<String, Object> result = new HashMap<>();
+		result.put("userTrainOverView",userTrainOverView);
+		result.put("userTrainChartData",userTrainChartData);
+		result.put("detail",pageInfo);
+		return result;
+	}
+
+	@Override
+	public PageInfo<MusicCompareRankingDto> queryMusicGroupStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo) {
+		PageInfo<MusicCompareRankingDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<MusicCompareRankingDto> dataList = new ArrayList<>();
+		int count = sysMusicCompareRecordDao.countMusicGroupStudentTrainData(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList =sysMusicCompareRecordDao.queryMusicGroupStudentTrainData(params);
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public PageInfo<SysMusicCompareRecord> queryStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo) {
+		PageInfo<SysMusicCompareRecord> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<SysMusicCompareRecord> dataList = null;
+		int count = this.findCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = this.getDAO().queryPage(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

+ 23 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -16,7 +16,10 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.page.*;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -41,15 +44,6 @@ import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.ImUserFriendDto;
-import com.ym.mec.biz.dal.dto.MusicGroupStudentApplyDto;
-import com.ym.mec.biz.dal.dto.MusicGroupTeacherAttendanceDto;
-import com.ym.mec.biz.dal.dto.MusicGroupTeachersDto;
-import com.ym.mec.biz.dal.dto.TeacherBasicDto;
-import com.ym.mec.biz.dal.dto.TeacherCloseDto;
-import com.ym.mec.biz.dal.dto.TeacherDefaultSalaryDto;
-import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.ImUserFriend;
 import com.ym.mec.biz.dal.entity.MusicGroup;
@@ -60,12 +54,6 @@ import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.page.MusicGroupTeacherAttendanceQueryInfo;
-import com.ym.mec.biz.dal.page.MusicGroupTeachersQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherNameQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherQueryInfo;
-import com.ym.mec.biz.dal.page.queryMusicGroupStudentQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.constant.CommonConstants;
@@ -773,4 +761,24 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return teacherDao.queryAllIds();
 	}
 
+	@Override
+	public PageInfo<TeacherMusicStudentOverViewDto> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo) {
+		PageInfo<TeacherMusicStudentOverViewDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherMusicStudentOverViewDto> dataList = null;
+		int count = teacherDao.countTeacherMusics(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			List<String> musicGroupIds = teacherDao.queryTeacherMusicIds(params);
+			dataList = musicGroupDao.queryTeacherMusicStudentOverView(musicGroupIds);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

+ 19 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -946,4 +946,23 @@
     <update id="updateIsShowRecordOfStudent" parameterType="map">
     	update music_group set is_show_record_of_student_ = #{isShowRecordOfStudent},update_time_ = now() where id_ = #{musicGroupId}
     </update>
+
+    <select id="queryTeacherMusicStudentOverView"
+            resultType="com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto">
+        SELECT
+            sr.music_group_id_ musicGroupId,
+            mg.name_ musicGroupName,
+            COUNT(sr.user_id_) normalStudentNum,
+            SUM(CASE WHEN stu.member_rank_setting_id_ IS NULL THEN 0 ELSE 1 END) vipStudentNum
+        FROM student_registration sr
+                 LEFT JOIN student stu ON sr.user_id_=stu.user_id_
+                 LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
+        WHERE sr.music_group_id_ IN
+         <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+             #{musicGroupId}
+         </foreach>
+         AND sr.music_group_status_='NORMAL'
+        GROUP BY sr.music_group_id_
+        ORDER BY mg.create_time_ DESC, mg.id_
+    </select>
 </mapper>

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

@@ -10,6 +10,7 @@
 		<result column="id_" property="id" />
 		<result column="user_id_" property="userId" />
 		<result column="sys_music_score_id_" property="sysMusicScoreId" />
+		<result column="sys_music_score_name_" property="sysMusicScoreName" />
 		<result column="score_data_" property="scoreData" />
 		<result column="score_" property="score" />
 		<result column="intonation_" property="intonation" />
@@ -96,13 +97,128 @@
 		DELETE FROM sys_music_compare_record WHERE id_ = #{id}
 	</delete>
 
+	<sql id="queryCondition">
+		<where>
+			<if test="userId!=null">
+				AND smcr.user_id_=#{userId}
+			</if>
+			<if test="startTime!=null and endTime!=null">
+				AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
+			</if>
+		</where>
+	</sql>
+
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="SysMusicCompareRecord" parameterType="map">
-		SELECT * FROM sys_music_compare_record ORDER BY id_ <include refid="global.limit"/>
+		SELECT
+			smcr.id_, smcr.user_id_, smcr.sys_music_score_id_, smcr.score_, smcr.intonation_, smcr.cadence_,
+		       smcr.integrity_, smcr.record_file_path_, smcr.client_id_, smcr.device_type_, smcr.play_time_,
+		       smcr.monday_, smcr.create_time_,
+			sms.name_ sys_music_score_name_
+		FROM sys_music_compare_record smcr
+		LEFT JOIN sys_music_score sms on smcr.sys_music_score_id_ = sms.id_
+		<include refid="queryCondition"></include>
+		ORDER BY id_ DESC
+		<include refid="global.limit"/>
 	</select>
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM sys_music_compare_record
+		SELECT COUNT(*) FROM sys_music_compare_record smcr
+		<include refid="queryCondition"></include>
+	</select>
+
+    <select id="getUserTrainStat" resultType="com.ym.mec.biz.dal.dto.MusicCompareRankingDto">
+		SELECT
+			smcr.user_id_ userId,
+			su.avatar_ avatar,
+		    su.username_ studentName,
+			COUNT(smcr.id_) trainNum,
+			COUNT(DISTINCT DAY(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_
+		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_
+	</select>
+
+	<select id="getUserTrainOverView" resultType="com.ym.mec.biz.dal.dto.StudentTrainOverviewDto">
+		SELECT
+			COUNT(smcr.id_) trainNum,
+			COUNT(DISTINCT DAY(smcr.create_time_)) trainDays,
+			SUM(smcr.play_time_) trainTime
+		FROM sys_music_compare_record smcr
+		WHERE smcr.user_id_=#{userId}
+		      AND EXISTS (SELECT user_id_ FROM student WHERE user_id_=smcr.user_id_)
+	</select>
+
+	<select id="getUserTrainChartData" resultType="com.ym.mec.biz.dal.dto.StudentTrainChartDto">
+		SELECT
+			DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') trainDate,
+			COUNT(smcr.id_) trainNum,
+			SUM(smcr.play_time_) trainTime
+		FROM sys_music_compare_record smcr
+		WHERE smcr.user_id_=#{userId}
+		  AND 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 DATE_FORMAT(smcr.create_time_, '%Y-%m-%d')
+		ORDER BY trainDate;
+	</select>
+
+	<sql id="queryMusicGroupStudentTrainDataConditon">
+		<where>
+			sr.music_group_status_='NORMAL' AND stu.user_id_ IS NOT NULL
+			<if test="startTime!=null and endTime!=null">
+				AND DATE_FORMAT( smcr.create_time_, '%Y-%m-%d' ) BETWEEN #{startTime} AND #{endTime}
+			</if>
+			<if test="musicGroupId!=null">
+				AND sr.music_group_id_ = #{musicGroupId}
+			</if>
+			<if test="search!=null">
+				AND (su.username_ LIKE CONCAT('%', #{search}, '%'))
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryMusicGroupStudentTrainData" resultType="com.ym.mec.biz.dal.dto.MusicCompareRankingDto">
+		SELECT
+			smcr.user_id_ userId,
+			su.avatar_ avatar,
+			su.username_ studentName,
+			COUNT( smcr.id_ ) trainNum,
+			COUNT( DISTINCT DAY ( smcr.create_time_ )) trainDays,
+			SUM( smcr.play_time_ ) trainTime,
+			CASE WHEN stu.member_rank_setting_id_ IS NULL THEN 0 ELSE 1 END vipUser
+		FROM
+			sys_music_compare_record smcr
+				LEFT JOIN sys_user su ON smcr.user_id_ = su.id_
+				LEFT JOIN student stu ON stu.user_id_ = smcr.user_id_
+				LEFT JOIN student_registration sr ON sr.user_id_=smcr.user_id_
+		<include refid="queryMusicGroupStudentTrainDataConditon"></include>
+		GROUP BY smcr.user_id_
+		<if test="sortField!=null and sortField!=''">
+			<if test="sortField == 'TRAINDAYS'">
+				ORDER BY trainDays
+			</if>
+			<if test="sortField == 'TRAINTIME'">
+				ORDER BY trainTime
+			</if>
+			<if test="sortField == 'TRAINNUM'">
+				ORDER BY trainNum
+			</if>
+		</if>
+		<include refid="global.limit"></include>
+	</select>
+
+	<select id="countMusicGroupStudentTrainData" resultType="int">
+		SELECT
+			COUNT(DISTINCT smcr.user_id_)
+		FROM
+			sys_music_compare_record smcr
+		LEFT JOIN sys_user su ON smcr.user_id_ = su.id_
+		LEFT JOIN student stu ON stu.user_id_ = smcr.user_id_
+		LEFT JOIN student_registration sr ON sr.user_id_=smcr.user_id_
+		<include refid="queryMusicGroupStudentTrainDataConditon"></include>
 	</select>
 </mapper>

+ 31 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1363,4 +1363,35 @@
     <select id="queryAllIds" resultType="java.lang.Integer">
         SELECT id_ FROM sys_user
     </select>
+
+    <sql id="queryTeacherMusicIdsCondition">
+        <where>
+            cs.del_flag_=0 AND csts.group_type_='MUSIC' AND mg.del_flag_=0 AND mg.status_='PROGRESS'
+            <if test="teacherId!=null">
+                AND csts.user_id_=#{teacherId}
+            </if>
+            <if test="search!=null and search!=''">
+                AND mg.name_ LIKE CONCAT('%', #{search}, '%')
+            </if>
+        </where>
+    </sql>
+
+    <select id="queryTeacherMusicIds" resultType="string">
+        SELECT csts.music_group_id_
+        FROM course_schedule_teacher_salary csts
+             LEFT JOIN course_schedule cs ON csts.course_schedule_id_=cs.id_
+             LEFT JOIN music_group mg ON csts.music_group_id_=mg.id_
+        <include refid="queryTeacherMusicIdsCondition"></include>
+        GROUP BY csts.music_group_id_
+        ORDER BY mg.create_time_ DESC, mg.id_
+        <include refid="global.limit"></include>
+    </select>
+
+    <select id="countTeacherMusics" resultType="int">
+        SELECT COUNT(DISTINCT csts.music_group_id_)
+        FROM course_schedule_teacher_salary csts
+        LEFT JOIN course_schedule cs ON csts.course_schedule_id_=cs.id_
+        LEFT JOIN music_group mg ON csts.music_group_id_=mg.id_
+        <include refid="queryTeacherMusicIdsCondition"></include>
+    </select>
 </mapper>

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

@@ -0,0 +1,54 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
+import com.ym.mec.biz.service.SysMusicCompareRecordService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/11 0011
+ */
+@Api("云教练")
+@RestController
+@RequestMapping("cloudStudy")
+public class CloudStudyController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+    @ApiOperation("云教练排行榜")
+    @GetMapping("rankingList")
+    public HttpResponseResult rankingList(String startDate, String endDate){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        return succeed(sysMusicCompareRecordService.rankingList(sysUser.getId(), startDate, endDate));
+    }
+
+    @ApiOperation("学员训练数据统计")
+    @GetMapping("studentTrainData")
+    public HttpResponseResult studentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        queryInfo.setUserId(sysUser.getId());
+        return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
+    }
+
+}

+ 46 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CloudStudyController.java

@@ -0,0 +1,46 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
+import com.ym.mec.biz.service.SysMusicCompareRecordService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/11 0011
+ */
+@Api("云教练")
+@RestController
+@RequestMapping("cloudStudy")
+public class CloudStudyController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+    @ApiOperation("查询乐团学员训练数据")
+    @GetMapping("queryMusicGroupStudentTrainData")
+    public HttpResponseResult<PageInfo<MusicCompareRankingDto>> queryMusicGroupStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        return succeed(sysMusicCompareRecordService.queryMusicGroupStudentTrainData(queryInfo));
+    }
+
+    @ApiOperation("学员训练数据")
+    @GetMapping("queryStudentTrainData")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecord>> queryStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        return succeed(sysMusicCompareRecordService.queryStudentTrainData(queryInfo));
+    }
+
+}

+ 12 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.PageInfoReg;
 import com.ym.mec.biz.dal.dto.RegisterDto;
+import com.ym.mec.biz.dal.dto.TeacherMusicStudentOverViewDto;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -219,4 +220,15 @@ public class TeacherController extends BaseController {
         }
         return succeed(studentRegistrationService.getRegisterOrPreList(queryInfo));
     }
+
+    @ApiOperation(value = "查询教师关联的乐团预览信息")
+    @GetMapping("/queryTeacherMusicStudentOverView")
+    public HttpResponseResult<PageInfo<TeacherMusicStudentOverViewDto>> queryTeacherMusicStudentOverView(TeacherServeQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(teacherService.queryTeacherMusicStudentOverView(queryInfo));
+    }
 }

+ 0 - 3
mec-web/src/main/java/com/ym/mec/web/controller/SysSuggestionController.java

@@ -3,7 +3,6 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysSuggestion;
-import com.ym.mec.biz.dal.enums.SuggestionType;
 import com.ym.mec.biz.dal.page.SysSuggestionQueryInfo;
 import com.ym.mec.biz.service.SysSuggestionService;
 import com.ym.mec.common.controller.BaseController;
@@ -15,8 +14,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Objects;
-
 @Api(tags = "意见反馈")
 @RestController
 public class SysSuggestionController extends BaseController {