Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into saas

yonge 3 years ago
parent
commit
f270e46ffb

+ 11 - 16
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java

@@ -3,45 +3,40 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.StudentOrganDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsDto;
 import com.ym.mec.biz.dal.dto.StudentStatisticsSumDto;
-import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.StudentStatistics;
-
+import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
 
     //更新乐团主管、指导老师
-    List<StudentStatistics> queryStatisticsTeacherAndEdu();
-
-    //更新乐团主管、指导老师
-    List<StudentStatistics> queryStatisticsTeacherAndEdu2();
+    void updateTeacherAndEdu();
 
     //更新总课时数、已完成、剩余课时数、最近30天课耗
-    List<StudentStatistics> queryStatisticsCourseNum();
+    void updateCourseNum();
 
     //更新未排课总数
-    List<StudentStatistics> queryStatisticsNoCourseNum();
+    void updateNoCourseNum();
 
     //更新未开始价值
-    List<StudentStatistics> queryStatisticsNotStartCourseFee();
+    void updateNotStartCourseFee();
 
     //更新未排课课程价值
-    List<StudentStatistics> queryStatisticsNoCourseFee();
+    void updateNoCourseFee();
 
     //更新第一次课的时间\最近一次课时间
-    List<StudentStatistics> queryStatisticsFirstAndLastCourseTime();
+    void updateFirstAndLastCourseTime();
+
+    //更新进行中课程组数量
+    void updateNormalGroupNum();
 
     int countStatistics(Map<String, Object> params);
 
     List<StudentStatisticsDto> queryStatistics(Map<String, Object> params);
 
-    //更新进行中课程组数量
-    List<StudentStatistics> queryStatisticsNormalGroupNum();
-
     //汇总小课数据
     StudentStatisticsSumDto studentSmallClassStatisticsSum(@Param("groupType") String groupType, @Param("organIdList") List<Integer> organIdList);
 
@@ -66,6 +61,6 @@ public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics
     void clean();
 
     void batchUpdate(@Param("statisticsList") List<StudentStatistics> statisticsList);
-    
+
     List<StudentOrganDto> queryNoScheduleNumStudent(@Param("organIds") List<Integer> organIds);
 }

+ 9 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import com.google.common.collect.Lists;
 import com.ym.mec.biz.dal.dao.StudentBasicInfoDao;
 import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
@@ -18,12 +17,8 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 @Service
@@ -43,32 +38,22 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 
 	@Override
 	public void updateStudentStatistics() {
-		//获取声部班老师
+		//更新声部班老师
 		studentBasicInfoDao.updateSubjectTeacher();
-		List<StudentStatistics> statisticsList = new ArrayList<>();
 		//更新乐团主管、指导老师
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu());
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu2());
-		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsCourseNum());
+		studentStatisticsDao.updateTeacherAndEdu();
 		//更新未排课总数
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNoCourseNum());
+		studentStatisticsDao.updateNoCourseNum();
 		//更新未开始价值总和
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNotStartCourseFee());
+		studentStatisticsDao.updateNotStartCourseFee();
 		//更新未排课价值
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNoCourseFee());
+		studentStatisticsDao.updateNoCourseFee();
 		//更新第一次课的时间\最近一次课时间
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsFirstAndLastCourseTime());
+		studentStatisticsDao.updateFirstAndLastCourseTime();
 		//更新进行中课程组数量
-		statisticsList.addAll(studentStatisticsDao.queryStatisticsNormalGroupNum());
-		statisticsList.removeAll(Collections.singleton(null));
-		if(CollectionUtils.isNotEmpty(statisticsList)){
-//			studentStatisticsDao.clean();
-			List<List<StudentStatistics>> partition = Lists.partition(statisticsList, 1000);
-			for (List<StudentStatistics> studentStatistics : partition) {
-				studentStatisticsDao.batchUpdate(studentStatistics);
-			}
-		}
+		studentStatisticsDao.updateNormalGroupNum();
+		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
+		studentStatisticsDao.updateCourseNum();
 	}
 
 	@Override

