Browse Source

Merge branch 'music_score'

Joburgess 4 years ago
parent
commit
80a14415fa

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.SysMusicCompareWeekData;
 import com.ym.mec.biz.dal.enums.HeardLevelEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
@@ -84,4 +85,15 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     int getOrganNewCloudStudyNum(@Param("organId") Integer organId);
     int getOrgansTotalNewCloudStudyNum(@Param("organIds") List<Integer> organIds);
     List<Map<Integer, Integer>> getOrgansNewCloudStudyNum(@Param("organIds") List<Integer> organIds);
+
+    /**
+     * @describe 统计用户指定周训练数据
+     * @author Joburgess
+     * @date 2021/8/30 0030
+     * @param userId:
+     * @param monday:
+     * @return com.ym.mec.biz.dal.entity.SysMusicCompareWeekData
+     */
+    SysMusicCompareWeekData getUserWeekCompareData(@Param("userId") Integer userId,
+                                                   @Param("monday") String monday);
 }

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

@@ -0,0 +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);
+	
+}

+ 103 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicCompareWeekData.java

@@ -0,0 +1,103 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(sys_music_compare_week_data):
+ */
+public class SysMusicCompareWeekData {
+
+	/** 用户编号 */
+	private Integer userId;
+	
+	/** 周一日期 */
+	private java.util.Date monday;
+	
+	/** 训练次数 */
+	private Integer trainNum;
+	
+	/** 本周训练天数 */
+	private Integer trainDays;
+	
+	/** 本周训练时长 */
+	private Float trainTime;
+	
+	/** 本周入门级最高分 */
+	private Integer beginnerMaxScore;
+	
+	/** 本周进阶级最高分 */
+	private Integer advancedMaxScore;
+	
+	/** 本周大师级最高分 */
+	private Integer performerMaxScore;
+	
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setMonday(java.util.Date monday){
+		this.monday = monday;
+	}
+	
+	public java.util.Date getMonday(){
+		return this.monday;
+	}
+			
+	public void setTrainNum(Integer trainNum){
+		this.trainNum = trainNum;
+	}
+	
+	public Integer getTrainNum(){
+		return this.trainNum;
+	}
+			
+	public void setTrainDays(Integer trainDays){
+		this.trainDays = trainDays;
+	}
+	
+	public Integer getTrainDays(){
+		return this.trainDays;
+	}
+
+	public Float getTrainTime() {
+		return trainTime;
+	}
+
+	public void setTrainTime(Float trainTime) {
+		this.trainTime = trainTime;
+	}
+
+	public void setBeginnerMaxScore(Integer beginnerMaxScore){
+		this.beginnerMaxScore = beginnerMaxScore;
+	}
+	
+	public Integer getBeginnerMaxScore(){
+		return this.beginnerMaxScore;
+	}
+			
+	public void setAdvancedMaxScore(Integer advancedMaxScore){
+		this.advancedMaxScore = advancedMaxScore;
+	}
+	
+	public Integer getAdvancedMaxScore(){
+		return this.advancedMaxScore;
+	}
+			
+	public void setPerformerMaxScore(Integer performerMaxScore){
+		this.performerMaxScore = performerMaxScore;
+	}
+	
+	public Integer getPerformerMaxScore(){
+		return this.performerMaxScore;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareWeekDataService.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.SysMusicCompareWeekData;
+import com.ym.mec.common.service.BaseService;
+
+import java.time.LocalDate;
+
+public interface SysMusicCompareWeekDataService extends BaseService<Integer, SysMusicCompareWeekData>{
+
+    /**
+     * @describe 更新学员本周训练统计数据
+     * @author Joburgess
+     * @date 2021/8/30 0030
+     * @param userId: 用户编号
+     * @param monday: 本周周一日期
+     * @return void
+     */
+    void updateUserWeekTrainData(Integer userId, LocalDate monday);
+
+}

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

+ 48 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareWeekDataServiceImpl.java

@@ -0,0 +1,48 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.dal.entity.SysMusicCompareWeekData;
+import com.ym.mec.biz.service.SysMusicCompareWeekDataService;
+import com.ym.mec.biz.dal.dao.SysMusicCompareWeekDataDao;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.sql.Date;
+import java.time.LocalDate;
+import java.util.Objects;
+
+@Service
+public class SysMusicCompareWeekDataServiceImpl extends BaseServiceImpl<Integer, SysMusicCompareWeekData> implements SysMusicCompareWeekDataService{
+
+	@Autowired
+	private SysMusicCompareWeekDataDao sysMusicCompareWeekDataDao;
+	@Autowired
+	private SysMusicCompareRecordDao sysMusicCompareRecordDao;
+
+	@Override
+	public BaseDAO<Integer, SysMusicCompareWeekData> getDAO() {
+		return sysMusicCompareWeekDataDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+	public void updateUserWeekTrainData(Integer userId, LocalDate monday) {
+		SysMusicCompareWeekData userWeekData = sysMusicCompareWeekDataDao.getWithUserAndMonday(userId, monday.toString());
+
+		SysMusicCompareWeekData userWeekCompareData = sysMusicCompareRecordDao.getUserWeekCompareData(userId, monday.toString());
+		userWeekCompareData.setUserId(userId);
+		userWeekCompareData.setMonday(Date.from(monday.atStartOfDay(DateUtil.zoneId).toInstant()));
+
+		if(Objects.isNull(userWeekData)){
+			sysMusicCompareWeekDataDao.insert(userWeekCompareData);
+		}else{
+			sysMusicCompareWeekDataDao.update(userWeekCompareData);
+		}
+	}
+}

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -384,4 +384,16 @@
     <select id="getUserLastEvaluationData" resultMap="SysMusicCompareRecord">
 		SELECT * FROM sys_music_compare_record WHERE user_id_=#{userId} AND feature_ = 'CLOUD_STUDY_EVALUATION' ORDER BY create_time_ DESC LIMIT 1
 	</select>
+
+	<select id="getUserWeekCompareData" resultType="com.ym.mec.biz.dal.entity.SysMusicCompareWeekData">
+		SELECT
+			COUNT(smcr.id_) trainNum,
+			COUNT(DISTINCT DATE(smcr.create_time_)) trainDays,
+			SUM(smcr.play_time_) trainTime,
+			MAX(IF(heard_level_='BEGINNER', smcr.score_, 0)) beginnerMaxScore,
+			MAX(IF(heard_level_='ADVANCED', smcr.score_, 0)) advancedMaxScore,
+			MAX(IF(heard_level_='PERFORMER', smcr.score_, 0)) performerMaxScore
+		FROM sys_music_compare_record smcr
+		WHERE user_id_=#{userId} AND monday_ = #{monday}
+	</select>
 </mapper>

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

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.SysMusicCompareWeekDataDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.SysMusicCompareWeekData" id="SysMusicCompareWeekData">
+		<result column="user_id_" property="userId" />
+		<result column="monday_" property="monday" />
+		<result column="train_num_" property="trainNum" />
+		<result column="train_days_" property="trainDays" />
+		<result column="train_time_" property="trainTime" />
+		<result column="beginner_max_score_" property="beginnerMaxScore" />
+		<result column="advanced_max_score_" property="advancedMaxScore" />
+		<result column="performer_max_score_" property="performerMaxScore" />
+	</resultMap>
+	
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="SysMusicCompareWeekData">
+		SELECT * FROM sys_music_compare_week_data
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicCompareWeekData">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO sys_music_compare_week_data (user_id_,monday_,train_num_,train_days_,train_time_,beginner_max_score_,advanced_max_score_,performer_max_score_,
+		                                         create_time_,update_time_)
+		VALUES(#{userId},#{monday},#{trainNum},#{trainDays},#{trainTime},#{beginnerMaxScore},#{advancedMaxScore},#{performerMaxScore},NOW(),NOW())
+	</insert>
+	
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysMusicCompareWeekData">
+		UPDATE sys_music_compare_week_data
+		<set>
+			<if test="trainNum!=null">
+				train_num_ = #{trainNum},
+			</if>
+			<if test="trainDays!=null">
+				train_days_ = #{trainDays},
+			</if>
+			<if test="trainTime!=null">
+				train_time_ = #{trainTime},
+			</if>
+			<if test="beginnerMaxScore!=null">
+				beginner_max_score_ = #{beginnerMaxScore},
+			</if>
+			<if test="advancedMaxScore!=null">
+				advanced_max_score_ = #{advancedMaxScore},
+			</if>
+			<if test="performerMaxScore!=null">
+				performer_max_score_ = #{performerMaxScore},
+			</if>
+			update_time_ = NOW()
+		</set>
+		WHERE user_id_=#{userId} AND monday_ = #{monday}
+	</update>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="SysMusicCompareWeekData" parameterType="map">
+		SELECT * FROM sys_music_compare_week_data <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM sys_music_compare_week_data
+	</select>
+
+	<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>