Browse Source

学生、老师练习、评测记录查询

Eric 2 years ago
parent
commit
3de821e83d

+ 29 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentSearch.java

@@ -28,6 +28,13 @@ public class StudentSearch extends QueryInfo{
     private YesOrNoEnum delFlag;
     private YesOrNoEnum delFlag;
     @ApiModelProperty(value = "是否会员 0否 1是")
     @ApiModelProperty(value = "是否会员 0否 1是")
     private YesOrNoEnum isVip;
     private YesOrNoEnum isVip;
+
+    @ApiModelProperty(value = "是否练习 0否 1是")
+    private YesOrNoEnum trainFlag;
+
+    @ApiModelProperty(value = "是否评测 0否 1是")
+    private YesOrNoEnum evaluateFlag;
+
     @ApiModelProperty(value = "注册开始时间")
     @ApiModelProperty(value = "注册开始时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -141,4 +148,26 @@ public class StudentSearch extends QueryInfo{
 	public void setDelFlag(YesOrNoEnum delFlag) {
 	public void setDelFlag(YesOrNoEnum delFlag) {
 		this.delFlag = delFlag;
 		this.delFlag = delFlag;
 	}
 	}
+
+    public YesOrNoEnum getTrainFlag() {
+        if (YesOrNoEnum.YES == trainFlag) {
+            return trainFlag;
+        }
+        return null;
+    }
+
+    public void setTrainFlag(YesOrNoEnum trainFlag) {
+        this.trainFlag = trainFlag;
+    }
+
+    public YesOrNoEnum getEvaluateFlag() {
+        if (YesOrNoEnum.YES == evaluateFlag) {
+            return evaluateFlag;
+        }
+        return null;
+    }
+
+    public void setEvaluateFlag(YesOrNoEnum evaluateFlag) {
+        this.evaluateFlag = evaluateFlag;
+    }
 }
 }

+ 28 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherSearch.java

@@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.page.QueryInfo;
-
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -45,6 +44,12 @@ public class TeacherSearch extends QueryInfo{
     @ApiModelProperty("是否测试用户")
     @ApiModelProperty("是否测试用户")
 	private Boolean isTestUser;
 	private Boolean isTestUser;
 
 
+	@ApiModelProperty(value = "是否练习 0否 1是")
+	private YesOrNoEnum trainFlag;
+
+	@ApiModelProperty(value = "是否评测 0否 1是")
+	private YesOrNoEnum evaluateFlag;
+
 
 
 	@ApiModelProperty(value = "会员结束开始时间")
 	@ApiModelProperty(value = "会员结束开始时间")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -150,4 +155,26 @@ public class TeacherSearch extends QueryInfo{
 	public void setIsTestUser(Boolean isTestUser) {
 	public void setIsTestUser(Boolean isTestUser) {
 		this.isTestUser = isTestUser;
 		this.isTestUser = isTestUser;
 	}
 	}
+
+	public YesOrNoEnum getTrainFlag() {
+		if (YesOrNoEnum.YES == trainFlag) {
+			return trainFlag;
+		}
+		return null;
+	}
+
+	public void setTrainFlag(YesOrNoEnum trainFlag) {
+		this.trainFlag = trainFlag;
+	}
+
+	public YesOrNoEnum getEvaluateFlag() {
+		if (YesOrNoEnum.YES == evaluateFlag) {
+			return evaluateFlag;
+		}
+		return null;
+	}
+
+	public void setEvaluateFlag(YesOrNoEnum evaluateFlag) {
+		this.evaluateFlag = evaluateFlag;
+	}
 }
 }

+ 30 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Student.java

