Browse Source

Merge remote-tracking branch 'origin/online1' into online1

zouxuan 4 years ago
parent
commit
819ca0526a

+ 5 - 42
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,7 +1,10 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.IndexDataType;
+import com.ym.mec.biz.dal.enums.JobNatureEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.poi.ss.formula.functions.Index;
@@ -21,10 +24,6 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int deleteWithMonthAndType(@Param("months") Collection months,
                                @Param("dataType")IndexDataType dataType);
 
-    IndexBaseMonthData getOrganDataWithDayAndDataType(@Param("organId") Integer organId,
-                                                      @Param("day") String day,
-                                                      @Param("dataType")IndexDataType dataType);
-
     /**
      * @describe 获取首页统计数据
      * @author Joburgess
@@ -40,36 +39,6 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
                                               @Param("startMonth") String startMonth,
                                               @Param("endMonth") String endMonth);
 
-	List<IndexBaseMonthData> getWithDayAndDataType(@Param("day") String day,
-                                                   @Param("dataType")IndexDataType dataType);
-
-	/**
-	 * @describe 统计学员注册数据
-	 * @author Joburgess
-	 * @date 2021/2/24 0024
-	 * @param dayStr:
-	 * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
-	 */
-	List<IndexBaseMonthData> getStudentRegistrationData(@Param("dayStr") String dayStr);
-
-	/**
-	 * @describe 统计新增学员注册数据
-	 * @author Joburgess
-	 * @date 2021/2/24 0024
-	 * @param dayStr:
-	 * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
-	 */
-	List<IndexBaseMonthData> getAddStudentRegistrationData(@Param("dayStr") String dayStr);
-
-	/**
-	 * @describe 付费转化率
-	 * @author Joburgess
-	 * @date 2021/2/24 0024
-	 * @param dayStr:
-	 * @return java.util.List<com.ym.mec.biz.dal.entity.IndexBaseMonthData>
-	 */
-	List<IndexBaseMonthData> getChargeStudentChangeData(@Param("dayStr") String dayStr);
-
     /**
      * @describe 统计系统中指定时间段的学员注册数据
      * @author Joburgess
@@ -125,19 +94,13 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
     List<IndexBaseMonthData> getOtherStudentData(@Param("dayStr") String dayStr);
 
-    List<IndexBaseMonthData> getVipPracticeAddStudentData(@Param("dayStr") String dayStr);
-
     List<IndexBaseMonthData> getTeacherData(@Param("dayStr") String dayStr,
                                             @Param("jobNature") JobNatureEnum jobNature,
                                             @Param("isDemission") Boolean isDemission);
 
     List<IndexBaseMonthData> getGroupCourseData(@Param("dayStr") String dayStr,
-                                                @Param("groupType")GroupType groupType,
-                                                @Param("courseStatus") CourseStatusEnum courseStatus);
+                                                @Param("groupType")GroupType groupType);
 
-    List<IndexBaseMonthData> getGroupSurplusCourseData(@Param("dayStr") String dayStr,
-                                                @Param("groupType")GroupType groupType,
-                                                @Param("courseStatus") CourseStatusEnum courseStatus);
 
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds);
     List<String> getLessThenThreeMusicGroup(@Param("organIds") Set<Integer> organIds);

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexBaseDto.java

@@ -74,8 +74,8 @@ public class IndexBaseDto {
     public void setIndexMonthData(List<IndexBaseMonthData> indexMonthData, Date currentMonth) {
         this.indexMonthData = indexMonthData;
         if(!CollectionUtils.isEmpty(indexMonthData)){
-            if(dataType.getCollect()){
-                BigDecimal total = indexMonthData.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal total = indexMonthData.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+            if(IndexDataType.ACTIVATION_RATE.equals(dataType)){
                 if(total.compareTo(BigDecimal.ZERO)==0){
                     this.percent = BigDecimal.ZERO;
                 }else{

+ 37 - 75
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.enums;
 
-import com.sun.org.apache.xpath.internal.operations.Bool;
 import com.ym.mec.common.enums.BaseEnum;
 
 /**
@@ -8,71 +7,50 @@ import com.ym.mec.common.enums.BaseEnum;
  * @Date 2021/1/8 0008
  **/
 public enum IndexDataType implements BaseEnum<String, IndexDataType> {
-    //学员数据类型
-    STUDENT_REGISTRATION_NUM("STUDENT_REGISTRATION_NUM", "注册学员", false, false),
-    CHARGE_STUDENT_CHANGE_RATE("CHARGE_STUDENT_CHANGE_RATE", "付费转化率", true, false),
-    ACTIVATION_RATE("ACTIVATION_RATE","激活率", true, false),
-
-    //运营数据类型
-    SCHOOL("SCHOOL","合作单位", false, false),
-    PROGRESS_MUSIC_GROUP_NUM("PROGRESS_MUSIC_GROUP_NUM","进行中乐团", false, false),
-
-    //人事数据
-    TEACHER_NUM("TEACHER_NUM","老师总数", false, false),
-    FULL_TIME_NUM("FULL_TIME_NUM","全职人数", false, false),
-    PART_TIME_NUM("PART_TIME_NUM","兼职人数", false, false),
-
-    DIMISSION_NUM("DIMISSION_NUM","离职人数", false, false),
-
-    //剩余课时
-    SURPLUS_COURSE_NUM("SURPLUS_COURSE_NUM", "剩余课时总数", false, false),
-    SURPLUS_MUSIC_COURSE_NUM("SURPLUS_MUSIC_COURSE_NUM", "剩余乐团课时", false, false),
-    SURPLUS_VIP_COURSE_NUM("SURPLUS_VIP_COURSE_NUM", "剩余VIP课时", false, false),
-    SURPLUS_PRACTICE_COURSE_NUM("SURPLUS_PRACTICE_COURSE_NUM", "剩余网管课时", false, false),
-
-    //已消耗课时
-    OVER_COURSE_NUM("OVER_COURSE_NUM", "已消耗课时总数", false, false),
-    OVER_MUSIC_COURSE_NUM("OVER_MUSIC_COURSE_NUM", "已消耗乐团课时", false, false),
-    OVER_VIP_COURSE_NUM("OVER_VIP_COURSE_NUM", "已消耗VIP课时", false, false),
-    OVER_PRACTICE_COURSE_NUM("OVER_PRACTICE_COURSE_NUM", "已消耗网管课时", false, false),
-
-    //经营数据
-    FINANCE_PAY("FINANCE_PAY","财务支出", false, false),
-    FINANCE_BALANCE_AMOUNT("FINANCE_BALANCE_AMOUNT","余额收入", false, false),
-    FINANCE_AMOUNT("FINANCE_AMOUNT","现金收入", false, false),
-
-    //业务数据
-    HOMEWORK_CREATE_RATE("HOMEWORK_CREATE_RATE","作业布置率", true, false),
-    HOMEWORK_SUBMIT_RATE("HOMEWORK_SUBMIT_RATE","作业提交率", true, false),
-    HOMEWORK_COMMENT_RATE("HOMEWORK_COMMENT_RATE","作业点评率", true, false),
-
-    //课程数据
-    MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课", false, false),
-    VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课", false, false),
-    PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课", false, false),
-
-    //学员变动
-    ADD_STUDENT_REGISTRATION_NUM("ADD_STUDENT_REGISTRATION_NUM", "新增注册学员", false, false),
-    MUSIC_GROUP_STUDENT("MUSIC_GROUP_STUDENT","乐团在读学员", false, false),
-    NEWLY_STUDENT_NUM("NEWLY_STUDENT_NUM","乐团新增学员", false, false),
-    QUIT_MUSIC_GROUP_STUDENT_NUM("QUIT_MUSIC_GROUP_STUDENT_NUM","退团学员", false, false),
-    VIP_PRACTICE_STUDENT_NUM("VIP_PRACTICE_STUDENT_NUM", "VIP/网管在读", false, false),
-    VIP_PRACTICE_ADD_STUDENT_NUM("VIP_PRACTICE_ADD_STUDENT_NUM", "VIP/网管新增", false, false),
-    ;
+    SCHOOL("SCHOOL","合作单位"),
+    MUSIC_GROUP_NUM("MUSIC_GROUP_NUM","乐团数量"),
+    MUSIC_GROUP_STUDENT("MUSIC_GROUP_STUDENT","乐团学员"),
+    OTHER_STUDENT("OTHER_STUDENT","其他学员"),
+
+    ACTIVATION_RATE("ACTIVATION_RATE","激活率"),
+    HOMEWORK_CREATE_RATE("HOMEWORK_CREATE_RATE","作业布置率"),
+    HOMEWORK_SUBMIT_RATE("HOMEWORK_SUBMIT_RATE","作业提交率"),
+    HOMEWORK_COMMENT_RATE("HOMEWORK_COMMENT_RATE","作业点评率"),
+
+    SHOULD_INCOME_MONEY("SHOULD_INCOME_MONEY","应收金额"),
+    ANTICIPATED_INCOME_MONEY("ANTICIPATED_INCOME_MONEY","预收金额"),
+    SHOULD_EXPEND_MONEY("SHOULD_EXPEND_MONEY","预付金额"),
+    ANTICIPATED_EXPEND_MONEY("ANTICIPATED_EXPEND_MONEY","应付金额"),
+    REVENUE_MONEY("REVENUE_MONEY","营收金额"),
+
+    TEACHER_NUM("TEACHER_NUM","老师总数"),
+    FULL_TIME_NUM("FULL_TIME_NUM","全职人数"),
+    PART_TIME_NUM("PART_TIME_NUM","兼职人数"),
+    DIMISSION_NUM("DIMISSION_NUM","离职人数"),
+
+    NEWLY_STUDENT_NUM("NEWLY_STUDENT_NUM","乐团新增学员"),
+    QUIT_MUSIC_GROUP_STUDENT_NUM("QUIT_MUSIC_GROUP_STUDENT_NUM","退团学员"),
+    STUDENT_CONVERSION("STUDENT_CONVERSION","学员转化"),
+    STUDENT_CONVERSION_PRE_STUDENT_NUM("STUDENT_CONVERSION_PRE_STUDENT_NUM","预报名人数"),
+    STUDENT_CONVERSION_STUDENT_NUM("STUDENT_CONVERSION_STUDENT_NUM","报名人数"),
+    STUDENT_CONVERSION_PAYMENT_STUDENT_NUM("STUDENT_CONVERSION_PAYMENT_STUDENT_NUM","报名缴费"),
+    STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM("STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM","VIP/网管课购买"),
+
+    MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课"),
+    VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课"),
+    PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课"),
+
+    FINANCE_PAY("FINANCE_PAY","财务支出"),
+    FINANCE_BALANCE_AMOUNT("FINANCE_BALANCE_AMOUNT","余额收入"),
+    FINANCE_AMOUNT("FINANCE_AMOUNT","现金收入");
 
     private String code;
 
     private String msg;
 
-    private Boolean percent;
-
-    private Boolean collect;
-
-    IndexDataType(String code, String msg, Boolean percent, Boolean collect) {
+    IndexDataType(String code, String msg) {
         this.code = code;
         this.msg = msg;
-        this.percent = percent;
-        this.collect = collect;
     }
 
     @Override
@@ -91,20 +69,4 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     public void setMsg(String msg) {
         this.msg = msg;
     }
-
-    public Boolean getCollect() {
-        return collect;
-    }
-
-    public void setCollect(Boolean collect) {
-        this.collect = collect;
-    }
-
-    public Boolean getPercent() {
-        return percent;
-    }
-
-    public void setPercent(Boolean percent) {
-        this.percent = percent;
-    }
 }

+ 1 - 59
mec-biz/src/main/java/com/ym/mec/biz/event/listener/GroupEventListener.java

@@ -38,65 +38,7 @@ public class GroupEventListener {
     @Async
     @EventListener
     public void musicGroupStudentChangeMonitor(MusicGroupStudentChangeEvent musicGroupStatusChangeEvent){
-        if(Objects.isNull(musicGroupStatusChangeEvent.getMusicGroupId())||Objects.isNull(musicGroupStatusChangeEvent.getStudentMusicGroupStatus())){
-            return;
-        }
-        MusicGroup musicGroup = musicGroupDao.get(musicGroupStatusChangeEvent.getMusicGroupId());
-        if(Objects.isNull(musicGroup)){
-            return;
-        }
-        List<Integer> studentIds = musicGroupStatusChangeEvent.getStudentIds();
-        if(CollectionUtils.isEmpty(studentIds)) {
-            List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryStudentByMusicGroupId(musicGroupStatusChangeEvent.getMusicGroupId());
-            studentIds = studentRegistrations.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
-        }
-        if(CollectionUtils.isEmpty(studentIds)){
-            return;
-        }
-        List<StudentRegistration> studentNormalRegistration = studentRegistrationDao.getStudentNormalRegistration(new HashSet<>(studentIds));
-        Map<Integer, Set<String>> userGroupIdMap = studentNormalRegistration.stream().collect(Collectors.groupingBy(StudentRegistration::getUserId, Collectors.mapping(StudentRegistration::getMusicGroupId, Collectors.toSet())));
-        int updateNum = 0;
-        for (Integer studentId : studentIds) {
-            if(userGroupIdMap.containsKey(studentId)&&userGroupIdMap.get(studentId).size()>1){
-                continue;
-            }
-            if(userGroupIdMap.containsKey(studentId)&&!userGroupIdMap.get(studentId).contains(musicGroupStatusChangeEvent.getMusicGroupId())){
-                continue;
-            }
-            updateNum+=1;
-        }
-        LocalDate nowDate = LocalDate.now();
-        String dayStr = nowDate.plusDays(-1).toString();
-        IndexBaseMonthData indexBaseMonthData = null;
-        switch (musicGroupStatusChangeEvent.getStudentMusicGroupStatus()){
-            case NORMAL:
-                indexBaseMonthData = indexBaseMonthDataDao.getOrganDataWithDayAndDataType(musicGroup.getOrganId(), dayStr, IndexDataType.NEWLY_STUDENT_NUM);
-                break;
-            case QUIT:
-                indexBaseMonthData = indexBaseMonthDataDao.getOrganDataWithDayAndDataType(musicGroup.getOrganId(), dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
-                break;
-            default:
-                return;
-        }
-        if(Objects.isNull(indexBaseMonthData)){
-            indexBaseMonthData = new IndexBaseMonthData();
-            Date date = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
-            BigDecimal zero = new BigDecimal(0);
-            indexBaseMonthData.setMonth(date);
-            indexBaseMonthData.setOrganId(musicGroup.getOrganId());
-            indexBaseMonthData.setDataType(StudentMusicGroupStatusEnum.NORMAL.equals(musicGroupStatusChangeEvent.getStudentMusicGroupStatus())?IndexDataType.NEWLY_STUDENT_NUM:IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
-            indexBaseMonthData.setTotalNum(zero);
-            indexBaseMonthData.setActivateNum(zero);
-            indexBaseMonthData.setPercent(zero);
-        }
-        indexBaseMonthData.setTotalNum(indexBaseMonthData.getTotalNum().add(new BigDecimal(updateNum)));
-        indexBaseMonthData.setActivateNum(indexBaseMonthData.getActivateNum().add(new BigDecimal(updateNum)));
-        indexBaseMonthData.setPercent(indexBaseMonthData.getPercent().add(new BigDecimal(updateNum)));
-        if(Objects.isNull(indexBaseMonthData.getId())){
-            indexBaseMonthDataDao.insert(indexBaseMonthData);
-        }else{
-            indexBaseMonthDataDao.update(indexBaseMonthData);
-        }
+
     }
 
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/IndexBaseMonthDataService.java

@@ -14,7 +14,7 @@ public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMo
 
     List<IndexBaseDto> getIndexBaseData(IndexDataQueryInfo indexDataQueryInfo);
 
-    void indexBaseDataTask(String month);
+    Map<String, List<IndexBaseDto>> indexBaseDataTask(String month);
 
     Map<String, Object> getIndexErrData(String organIds, IndexErrorType errorType);
 

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -4943,15 +4943,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     		throw new BizException("非进行中课程组不可编辑");
 		}
 		if(courseStartDate.after(coursesExpireDate)){
-			throw new BizException("课程组有效结束时间不能早于课程组有效开始时间");
+			throw new BizException("课程组有效结束时间不能早于课程组有效开始时间");
 		}
 		Date minCourseTime = courseScheduleDao.getMinCourseTime(PRACTICE, practiceGroupId);
 		if(Objects.nonNull(minCourseTime)&&courseStartDate.compareTo(minCourseTime)>0){
-			throw new BizException("课程组有效开始时间不得晚于第一节课开始时间");
+			throw new BizException("课程组有效开始时间不得晚于第一节课开始时间");
 		}
 		Date maxCourseTime = courseScheduleDao.getMaxCourseTime(PRACTICE, practiceGroupId);
-		if(Objects.nonNull(maxCourseTime)&&coursesExpireDate.compareTo(maxCourseTime)<0){
-			throw new BizException("课程组有效结束时间不得早于最后一节课结束时间");
+		if(Objects.nonNull(maxCourseTime)&&!DateUtil.isSameDay(maxCourseTime, coursesExpireDate)&&coursesExpireDate.compareTo(maxCourseTime)<0){
+			throw new BizException("课程组有效结束时间不得早于最后一节课结束时间");
 		}
 //		if(Objects.nonNull(practiceGroup.getBuyMonths())){
 //			LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();

+ 136 - 58
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -23,7 +23,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -96,7 +95,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			indexBaseDatas = new ArrayList<>();
 		}
 
-		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
+		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 
 		for (IndexDataType dataType : IndexDataType.values()) {
 			if(typeDateMap.containsKey(dataType)){
@@ -130,7 +129,9 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				currentMonthDate = currentMonthDate.plusDays(1);
 			}
 			typeDateMapEntry.getValue().sort(Comparator.comparing(IndexBaseMonthData::getMonth));
-			if(typeDateMapEntry.getKey().getPercent()){
+			if(IndexDataType.ACTIVATION_RATE.equals(typeDateMapEntry.getKey())||IndexDataType.HOMEWORK_CREATE_RATE.equals(typeDateMapEntry.getKey())
+					||IndexDataType.HOMEWORK_SUBMIT_RATE.equals(typeDateMapEntry.getKey())||IndexDataType.HOMEWORK_COMMENT_RATE.equals(typeDateMapEntry.getKey())
+					||IndexDataType.STUDENT_CONVERSION.equals(typeDateMapEntry.getKey())){
 				for (IndexBaseMonthData indexBaseMonthData : typeDateMapEntry.getValue()) {
 					if(indexBaseMonthData.getTotalNum().compareTo(BigDecimal.ZERO)==0){
 						indexBaseMonthData.setPercent(BigDecimal.ZERO);
@@ -149,12 +150,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			}
 			result.add(indexBaseData);
 		}
+		countStudentConvertData(result, currentMonth);
 		return result;
 	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void indexBaseDataTask(String dayStr) {
+	public Map<String, List<IndexBaseDto>> indexBaseDataTask(String dayStr) {
+		Map<String, List<IndexBaseDto>> result = new HashMap<>();
+
 		LocalDate nowDate = LocalDate.now();
 
 		List<Organization> allOrgans = organizationDao.findAllOrgans();
@@ -167,58 +171,149 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			dayStr = nowDate.plusDays(-1).toString();
 		}
 
-		LocalDate day = LocalDate.parse(dayStr, DateUtil.dateFormatter);
-		LocalDate monday = day.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+		//运营数据
+		saveData(indexBaseMonthDataDao.getSchoolData(dayStr), dayStr, IndexDataType.SCHOOL);
+		saveData(indexBaseMonthDataDao.getMusicData(dayStr), dayStr, IndexDataType.MUSIC_GROUP_NUM);
+		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, null), dayStr, IndexDataType.MUSIC_GROUP_STUDENT);
+		saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr), dayStr, IndexDataType.OTHER_STUDENT);
 
-		//学员数据
-		saveData(indexBaseMonthDataDao.getStudentRegistrationData(dayStr), dayStr, IndexDataType.STUDENT_REGISTRATION_NUM);
-		saveData(indexBaseMonthDataDao.getChargeStudentChangeData(dayStr), dayStr, IndexDataType.CHARGE_STUDENT_CHANGE_RATE);
+		//业务数据
 		saveData(indexBaseMonthDataDao.getStudentSignUpData(dayStr), dayStr, IndexDataType.ACTIVATION_RATE);
+		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null), dayStr, IndexDataType.HOMEWORK_CREATE_RATE);
+		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "submit"), dayStr, IndexDataType.HOMEWORK_SUBMIT_RATE);
+		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), dayStr, IndexDataType.HOMEWORK_COMMENT_RATE);
 