+ 3 - 13
mec-biz/src/main/resources/config/mybatis/StudentBasicInfoMapper.xml

@@ -100,17 +100,7 @@
     <select id="getMaxId" resultType="java.lang.Integer">
 		SELECT MAX(id_) FROM student_basic_info
 	</select>
-	<select id="updateSubjectTeacher" resultType="int">
-		UPDATE (
-		SELECT cm.user_id_,cgtm.user_id_ teacher_id_ FROM class_group_teacher_mapper cgtm
-		LEFT JOIN (SELECT cgsm.user_id_,MAX(cgtm.id_) id_ FROM class_group cg
-		LEFT JOIN class_group_student_mapper cgsm ON cgsm.class_group_id_ = cg.id_
-		LEFT JOIN class_group_teacher_mapper cgtm ON cgtm.class_group_id_ = cg.id_
-		WHERE cg.type_ = 'NORMAL' AND cgsm.status_ = 'NORMAL' AND cg.del_flag_ = 0 AND cgtm.teacher_role_ = 'BISHOP'
-		GROUP BY cgsm.user_id_) cm ON cm.id_ = cgtm.id_
-		) st
-		LEFT JOIN student_basic_info sbi ON st.user_id_ = sbi.user_id_
-			LEFT JOIN sys_user su ON su.id_ = st.teacher_id_
-			SET sbi.subject_teacher_id_ = st.teacher_id_,sbi.subject_teacher_name_ = su.real_name_;
-	</select>
+	<update id="updateSubjectTeacher">
+		SELECT updateSubjectTeacher()
+	</update>
 </mapper>

+ 21 - 237
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -188,6 +188,27 @@
 	<select id="queryPage" resultMap="StudentStatistics" parameterType="map">
 		SELECT * FROM student_statistics ORDER BY id_ <include refid="global.limit"/>
 	</select>
+	<update id="updateTeacherAndEdu">
+		SELECT updateTeacherAndEdu()
+	</update>
+	<update id="updateCourseNum">
+		SELECT updateCourseNum()
+	</update>
+	<update id="updateNoCourseNum">
+		SELECT updateNoCourseNum()
+	</update>
+	<update id="updateNotStartCourseFee">
+		SELECT updateNotStartCourseFee()
+	</update>
+	<update id="updateNoCourseFee">
+		SELECT updateNoCourseFee()
+	</update>
+	<update id="updateFirstAndLastCourseTime">
+		SELECT updateFirstAndLastCourseTime()
+	</update>
+	<update id="updateNormalGroupNum">
+		SELECT updateNormalGroupNum()
+	</update>
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
@@ -427,243 +448,6 @@
 	<select id="queryDirectorList" resultType="java.lang.Integer">
 		SELECT DISTINCT music_director_id_ FROM student_statistics WHERE group_type_ = #{groupType} AND music_director_id_ IS NOT NULL
 	</select>
