Browse Source

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

Joburgess 3 years ago
parent
commit
a168361064

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

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

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

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

+ 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>

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

@@ -0,0 +1,77 @@
+<?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>
+</mapper>