-		//运营数据
-		saveData(indexBaseMonthDataDao.getSchoolData(dayStr), dayStr, IndexDataType.SCHOOL);
-		saveData(indexBaseMonthDataDao.getMusicData(dayStr), dayStr, IndexDataType.PROGRESS_MUSIC_GROUP_NUM);
+		//经营数据
+		saveData(null, dayStr, IndexDataType.SHOULD_INCOME_MONEY);
+		saveData(null, dayStr, IndexDataType.ANTICIPATED_INCOME_MONEY);
+		saveData(null, dayStr, IndexDataType.SHOULD_EXPEND_MONEY);
+		saveData(null, dayStr, IndexDataType.ANTICIPATED_EXPEND_MONEY);
+		saveData(null, dayStr, IndexDataType.REVENUE_MONEY);
 
 		//人事数据
 		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, null), dayStr, IndexDataType.TEACHER_NUM);
 		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.FULL_TIME, null), dayStr, IndexDataType.FULL_TIME_NUM);
 		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.PART_TIME, null), dayStr, IndexDataType.PART_TIME_NUM);
-//		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, true), dayStr, IndexDataType.DIMISSION_NUM);
+		saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, true), dayStr, IndexDataType.DIMISSION_NUM);
 
-		//剩余课时
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, null, CourseStatusEnum.OVER), dayStr, IndexDataType.SURPLUS_COURSE_NUM);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.OVER), dayStr, IndexDataType.SURPLUS_MUSIC_COURSE_NUM);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP, CourseStatusEnum.OVER), dayStr, IndexDataType.SURPLUS_VIP_COURSE_NUM);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER), dayStr, IndexDataType.SURPLUS_PRACTICE_COURSE_NUM);
+		//学员变动
+		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, "ADD"), dayStr, IndexDataType.NEWLY_STUDENT_NUM);
+		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, "QUIT"), dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
+		saveData(indexBaseMonthDataDao.getMusicGroupPreRegistrationStudentData(dayStr), dayStr, IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM);
+		saveData(indexBaseMonthDataDao.getMusicGroupStudentFromPreData(dayStr, null), dayStr, IndexDataType.STUDENT_CONVERSION_STUDENT_NUM);
+		saveData(indexBaseMonthDataDao.getMusicGroupStudentFromPreData(dayStr, PaymentStatusEnum.YES), dayStr, IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM);
+		List<Integer> studentIds = indexBaseMonthDataDao.getMusicGroupStudentIdFromPre(dayStr, PaymentStatusEnum.YES);
+		List<IndexBaseMonthData> convertStudentNum = new ArrayList<>();
+		if(!CollectionUtils.isEmpty(studentIds)){
+			convertStudentNum = indexBaseMonthDataDao.getStudentConversionData(dayStr, studentIds);
+		}
+		saveData(convertStudentNum, dayStr, IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM);
 
