|
@@ -3,19 +3,20 @@ 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.dao.*;
|
|
|
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.entity.SysMusicScore;
|
|
|
+import com.ym.mec.biz.dal.enums.*;
|
|
|
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.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
import io.swagger.models.auth.In;
|
|
@@ -36,9 +37,16 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
@Autowired
|
|
|
private SysMusicCompareRecordDao sysMusicCompareRecordDao;
|
|
|
@Autowired
|
|
|
+ private SysMusicScoreDao sysMusicScoreDao;
|
|
|
+ @Autowired
|
|
|
private TeacherDao teacherDao;
|
|
|
@Autowired
|
|
|
private StudentDao studentDao;
|
|
|
+ @Autowired
|
|
|
+ private SysMessageService sysMessageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysConfigDao sysConfigDao;
|
|
|
|
|
|
@Override
|
|
|
public BaseDAO<Long, SysMusicCompareRecord> getDAO() {
|
|
@@ -90,16 +98,33 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Object getLastEvaluationMusicalNotesPlayStats(Integer userId) {
|
|
|
- SysMusicCompareRecord userLastEvaluationData = sysMusicCompareRecordDao.getUserLastEvaluationData(userId);
|
|
|
+ public Object getLastEvaluationMusicalNotesPlayStats(Integer userId, Long recordId) {
|
|
|
+ SysMusicCompareRecord userLastEvaluationData;
|
|
|
+ if(Objects.nonNull(recordId)){
|
|
|
+ userLastEvaluationData = sysMusicCompareRecordDao.get(recordId);
|
|
|
+ }else{
|
|
|
+ userLastEvaluationData = sysMusicCompareRecordDao.getUserLastEvaluationData(userId);
|
|
|
+ }
|
|
|
+ if(Objects.isNull(userLastEvaluationData)){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
if(StringUtils.isBlank(userLastEvaluationData.getScoreData())){
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
JSONObject jsonObject = JSON.parseObject(userLastEvaluationData.getScoreData());
|
|
|
- if(!jsonObject.containsKey("musicalNotesPlayStats")){
|
|
|
- return null;
|
|
|
+ jsonObject.put("recordId", userLastEvaluationData.getId());
|
|
|
+ jsonObject.put("score", userLastEvaluationData.getScore());
|
|
|
+ jsonObject.put("cadence", userLastEvaluationData.getCadence());
|
|
|
+ jsonObject.put("intonation", userLastEvaluationData.getIntonation());
|
|
|
+ jsonObject.put("integrity", userLastEvaluationData.getIntegrity());
|
|
|
+ jsonObject.put("heardLevel", userLastEvaluationData.getHeardLevel());
|
|
|
+
|
|
|
+ SysMusicScore sysMusicScore = sysMusicScoreDao.get(userLastEvaluationData.getSysMusicScoreId());
|
|
|
+ if(Objects.nonNull(sysMusicScore)){
|
|
|
+ jsonObject.put("sysMusicScoreName", sysMusicScore.getName());
|
|
|
}
|
|
|
- return jsonObject.get("musicalNotesPlayStats");
|
|
|
+ return jsonObject;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -148,6 +173,63 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public void curWeekStudentTrainRemind() {
|
|
|
+ Set<Integer> validVipStudentIds = studentDao.getValidVipStudentIds();
|
|
|
+ LocalDate monday = LocalDate.now().with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
|
|
|
+ LocalDate sunday = LocalDate.now().with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
|
|
|
+ List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(monday.toString(), sunday.toString(), null);
|
|
|
+
|
|
|
+ Set<Integer> trainStudentIds = new HashSet<>();
|
|
|
+ Set<Integer> ranStudentIds = new HashSet<>();
|
|
|
+
|
|
|
+ if(!CollectionUtils.isEmpty(userTrainStat)){
|
|
|
+ trainStudentIds = userTrainStat.stream().map(MusicCompareRankingDto::getUserId).collect(Collectors.toSet());
|
|
|
+ //时长榜
|
|
|
+ Set<Integer> collect1 = userTrainStat.stream().sorted(Comparator.comparing(MusicCompareRankingDto::getTrainTime, Comparator.reverseOrder())).limit(10).map(MusicCompareRankingDto::getUserId).collect(Collectors.toSet());
|
|
|
+ ranStudentIds.addAll(collect1);
|
|
|
+ Set<Integer> collect2 = userTrainStat.stream().sorted(Comparator.comparing(MusicCompareRankingDto::getTrainDays, Comparator.reverseOrder())).limit(10).map(MusicCompareRankingDto::getUserId).collect(Collectors.toSet());
|
|
|
+ ranStudentIds.addAll(collect2);
|
|
|
+ }
|
|
|
+ List<MusicCompareRankingDto> userTrainStat3 = sysMusicCompareRecordDao.getUserTrainStat(monday.toString(), sunday.toString(), HeardLevelEnum.BEGINNER);
|
|
|
+ if(!CollectionUtils.isEmpty(userTrainStat3)){
|
|
|
+ Set<Integer> collect3 = userTrainStat3.stream().sorted(Comparator.comparing(MusicCompareRankingDto::getScore, Comparator.reverseOrder())).limit(10).map(MusicCompareRankingDto::getUserId).collect(Collectors.toSet());
|
|
|
+ ranStudentIds.addAll(collect3);
|
|
|
+ }
|
|
|
+ List<MusicCompareRankingDto> userTrainStat4 = sysMusicCompareRecordDao.getUserTrainStat(monday.toString(), sunday.toString(), HeardLevelEnum.ADVANCED);
|
|
|
+ if(!CollectionUtils.isEmpty(userTrainStat4)){
|
|
|
+ Set<Integer> collect4 = userTrainStat4.stream().sorted(Comparator.comparing(MusicCompareRankingDto::getScore, Comparator.reverseOrder())).limit(10).map(MusicCompareRankingDto::getUserId).collect(Collectors.toSet());
|
|
|
+ ranStudentIds.addAll(collect4);
|
|
|
+ }
|
|
|
+ List<MusicCompareRankingDto> userTrainStat5 = sysMusicCompareRecordDao.getUserTrainStat(monday.toString(), sunday.toString(), HeardLevelEnum.PERFORMER);
|
|
|
+ if(!CollectionUtils.isEmpty(userTrainStat5)){
|
|
|
+ Set<Integer> collect5 = userTrainStat5.stream().sorted(Comparator.comparing(MusicCompareRankingDto::getScore, Comparator.reverseOrder())).limit(10).map(MusicCompareRankingDto::getUserId).collect(Collectors.toSet());
|
|
|
+ ranStudentIds.addAll(collect5);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Integer, String> userMap1 = new HashMap<>();
|
|
|
+ Map<Integer, String> userMap2 = new HashMap<>();
|
|
|
+ Map<Integer, String> userMap3 = new HashMap<>();
|
|
|
+ for (Integer studentId : validVipStudentIds) {
|
|
|
+ if (trainStudentIds.contains(studentId) && !ranStudentIds.contains(studentId)){
|
|
|
+ userMap1.put(studentId, studentId.toString());
|
|
|
+ }
|
|
|
+ if(ranStudentIds.contains(studentId)){
|
|
|
+ userMap2.put(studentId, studentId.toString());
|
|
|
+ }
|
|
|
+ if(!trainStudentIds.contains(studentId)){
|
|
|
+ userMap3.put(studentId, studentId.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TRAIN_NO_RANK_STUDENT_PUSH,userMap1,
|
|
|
+ null, 0, "5?"+baseApiUrl+"/#/cloudRanking", "STUDENT");
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TRAIN_RANK_STUDENT_PUSH,userMap2,
|
|
|
+ null, 0, "5?"+baseApiUrl+"/#/cloudRanking", "STUDENT");
|
|
|
+ sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.NO_TRAIN_STUDENT_PUSH,userMap3,
|
|
|
+ null, 0, "5?"+baseApiUrl+"/#/cloudRanking", "STUDENT");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public Map<String, Object> studentTrainData(SysMusicCompareRecordQueryInfo queryInfo) {
|
|
|
StudentTrainOverviewDto userTrainOverView = new StudentTrainOverviewDto();
|
|
|
|
|
@@ -198,6 +280,9 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
|
|
|
trainNumData.add(new IndexBaseMonthData(trainDate, null, new BigDecimal(data.getTrainNum())));
|
|
|
}
|
|
|
|
|
|
+ trainNumData.sort(Comparator.comparing(IndexBaseMonthData::getMonth));
|
|
|
+ trainTimeData.sort(Comparator.comparing(IndexBaseMonthData::getMonth));
|
|
|
+
|
|
|
userTrainChartResult.add(new IndexBaseDto(IndexDataType.CLOUD_STUDY_TRAIN_TIME, trainTimeData));
|
|
|
userTrainChartResult.add(new IndexBaseDto(IndexDataType.CLOUD_STUDY_TRAIN_NUM, trainNumData));
|
|
|
|