|  | @@ -1,11 +1,13 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.entity.SysUserRole;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.IndexBaseDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.Organization;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.*;
 | 
	
	
		
			
				|  | @@ -35,6 +37,7 @@ import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import static com.ym.mec.biz.dal.enums.IndexDataType.FINANCE_AMOUNT;
 | 
	
		
			
				|  |  | +import static com.ym.mec.biz.dal.enums.IndexDataType.VIP_GROUP_ONLINE_COURSE;
 | 
	
		
			
				|  |  |  import static com.ym.mec.biz.dal.enums.IndexErrorType.WAIT_CREATE_PAYMENT_CALENDER;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
	
		
			
				|  | @@ -97,7 +100,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 | 
	
		
			
				|  |  |  		if(StringUtils.isNotBlank(queryInfo.getOrganId())){
 | 
	
		
			
				|  |  |  			organIds = Arrays.stream(queryInfo.getOrganId().split(",")).map(Integer::new).collect(Collectors.toSet());
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		Set<String> dataTypes = null;
 | 
	
		
			
				|  |  | +		Set<String> dataTypes = new HashSet<>();
 | 
	
		
			
				|  |  |  		if(StringUtils.isNotBlank(queryInfo.getDataTypes())){
 | 
	
		
			
				|  |  |  			dataTypes = Arrays.stream(queryInfo.getDataTypes().split(",")).collect(Collectors.toSet());
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -107,6 +110,35 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 | 
	
		
			
				|  |  |  			indexBaseDatas = new ArrayList<>();
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		Map<Date, Map<IndexDataType, Map<String, Integer>>> vipCategoryCourseListMap = new HashMap<>();
 | 
	
		
			
				|  |  | +		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains("VIP_GROUP_COURSE")||dataTypes.contains("VIP_GROUP_ONLINE_COURSE")||dataTypes.contains("VIP_GROUP_OFFLINE_COURSE")){
 | 
	
		
			
				|  |  | +			dataTypes.clear();
 | 
	
		
			
				|  |  | +			dataTypes.add("VIP_GROUP_COURSE");
 | 
	
		
			
				|  |  | +			dataTypes.add("VIP_GROUP_ONLINE_COURSE");
 | 
	
		
			
				|  |  | +			dataTypes.add("VIP_GROUP_OFFLINE_COURSE");
 | 
	
		
			
				|  |  | +			List<IndexBaseMonthData> indexBaseDataList = indexBaseMonthDataDao.getIndexBaseDataList(organIds, dataTypes, startDate.toString(), endDate.toString());
 | 
	
		
			
				|  |  | +			if(!CollectionUtils.isEmpty(indexBaseDataList)){
 | 
	
		
			
				|  |  | +				for (IndexBaseMonthData indexBaseMonthData : indexBaseDataList) {
 | 
	
		
			
				|  |  | +					if(StringUtils.isBlank(indexBaseMonthData.getExtendInfo())){
 | 
	
		
			
				|  |  | +						continue;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					if(!vipCategoryCourseListMap.containsKey(indexBaseMonthData.getMonth())){
 | 
	
		
			
				|  |  | +						vipCategoryCourseListMap.put(indexBaseMonthData.getMonth(), new HashMap<>());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					if(!vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).containsKey(indexBaseMonthData.getDataType())){
 | 
	
		
			
				|  |  | +						vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).put(indexBaseMonthData.getDataType(), new HashMap<>());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					Map<String, Integer> map = JSON.parseObject(indexBaseMonthData.getExtendInfo(), Map.class);
 | 
	
		
			
				|  |  | +					for (Map.Entry<String, Integer> o : map.entrySet()) {
 | 
	
		
			
				|  |  | +						if(!vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).containsKey(o.getKey())){
 | 
	
		
			
				|  |  | +							vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).put(o.getKey(), 0);
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).put(o.getKey(), vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).get(o.getKey())+o.getValue());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 | 
	
		
			
				|  |  |  		List<IndexBaseMonthData> financePayDataWithTimely = indexBaseMonthDataDao.getFinancePayDataWithTimely(startDate.toString(), endDate.toString(), new ArrayList<>(organIds));
 | 
	
		
			
				|  |  |  		typeDateMap.put(IndexDataType.FINANCE_PAY,financePayDataWithTimely);
 | 
	
	
		
			
				|  | @@ -208,6 +240,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 | 
	
		
			
				|  |  |  					IndexDataType.TOTAL_AMOUNT.equals(typeDateMapEntry.getKey())){
 | 
	
		
			
				|  |  |  				indexBaseData.setPercent(typeDateMapEntry.getValue().stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			if(IndexDataType.VIP_GROUP_COURSE.equals(typeDateMapEntry.getKey()) || VIP_GROUP_ONLINE_COURSE.equals(typeDateMapEntry.getKey()) ||
 | 
	
		
			
				|  |  | +					IndexDataType.VIP_GROUP_OFFLINE_COURSE.equals(typeDateMapEntry.getKey())){
 | 
	
		
			
				|  |  | +				for (IndexBaseMonthData indexBaseMonthData : indexBaseData.getIndexMonthData()) {
 | 
	
		
			
				|  |  | +					if(vipCategoryCourseListMap.containsKey(indexBaseMonthData.getMonth())&&vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).containsKey(indexBaseData.getDataType())){
 | 
	
		
			
				|  |  | +						TreeMap<String, Integer> extendSortMap = new TreeMap<>(vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseData.getDataType()));
 | 
	
		
			
				|  |  | +						indexBaseMonthData.setExtendInfo(JSON.toJSONString(extendSortMap));
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  			result.add(indexBaseData);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		return result;
 | 
	
	
		
			
				|  | @@ -275,9 +316,50 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 | 
	
		
			
				|  |  |  		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//课程数据
 | 
	
		
			
				|  |  | -		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
 | 
	
		
			
				|  |  | -		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null), dayStr, IndexDataType.VIP_GROUP_COURSE);
 | 
	
		
			
				|  |  | -		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
 | 
	
		
			
				|  |  | +		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<IndexBaseMonthData> vipCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, null);
 | 
	
		
			
				|  |  | +		List<OrganVipGroupCategoryCourseNumDto> vipGroupCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, null);
 | 
	
		
			
				|  |  | +		Map<Integer, Map<String, Integer>> organCategoryCourseMap = new HashMap<>();
 | 
	
		
			
				|  |  | +		if(!CollectionUtils.isEmpty(vipGroupCategoryCourseData)){
 | 
	
		
			
				|  |  | +			organCategoryCourseMap = vipGroupCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		for (IndexBaseMonthData vipCourseDatum : vipCourseData) {
 | 
	
		
			
				|  |  | +			if(organCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
 | 
	
		
			
				|  |  | +				vipCourseDatum.setExtendInfo(JSON.toJSONString(organCategoryCourseMap.get(vipCourseDatum.getOrganId())));
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		saveData(vipCourseData, dayStr, IndexDataType.VIP_GROUP_COURSE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<IndexBaseMonthData> vipOnlineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, TeachModeEnum.ONLINE);
 | 
	
		
			
				|  |  | +		List<OrganVipGroupCategoryCourseNumDto> vipGroupOnlineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, TeachModeEnum.ONLINE);
 | 
	
		
			
				|  |  | +		Map<Integer, Map<String, Integer>> organOnlineCategoryCourseMap = new HashMap<>();
 | 
	
		
			
				|  |  | +		if(!CollectionUtils.isEmpty(vipGroupOnlineCategoryCourseData)){
 | 
	
		
			
				|  |  | +			organOnlineCategoryCourseMap = vipGroupOnlineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		for (IndexBaseMonthData vipCourseDatum : vipOnlineCourseData) {
 | 
	
		
			
				|  |  | +			if(organOnlineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
 | 
	
		
			
				|  |  | +				vipCourseDatum.setExtendInfo(JSON.toJSONString(organOnlineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		saveData(vipOnlineCourseData, dayStr, IndexDataType.VIP_GROUP_ONLINE_COURSE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<IndexBaseMonthData> vipOfflineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, TeachModeEnum.OFFLINE);
 | 
	
		
			
				|  |  | +		List<OrganVipGroupCategoryCourseNumDto> vipGroupOfflineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, TeachModeEnum.OFFLINE);
 | 
	
		
			
				|  |  | +		Map<Integer, Map<String, Integer>> organOfflineCategoryCourseMap = new HashMap<>();
 | 
	
		
			
				|  |  | +		if(!CollectionUtils.isEmpty(vipGroupOfflineCategoryCourseData)){
 | 
	
		
			
				|  |  | +			organOfflineCategoryCourseMap = vipGroupOfflineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		for (IndexBaseMonthData vipCourseDatum : vipOfflineCourseData) {
 | 
	
		
			
				|  |  | +			if(organOfflineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
 | 
	
		
			
				|  |  | +				vipCourseDatum.setExtendInfo(JSON.toJSONString(organOfflineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		saveData(vipOfflineCourseData, dayStr, IndexDataType.VIP_GROUP_OFFLINE_COURSE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		//学员变动
 | 
	
		
			
				|  |  |  		saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM);
 |