|
|
@@ -218,26 +218,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
ORDER BY c.grade DESC, sm.college_name, sm.major_name, sm.class_name, MAX(sm.create_time) DESC
|
|
|
</select>
|
|
|
|
|
|
- <!-- 查询二级学院下的学院、专业、班级学生统计信息(按床位分配统计) -->
|
|
|
- <select id="getCollegeStudentStatsByClass" resultType="java.util.Map">
|
|
|
- SELECT
|
|
|
+ <!--
|
|
|
+ 宿舍「分配到班级」班级树:以 xg_class_msg 为主数据源(无住宿生也出班节点)。
|
|
|
+ 住宿生人数 / 已分配床位仅 LEFT JOIN 统计。
|
|
|
+ -->
|
|
|
+ <sql id="dormClassTreeSelectColumns">
|
|
|
c.grade,
|
|
|
- COALESCE(c.enrollment_year, sm.enrollment_year) AS enrollment_year,
|
|
|
- sm.college_id,
|
|
|
- sm.college_name,
|
|
|
- sm.major_id,
|
|
|
- sm.major_name,
|
|
|
- sm.class_id,
|
|
|
- sm.class_name,
|
|
|
- COALESCE(SUM(CASE WHEN sm.gender = '0' AND sm.is_boarder = 1 THEN 1 ELSE 0 END), 0) AS male_total,
|
|
|
- COALESCE(SUM(CASE WHEN sm.gender = '1' AND sm.is_boarder = 1 THEN 1 ELSE 0 END), 0) AS female_total,
|
|
|
+ c.enrollment_year AS enrollment_year,
|
|
|
+ c.college_id,
|
|
|
+ COALESCE(dc.dept_name, c.college_name) AS college_name,
|
|
|
+ c.major_id,
|
|
|
+ COALESCE(dm.dept_name, c.major_name) AS major_name,
|
|
|
+ c.id AS class_id,
|
|
|
+ c.class_name,
|
|
|
+ COALESCE(SUM(CASE WHEN sm.id IS NOT NULL AND sm.gender = '0' AND sm.is_boarder = 1 THEN 1 ELSE 0 END), 0) AS male_total,
|
|
|
+ COALESCE(SUM(CASE WHEN sm.id IS NOT NULL AND sm.gender = '1' AND sm.is_boarder = 1 THEN 1 ELSE 0 END), 0) AS female_total,
|
|
|
COALESCE((
|
|
|
SELECT COUNT(DISTINCT dbs.bed_id)
|
|
|
FROM xg_dorm_bed_student dbs
|
|
|
LEFT JOIN xg_dorm_bed db ON dbs.bed_id = db.id
|
|
|
LEFT JOIN xg_dorm_room dr ON db.room_id = dr.id
|
|
|
LEFT JOIN xg_dorm_building dbuild ON dr.building_id = dbuild.id
|
|
|
- WHERE dbs.class_id = sm.class_id
|
|
|
+ WHERE dbs.class_id = c.id
|
|
|
AND dbs.deleted = '0'
|
|
|
AND dbs.status = '0'
|
|
|
AND db.deleted = '0'
|
|
|
@@ -249,76 +251,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
LEFT JOIN xg_dorm_bed db ON dbs.bed_id = db.id
|
|
|
LEFT JOIN xg_dorm_room dr ON db.room_id = dr.id
|
|
|
LEFT JOIN xg_dorm_building dbuild ON dr.building_id = dbuild.id
|
|
|
- WHERE dbs.class_id = sm.class_id
|
|
|
+ WHERE dbs.class_id = c.id
|
|
|
AND dbs.deleted = '0'
|
|
|
AND dbs.status = '0'
|
|
|
AND db.deleted = '0'
|
|
|
AND dbuild.building_type = '2'
|
|
|
), 0) AS female_assigned
|
|
|
- FROM xg_student_msg sm
|
|
|
- LEFT JOIN xg_class_msg c ON sm.class_id = c.id
|
|
|
- LEFT JOIN sys_dept d ON sm.college_id = d.dept_id
|
|
|
- WHERE sm.deleted = 0
|
|
|
- AND sm.student_status = '1'
|
|
|
- AND sm.is_boarder = 1
|
|
|
- AND (d.parent_id = #{secondaryCollegeId} OR d.dept_id = #{secondaryCollegeId} OR FIND_IN_SET(#{secondaryCollegeId}, d.ancestors))
|
|
|
- AND sm.college_id IS NOT NULL
|
|
|
- AND sm.major_id IS NOT NULL
|
|
|
- AND sm.class_id IS NOT NULL
|
|
|
- GROUP BY c.grade, COALESCE(c.enrollment_year, sm.enrollment_year),
|
|
|
- sm.college_id, sm.college_name, sm.major_id, sm.major_name, sm.class_id, sm.class_name
|
|
|
- ORDER BY c.grade DESC, sm.college_name, sm.major_name, sm.class_name, MAX(sm.create_time) DESC
|
|
|
+ </sql>
|
|
|
+
|
|
|
+ <sql id="dormClassTreeFromJoin">
|
|
|
+ FROM xg_class_msg c
|
|
|
+ LEFT JOIN sys_dept dc ON c.college_id = dc.dept_id
|
|
|
+ LEFT JOIN sys_dept dm ON c.major_id = dm.dept_id
|
|
|
+ LEFT JOIN xg_student_msg sm ON sm.class_id = c.id
|
|
|
+ AND sm.deleted = 0
|
|
|
+ AND sm.student_status = '1'
|
|
|
+ </sql>
|
|
|
+
|
|
|
+ <sql id="dormClassTreeGroupBy">
|
|
|
+ GROUP BY c.grade, c.enrollment_year, c.college_id, COALESCE(dc.dept_name, c.college_name),
|
|
|
+ c.major_id, COALESCE(dm.dept_name, c.major_name), c.id, c.class_name
|
|
|
+ </sql>
|
|
|
+
|
|
|
+ <!-- 本院全部有效班级(宿舍分配到班级) -->
|
|
|
+ <select id="getCollegeStudentStatsByClass" resultType="java.util.Map">
|
|
|
+ SELECT
|
|
|
+ <include refid="dormClassTreeSelectColumns"/>
|
|
|
+ <include refid="dormClassTreeFromJoin"/>
|
|
|
+ WHERE c.deleted = 0
|
|
|
+ AND c.college_id = #{collegeId}
|
|
|
+ AND c.college_id IS NOT NULL
|
|
|
+ AND c.major_id IS NOT NULL
|
|
|
+ <include refid="dormClassTreeGroupBy"/>
|
|
|
+ ORDER BY c.grade DESC, college_name, major_name, c.class_name
|
|
|
</select>
|
|
|
|
|
|
- <!-- 全校一年级班级统计(宿舍分配到班级:人文学院代理可见) -->
|
|
|
+ <!-- 全校一年级班级(宿舍分配到班级:人文学院代理可见;以班级 enrollment_year 为准) -->
|
|
|
<select id="getFreshmanStudentStatsByClass" resultType="java.util.Map">
|
|
|
SELECT
|
|
|
- c.grade,
|
|
|
- COALESCE(c.enrollment_year, sm.enrollment_year) AS enrollment_year,
|
|
|
- sm.college_id,
|
|
|
- sm.college_name,
|
|
|
- sm.major_id,
|
|
|
- sm.major_name,
|
|
|
- sm.class_id,
|
|
|
- sm.class_name,
|
|
|
- COALESCE(SUM(CASE WHEN sm.gender = '0' AND sm.is_boarder = 1 THEN 1 ELSE 0 END), 0) AS male_total,
|
|
|
- COALESCE(SUM(CASE WHEN sm.gender = '1' AND sm.is_boarder = 1 THEN 1 ELSE 0 END), 0) AS female_total,
|
|
|
- COALESCE((
|
|
|
- SELECT COUNT(DISTINCT dbs.bed_id)
|
|
|
- FROM xg_dorm_bed_student dbs
|
|
|
- LEFT JOIN xg_dorm_bed db ON dbs.bed_id = db.id
|
|
|
- LEFT JOIN xg_dorm_room dr ON db.room_id = dr.id
|
|
|
- LEFT JOIN xg_dorm_building dbuild ON dr.building_id = dbuild.id
|
|
|
- WHERE dbs.class_id = sm.class_id
|
|
|
- AND dbs.deleted = '0'
|
|
|
- AND dbs.status = '0'
|
|
|
- AND db.deleted = '0'
|
|
|
- AND dbuild.building_type = '1'
|
|
|
- ), 0) AS male_assigned,
|
|
|
- COALESCE((
|
|
|
- SELECT COUNT(DISTINCT dbs.bed_id)
|
|
|
- FROM xg_dorm_bed_student dbs
|
|
|
- LEFT JOIN xg_dorm_bed db ON dbs.bed_id = db.id
|
|
|
- LEFT JOIN xg_dorm_room dr ON db.room_id = dr.id
|
|
|
- LEFT JOIN xg_dorm_building dbuild ON dr.building_id = dbuild.id
|
|
|
- WHERE dbs.class_id = sm.class_id
|
|
|
- AND dbs.deleted = '0'
|
|
|
- AND dbs.status = '0'
|
|
|
- AND db.deleted = '0'
|
|
|
- AND dbuild.building_type = '2'
|
|
|
- ), 0) AS female_assigned
|
|
|
- FROM xg_student_msg sm
|
|
|
- LEFT JOIN xg_class_msg c ON sm.class_id = c.id
|
|
|
- WHERE sm.deleted = 0
|
|
|
- AND sm.student_status = '1'
|
|
|
- AND sm.is_boarder = 1
|
|
|
- AND sm.college_id IS NOT NULL
|
|
|
- AND sm.major_id IS NOT NULL
|
|
|
- AND sm.class_id IS NOT NULL
|
|
|
- AND COALESCE(c.enrollment_year, sm.enrollment_year) = #{enrollmentYear}
|
|
|
- GROUP BY c.grade, COALESCE(c.enrollment_year, sm.enrollment_year),
|
|
|
- sm.college_id, sm.college_name, sm.major_id, sm.major_name, sm.class_id, sm.class_name
|
|
|
- ORDER BY sm.college_name, sm.major_name, sm.class_name, MAX(sm.create_time) DESC
|
|
|
+ <include refid="dormClassTreeSelectColumns"/>
|
|
|
+ <include refid="dormClassTreeFromJoin"/>
|
|
|
+ WHERE c.deleted = 0
|
|
|
+ AND c.college_id IS NOT NULL
|
|
|
+ AND c.major_id IS NOT NULL
|
|
|
+ AND c.enrollment_year = #{enrollmentYear}
|
|
|
+ <include refid="dormClassTreeGroupBy"/>
|
|
|
+ ORDER BY college_name, major_name, c.class_name
|
|
|
</select>
|
|
|
|
|
|
<!-- 查询二级学院下的学院床位分配统计信息(基于学生表统计需求,基于床位分配表统计已分配) -->
|