-		//已消耗课时
-		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, null, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_COURSE_NUM);
-		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_MUSIC_COURSE_NUM);
-		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.VIP, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_VIP_COURSE_NUM);
-		saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER), dayStr, IndexDataType.OVER_PRACTICE_COURSE_NUM);
+		//课程数据
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP), dayStr, IndexDataType.VIP_GROUP_COURSE);
+		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
 
-		//经营数据
+		//财务数据
 		saveData(indexBaseMonthDataDao.getFinancePayData(dayStr),dayStr,IndexDataType.FINANCE_PAY);
 		saveData(indexBaseMonthDataDao.getFinanceBalanceData(dayStr),dayStr,IndexDataType.FINANCE_BALANCE_AMOUNT);
 		saveData(indexBaseMonthDataDao.getFinanceActualData(dayStr),dayStr,IndexDataType.FINANCE_AMOUNT);
 
-		//业务数据
-		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null), monday.toString(), IndexDataType.HOMEWORK_CREATE_RATE);
-		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "submit"), monday.toString(), IndexDataType.HOMEWORK_SUBMIT_RATE);
-		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE);
+		return result;
+	}
 
-		//课程数据
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.OVER), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP, CourseStatusEnum.OVER), dayStr, IndexDataType.VIP_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
+	private void countStudentConvertData(List<IndexBaseDto> result, Date currentMonth){
+		List<IndexBaseMonthData> convertData = new ArrayList<>();
+
+		Map<IndexDataType, IndexBaseDto> typeDataMap = result.stream().collect(Collectors.toMap(IndexBaseDto::getDataType, i -> i, (i1, i2) -> i1));
+		List<IndexBaseMonthData> preStudentNum = new ArrayList<>();
+		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM)){
+			preStudentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM).getIndexMonthData();
+		}
+
+		IndexBaseMonthData preStudentNumData = new IndexBaseMonthData();
+		preStudentNumData = preStudentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
+//		preStudentNumData.setMonth(currentMonth);
+		preStudentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM);
+		preStudentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_PRE_STUDENT_NUM.getMsg());
+//		preStudentNumData.setTotalNum(preStudentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+//		preStudentNumData.setActivateNum(preStudentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+//		preStudentNumData.setPercent(preStudentNumData.getActivateNum());
+
+		List<IndexBaseMonthData> studentNum = new ArrayList<>();
+		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM)){
+			studentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM).getIndexMonthData();
+		}
+
+		IndexBaseMonthData studentNumData = new IndexBaseMonthData();
+		studentNumData = studentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
+//		studentNumData.setMonth(currentMonth);
+		studentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM);
+		studentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_STUDENT_NUM.getMsg());
+//		studentNumData.setTotalNum(studentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+//		studentNumData.setActivateNum(studentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+
+		List<IndexBaseMonthData> paymentStudentNum = new ArrayList<>();
+		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM)){
+			paymentStudentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM).getIndexMonthData();
+		}
+
+		IndexBaseMonthData paymentStudentNumData = new IndexBaseMonthData();
+		paymentStudentNumData = paymentStudentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
+//		paymentStudentNumData.setMonth(currentMonth);
+		paymentStudentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM);
+		paymentStudentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_PAYMENT_STUDENT_NUM.getMsg());
+//		paymentStudentNumData.setTotalNum(paymentStudentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+//		paymentStudentNumData.setActivateNum(paymentStudentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+
+		List<IndexBaseMonthData> convertStudentNum = new ArrayList<>();
+		if(typeDataMap.containsKey(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM)){
+			convertStudentNum = typeDataMap.get(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM).getIndexMonthData();
+		}
+
+		IndexBaseMonthData convertStudentNumData = new IndexBaseMonthData();
+		convertStudentNumData = convertStudentNum.stream().max(Comparator.comparing(IndexBaseMonthData::getMonth)).get();
+//		convertStudentNumData.setMonth(currentMonth);
+		convertStudentNumData.setDataType(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM);
+		convertStudentNumData.setTitle(IndexDataType.STUDENT_CONVERSION_VIP_PRACTICE_STUDENT_NUM.getMsg());
+//		convertStudentNumData.setTotalNum(convertStudentNum.stream().map(IndexBaseMonthData::getTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+//		convertStudentNumData.setActivateNum(convertStudentNum.stream().map(IndexBaseMonthData::getActivateNum).reduce(BigDecimal.ZERO, BigDecimal::add));
+
+		if(true){
+			studentNumData.setPercent(studentNumData.getActivateNum());
+			paymentStudentNumData.setPercent(paymentStudentNumData.getActivateNum());
+			convertStudentNumData.setPercent(convertStudentNumData.getActivateNum());
+		}else if(preStudentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
+			studentNumData.setPercent(BigDecimal.ZERO);
+			paymentStudentNumData.setPercent(BigDecimal.ZERO);
+			convertStudentNumData.setPercent(BigDecimal.ZERO);
+		}else{
+			studentNumData.setPercent(studentNumData.getActivateNum().divide(preStudentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+			if(studentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
+				paymentStudentNumData.setPercent(BigDecimal.ZERO);
+				convertStudentNumData.setPercent(BigDecimal.ZERO);
+			}else{
+				paymentStudentNumData.setPercent(paymentStudentNumData.getActivateNum().divide(studentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+				if(paymentStudentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
+					convertStudentNumData.setPercent(BigDecimal.ZERO);
+				}else{
+					convertStudentNumData.setPercent(convertStudentNumData.getActivateNum().divide(paymentStudentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+				}
+			}
+		}
 
-		//学员变动
-		saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM);
-		saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, null), dayStr, IndexDataType.MUSIC_GROUP_STUDENT);
-		saveData(null, dayStr, IndexDataType.NEWLY_STUDENT_NUM);
-		saveData(null, dayStr, IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM);
-		saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr), dayStr, IndexDataType.VIP_PRACTICE_STUDENT_NUM);
-		saveData(indexBaseMonthDataDao.getVipPracticeAddStudentData(dayStr), dayStr, IndexDataType.VIP_PRACTICE_ADD_STUDENT_NUM);
+		convertData.add(preStudentNumData);
+		convertData.add(studentNumData);
+		convertData.add(paymentStudentNumData);
+		convertData.add(convertStudentNumData);
+		IndexBaseDto indexBaseData = new IndexBaseDto(IndexDataType.STUDENT_CONVERSION, IndexDataType.STUDENT_CONVERSION.getMsg());
+		indexBaseData.setIndexMonthData(convertData, currentMonth);
+		if(paymentStudentNumData.getActivateNum().compareTo(BigDecimal.ZERO)==0){
+			indexBaseData.setPercent(convertStudentNumData.getPercent());
+		}else{
+			indexBaseData.setPercent(convertStudentNumData.getActivateNum().divide(paymentStudentNumData.getActivateNum(), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN));
+		}
+		result.add(indexBaseData);
 	}
 
 	/**
@@ -233,31 +328,14 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			dataList = new ArrayList<>();
 		}
 		Set<Integer> hasOrganIds = dataList.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
-
-		boolean specialType = IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)||IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType);
-		Set<Integer> ignoreOrganIds = new HashSet<>();
-		if(specialType){
-			List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getWithDayAndDataType(dayStr, indexDataType);
-			if(!CollectionUtils.isEmpty(indexBaseDatas)) {
-				ignoreOrganIds = indexBaseDatas.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
-			}
-		}
-
 		for (Integer organId : this.organIds.get()) {
 			if(hasOrganIds.contains(organId)){
 				continue;
 			}
-			if(specialType&&ignoreOrganIds.contains(organId)){
-				continue;
-			}
 			dataList.add(new IndexBaseMonthData(date, organId));
 		}
-		if(!IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)&&!IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType)){
-			indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(dayStr), indexDataType);
-		}
-		if(!CollectionUtils.isEmpty(dataList)){
-			indexBaseMonthDataDao.batchInsertWithDataType(dataList, indexDataType);
-		}
+		indexBaseMonthDataDao.deleteWithMonthAndType(Arrays.asList(dayStr), indexDataType);
+		indexBaseMonthDataDao.batchInsertWithDataType(dataList, indexDataType);
 	}
 
 	@Override

+ 29 - 152
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -28,10 +28,6 @@
 		SELECT * FROM index_base_month_data ORDER BY id_
 	</select>
 
-	<select id="getOrganDataWithDayAndDataType" resultMap="IndexBaseMonthData">
-		SELECT * FROM index_base_month_data WHERE organ_id_=#{organId} AND month_ = #{day} AND data_type_=#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} ORDER BY month_ DESC LIMIT 1;
-	</select>
-
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		<!--
@@ -63,32 +59,30 @@
 
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData">
-		UPDATE index_base_month_data
-		<set>
-			<if test="organId != null">
-				organ_id_ = #{organId},
-			</if>
-			<if test="id != null">
-				id_ = #{id},
-			</if>
-			<if test="activateNum != null">
-				activate_num_ = #{activateNum},
-			</if>
-			<if test="totalNum != null">
-				total_num_ = #{totalNum},
-			</if>
-			<if test="percent != null">
-				percent_ = #{percent},
-			</if>
-			<if test="month != null">
-				month_ = #{month},
-			</if>
-			<if test="dataType != null">
-				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-			</if>
-			update_time_ = NOW()
-		</set>
-		WHERE id_ = #{id}
+		UPDATE index_base_month_data <set>
+		<if test="organId != null">
+			organ_id_ = #{organId},
+		</if>
+		<if test="id != null">
+			id_ = #{id},
+		</if>
+		<if test="activateNum != null">
+			activate_num_ = #{activateNum},
+		</if>
+		<if test="totalNum != null">
+			total_num_ = #{totalNum},
+		</if>
+		<if test="percent != null">
+			percent_ = #{percent},
+		</if>
+		<if test="month != null">
+			month_ = #{month},
+		</if>
+		<if test="dataType != null">
+			data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		</if>
+		update_time_ = NOW()
+	</set> WHERE id_ = #{id}
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
@@ -144,15 +138,6 @@
 		GROUP BY month_,data_type_
 	</select>
 
-	<select id="getWithDayAndDataType" resultMap="IndexBaseMonthData">
-		SELECT
-			*
-		FROM index_base_month_data
-		WHERE 1=1
-			AND data_type_ = #{dataType}
-			AND month_&gt;=#{day}
-	</select>
-
 	<select id="getStudentSignUpData" resultMap="IndexBaseMonthData">
 		SELECT
 			organ_id_,
@@ -194,67 +179,10 @@
 		ORDER BY organ_id_;
 	</select>
 
-	<select id="getStudentRegistrationData" resultMap="IndexBaseMonthData">
-		SELECT
-			su.organ_id_,
-			#{dayStr} month_,
-			COUNT( DISTINCT stu.user_id_ ) total_num_,
-			COUNT( DISTINCT stu.user_id_ ) activate_num_,
-			COUNT( DISTINCT stu.user_id_ ) percent_
-		FROM
-			student stu
-			LEFT JOIN sys_user su ON stu.user_id_=su.id_
-		WHERE
-			su.del_flag_=0
-		  AND su.organ_id_ IS NOT NULL
-		  AND su.user_type_ LIKE '%STUDENT%'
-		  AND DATE_FORMAT(stu.create_time_, '%Y-%m-%d')&lt;=#{dayStr}
-		GROUP BY organ_id_
-		ORDER BY organ_id_;
-	</select>
-
-	<select id="getAddStudentRegistrationData" resultMap="IndexBaseMonthData">
-		SELECT
-			su.organ_id_,
-			#{dayStr} month_,
-			COUNT( DISTINCT stu.user_id_ ) total_num_,
-			COUNT( DISTINCT stu.user_id_ ) activate_num_,
-			COUNT( DISTINCT stu.user_id_ ) percent_
-		FROM
-			student stu
-				LEFT JOIN sys_user su ON stu.user_id_=su.id_
-		WHERE
-			su.del_flag_=0
-		  AND su.organ_id_ IS NOT NULL
-		  AND su.user_type_ LIKE '%STUDENT%'
-		  AND DATE_FORMAT(stu.create_time_, '%Y-%m-%d')=#{dayStr}
-		GROUP BY organ_id_
-		ORDER BY organ_id_;
-	</select>
-
-	<select id="getChargeStudentChangeData" resultMap="IndexBaseMonthData">
-		SELECT
-			su.organ_id_,
-			#{dayStr} month_,
-			COUNT( DISTINCT stu.user_id_ ) total_num_,
-			COUNT( DISTINCT spo.user_id_ ) activate_num_,
-			TRUNCATE(COUNT(DISTINCT spo.user_id_)/COUNT(DISTINCT stu.user_id_)*100, 2) percent_
-		FROM
-			student stu
-			LEFT JOIN sys_user su ON stu.user_id_=su.id_
-			LEFT JOIN student_payment_order spo ON stu.user_id_=spo.user_id_ AND status_='SUCCESS' AND actual_amount_>0
-		WHERE
-			su.del_flag_=0
-		  AND su.organ_id_ IS NOT NULL
-		  AND su.user_type_ LIKE '%STUDENT%'
-		GROUP BY organ_id_
-		ORDER BY organ_id_;
-	</select>
-
 	<select id="getHomeworkData" resultMap="IndexBaseMonthData">
 		SELECT
 			su.organ_id_,
-			sees.monday_ month_,
+			#{dayStr} month_,
 			<choose>
 				<when test="type == 'submit'">
 					SUM(sees.actual_exercises_num_) total_num_,
@@ -276,8 +204,8 @@
 		LEFT JOIN sys_user su ON sees.student_id_=su.id_
 		WHERE su.del_flag_=0
 			AND su.organ_id_ IS NOT NULL
-			AND DATE_FORMAT(sees.monday_, '%Y-%m-%d')&lt;=#{dayStr}
-			AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d')&gt;=#{dayStr}
+			AND (DATE_FORMAT(sees.monday_, '%Y-%m')=DATE_FORMAT(#{dayStr}, '%Y-%m')
+			        OR DATE_FORMAT(sees.sunday_, '%Y-%m')=DATE_FORMAT(#{dayStr}, '%Y-%m'))
 		GROUP BY su.organ_id_
 		ORDER BY su.organ_id_
 	</select>
@@ -398,11 +326,11 @@
 		WHERE
 			m.del_flag_ = 0
 			AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
-		  	AND m.status_ = #{courseStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		  	AND m.status_ = 'OVER'
 			AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
 			AND m.organ_id_ IS NOT NULL
 			<if test="groupType!=null">
-				AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+				AND m.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			</if>
 			<if test="dayStr!=null and dayStr!=''">
 				AND DATE_FORMAT(m.class_date_, '%Y-%m-%d') = #{dayStr}
@@ -413,31 +341,6 @@
 			m.organ_id_;
 	</select>
 
-	<select id="getGroupSurplusCourseData" resultMap="IndexBaseMonthData">
-		SELECT
-			m.organ_id_,
-			#{dayStr} month_,
-			COUNT( m.id_ ) total_num_,
-			COUNT( m.id_ ) activate_num_,
-			COUNT( m.id_ ) percent_
-		FROM
-			course_schedule m
-		WHERE
-			m.del_flag_ = 0
-			AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
-			AND m.status_ = #{courseStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-			AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
-			AND m.organ_id_ IS NOT NULL
-			<if test="groupType!=null">
-				AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-			</if>
-			<if test="dayStr!=null and dayStr!=''">
-				AND DATE_FORMAT(m.create_time_, '%Y-%m-%d') = #{dayStr}
-			</if>
-		GROUP BY m.organ_id_
-		ORDER BY m.organ_id_;
-	</select>
-
 	<select id="getOtherStudentData" resultMap="IndexBaseMonthData">
 		SELECT
 			su.organ_id_,
@@ -464,32 +367,6 @@
 			su.organ_id_;
 	</select>
 
-	<select id="getVipPracticeAddStudentData" resultMap="IndexBaseMonthData">
-		SELECT
-			su.organ_id_,
-			#{dayStr} month_,
-			COUNT( DISTINCT s.user_id_ ) total_num_,
-			COUNT( DISTINCT s.user_id_ ) activate_num_,
-			COUNT( DISTINCT s.user_id_ ) percent_
-		FROM
-			sys_user su
-			LEFT JOIN course_schedule_student_payment s ON su.id_=s.user_id_
-			LEFT JOIN course_schedule_student_payment cssp1 ON s.user_id_=cssp1.user_id_ AND cssp1.create_time_&lt;#{dayStr}
-			LEFT JOIN course_schedule m ON s.course_schedule_id_=m.id_
-		WHERE
-			m.del_flag_ = 0
-			AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
-			AND cssp1.id_ IS NULL
-			AND su.organ_id_ IS NOT NULL
-			AND m.group_type_ IN ('VIP', 'PRACTICE')
-			AND m.status_ = 'NOT_START'
-			<if test="dayStr!=null and dayStr!=''">
-				AND DATE_FORMAT(s.create_time_, '%Y-%m-%d') = #{dayStr}
-			</if>
-		GROUP BY su.organ_id_
-		ORDER BY su.organ_id_;
-	</select>
-
 	<select id="getStudentConversionData" resultMap="IndexBaseMonthData">
 		SELECT
 			cs.organ_id_,