Przeglądaj źródła

学员小课导出

zouxuan 3 lat temu
rodzic
commit
3e7d0a2b13

+ 14 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentStatisticsDao.java

@@ -12,29 +12,32 @@ import java.util.Map;
 public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {
 
     //更新乐团主管、指导老师
-    void queryStatisticsTeacherAndEdu();
+    List<StudentStatistics> queryStatisticsTeacherAndEdu();
+
+    //更新乐团主管、指导老师
+    List<StudentStatistics> queryStatisticsTeacherAndEdu2();
 
     //更新总课时数、已完成、剩余课时数、最近30天课耗
-    void updateCourseNum();
+    List<StudentStatistics> queryStatisticsCourseNum();
 
     //更新未排课总数
-    void updateNoCourseNum();
+    List<StudentStatistics> queryStatisticsNoCourseNum();
 
     //更新未开始价值
-    void updateNotStartCourseFee();
+    List<StudentStatistics> queryStatisticsNotStartCourseFee();
 
     //更新未排课课程价值
-    void updateNoCourseFee();
+    List<StudentStatistics> queryStatisticsNoCourseFee();
 
     //更新第一次课的时间\最近一次课时间
-    void updateFirstAndLastCourseTime();
+    List<StudentStatistics> queryStatisticsFirstAndLastCourseTime();
 
     int countStatistics(Map<String, Object> params);
 
     List<StudentStatisticsDto> queryStatistics(Map<String, Object> params);
 
     //更新进行中课程组数量
-    void updateNormalGroupNum();
+    List<StudentStatistics> queryStatisticsNormalGroupNum();
 
     //汇总小课数据
     StudentStatisticsSumDto studentSmallClassStatisticsSum(@Param("groupType") String groupType, @Param("organIdList") List<Integer> organIdList);
@@ -56,4 +59,8 @@ public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics
 
     //获取乐团主管
     List<Integer> queryDirectorList(@Param("groupType") String groupType);
+
+    void clean();
+
+    void batchUpdate(List<StudentStatistics> statisticsList);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -1,5 +1,6 @@
 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;
@@ -14,9 +15,11 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.ListUtils;
 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.stream.Collectors;
@@ -37,12 +40,14 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void updateStudentStatistics() {
 		List<StudentStatistics> statisticsList = new ArrayList<>();
 		//获取声部班老师
 		statisticsList.addAll(studentBasicInfoDao.queryStatisticsSubjectTeacher());
 		//更新乐团主管、指导老师
 		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu());
+		statisticsList.addAll(studentStatisticsDao.queryStatisticsTeacherAndEdu2());
 		//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
 		statisticsList.addAll(studentStatisticsDao.queryStatisticsCourseNum());
 		//更新未排课总数
@@ -55,6 +60,14 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 		statisticsList.addAll(studentStatisticsDao.queryStatisticsFirstAndLastCourseTime());
 		//更新进行中课程组数量
 		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);
+			}
+		}
 	}
 
 	@Override

+ 287 - 19
mec-biz/src/main/resources/config/mybatis/StudentStatisticsMapper.xml

@@ -125,26 +125,57 @@
 		</if>
 		</set> WHERE id_ = #{id}
 	</update>
-	<update id="queryStatisticsTeacherAndEdu">
-		SELECT updateTeacherAndEdu()
+	<update id="clean">
+		UPDATE student_statistics ss SET ss.total_course_num_ = 0,ss.sub_course_num_ = 0,
+		ss.over_course_num_ = 0,ss.lately_course_consumer_ = 0,ss.lately_year_course_consumer_ = 0,
+		ss.no_course_fee_ = 0,ss.no_schedule_num_ = 0,ss.normal_group_num_ = 0,ss.not_start_course_fee_ = 0,
+		ss.teacher_id_ = NULL,ss.teacher_name_ = NULL,ss.music_director_id_ = NULL,ss.music_director_name_ = NULL
 	</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 id="batchUpdate">
+		UPDATE student_statistics
+		<foreach collection="statisticsList" item="bean" index="index" open="" close="" separator=",">
+			<set>
+				<if test="bean.overCourseNum != null">
+					over_course_num_ = #{bean.overCourseNum},
+				</if>
+				<if test="latelyCourseConsumer != null">
+					lately_course_consumer_ = #{bean.latelyCourseConsumer},
+				</if>
+				<if test="lastCourseTime != null">
+					last_course_time_ = #{bean.lastCourseTime},
+				</if>
+				<if test="totalCourseNum != null">
+					total_course_num_ = #{bean.totalCourseNum},
+				</if>
+				<if test="bean.musicDirectorName != null and bean.musicDirectorName != ''">
+					music_director_name_ = #{bean.musicDirectorName},
+				</if>
+				<if test="bean.teacherName != null and bean.teacherName != ''">
+					teacher_name_ = #{bean.teacherName},
+				</if>
+				<if test="bean.subCourseNum != null">
+					sub_course_num_ = #{bean.subCourseNum},
+				</if>
+				<if test="bean.teacherId != null">
+					teacher_id_ = #{bean.teacherId},
+				</if>
+				<if test="bean.musicDirectorId != null">
+					music_director_id_ = #{bean.musicDirectorId},
+				</if>
+				<if test="bean.notStartCourseFee != null">
+					not_start_course_fee_ = #{bean.notStartCourseFee},
+				</if>
+				<if test="bean.noCourseFee != null">
+					no_course_fee_ = #{bean.noCourseFee},
+				</if>
+				<if test="bean.noScheduleNum != null">
+					no_schedule_num_ = #{bean.noScheduleNum},
+				</if>
+				<if test="bean.firstCourseTime != null">
+					first_course_time_ = #{bean.firstCourseTime},
+				</if>
+			</set> WHERE user_id_ = #{bean.userId} AND group_type_ = #{bean.groupType}
+		</foreach>
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
@@ -395,6 +426,243 @@
 	<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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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="com.ym.mec.biz.dal.dao.StudentStatisticsDao.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'">