110 lines
7.1 KiB
XML
110 lines
7.1 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||
<mapper namespace="com.roomroot.jwgl.mapper.SSKCBJSMapper">
|
||
|
||
<select id="selectBySskcbh" resultType="com.roomroot.jwgl.entity.SSKCBJS">
|
||
SELECT * FROM "实施_课程表_教室" WHERE "实施_课程表编号" = #{sskcbh}
|
||
</select>
|
||
|
||
<delete id="deleteBySskcbbh">
|
||
DELETE FROM "实施_课程表_教室" WHERE "实施_课程表编号" = #{sskcbbh}
|
||
</delete>
|
||
|
||
<!-- ============================================================ -->
|
||
<!-- 课表冲突检查 - 维度4:教室(教学场地)时间冲突明细查询 -->
|
||
<!-- 检查逻辑:同一教室同一日期节次,被安排多个不同课次 -->
|
||
<!-- 用到的表: -->
|
||
<!-- 1. 实施_课程表 SSKCB → 日期/节次/年度/删除状态 -->
|
||
<!-- 2. 实施_课程表_教室 SSKCBJS → 教室编号(JSBH) -->
|
||
<!-- 3. 教室表 JSB → 翻译教室中文名 -->
|
||
<!-- 4. 课表 KB → 翻译课程名称 -->
|
||
<!-- ============================================================ -->
|
||
<select id="selectClassroomConflictDetails"
|
||
resultType="com.roomroot.jwgl.vo.timetableconflict.TimetableConflictDetailVO">
|
||
SELECT
|
||
/* 固定维度编码:教室时间冲突 */
|
||
'CLASSROOM_CONFLICT' AS dimension_code,
|
||
'教室时间冲突' AS dimension_title,
|
||
/* 发生冲突的资源(教室)*/
|
||
g."教室编号" AS resource_id,
|
||
/* 翻译教室名称(教室表主键「教室编号」,名称「教室名称」)*/
|
||
COALESCE(r."教室名称", g."教室编号") AS resource_name,
|
||
/* 冲突的日期节次:统一取自主表 s */
|
||
g."日期" AS rq,
|
||
g."节次" AS jc,
|
||
/* 同一教室同一时间占用课次数 */
|
||
g."占用课次数" AS occupied_lesson_count,
|
||
/* 冲突的课程名称列表 */
|
||
g."课程名称列表" AS course_names,
|
||
/* 冲突的课次编号列表 */
|
||
g."课次编号列表" AS conflict_sskcb_bhs,
|
||
/* 中文原因 */
|
||
'教室【' || COALESCE(r."教室名称", g."教室编号") || '】在 '
|
||
|| TO_CHAR(g."日期", 'YYYY-MM-DD') || ' 第' || CAST(g."节次" AS VARCHAR) || '节'
|
||
|| ' 被同时安排 ' || CAST(g."占用课次数" AS VARCHAR) || ' 门课程:'
|
||
|| COALESCE(g."课程名称列表", '(课次号:' || g."课次编号列表" || ')')
|
||
AS reason,
|
||
/* ========== UI 明细新增 5 字段 ========== */
|
||
/* 冲突号:日期8位_节次2位_教室编号 */
|
||
TO_CHAR(g."日期", 'YYYYMMDD')
|
||
|| '_' || LPAD(CAST(g."节次" AS VARCHAR), 2, '0')
|
||
|| '_' || g."教室编号" AS conflict_no,
|
||
/* 班次名称列表(这些课次涉及的所有学员队/班次)*/
|
||
COALESCE(g.xyd_names_list, '(无)') AS xyd_names,
|
||
/* 教员姓名列表(含【主/辅】标注)*/
|
||
COALESCE(g.teacher_names_list, '(无)') AS teacher_names,
|
||
/* 场地/教室名称(虽然维度是教室,这里仍统一返回所有场地名,便于合班情况)*/
|
||
COALESCE(g.classroom_names_list, '(无)') AS classroom_names,
|
||
/* 责任单位(班次所属单位聚合)*/
|
||
COALESCE(g.responsible_dept_list, '(无)')AS responsible_dept
|
||
FROM (
|
||
/*
|
||
* 内层:按教室编号+日期+节次 GROUP BY,筛选 COUNT(DISTINCT 课次) > 1
|
||
*
|
||
* 关键修正:
|
||
* 1. 三层关联 JOIN:SSKCB → 实施_课程 → 课表;CAST(ss.编号 AS CHAR(36))
|
||
* 2. 日期节次统一取主表 s
|
||
*
|
||
* 新增 JOIN(同其他维度):聚合该冲突课次的班次/教员/场地所有明细信息
|
||
* - INNER JOIN c 作为"维度过滤主关联"(只保留该教室的课次做分组)
|
||
* - xyd_link/fz_info/js_link 作为"聚合展示用"JOIN(WM_CONCAT DISTINCT)
|
||
*/
|
||
SELECT
|
||
c."教室编号",
|
||
s."日期",
|
||
s."节次",
|
||
COUNT(DISTINCT s."编号") AS "占用课次数",
|
||
WM_CONCAT(DISTINCT k."课名称") AS "课程名称列表",
|
||
WM_CONCAT(DISTINCT s."编号") AS "课次编号列表",
|
||
/* ========== 新增 4 个聚合字段(明细表格用)========== */
|
||
WM_CONCAT(DISTINCT xyd_info."学员队名称") AS xyd_names_list,
|
||
WM_CONCAT(DISTINCT
|
||
CASE fz_info."主教员" WHEN 1 THEN '【主】' ELSE '【辅】' END
|
||
|| jy_info."教员姓名"
|
||
) AS teacher_names_list,
|
||
WM_CONCAT(DISTINCT js_info."教室名称") AS classroom_names_list,
|
||
WM_CONCAT(DISTINCT xyd_info."所属单位") AS responsible_dept_list
|
||
FROM "实施_课程表" s
|
||
/* 维度过滤主关联:教室维度分组 */
|
||
INNER JOIN "实施_课程表_教室" c ON c."实施_课程表编号" = s."编号"
|
||
/* 课表信息三层关联(ss=实施_课程别名,避免与聚合JOIN的别名冲突)*/
|
||
LEFT JOIN "实施_课程" ss ON CAST(ss."编号" AS CHAR(36)) = s."实施_课程编号"
|
||
LEFT JOIN "课表" k ON k."科目代码" = ss."科目编号"
|
||
/* ========== 新增 JOIN:聚合该冲突课次的班次/教员/场地所有信息 ========== */
|
||
LEFT JOIN "实施_课程表_学员队" xyd_link ON xyd_link."实施_课程表编号" = s."编号"
|
||
LEFT JOIN "学员队表" xyd_info ON xyd_info."学员队编号" = xyd_link."学员队编号"
|
||
LEFT JOIN "实施_课程表_辅助教员" fz_info ON fz_info."实施_课程表编号" = s."编号"
|
||
LEFT JOIN "教员表" jy_info ON jy_info."教员编号" = fz_info."辅助教员编号"
|
||
LEFT JOIN "实施_课程表_教室" js_link ON js_link."实施_课程表编号" = s."编号"
|
||
LEFT JOIN "教室表" js_info ON js_info."教室编号" = js_link."教室编号"
|
||
WHERE s."删除状态" = 0
|
||
AND s."年度" = #{nd}
|
||
GROUP BY c."教室编号", s."日期", s."节次"
|
||
HAVING COUNT(DISTINCT s."编号") > 1
|
||
) g
|
||
/* 修正:教室表主键是「教室编号」,不是「编号」 */
|
||
LEFT JOIN "教室表" r ON r."教室编号" = g."教室编号"
|
||
ORDER BY g."日期", g."节次", g."教室编号"
|
||
</select>
|
||
|
||
</mapper> |