forked from liweijie/education
feat: 提交课表冲突检查相关功能模块
This commit is contained in:
+149
@@ -0,0 +1,149 @@
|
||||
package com.roomroot.jwgl.unit.conflict;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 课表冲突检查维度枚举。
|
||||
* <p>
|
||||
* 对应页面"教学资源冲突检查"的6个卡片,每个枚举值代表一种检查维度。
|
||||
* 用于 Controller → Service → Mapper 之间传递"检查哪一类"的标识。
|
||||
* </p>
|
||||
* <p>
|
||||
* 设计说明:
|
||||
* <ul>
|
||||
* <li>前4项是已明确的页面卡片,后2项是预留(保障资源/活动事件),可按需启用</li>
|
||||
* <li>每个维度都对应一张或多张数据表的 GROUP BY + HAVING COUNT 聚合查询</li>
|
||||
* </ul>
|
||||
*
|
||||
* @author management
|
||||
*/
|
||||
@Getter
|
||||
public enum TimetableConflictDimension {
|
||||
|
||||
/**
|
||||
* 教学班时间冲突检查。
|
||||
* <p>检查逻辑:同一教学班次(学员队)在同一日期同一节次被安排多门课程 → 冲突</p>
|
||||
* <p>涉及数据表:
|
||||
* <ol>
|
||||
* <li>实施_课程表 SSKCB —— 主表,获取日期(RQ)、节次(JC)、年度(ND)、删除状态(SCZT)</li>
|
||||
* <li>实施_课程表_学员队 SSKCBXYD —— 课次与教学班次(学员队)的关联表,获取教学班次编号(XYDBH)</li>
|
||||
* <li>学员队表 XYDB(辅助关联,用于翻译中文名称展示)</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
*/
|
||||
TEAM_CONFLICT("TEAM_CONFLICT",
|
||||
"教学班时间冲突检查",
|
||||
"同一教学班次在同一时间段被安排多门课程"),
|
||||
|
||||
/**
|
||||
* 教学班必修与选修时间冲突检查。
|
||||
* <p>检查逻辑:同一教学班次在同一日期同一节次,既有"必修课"又有"选修课" → 冲突</p>
|
||||
* <p>涉及数据表:
|
||||
* <ol>
|
||||
* <li>实施_课程表 SSKCB —— 主表,日期/节次/年度/删除状态</li>
|
||||
* <li>实施_课程表_学员队 SSKCBXYD —— 课次与教学班次的关联</li>
|
||||
* <li>课程表科目 KB / 课程科目表 KC —— 获取课程的"课程类型"字段(必修/选修/考查等)</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
*/
|
||||
ELECTIVE_REQUIRED_CONFLICT("ELECTIVE_REQUIRED_CONFLICT",
|
||||
"教学班必修与选修时间冲突检查",
|
||||
"教学班次必修课与选修课时间重叠"),
|
||||
|
||||
/**
|
||||
* 教员时间冲突检查。
|
||||
* <p>检查逻辑:同一教员(主讲+辅讲统一在此维度)在同一日期同一节次被安排多门课程 → 冲突</p>
|
||||
* <p>涉及数据表:
|
||||
* <ol>
|
||||
* <li>实施_课程表 SSKCB —— 主表,日期/节次/年度/删除状态</li>
|
||||
* <li>实施_课程表_辅助教员 SSKCBFZJY —— 课次与教员的关联表(含主讲ZJY=1 与辅讲ZJY=0),获取教员编号(FZJYBH)</li>
|
||||
* <li>教员表 JYB / 教研室人员 JYSX —— 翻译中文姓名展示</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
*/
|
||||
TEACHER_CONFLICT("TEACHER_CONFLICT",
|
||||
"教员时间冲突检查",
|
||||
"同一教员在同一时间段被安排多门课程"),
|
||||
|
||||
/**
|
||||
* 教室时间冲突检查。
|
||||
* <p>检查逻辑:同一教室(场地)在同一日期同一节次被多门课程占用 → 冲突</p>
|
||||
* <p>涉及数据表:
|
||||
* <ol>
|
||||
* <li>实施_课程表 SSKCB —— 主表,日期/节次/年度/删除状态</li>
|
||||
* <li>实施_课程表_教室 SSKCBJS —— 课次与教室的关联表,获取教室编号(JSBH)</li>
|
||||
* <li>教室表 JSB —— 翻译中文名称(含容纳人数/设施等信息)</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
*/
|
||||
CLASSROOM_CONFLICT("CLASSROOM_CONFLICT",
|
||||
"教室时间冲突检查",
|
||||
"同一教室在同一时间段被多门课程占用"),
|
||||
|
||||
/**
|
||||
* 教学保障资源冲突检查(预留/按需开启)。
|
||||
* <p>检查逻辑:同一保障项目在同一日期同一节次,申请总数量 > 可提供能力阈值 → 冲突</p>
|
||||
* <p>涉及数据表:
|
||||
* <ol>
|
||||
* <li>课程表保障明细表 KCBBZMX / 实施保障表 —— 课次申请的保障项目及数量</li>
|
||||
* <li>保障项目表 BZLB / BZMX —— 项目可提供能力阈值</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
*/
|
||||
GUARANTEE_CONFLICT("GUARANTEE_CONFLICT",
|
||||
"教学保障资源冲突检查",
|
||||
"同一保障项目同一时间申请数量超过可用能力"),
|
||||
|
||||
/**
|
||||
* 院历/班历活动事件冲突检查(预留/按需开启)。
|
||||
* <p>检查逻辑:被"不可排课"活动事件覆盖的日期节次范围,却依然存在已落地课次 → 冲突</p>
|
||||
* <p>涉及数据表:
|
||||
* <ol>
|
||||
* <li>学期校历表 XQ / 学员队期班历 XYJXQJB —— 标记"是否可排课"的活动事件集合</li>
|
||||
* <li>实施_课程表 SSKCB + 实施_课程表_学员队 SSKCBXYD —— 当前已排课的日期节次</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
*/
|
||||
EVENT_CONFLICT("EVENT_CONFLICT",
|
||||
"院历/班历活动事件冲突检查",
|
||||
"不可排课的活动事件时段存在已排课程");
|
||||
|
||||
/**
|
||||
* 维度编码(前端传参使用此值)
|
||||
*/
|
||||
private final String code;
|
||||
|
||||
/**
|
||||
* 卡片标题(对应页面卡片名称)
|
||||
*/
|
||||
private final String title;
|
||||
|
||||
/**
|
||||
* 卡片描述(对应页面卡片下的说明文字)
|
||||
*/
|
||||
private final String description;
|
||||
|
||||
TimetableConflictDimension(String code, String title, String description) {
|
||||
this.code = code;
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取枚举值(前端传 code → 后端反查枚举)。
|
||||
*
|
||||
* @param code 维度编码
|
||||
* @return 对应枚举,找不到返回 null
|
||||
*/
|
||||
public static TimetableConflictDimension of(String code) {
|
||||
if (code == null || code.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
for (TimetableConflictDimension d : values()) {
|
||||
if (d.getCode().equalsIgnoreCase(code)) {
|
||||
return d;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user