|  | @@ -3,21 +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.SysMusicScoreDao;
 | 
	
		
			
				|  |  | -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.entity.SysMusicScore;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.enums.FeatureType;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.enums.IndexDataType;
 | 
	
		
			
				|  |  | +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;
 | 
	
	
		
			
				|  | @@ -43,6 +42,11 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 | 
	
		
			
				|  |  |  	private TeacherDao teacherDao;
 | 
	
		
			
				|  |  |  	@Autowired
 | 
	
		
			
				|  |  |  	private StudentDao studentDao;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private SysMessageService sysMessageService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private SysConfigDao sysConfigDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	public BaseDAO<Long, SysMusicCompareRecord> getDAO() {
 | 
	
	
		
			
				|  | @@ -169,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.STUDENT_PUSH_EXTRA_REPLY,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();
 | 
	
		
			
				|  |  |  
 |