Browse Source

曲目练习汇总统计

Eric 2 years ago
parent
commit
9b03a5630d

+ 4 - 9
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/music/MusicCompareRecordStatController.java

@@ -43,7 +43,7 @@ public class MusicCompareRecordStatController extends BaseController {
     /**
      * 查询曲目统计汇总信息
      */
-    @ApiOperation(value = "曲目统计汇总信息", notes = "传入id")
+    @ApiOperation(value = "曲目统计汇总信息", notes = "")
     @PostMapping(value = "/record/stat", consumes="application/json", produces="application/json")
     public HttpResponseResult<MusicCompareVo.RecordStat> musicCompareRecordStatInfo(@RequestBody MusicCompareVo.StatQueryRequest request) {
 
@@ -52,7 +52,7 @@ public class MusicCompareRecordStatController extends BaseController {
             return failed("用户信息获取失败");
         }
 
-        if (request.userId(sysUser.getId()).invalidParam()) {
+        if (request.invalidParam()) {
             return failed("无效的请求参数");
         }
 
@@ -65,16 +65,11 @@ public class MusicCompareRecordStatController extends BaseController {
     /**
      * 查询曲目统计汇总信息
      */
-    @ApiOperation(value = "曲目统计信息查询", notes = "传入id")
+    @ApiOperation(value = "曲目统计信息查询", notes = "")
     @PostMapping(value = "/record/page", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<MusicCompareVo.RecordInfo>> musicCompareRecordPageInfo(@RequestBody MusicCompareVo.StatQueryRequest request) {
 
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null  || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-
-        if (request.userId(sysUser.getId()).invalidParam()) {
+        if (request.invalidParam()) {
             return failed("无效的请求参数");
         }
 

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.dao;
 import java.util.List;
 import java.util.Map;
 
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import com.yonge.cooleshow.biz.dal.dto.StudentTrainChartDto;
@@ -67,4 +69,11 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
 	 * @return java.lang.Integer
 	 */
 	Integer getUserWeekMaxMusicScoreId(@Param("userId") Long userId, @Param("monday") String monday, @Param("heardLevel") HeardLevelEnum heardLevel);
+
+	/**
+	 * 曲目练习记录统计
+	 * @param queryInfo MusicCompareWrapper.RecordQueryInfo
+	 * @return List<StatGroupWrapper>
+	 */
+	List<StatGroupWrapper> selectMusicCompareRecordStatInfo(@Param("record") MusicCompareWrapper.RecordQueryInfo queryInfo);
 }

+ 53 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -11,12 +11,18 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.toolset.base.util.ThreadPool;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -70,8 +76,54 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	@Override
 	public long insert(SysMusicCompareRecord bean) {
 		// 保存评测记录
+		long record = super.insert(bean);
 
-		return super.insert(bean);
+		if (record > 0) {
+			ThreadPool.getExecutor().submit(() -> {
+				try {
+
+					// 统计单曲练习时长,频率;评测时长、频率
+					ClientEnum clientType = Optional.of(ClientEnum.valueOf(bean.getClientId().toUpperCase()))
+							.orElse(ClientEnum.STUDENT);
+
+					// 按练习、评测分别进行统计
+					Lists.newArrayList(FeatureType.values()).parallelStream().forEach(dataType -> {
+
+						MusicCompareWrapper.RecordQueryInfo queryInfo = MusicCompareWrapper.RecordQueryInfo.builder()
+								.clientId(bean.getClientId())
+								.musicSheetId(bean.getMusicSheetId())
+								.feature(dataType)
+								.build();
+
+						switch (dataType) {
+							case CLOUD_STUDY_TRAIN: // 练习
+								{
+									// 先统计练习曲目
+									List<StatGroupWrapper> groupWrappers = sysMusicCompareRecordDao.selectMusicCompareRecordStatInfo(queryInfo);
+
+									// 在按用户统计
+
+								}
+								break;
+							case CLOUD_STUDY_EVALUATION: // 评测
+								{
+									// 先统计评测曲目
+
+									// 在按用户统计
+								}
+								break;
+							default:
+								break;
+						}
+					});
+
+				} catch (Exception e) {
+				    log.error("MusicCompareRecordStat userId={}, musicId={}", bean.getUserId(), bean.getMusicSheetId(), e);
+				}
+			});
+		}
+
+		return record;
 	}
 
 	@Override

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/music/MusicCompareWrapper.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.wrapper.music;
 
 import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.FeatureType;
 import com.yonge.cooleshow.biz.dal.enums.music.MusicCompareType;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
@@ -172,4 +173,26 @@ public class MusicCompareWrapper {
         @ApiModelProperty("最近使用时间")
         private Long recentTime;
     }
+
+    /**
+     * 曲目练习记录查询
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class RecordQueryInfo implements Serializable {
+
+        @ApiModelProperty("用户ID ")
+        private Long userId;
+
+        @ApiModelProperty("曲目编号 ")
+        private Long musicSheetId;
+
+        @ApiModelProperty("客户端类型 ")
+        private String clientId;
+
+        @ApiModelProperty("功能类型 ")
+        private FeatureType feature;
+    }
 }

+ 29 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -301,4 +301,33 @@
 		WHERE user_id_=#{userId} AND monday_ = #{monday} AND heard_level_ = #{heardLevel, typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler}
 		ORDER BY score_ DESC LIMIT 1
 	</select>
+
+	<!--曲目练习统计-->
+	<select id="selectMusicCompareRecordStatInfo"
+			resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+		SELECT
+		    t1.music_sheet_id_ AS id, SUM(t1.play_time_) AS number
+			<choose>
+				<when test="record.feature.code == CLOUD_STUDY_TRAIN">, COUNT(DISTINCT t1.behavior_id_) AS total</when>
+				<otherwise>, COUNT(t1.id_) AS total</otherwise>
+			</choose>
+		FROM sys_music_compare_record t1
+		<where>
+			<if test="record.musicSheetId != null">
+				AND t1.music_sheet_id_ = #{record.musicSheetId}
+			</if>
+			<if test="record.userId != null">
+				AND t1.user_id_ = #{record.userId}
+			</if>
+			<if test="record.clientId != null">
+				AND t1.client_id_ = #{record.clientId}
+			</if>
+			<if test="record.feature != null">
+				AND t1.feature_ = #{record.feature}
+			</if>
+		</where>
+		GROUP BY t1.music_sheet_id_ <if test="record.userId != null">, t1.user_id_</if>
+	</select>
+	<!--曲目练习统计-->
+
 </mapper>

+ 2 - 2
service.md

@@ -1,8 +1,8 @@
 - [ ] gateway-server
 - [ ] auth-server
 - [x] admin-server
-- [ ] teacher-server
-- [ ] student-server
+- [x] teacher-server
+- [x] student-server
 - [ ] website-server
 - [ ] task-server
 - [ ] websocket-server