@@ -1,14 +1,16 @@
 package com.yonge.cooleshow.biz.dal.entity;
 package com.yonge.cooleshow.biz.dal.entity;
 
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
 
 
 /**
 /**
  * 学生表
  * 学生表
@@ -64,6 +66,15 @@ public class Student implements Serializable {
     @ApiModelProperty("锁定状态 0-正常, 1=锁定")
     @ApiModelProperty("锁定状态 0-正常, 1=锁定")
     @TableField(value = "lock_flag_")
     @TableField(value = "lock_flag_")
     private UserLockFlag lockFlag;
     private UserLockFlag lockFlag;
+
+    @ApiModelProperty("练习时长 ")
+    @TableField(value = "train_time_")
+    private Long trainTime;
+
+    @ApiModelProperty("评测时长 ")
+    @TableField(value = "evaluate_time_")
+    private Long evaluateTime;
+
 	@TableField(value = "create_time_")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -152,4 +163,20 @@ public class Student implements Serializable {
     public void setLockFlag(UserLockFlag lockFlag) {
     public void setLockFlag(UserLockFlag lockFlag) {
         this.lockFlag = lockFlag;
         this.lockFlag = lockFlag;
     }
     }
+
+    public Long getTrainTime() {
+        return trainTime;
+    }
+
+    public void setTrainTime(Long trainTime) {
+        this.trainTime = trainTime;
+    }
+
+    public Long getEvaluateTime() {
+        return evaluateTime;
+    }
+
+    public void setEvaluateTime(Long evaluateTime) {
+        this.evaluateTime = evaluateTime;
+    }
 }
 }

+ 27 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java

@@ -1,21 +1,18 @@
 package com.yonge.cooleshow.biz.dal.entity;
 package com.yonge.cooleshow.biz.dal.entity;
 
 
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
-
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-
-import org.springframework.format.annotation.DateTimeFormat;
-
 /**
 /**
  * 教师表
  * 教师表
  */
  */
