|
|
@@ -1,13 +1,16 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
import com.ym.mec.biz.dal.dao.StudentDao;
|
|
|
import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
|
|
|
import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
import com.ym.mec.biz.dal.dto.*;
|
|
|
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
|
|
|
import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
|
|
|
import com.ym.mec.biz.dal.enums.FeatureType;
|
|
|
+import com.ym.mec.biz.dal.enums.IndexDataType;
|
|
|
import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
|
|
|
import com.ym.mec.biz.service.SysMusicCompareRecordService;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
@@ -15,6 +18,8 @@ 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 io.swagger.models.auth.In;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
@@ -56,7 +61,15 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
sysMusicCompareRecord.setUserId(user.getId());
|
|
|
sysMusicCompareRecord.setSysMusicScoreId(soundCompareInfo.getMusicScoreId());
|
|
|
sysMusicCompareRecord.setBehaviorId(soundCompareInfo.getBehaviorId());
|
|
|
- sysMusicCompareRecord.setScoreData(JSON.toJSONString(soundCompareInfo.getUserMeasureScoreMap()));
|
|
|
+ Map<String, Object> scoreData = new HashMap<>();
|
|
|
+ scoreData.put("userMeasureScore", soundCompareInfo.getUserMeasureScoreMap());
|
|
|
+ Map<String, Object> musicalNotesPlayStats = new HashMap<>();
|
|
|
+ musicalNotesPlayStats.put("detailId", soundCompareInfo.getDetailId());
|
|
|
+ musicalNotesPlayStats.put("examSongId", soundCompareInfo.getExamSongId());
|
|
|
+ musicalNotesPlayStats.put("xmlUrl", soundCompareInfo.getXmlUrl());
|
|
|
+ musicalNotesPlayStats.put("notesData", soundCompareInfo.getMusicalNotesPlayStats());
|
|
|
+ scoreData.put("musicalNotesPlayStats", musicalNotesPlayStats);
|
|
|
+ sysMusicCompareRecord.setScoreData(JSON.toJSONString(scoreData));
|
|
|
if (Objects.nonNull(soundCompareInfo.getUserMeasureScoreMap()) && soundCompareInfo.getUserMeasureScoreMap().containsKey(-1)){
|
|
|
Map<String, Object> finalScore = soundCompareInfo.getUserMeasureScoreMap().get(-1);
|
|
|
sysMusicCompareRecord.setScore((BigDecimal) finalScore.get("score"));
|
|
|
@@ -76,28 +89,55 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public StatDto rankingList(Integer headUserId, String startDate, String endDate) {
|
|
|
- SysUser user = teacherDao.getUser(headUserId);
|
|
|
+ public Object getLastEvaluationMusicalNotesPlayStats(Integer userId) {
|
|
|
+ SysMusicCompareRecord userLastEvaluationData = sysMusicCompareRecordDao.getUserLastEvaluationData(userId);
|
|
|
+ if(StringUtils.isBlank(userLastEvaluationData.getScoreData())){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ JSONObject jsonObject = JSON.parseObject(userLastEvaluationData.getScoreData());
|
|
|
+ if(!jsonObject.containsKey("musicalNotesPlayStats")){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return jsonObject.get("musicalNotesPlayStats");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public StatDto rankingList(SysMusicCompareRecordQueryInfo queryInfo) {
|
|
|
StatDto result = new StatDto();
|
|
|
MusicCompareRankingDto head = new MusicCompareRankingDto();
|
|
|
- head.setUserId(headUserId);
|
|
|
- List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(startDate, endDate);
|
|
|
+ head.setUserId(queryInfo.getUserId());
|
|
|
+ List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(queryInfo.getStartTime(), queryInfo.getEndTime());
|
|
|
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);
|
|
|
+ switch (queryInfo.getOrderType()){
|
|
|
+ case 1:
|
|
|
+ userTrainStat.sort(Comparator.comparing(m->m.getScore(), Comparator.reverseOrder()));
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ userTrainStat.sort(Comparator.comparing(m->m.getTrainDays(), Comparator.reverseOrder()));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ userTrainStat.sort(Comparator.comparing(m->m.getTrainTime(), Comparator.reverseOrder()));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ detail = userTrainStat.subList(0, 10);
|
|
|
+ List<Integer> studentIds = detail.stream().map(MusicCompareRankingDto::getUserId).collect(Collectors.toList());
|
|
|
+ Map<Integer, String> studentSubjectMap = new HashMap<>();
|
|
|
+ if(!CollectionUtils.isEmpty(studentIds)){
|
|
|
+ List<Map<Integer, String>> studentSubjectMapList = studentDao.getStudentSubjectMapList(studentIds);
|
|
|
+ studentSubjectMap = MapUtil.convertIntegerMap(studentSubjectMapList);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < detail.size(); i++) {
|
|
|
+ detail.get(i).setRankNum(i+1);
|
|
|
+ detail.get(i).setTrainTime(detail.get(i).getTrainTime()/60);
|
|
|
+ if(detail.get(i).getUserId().equals(queryInfo.getUserId())){
|
|
|
+ head = detail.get(i);
|
|
|
}
|
|
|
- if(userTrainStat.get(i).getRankNum()<=10){
|
|
|
- detail.add(userTrainStat.get(i));
|
|
|
+ if(studentSubjectMap.containsKey(detail.get(i).getUserId())){
|
|
|
+ detail.get(i).setSubjectName(studentSubjectMap.get(detail.get(i).getUserId()));
|
|
|
}
|
|
|
}
|
|
|
- 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);
|
|
|
@@ -142,7 +182,21 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
pageInfo.setRows(dataList);
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
result.put("userTrainOverView",userTrainOverView);
|
|
|
- result.put("userTrainChartData",userTrainChartData);
|
|
|
+
|
|
|
+ List<IndexBaseDto> userTrainChartResult = new ArrayList<>();
|
|
|
+ List<IndexBaseMonthData> trainNumData = new ArrayList<>();
|
|
|
+ List<IndexBaseMonthData> trainTimeData = new ArrayList<>();
|
|
|
+
|
|
|
+ for (StudentTrainChartDto data : userTrainChartData) {
|
|
|
+ Date trainDate = Date.from(data.getTrainDate().atStartOfDay(DateUtil.zoneId).toInstant());
|
|
|
+ trainTimeData.add(new IndexBaseMonthData(trainDate, null, new BigDecimal(data.getTrainTime())));
|
|
|
+ trainNumData.add(new IndexBaseMonthData(trainDate, null, new BigDecimal(data.getTrainNum())));
|
|
|
+ }
|
|
|
+
|
|
|
+ userTrainChartResult.add(new IndexBaseDto(IndexDataType.CLOUD_STUDY_TRAIN_TIME, trainTimeData));
|
|
|
+ userTrainChartResult.add(new IndexBaseDto(IndexDataType.CLOUD_STUDY_TRAIN_NUM, trainNumData));
|
|
|
+
|
|
|
+ result.put("userTrainChartData", userTrainChartResult);
|
|
|
result.put("detail",pageInfo);
|
|
|
return result;
|
|
|
}
|