-	<select id="queryStatisticsTeacherAndEdu" resultMap="com.ym.mec.biz.dal.dao.StudentStatisticsDao.StudentStatistics">
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'PRACTICE' group_type_
-		FROM ( SELECT cs.actual_teacher_id_,ct.user_id_,pg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		WHERE cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		WHERE cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-		UNION ALL
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'THEORY' group_type_
-		FROM (SELECT cs.actual_teacher_id_,ct.user_id_,vg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-		UNION ALL
-		SELECT et.user_id_,et.actual_teacher_id_ teacher_id_,su.real_name_ teacher_name_,et.educational_teacher_id_ music_director_id_,su1.real_name_ music_director_name_,'VIP' group_type_
-		FROM (SELECT cs.actual_teacher_id_,ct.user_id_,vg.educational_teacher_id_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN (SELECT cssp.user_id_,MAX(cs.class_date_) class_date_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_) ct ON ct.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.class_date_ = ct.class_date_ AND cs.status_ = 'OVER' AND cssp.group_type_ = 'VIP'
-		GROUP BY ct.user_id_) et
-		LEFT JOIN sys_user su ON su.id_ = et.actual_teacher_id_
-		LEFT JOIN sys_user su1 ON su1.id_ = et.educational_teacher_id_
-		GROUP BY et.user_id_
-	</select>
-	<select id="queryStatisticsTeacherAndEdu2" resultMap="StudentStatistics">
-		SELECT ss.user_id_,pg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'PRACTICE' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		LEFT JOIN sys_user su ON su.id_ = pg.user_id_
-		WHERE cssp.group_type_ = 'PRACTICE' AND pg.group_status_ = 'NORMAL' AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,pg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'PRACTICE' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		LEFT JOIN sys_user su ON su.id_ = pg.educational_teacher_id_
-		WHERE cssp.group_type_ = 'PRACTICE' AND pg.group_status_ = 'NORMAL' AND ss.music_director_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,vg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'THEORY' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
-		WHERE vgc.name_ = '乐理课' AND cssp.group_type_ = 'THEORY' AND vg.group_status_ = 2 AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,vg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'THEORY' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
-		WHERE vgc.name_ = '乐理课' AND cssp.group_type_ = 'THEORY' AND vg.group_status_ = 2 AND ss.music_director_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,vg.user_id_ teacher_id_,su.real_name_ teacher_name_,'' music_director_id_,'' music_director_name_,'VIP' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.user_id_
-		WHERE vgc.name_ != '乐理课' AND cssp.group_type_ = 'VIP' AND vg.group_status_ = 2 AND ss.teacher_id_ IS NULL
-		UNION ALL
-		SELECT ss.user_id_,'' teacher_id_,'' teacher_name_,vg.educational_teacher_id_ music_director_id_,su.real_name_ music_director_name_,'VIP' group_type_ FROM student_statistics ss
-		LEFT JOIN course_schedule_student_payment cssp ON ss.user_id_ = cssp.user_id_
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		LEFT JOIN sys_user su ON su.id_ = vg.educational_teacher_id_
-		WHERE vgc.name_ != '乐理课' AND cssp.group_type_ = 'VIP' AND vg.group_status_ = 2 AND ss.music_director_id_ IS NULL
-	</select>
-	<select id="queryStatisticsCourseNum" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(cssp.course_schedule_id_) total_course_num_,COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) sub_course_num_,
-		COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN NULL ELSE 1 END) over_course_num_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 30 DAY),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_course_consumer_,
-		COUNT(CASE WHEN cs.status_ != 'NOT_START' AND cs.class_date_ >= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),'%Y-%m-%d') THEN 1 ELSE NULL END) lately_year_course_consumer_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNoCourseNum" resultMap="StudentStatistics">
-		SELECT aum.user_id_,SUM(CASE WHEN aum.practice_flag_ = 1 THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_practice_flag_ = 1 THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_,'PRACTICE' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		WHERE aum.return_fee_ = 0 AND (aum.practice_flag_ = 1 OR aum.give_practice_flag_ = 1)
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT a.user_id_,SUM(a.no_schedule_num_) no_schedule_num_,'THEORY' group_type_ FROM (
-		SELECT aum.user_id_,SUM(CASE WHEN aum.vip_flag_ = 1 AND vgc.name_ = '乐理课' THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_vip_flag_ = 1 AND vgc1.name_ = '乐理课' THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		LEFT JOIN vip_group_category vgc1 ON vgc1.id_ = vga.give_category_id_
-		WHERE aum.return_fee_ = 0 AND ((aum.vip_flag_ = 1 AND vgc.name_ = '乐理课') OR (aum.give_vip_flag_ = 1 AND vgc1.name_ = '乐理课'))
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT user_id_,10 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"music_theory": 1','%')) a
-		GROUP BY a.user_id_
-		UNION ALL
-		SELECT a.user_id_,SUM(a.no_schedule_num_) no_schedule_num_,'VIP' group_type_ FROM (
-		SELECT aum.user_id_,SUM(CASE WHEN aum.vip_flag_ = 1 AND vgc.name_ != '乐理课' THEN vga.min_course_num_ ELSE 0 END +
-		CASE WHEN aum.give_vip_flag_ = 1  AND vgc1.name_ != '乐理课' THEN vga.give_course_num_ ELSE 0 END) no_schedule_num_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		LEFT JOIN vip_group_category vgc1 ON vgc1.id_ = vga.give_category_id_
-		WHERE aum.return_fee_ = 0 AND ((aum.vip_flag_ = 1 AND vgc.name_ != '乐理课') OR (aum.give_vip_flag_ = 1 AND vgc1.name_ != '乐理课'))
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT user_id_,12 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"vip1": 1','%')
-		UNION ALL
-		SELECT user_id_,12 no_schedule_num_ FROM student WHERE activity_course_detail_ LIKE CONCAT('%','"vip2": 1','%')) a
-		GROUP BY a.user_id_
-	</select>
-	<select id="queryStatisticsNotStartCourseFee" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'PRACTICE' AND cs.status_ = 'NOT_START'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' AND vgc.name_ = '乐理课'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,SUM(cssp.expect_price_) not_start_course_fee_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' AND vgc.name_ != '乐理课'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNoCourseFee" resultMap="StudentStatistics">
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'PRACTICE' group_type_ FROM activity_user_mapper aum
-		WHERE aum.practice_flag_ = 1 AND return_fee_ = 0
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'THEORY' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		WHERE aum.vip_flag_ = 1 AND return_fee_ = 0 AND vgc.name_ = '乐理课'
-		GROUP BY aum.user_id_
-		UNION ALL
-		SELECT aum.user_id_,SUM(aum.actual_price_) no_course_fee_,'VIP' group_type_ FROM activity_user_mapper aum
-		LEFT JOIN vip_group_activity vga ON vga.id_ = aum.activity_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vga.vip_group_category_id_list_
-		WHERE aum.vip_flag_ = 1 AND return_fee_ = 0 AND vgc.name_ != '乐理课'
-		GROUP BY aum.user_id_
-	</select>
-	<select id="queryStatisticsFirstAndLastCourseTime"
-			resultMap="StudentStatistics">
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'PRACTICE' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		WHERE cs.status_ = 'OVER' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'THEORY' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND cs.status_ = 'OVER' AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,MIN(cs.class_date_) first_course_time_,MAX(cs.class_date_) last_course_time_,'VIP' group_type_ FROM course_schedule_student_payment cssp
-		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.group_type_ = cssp.group_type_
-		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND cs.status_ = 'OVER' AND cs.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
-	<select id="queryStatisticsNormalGroupNum" resultMap="StudentStatistics">
-		SELECT cssp.user_id_,COUNT(DISTINCT pg.id_) normal_group_num_,'PRACTICE' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN practice_group pg ON pg.id_ = cssp.music_group_id_
-		WHERE pg.group_status_ = 'NORMAL' AND cssp.group_type_ = 'PRACTICE'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(DISTINCT vg.id_) normal_group_num_,'THEORY' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ = '乐理课' AND vg.group_status_ = 2 AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-		UNION ALL
-		SELECT cssp.user_id_,COUNT(DISTINCT vg.id_) normal_group_num_,'VIP' group_type_
-		FROM course_schedule_student_payment cssp
-		LEFT JOIN vip_group vg ON vg.id_ = cssp.music_group_id_
-		LEFT JOIN vip_group_category vgc ON vgc.id_ = vg.vip_group_category_id_
-		WHERE vgc.name_ != '乐理课' AND vg.group_status_ = 2 AND cssp.group_type_ = 'VIP'
-		GROUP BY cssp.user_id_
-	</select>
 	<sql id="dateTypeSql">
 		WHERE data_type_ =
 		<if test="groupType == 'VIP'">