@@ -226,6 +223,14 @@ public class Teacher implements Serializable {
     @ApiModelProperty("是否测试用户")
     @ApiModelProperty("是否测试用户")
 	private Boolean isTestUser;
 	private Boolean isTestUser;
 
 
+    @ApiModelProperty("练习时长 ")
+    @TableField(value = "train_time_")
+    private Long trainTime;
+
+    @ApiModelProperty("评测时长 ")
+    @TableField(value = "evaluate_time_")
+    private Long evaluateTime;
+
 
 
     public Long getDefaultSubject() {
     public Long getDefaultSubject() {
         return defaultSubject;
         return defaultSubject;
@@ -515,4 +520,20 @@ public class Teacher implements Serializable {
 	public void setIsTestUser(Boolean isTestUser) {
 	public void setIsTestUser(Boolean isTestUser) {
 		this.isTestUser = isTestUser;
 		this.isTestUser = isTestUser;
 	}
 	}
+
+    public Long getTrainTime() {
+        return trainTime;
+    }
+
+    public void setTrainTime(Long trainTime) {
+        this.trainTime = trainTime;
+    }
+
+    public Long getEvaluateTime() {
+        return evaluateTime;
+    }
+
+    public void setEvaluateTime(Long evaluateTime) {
+        this.evaluateTime = evaluateTime;
+    }
 }
 }

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

@@ -1,18 +1,15 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.entity.MusicCompareRecordStat;
 import com.yonge.cooleshow.biz.dal.entity.MusicCompareRecordStat;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
-import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareRecord;
 import com.yonge.cooleshow.biz.dal.enums.EQueryOp;
 import com.yonge.cooleshow.biz.dal.enums.EQueryOp;
 import com.yonge.cooleshow.biz.dal.enums.FeatureType;
 import com.yonge.cooleshow.biz.dal.enums.FeatureType;
 import com.yonge.cooleshow.biz.dal.mapper.MusicCompareRecordStatMapper;
 import com.yonge.cooleshow.biz.dal.mapper.MusicCompareRecordStatMapper;
 import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
 import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;

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

@@ -1,60 +1,59 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-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.MusicCompareRecordStatService;
-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.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
-import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.SysMusicCompareRecordDao;
 import com.yonge.cooleshow.biz.dal.dao.SysMusicCompareRecordDao;
-import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.IndexBaseDto;
 import com.yonge.cooleshow.biz.dal.dto.IndexBaseDto;
 import com.yonge.cooleshow.biz.dal.dto.IndexBaseMonthData;
 import com.yonge.cooleshow.biz.dal.dto.IndexBaseMonthData;
 import com.yonge.cooleshow.biz.dal.dto.StudentTrainChartDto;
 import com.yonge.cooleshow.biz.dal.dto.StudentTrainChartDto;
 import com.yonge.cooleshow.biz.dal.dto.StudentTrainOverviewDto;
 import com.yonge.cooleshow.biz.dal.dto.StudentTrainOverviewDto;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareRecord;
 import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareRecord;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.FeatureType;
 import com.yonge.cooleshow.biz.dal.enums.FeatureType;
 import com.yonge.cooleshow.biz.dal.enums.IndexDataType;
 import com.yonge.cooleshow.biz.dal.enums.IndexDataType;
 import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
 import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.service.MusicCompareRecordStatService;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
+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.page.PageInfo;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.base.util.ThreadPool;
 import com.yonge.toolset.mybatis.dal.BaseDAO;
 import com.yonge.toolset.mybatis.dal.BaseDAO;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import com.yonge.toolset.utils.collection.MapUtil;
 import com.yonge.toolset.utils.collection.MapUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.date.DateUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+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;
 
 
 @Service
 @Service
 public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysMusicCompareRecord>  implements SysMusicCompareRecordService {
 public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysMusicCompareRecord>  implements SysMusicCompareRecordService {
@@ -70,6 +69,10 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	private MusicSheetDao musicSheetDao;
 	private MusicSheetDao musicSheetDao;
 	@Autowired
 	@Autowired
 	private MusicCompareRecordStatService musicCompareRecordStatService;
 	private MusicCompareRecordStatService musicCompareRecordStatService;
+	@Autowired
+	private TeacherService teacherService;
+	@Autowired
+	private StudentService studentService;
 
 
 	@Override
 	@Override
 	public BaseDAO<Long, SysMusicCompareRecord> getDAO() {
 	public BaseDAO<Long, SysMusicCompareRecord> getDAO() {
@@ -118,12 +121,16 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 						.recentTime(DateTime.now().getMillis())
 						.recentTime(DateTime.now().getMillis())
 						.build();
 						.build();
 
 
+				// 老师、学生练习、评测
+				MusicCompareWrapper.UserMusicCompareRecord compareRecord = MusicCompareWrapper.UserMusicCompareRecord
+						.builder().build();
+
 				// 按练习、评测分别进行统计
 				// 按练习、评测分别进行统计
 				Lists.newArrayList(FeatureType.values()).parallelStream().forEach(dataType -> {
 				Lists.newArrayList(FeatureType.values()).parallelStream().forEach(dataType -> {
 
 
 					MusicCompareWrapper.RecordQueryInfo queryInfo = MusicCompareWrapper.RecordQueryInfo.builder()
 					MusicCompareWrapper.RecordQueryInfo queryInfo = MusicCompareWrapper.RecordQueryInfo.builder()
 							.clientId(record.getClientId())
 							.clientId(record.getClientId())
-							.musicSheetId(record.getMusicSheetId())
+							//.musicSheetId(record.getMusicSheetId())
 							.feature(dataType)
 							.feature(dataType)
 							.build();
 							.build();
 
 
@@ -132,6 +139,10 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 						queryInfo.setScoreData(true);
 						queryInfo.setScoreData(true);
 					}
 					}
 
 
+					// 老师、学生统计汇总时长
+					List<StatGroupWrapper> wrappers = sysMusicCompareRecordDao.selectMusicCompareRecordStatInfo(queryInfo);
+
+					queryInfo.setMusicSheetId(record.getMusicSheetId());
 					// 曲目统计
 					// 曲目统计
 					List<StatGroupWrapper> musicWrappers = sysMusicCompareRecordDao.selectMusicCompareRecordStatInfo(queryInfo);
 					List<StatGroupWrapper> musicWrappers = sysMusicCompareRecordDao.selectMusicCompareRecordStatInfo(queryInfo);
 
 
@@ -143,6 +154,12 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 					switch (dataType) {
 					switch (dataType) {
 						case CLOUD_STUDY_TRAIN: // 练习
 						case CLOUD_STUDY_TRAIN: // 练习
 							{
 							{
+								// 老师、学生统计汇总时长
+								if (CollectionUtils.isNotEmpty(wrappers)) {
+									StatGroupWrapper wrapper = wrappers.get(0);
+
+									compareRecord.setTrainTime(wrapper.getNumber().longValue());
+								}
 								// 先统计练习曲目
 								// 先统计练习曲目
 								if (CollectionUtils.isNotEmpty(musicWrappers)) {
 								if (CollectionUtils.isNotEmpty(musicWrappers)) {
 
 
@@ -163,6 +180,12 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 							break;
 							break;
 						case CLOUD_STUDY_EVALUATION: // 评测
 						case CLOUD_STUDY_EVALUATION: // 评测
 							{
 							{
+								// 老师、学生统计汇总时长
+								if (CollectionUtils.isNotEmpty(wrappers)) {
+									StatGroupWrapper wrapper = wrappers.get(0);
+
+									compareRecord.setEvaluateTime(wrapper.getNumber().longValue());
+								}
 								// 先统计评测曲目
 								// 先统计评测曲目
 								if (CollectionUtils.isNotEmpty(musicWrappers)) {
 								if (CollectionUtils.isNotEmpty(musicWrappers)) {
 
 
@@ -190,6 +213,27 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
 
 				musicCompareRecordStatService.batchUpdateMusicCompareRecordStat(recordInfos);
 				musicCompareRecordStatService.batchUpdateMusicCompareRecordStat(recordInfos);
 
 
+				// 更新用户曲目统计
+				if (Objects.nonNull(compareRecord.getTrainTime())
+						|| Objects.nonNull(compareRecord.getEvaluateTime())) {
+
+					switch (clientType) {
+						case TEACHER:
+							teacherService.lambdaUpdate()
+									.eq(Teacher::getUserId, record.getUserId())
+									.update(JSON.parseObject(compareRecord.jsonString(), Teacher.class));
+							break;
+						case STUDENT:
+							studentService.lambdaUpdate()
+									.eq(Student::getUserId, record.getUserId())
+									.update(JSON.parseObject(compareRecord.jsonString(), Student.class));
+							break;
+						default:
+							break;
+					}
+
+				}
+
 			} catch (Exception e) {
 			} catch (Exception e) {
 				log.error("MusicCompareRecordStat userId={}, musicId={}", record.getUserId(), record.getMusicSheetId(), e);
 				log.error("MusicCompareRecordStat userId={}, musicId={}", record.getUserId(), record.getMusicSheetId(), e);
 			}
 			}

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

@@ -337,4 +337,25 @@ public class MusicCompareWrapper {
         @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
         @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
         private Date createTime;
         private Date createTime;
     }
     }
+
+    /**
+     * 用户曲目练习时间统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class UserMusicCompareRecord implements Serializable {
+
+        @ApiModelProperty("练习时长 ")
+        private Long trainTime;
+
+        @ApiModelProperty("评测时长 ")
+        private Long evaluateTime;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+    }
 }
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -24,6 +24,8 @@
         , t.membership_end_time_ as "membershipEndTime"
         , t.membership_end_time_ as "membershipEndTime"
         , t.cloud_study_sequence_days_ as "cloudStudySequenceDays"
         , t.cloud_study_sequence_days_ as "cloudStudySequenceDays"
         , t.cloud_study_use_last_day_ as "cloudStudyUseLastDay"
         , t.cloud_study_use_last_day_ as "cloudStudyUseLastDay"
+        , t.train_time_ as trainTime
+        , t.evaluate_time_ as evaluateTime
         , t.create_time_ as "createTime"
         , t.create_time_ as "createTime"
         , t.update_time_ as "updateTime"
         , t.update_time_ as "updateTime"
         </sql>
         </sql>
@@ -135,6 +137,12 @@
             <if test="null != param.vipStartTime">
             <if test="null != param.vipStartTime">
                 and t.membership_end_time_ &gt;= #{param.vipStartTime}
                 and t.membership_end_time_ &gt;= #{param.vipStartTime}
             </if>
             </if>
+            <if test="param.trainFlag != null">
+                AND t.train_time_ > 0
+            </if>
+            <if test="param.evaluateFlag != null">
+                AND t.evaluate_time_ > 0
+            </if>
         </where>
         </where>
         order by t.create_time_ desc
         order by t.create_time_ desc
     </select>
     </select>

+ 8 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -83,6 +83,8 @@
         , t.is_test_user_ as "isTestUser"
         , t.is_test_user_ as "isTestUser"
         , t.create_time_ as "createTime"
         , t.create_time_ as "createTime"
         , t.update_time_ as "updateTime"
         , t.update_time_ as "updateTime"
+        , t.train_time_ as trainTime
+        , t.evaluate_time_ as evaluateTime
         </sql>
         </sql>
 
 
     <!-- 分页查询 -->
     <!-- 分页查询 -->
@@ -158,6 +160,12 @@
             <if test="null != param.vipStartTime">
             <if test="null != param.vipStartTime">
                 and t.membership_end_time_ &gt;= #{param.vipStartTime}
                 and t.membership_end_time_ &gt;= #{param.vipStartTime}
             </if>
             </if>
+            <if test="param.trainFlag != null">
+                AND t.train_time_ > 0
+            </if>
+            <if test="param.evaluateFlag != null">
+                AND t.evaluate_time_ > 0
+            </if>
         </where>
         </where>
         order by t.create_time_ desc
         order by t.create_time_ desc
     </select>
     </select>