Files
railwaysystem/docs/visual/modules.html
T

563 lines
26 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>业务模块清单 (14大模块) - RailwaySystem SYFJGYD学员管理系统</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%231d4ed8' d='M12 2c-4 0-8 .5-8 4v9.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h2.23l2-2H14l2 2h2v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V6c0-3.5-3.58-4-8-4z'/></svg>">
<link rel="stylesheet" href="assets/docs.css">
<style>
/* 模块分类卡片样式 */
.module-group-section {
margin-bottom: 2.75rem;
}
.group-header-badge {
display: inline-flex;
align-items: center;
gap: 0.4rem;
font-size: 0.78rem;
font-weight: 700;
padding: 0.2rem 0.6rem;
border-radius: var(--radius-sm);
margin-bottom: 0.5rem;
}
.module-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
gap: 1.25rem;
margin-top: 1rem;
}
@media (max-width: 768px) {
.module-grid { grid-template-columns: 1fr; }
}
.module-card {
background: #ffffff;
border: 1px solid var(--border-light);
border-radius: var(--radius-md);
padding: 1.25rem 1.35rem;
box-shadow: var(--shadow-card);
transition: border-color 0.15s ease, box-shadow 0.15s ease;
display: flex;
flex-direction: column;
}
.module-card:hover {
border-color: var(--border-medium);
box-shadow: var(--shadow-card-hover);
}
.module-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 0.65rem;
}
.module-title-box {
display: flex;
align-items: center;
gap: 0.65rem;
}
.module-icon {
width: 38px;
height: 38px;
border-radius: var(--radius-sm);
background: var(--rail-blue-subtle);
color: var(--rail-blue);
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 1.1rem;
flex-shrink: 0;
}
.module-name-zh {
font-size: 1.05rem;
font-weight: 600;
color: var(--navy-900);
}
.module-name-en {
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--text-muted);
}
.module-summary {
font-size: 0.88rem;
color: var(--text-secondary);
line-height: 1.65;
margin-bottom: 0.85rem;
flex: 1;
}
/* 规则详情折叠器 (HTML5 details) */
details.rule-collapse {
border-top: 1px dashed var(--border-light);
padding-top: 0.65rem;
margin-top: auto;
}
details.rule-collapse summary {
cursor: pointer;
font-size: 0.8rem;
font-weight: 600;
color: var(--rail-blue);
user-select: none;
outline: none;
list-style: none;
display: flex;
align-items: center;
justify-content: space-between;
}
details.rule-collapse summary::-webkit-details-marker {
display: none;
}
details.rule-collapse summary::after {
content: '▾';
font-size: 0.9rem;
transition: transform 0.2s ease;
}
details.rule-collapse[open] summary::after {
transform: rotate(180deg);
}
.rule-content {
padding: 0.75rem 0 0.25rem;
font-size: 0.82rem;
line-height: 1.7;
color: var(--text-secondary);
}
.rule-item {
margin-bottom: 0.4rem;
}
.rule-item strong {
color: var(--navy-900);
}
</style>
</head>
<body>
<!-- 顶部主导航 -->
<nav class="navbar">
<div class="nav-brand-wrap">
<a href="index.html" class="nav-brand">
<svg viewBox="0 0 24 24"><path d="M12 2c-4 0-8 .5-8 4v9.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h2.23l2-2H14l2 2h2v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V6c0-3.5-3.58-4-8-4zM7.5 17c-.83 0-1.5-.67-1.5-1.5S6.67 14 7.5 14s1.5.67 1.5 1.5S8.33 17 7.5 17zm9 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm1.5-6H6V6h12v5z"/></svg>
<div>
<div class="brand-title">RailwaySystem</div>
<div class="brand-sub">SYFJGYD学员管理系统</div>
</div>
</a>
<span class="brand-pill">Final Candidate · 待正式部署</span>
</div>
<ul class="nav-menu">
<li><a href="index.html" class="nav-link">首页</a></li>
<li><a href="business-flow.html" class="nav-link">业务</a></li>
<li><a href="architecture.html" class="nav-link">系统</a></li>
<li><a href="testing.html" class="nav-link">质量</a></li>
<li><a href="release-status.html" class="nav-link">发布</a></li>
<li><a href="modules.html" class="nav-link active">14大业务模块清单</a></li>
<li><a href="data-model.html" class="nav-link">实体关系模型(ER)</a></li>
<li><a href="deployment.html" class="nav-link">部署拓扑与脚本Delta</a></li>
<li><a href="http://192.168.139.218:9980/sict/railwaysystem/-/blob/feat/cicd-pipeline/docs/handbook/08-deployment-and-release.md" target="_blank" rel="noopener noreferrer" class="nav-handbook-link">&gt; 查阅部署发布手册</a></li>
<li><a href="http://192.168.139.218:9980/sict/railwaysystem/-/blob/feat/cicd-pipeline/docs/README.md" target="_blank" rel="noopener noreferrer" class="nav-back-link">&larr; 文档中心</a></li>
</ul>
</nav>
<!-- 页面主体容器 -->
<main class="page-container">
<header class="page-hero">
<div class="hero-pretitle">Functional Domain Architecture</div>
<h1 class="hero-title-main">14 大核心业务模块清单</h1>
<p class="hero-lead-text">
按照能力域严格分为培训资源、教务编排、现场执行与数据分析 4 大分组。默认仅呈现模块标识与一句话作用,点击可展开详细业务规则与物理表。
</p>
</header>
<!-- 分组 1: 培训资源 (6个模块) -->
<section class="module-group-section" id="group-resource">
<div class="section-header">
<div>
<span class="group-header-badge" style="background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe;">Domain 1</span>
<h2 class="section-title">培训资源域 (Master Data)</h2>
<p class="section-subtitle">支撑智慧培训基地的基础人、货、场与生活主数据设施。</p>
</div>
<span class="badge badge-pass">6 模块全部实现</span>
</div>
<div class="module-grid">
<!-- 1. Teacher -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">师</div>
<div>
<div class="module-name-zh">教师管理</div>
<div class="module-name-en">Teacher</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">维护培训师资档案、所属专业领域、职称与联系方式,支撑课程主讲人指派。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>唯一性规则</strong>:教师手机号全局唯一,重复录入强行拦截 (40001)。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_teacher</code> (主键 <code>t_id</code>)</div>
<div class="rule-item"><strong>实测结论</strong>:页面访问、列表查询、手机号防重复验证通过。</div>
</div>
</details>
</div>
<!-- 2. Student -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">学</div>
<div>
<div class="module-name-zh">学员档案</div>
<div class="module-name-en">Student</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">统一管理铁路职工参训人员主档,维护所属铁路局、站段、工种及敏感身份证安全脱敏。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>脱敏与安全</strong>:身份证散列存盘,对外接口仅返回末4位脱敏掩码,杜绝明文暴露。</div>
<div class="rule-item"><strong>主档状态</strong>:维护 <code>status=1:正常</code> 与 <code>status=0:停用</code>,停用学员严禁报名。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_student</code> (主键 <code>s_id</code> 为 32 位 UUID)</div>
</div>
</details>
</div>
<!-- 3. Course -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">课</div>
<div>
<div class="module-name-zh">课程管理</div>
<div class="module-name-en">Course</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">标准化课程库管理,定义课程编码、理论与实操学时、课程类别及教材大纲。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>业务约束</strong>:课程编码全局唯一;学时 <code>c_duration</code> 必须大于 0。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_course</code> (主键 <code>c_id</code>)</div>
<div class="rule-item"><strong>实测结论</strong>:课程建档、课时汇总与状态维护通过。</div>
</div>
</details>
</div>
<!-- 4. Classroom -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">室</div>
<div>
<div class="module-name-zh">理论教室</div>
<div class="module-name-en">Classroom</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">管理基地理论教学教室,设定容纳人数、楼层门牌号并关联挂载电子班牌终端。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>容量约束</strong>:容量非空且大于 0,作为排课选址基础参考。</div>
<div class="rule-item"><strong>班牌绑定</strong>:支持绑定 0/1/N 块电子班牌,详情接口实时映射。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_classroom_info</code> (主键 <code>class_room_id</code>)</div>
</div>
</details>
</div>
<!-- 5. Site -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">场</div>
<div>
<div class="module-name-zh">实训场地</div>
<div class="module-name-en">Training Site</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">管理机务、电务、工务、供电等室外实训演练基地,支持大型特种设备实训排产。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>互斥规则</strong>:在排课中与理论教室满足严格 XOR 互斥逻辑。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_training_site</code> (主键 <code>site_id</code> 为 32 位 UUID)</div>
<div class="rule-item"><strong>实测结论</strong>:场地创建、容量校验与排课占用预警验证通过。</div>
</div>
</details>
</div>
<!-- 6. Dormitory -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">宿</div>
<div>
<div class="module-name-zh">后勤宿舍</div>
<div class="module-name-en">Dormitory</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">提供基地学员宿舍楼栋、房号与床位分配管理,联动学员报名中的住宿需求。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>业务联动</strong>:由报名表 <code>accommodation_required = 1</code> 驱动床位分配。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_dormitory_info</code> (主键 <code>dorm_id</code>), <code>train_accommodation</code></div>
<div class="rule-item"><strong>实测结论</strong>:宿舍主数据维护及入住状态管理正常。</div>
</div>
</details>
</div>
</div>
</section>
<!-- 分组 2: 教务编排 (4个模块) -->
<section class="module-group-section" id="group-scheduling">
<div class="section-header">
<div>
<span class="group-header-badge" style="background: #f0fdf4; color: #166534; border: 1px solid #bbf7d0;">Domain 2</span>
<h2 class="section-title">教务编排域 (Scheduling Core)</h2>
<p class="section-subtitle">负责计划拟定、课程师资绑定、参训名单导入及四维排课防重叠调度。</p>
</div>
<span class="badge badge-pass">4 模块全部实现</span>
</div>
<div class="module-grid">
<!-- 7. Plan -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">计</div>
<div>
<div class="module-name-zh">培训计划</div>
<div class="module-name-en">Training Plan</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">拟定培训班方案,维护班级周期、报到截止日、计划招生人数上限及全生命周期状态流转。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>状态流转</strong>:<code>0:草稿</code> &rarr; <code>1:进行中</code> &rarr; <code>2:已结束</code>。</div>
<div class="rule-item"><strong>结训保护</strong>:结训时 Plan 置为 2,锁定排课变更,批量完成活动学员。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_class_plan</code> (主键 <code>plan_id</code> 32 位 UUID)</div>
</div>
</details>
</div>
<!-- 8. PlanCourse -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">纲</div>
<div>
<div class="module-name-zh">计划课程</div>
<div class="module-name-en">Plan Course</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">构建培训计划与课程的关联映射,指派授课教师,自动汇总开班总学时。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>关联一致性</strong>:作为排课 Lesson 的外键依赖,禁止跨计划引用。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_plan_course</code> (主键 <code>plan_course_id</code>)</div>
<div class="rule-item"><strong>实测结论</strong>:课程批量绑定与学时自动联动通过。</div>
</div>
</details>
</div>
<!-- 9. Enrollment -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">名</div>
<div>
<div class="module-name-zh">参训管理</div>
<div class="module-name-en">Enrollment</div>
</div>
</div>
<span class="badge badge-pass">IMPLEMENTED</span>
</div>
<p class="module-summary">管理学员入班名单、招生容量防超额守卫,并维护学员在班级的参训状态流转。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>双重硬拦截</strong>:重复报名拦截 (40030);招生容量上限拦截 (40031)。</div>
<div class="rule-item"><strong>参训状态机</strong>:<code>0:待报到</code> &rarr; <code>1:已报到</code> &rarr; <code>2:请假</code> &rarr; <code>3:退训</code> &rarr; <code>4:已完成</code>。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_enrollment</code> (主键 <code>enrollment_id</code>)</div>
</div>
</details>
</div>
<!-- 10. Scheduling -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">排</div>
<div>
<div class="module-name-zh">排课调度</div>
<div class="module-name-en">Scheduling</div>
</div>
</div>
<span class="badge badge-pass">VERIFIED</span>
</div>
<p class="module-summary">编制每日具体课次,集成四维冲突预检机制,输出可视化聚合日课表视图。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>四维冲突预检</strong>:教师冲突硬检;教室/场地/班级重叠 Warning 提示并允许确认保存。</div>
<div class="rule-item"><strong>合规要求</strong>:严格禁止任何 force / override 违规旁路参数。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_lesson</code> (主键 <code>lesson_id</code>)</div>
</div>
</details>
</div>
</div>
</section>
<!-- 分组 3: 现场执行 (3个模块) -->
<section class="module-group-section" id="group-execution">
<div class="section-header">
<div>
<span class="group-header-badge" style="background: #fefce8; color: #854d0e; border: 1px solid #fef08a;">Domain 3</span>
<h2 class="section-title">现场执行域 (Execution & IoT)</h2>
<p class="section-subtitle">支撑学员现场核验报到、课堂考勤打卡留痕与电子班牌终端信息交互。</p>
</div>
<span class="badge badge-pass">3 模块全部通过验证</span>
</div>
<div class="module-grid">
<!-- 11. Report -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">到</div>
<div>
<div class="module-name-zh">开班报到</div>
<div class="module-name-en">Class Report</div>
</div>
</div>
<span class="badge badge-pass">VERIFIED</span>
</div>
<p class="module-summary">学员到校开班报到身份核验,强事务联动流转报名状态至已报到,防重复报到。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>强事务联动</strong>:报到写入 <code>train_class_report</code>,同时联动更新 <code>enrollment_status = 1</code> 且记录 <code>join_time</code>。</div>
<div class="rule-item"><strong>重复报到防范</strong>:已报到学员再次报到触发拦截 (40050)。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_class_report</code> (主键 <code>report_id</code>)</div>
</div>
</details>
</div>
<!-- 12. Attendance -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">勤</div>
<div>
<div class="module-name-zh">课次考勤</div>
<div class="module-name-en">Attendance</div>
</div>
</div>
<span class="badge badge-pass">VERIFIED</span>
</div>
<p class="module-summary">处理课次签到与签退打卡,保证首次打卡时间幂等性,支持人工代签审计留痕。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>打卡幂等性</strong>:重复调用签到或签退时,严格保持首次 <code>signInTime/signOutTime</code> 不变。</div>
<div class="rule-item"><strong>人工代签留痕</strong>:后台调整考勤自动置 <code>manual_flag = 1</code>,记录调整人与备注。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_student_checkin</code> (主键 <code>checkin_id</code>)</div>
</div>
</details>
</div>
<!-- 13. Board -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon">牌</div>
<div>
<div class="module-name-zh">电子班牌</div>
<div class="module-name-en">Electronic Board</div>
</div>
</div>
<span class="badge badge-pass">VERIFIED</span>
</div>
<p class="module-summary">管理挂载在教室的电子显示终端,在课表中提供智能降级映射与物联页面呈现。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>课表降级规则</strong>:0 块板为 null,恰好 1 块板为对应 SN,>1 块板降级为 null。</div>
<div class="rule-item"><strong>前端路由</strong>:前端正式路由为 <code>/equip/board</code>,对应后端接口 <code>/train/board</code>。</div>
<div class="rule-item"><strong>物理表名</strong>:<code>train_electronic_board</code> (主键 <code>board_id</code> 32 位 UUID)</div>
</div>
</details>
</div>
</div>
</section>
<!-- 分组 4: 统计分析 (1个模块/4个子视图) -->
<section class="module-group-section" id="group-analytics" style="margin-bottom: 0;">
<div class="section-header">
<div>
<span class="group-header-badge" style="background: #fdf4ff; color: #86198f; border: 1px solid #f5d0fe;">Domain 4</span>
<h2 class="section-title">数据分析域 (Analytics & Reports)</h2>
<p class="section-subtitle">聚合教务执行过程数据,提供只读统计报表与画像导出,保持架构隔离。</p>
</div>
<span class="badge badge-pass">V2 READ MODEL · PASS</span>
</div>
<div class="module-grid">
<!-- 14. Analytics -->
<div class="module-card">
<div class="module-header">
<div class="module-title-box">
<div class="module-icon" style="background: #fdf4ff; color: #86198f;">析</div>
<div>
<div class="module-name-zh">统计分析与报表</div>
<div class="module-name-en">Analytics</div>
</div>
</div>
<span class="badge badge-pass">V2 READ MODEL · PASS</span>
</div>
<p class="module-summary">涵盖报到率统计、考勤打卡统计、学员课时完成度及综合画像等只读报表展示与数据导出。</p>
<details class="rule-collapse">
<summary>查看详细规则与模型</summary>
<div class="rule-content">
<div class="rule-item"><strong>架构隔离</strong>:当前版本已完成 V2 Read Model 接入,提供稳定的只读查询与导出能力,保持数据库单向读取。</div>
<div class="rule-item"><strong>涵盖视图</strong>:Report 报到报表、Checkin 考勤报表、Duration 学时统计、Portrait 画像表 4 个视图均通过验收。</div>
<div class="rule-item"><strong>演进规划</strong>:高级画像算法模型与多维统计扩展标为 <code>RESERVED / FUTURE EXTENSION</code>。</div>
</div>
</details>
</div>
</div>
</section>
</main>
<!-- 页脚 -->
<footer class="site-footer">
<p>RailwaySystem SYFJGYD学员管理系统 · 交付候选版 (Final Candidate)</p>
<p style="margin-top: 0.35rem; color: var(--text-muted);">
模块架构指南 · <a href="http://192.168.139.218:9980/sict/railwaysystem/-/blob/feat/cicd-pipeline/docs/handbook/05-module-guide.md" target="_blank" rel="noopener noreferrer">查阅模块详细指南手册</a>
</p>
</footer>
<script src="assets/docs.js"></script>
</body>
</html>