|
@@ -233,8 +233,8 @@
|
|
<result column="organ_name_" property="organName" />
|
|
<result column="organ_name_" property="organName" />
|
|
<result column="cooperation_organ_id_" property="cooperationOrganId" />
|
|
<result column="cooperation_organ_id_" property="cooperationOrganId" />
|
|
<result column="cooperation_organ_name_" property="cooperationOrganName" />
|
|
<result column="cooperation_organ_name_" property="cooperationOrganName" />
|
|
- <result column="subject_teacher_id_" property="subjectTeacherId" />
|
|
|
|
- <result column="subject_teacher_name_" property="subjectTeacherName" />
|
|
|
|
|
|
+ <result column="teacher_id_" property="subjectTeacherId" />
|
|
|
|
+ <result column="real_name_" property="subjectTeacherName" />
|
|
<result column="course_balance_" property="courseBalance" />
|
|
<result column="course_balance_" property="courseBalance" />
|
|
<result column="student_status_" property="studentStatus" />
|
|
<result column="student_status_" property="studentStatus" />
|
|
</association>
|
|
</association>
|
|
@@ -249,24 +249,21 @@
|
|
</if>
|
|
</if>
|
|
<if test="studentStatus != null and studentStatus != ''">
|
|
<if test="studentStatus != null and studentStatus != ''">
|
|
<if test="studentStatus == 'NORMAL'">
|
|
<if test="studentStatus == 'NORMAL'">
|
|
- AND (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0)
|
|
|
|
|
|
+ AND (ss.last_visit_status_ = #{feedbackType} OR ((ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND ss.lately_year_course_consumer_ > 0))
|
|
</if>
|
|
</if>
|
|
<if test="studentStatus == 'SLEEPY'">
|
|
<if test="studentStatus == 'SLEEPY'">
|
|
- AND ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0
|
|
|
|
|
|
+ AND (ss.last_visit_status_ = #{feedbackType} OR (ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0))
|
|
</if>
|
|
</if>
|
|
<if test="studentStatus == 'LOST'">
|
|
<if test="studentStatus == 'LOST'">
|
|
- AND ss.over_course_num_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 AND suca.course_balance_ <= 0
|
|
|
|
|
|
+ AND (ss.last_visit_status_ = #{feedbackType} OR (ss.over_course_num_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 AND suca.course_balance_ <= 0))
|
|
</if>
|
|
</if>
|
|
<if test="studentStatus == 'PAUSE'">
|
|
<if test="studentStatus == 'PAUSE'">
|
|
- AND suca.course_balance_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0
|
|
|
|
|
|
+ AND (ss.last_visit_status_ = #{feedbackType} OR (suca.course_balance_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0))
|
|
</if>
|
|
</if>
|
|
</if>
|
|
</if>
|
|
<if test="studentStatus == null or studentStatus == ''">
|
|
<if test="studentStatus == null or studentStatus == ''">
|
|
AND (ss.over_course_num_ > 0 OR ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0 OR suca.course_balance_ > 0)
|
|
AND (ss.over_course_num_ > 0 OR ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0 OR suca.course_balance_ > 0)
|
|
</if>
|
|
</if>
|
|
- <if test="feedbackType != null and feedbackType != ''">
|
|
|
|
- AND ss.last_visit_status_ = #{feedbackType}
|
|
|
|
- </if>
|
|
|
|
<if test="latelyCourseConsumer != null">
|
|
<if test="latelyCourseConsumer != null">
|
|
AND ss.lately_course_consumer_ = #{latelyCourseConsumer}
|
|
AND ss.lately_course_consumer_ = #{latelyCourseConsumer}
|
|
</if>
|
|
</if>
|
|
@@ -335,15 +332,27 @@
|
|
<select id="queryStatistics" resultMap="StudentStatisticsDto">
|
|
<select id="queryStatistics" resultMap="StudentStatisticsDto">
|
|
SELECT *,ss.not_start_course_fee_ + ss.no_course_fee_ preCourseFee,
|
|
SELECT *,ss.not_start_course_fee_ + ss.no_course_fee_ preCourseFee,
|
|
ss.no_schedule_num_ + ss.sub_course_num_ subTotalCourse,
|
|
ss.no_schedule_num_ + ss.sub_course_num_ subTotalCourse,
|
|
- CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0) THEN '在读'
|
|
|
|
- WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 THEN '沉睡'
|
|
|
|
- WHEN ss.over_course_num_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 AND suca.course_balance_ <= 0 THEN '流失'
|
|
|
|
- WHEN suca.course_balance_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 THEN '暂停' ELSE '其他' END student_status_
|
|
|
|
|
|
+ CASE WHEN ss.last_visit_status_ IN ('NORMAL','PAUSE','SLEEPY','LOST') THEN ss.last_visit_status_
|
|
|
|
+ WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0) THEN 'NORMAL'
|
|
|
|
+ WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 THEN 'SLEEPY'
|
|
|
|
+ WHEN ss.over_course_num_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 AND suca.course_balance_ <= 0 THEN 'LOST'
|
|
|
|
+ WHEN suca.course_balance_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 THEN 'PAUSE' ELSE 'OTHER' END student_status_
|
|
,suca.course_balance_,
|
|
,suca.course_balance_,
|
|
- ss.last_visit_time_
|
|
|
|
|
|
+ ss.last_visit_time_,stm.teacher_id_,stm.real_name_
|
|
FROM student_basic_info sbi
|
|
FROM student_basic_info sbi
|
|
LEFT JOIN student_statistics ss ON ss.user_id_ = sbi.user_id_
|
|
LEFT JOIN student_statistics ss ON ss.user_id_ = sbi.user_id_
|
|
LEFT JOIN sys_user_cash_account suca ON sbi.user_id_ = suca.user_id_
|
|
LEFT JOIN sys_user_cash_account suca ON sbi.user_id_ = suca.user_id_
|
|
|
|
+ left join (select student_id_,group_concat(stm.teacher_id_) teacher_id_,group_concat(su.real_name_)real_name_ from student_teacher_mapper stm
|
|
|
|
+ left join sys_user su ON su.id_ = stm.teacher_id_
|
|
|
|
+ <if test="groupType != null and groupType != ''">
|
|
|
|
+ <if test="groupType == 'VIP' or groupType == 'THEORY'">
|
|
|
|
+ where stm.teacher_type_ = 'VIP'
|
|
|
|
+ </if>
|
|
|
|
+ <if test="groupType == 'PRACTICE'">
|
|
|
|
+ where stm.teacher_type_ = 'PRACTICE'
|
|
|
|
+ </if>
|
|
|
|
+ </if>
|
|
|
|
+ group by stm.student_id_) stm ON sbi.user_id_ = stm.student_id_
|
|
<include refid="queryStatisticsSql"/>
|
|
<include refid="queryStatisticsSql"/>
|
|
<include refid="global.limit"/>
|
|
<include refid="global.limit"/>
|
|
</select>
|
|
</select>
|
|
@@ -358,17 +367,18 @@
|
|
<result property="waitRenewNum" column="waitRenewNum"/>
|
|
<result property="waitRenewNum" column="waitRenewNum"/>
|
|
<result property="subCourseNum" column="subCourseNum"/>
|
|
<result property="subCourseNum" column="subCourseNum"/>
|
|
<result property="noScheduleNum" column="noScheduleNum"/>
|
|
<result property="noScheduleNum" column="noScheduleNum"/>
|
|
|
|
+ <result property="registerNum" column="registerNum"/>
|
|
</resultMap>
|
|
</resultMap>
|
|
<select id="studentSmallClassStatisticsSum" resultMap="StudentStatisticsSumDto">
|
|
<select id="studentSmallClassStatisticsSum" resultMap="StudentStatisticsSumDto">
|
|
SELECT
|
|
SELECT
|
|
- COUNT(CASE WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 THEN 1 ELSE NULL END) 'sleepStudentNum',
|
|
|
|
|
|
+ COUNT(CASE WHEN (ss.no_schedule_num_ > 0 OR suca.course_balance_ > 0) AND (ss.over_course_num_ <= 0 OR ss.lately_year_course_consumer_ <= 0) THEN 1 ELSE NULL END) 'sleepStudentNum',
|
|
COUNT(CASE WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 AND ss.no_schedule_num_ > 0 THEN 1 ELSE NULL END) 'sleepStudentHasNotSchedule',
|
|
COUNT(CASE WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 AND ss.no_schedule_num_ > 0 THEN 1 ELSE NULL END) 'sleepStudentHasNotSchedule',
|
|
COUNT(CASE WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 AND ss.no_schedule_num_ <= 0 THEN 1 ELSE NULL END) 'sleepStudentNoNotSchedule',
|
|
COUNT(CASE WHEN ss.over_course_num_ > 0 AND (ss.sub_course_num_ > 0 OR ss.no_schedule_num_ > 0) AND ss.lately_year_course_consumer_ <= 0 AND ss.no_schedule_num_ <= 0 THEN 1 ELSE NULL END) 'sleepStudentNoNotSchedule',
|
|
- COUNT(CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0) THEN 1 ELSE NULL END) 'normalStudentNum',
|
|
|
|
- COUNT(CASE WHEN ((ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0)) AND ss.normal_group_num_ > 0 THEN 1 ELSE NULL END) 'normalStudentHasNormalGroupNum',
|
|
|
|
|
|
+ COUNT(CASE WHEN (ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND ss.lately_year_course_consumer_ > 0 THEN 1 ELSE NULL END) 'normalStudentNum',
|
|
COUNT(CASE WHEN suca.course_balance_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 THEN 1 ELSE NULL END) 'hasCourseBalanceAndNotSubCourseNum',
|
|
COUNT(CASE WHEN suca.course_balance_ > 0 AND ss.sub_course_num_ <= 0 AND ss.no_schedule_num_ <= 0 THEN 1 ELSE NULL END) 'hasCourseBalanceAndNotSubCourseNum',
|
|
COUNT(CASE WHEN ((ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0)) AND ss.no_schedule_num_ > 0 THEN 1 ELSE NULL END) 'normalStudentHasNoScheduleNum',
|
|
COUNT(CASE WHEN ((ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0) AND (ss.lately_year_course_consumer_ > 0 OR ss.over_course_num_ <= 0)) AND ss.no_schedule_num_ > 0 THEN 1 ELSE NULL END) 'normalStudentHasNoScheduleNum',
|
|
COUNT(CASE WHEN (ss.no_schedule_num_ + ss.sub_course_num_) < 4 THEN 1 ELSE NULL END) 'waitRenewNum',
|
|
COUNT(CASE WHEN (ss.no_schedule_num_ + ss.sub_course_num_) < 4 THEN 1 ELSE NULL END) 'waitRenewNum',
|
|
|
|
+ COUNT(CASE WHEN ss.no_schedule_num_ > 0 OR ss.sub_course_num_ > 0 OR ss.over_course_num_ > 0 THEN 1 ELSE NULL END) 'registerNum',
|
|
SUM(ss.sub_course_num_) 'subCourseNum',
|
|
SUM(ss.sub_course_num_) 'subCourseNum',
|
|
SUM(ss.no_schedule_num_) 'noScheduleNum'
|
|
SUM(ss.no_schedule_num_) 'noScheduleNum'
|
|
FROM student_statistics ss
|
|
FROM student_statistics ss
|
|
@@ -504,4 +514,25 @@
|
|
</foreach>
|
|
</foreach>
|
|
group by ss.user_id_ , u.organ_id_
|
|
group by ss.user_id_ , u.organ_id_
|
|
</select>
|
|
</select>
|
|
|
|
+ <select id="countNormalNum" resultType="java.lang.Integer">
|
|
|
|
+ <if test="groupType == 'VIP'">
|
|
|
|
+ select count(distinct cssp.user_id_) from vip_group vg
|
|
|
|
+ left join course_schedule_student_payment cssp ON cssp.music_group_id_ = vg.id_
|
|
|
|
+ where cssp.group_type_ = 'VIP' and vg.group_status_ = 2 AND vg.vip_group_category_id_ != 16
|
|
|
|
+ </if>
|
|
|
|
+ <if test="groupType == 'THEORY'">
|
|
|
|
+ select count(distinct cssp.user_id_) from vip_group vg
|
|
|
|
+ left join course_schedule_student_payment cssp ON cssp.music_group_id_ = vg.id_
|
|
|
|
+ where cssp.group_type_ = 'VIP' and vg.group_status_ = 2 AND vg.vip_group_category_id_ = 16
|
|
|
|
+ </if>
|
|
|
|
+ <if test="groupType == 'PRACTICE'">
|
|
|
|
+ select count(distinct cssp.user_id_) from practice_group vg
|
|
|
|
+ left join course_schedule_student_payment cssp ON cssp.music_group_id_ = vg.id_
|
|
|
|
+ where cssp.group_type_ = 'PRACTICE' and vg.group_status_ = 'NORMAL'
|
|
|
|
+ </if>
|
|
|
|
+ AND vg.organ_id_ IN
|
|
|
|
+ <foreach collection="organIdList" item="organId" open="(" close=")" separator=",">
|
|
|
|
+ #{organId}
|
|
|
|
+ </foreach>
|
|
|
|
+ </select>
|
|
</mapper>
|
|
</mapper>
|