etms/PROJECT_GUIDE.md

1431 lines
78 KiB
Markdown
Raw Normal View History

# JCDP教育培训管理系统 - 项目指南
> **项目版本**: software.version=54
> **运行模式**: release
> **所属组织**: XX电子科技集团XX研究所etms
---
## 一、项目概述
JCDPJCDP - 教育培训管理系统)是一个基于 Java Web 技术栈的企业内部培训管理平台,部署在 Tomcat 服务器上。系统支持完整的培训计划管理、培训实施、考试管理、问卷调研、外派培训管理等功能模块。
### 1.1 技术架构
| 层级 | 技术选型 |
|------|----------|
| **后端框架** | Java + Spring 4.3 + 自研 MVC 框架(`com.etms.mvc` |
| **ORM** | 自研 ORM 框架(`com.etms.orm` |
| **前端模板** | FreeMarker`.ftl`+ 自研 UI 框架CECT54.WebUI |
| **数据库** | MySQL`10.55.68.235:3306/etms` |
| **报表** | FineReport 8.0`fr-*` |
| **WebService** | Apache CXF暴露 ETMSService |
| **消息队列** | RabbitMQ`amqp-client` |
| **主包名** | `com.etms.jcdp` |
### 1.2 目录结构
```
jcdp/
├── META-INF/
│ └── MANIFEST.MF
├── WEB-INF/
│ ├── applicationContext.xml # Spring配置
│ ├── classes/
│ │ ├── com/etms/jcdp/ # Java源码编译目录
│ │ └── META-INF/
│ ├── mapping/ # SQL映射文件 (*.map.xml)
│ └── ftl/ # FreeMarker模板
├── asset/ # 静态资源CSS/图片/字体)
└── CODE_REVIEW_GUIDE.md # 代码审查规范
```
---
## 二、核心功能模块
### 2.1 模块全景图
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 系统管理 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │
│ │ 用户 │ │ 角色 │ │ 组织机构│ │ 权限 │ │ 操作日志│ │ 系统参数│ │
│ │ 管理 │ │ 管理 │ │ 管理 │ │ 分配 │ │ │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 教育培训管理 │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 培训计划管理 │ │ 培训实施管理 │ │ 外派培训管理 │ │
│ ├──────────────────┤ ├──────────────────┤ ├──────────────────┤ │
│ │ • 部门级计划内 │ │ • 开班管理 │ │ • 经济责任制 │ │
│ │ • 部门级计划外 │ │ • 学员管理 │ │ • 非经济责任制 │ │
│ │ • 所级/院级计划 │ │ • 授课管理 │ │ • 外派登记 │ │
│ │ • 计划变更 │ │ • 签到管理 │ │ │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 考试与调研 │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 考试管理 │ │ 问卷调研 │ │ 任职资格管理 │ │
│ ├──────────────────┤ ├──────────────────┤ ├──────────────────┤ │
│ │ • 试卷库 │ │ • 调研问卷 │ │ • 资格认证 │ │
│ │ • 题目管理 │ │ • 调研结果 │ │ • 资格查询 │ │
│ │ • 在线答题 │ │ │ │ │ │
│ │ • 判卷/成绩 │ │ │ │ │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 支撑功能 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ 年度培训总结 │ │ 学习资源管理 │ │ 即时通讯 │ │ 统计分析 │ │
│ │ • 部门级总结 │ │ • 文件资料 │ │ • 聊天 │ │ • FineReport│ │
│ │ • 所级总结 │ │ • 课程资料 │ │ • 群组 │ │ • 报表查看 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.2 培训计划管理BPMN流程
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ 培训计划管理流程 │
└──────────────────────────────────────────────────────────────────────────────┘
┌─────────────┐
│ 所级管理员 │
│ 发起计划 │
└──────┬──────┘
┌─────────────┐ ┌─────────────┐
│ 部门计划内 │ │ 部门计划外 │
│ (gip) │ │ (gop) │
└──────┬──────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────────────────────┐
│ 部门管理员填报 │
│ • 选择课程 │
│ • 填写培训需求 │
└─────────────┬───────────────┘
┌─────────────────────────────┐
│ 所级管理员调研征集 │
│ • 下发调研问卷 │
│ • 部门反馈需求 │
└─────────────┬───────────────┘
┌─────────────────────────────┐
│ 所级管理员汇总生成 │
│ • 生成培训计划 │
│ • 审核确认 │
└─────────────┬───────────────┘
┌─────────────────────────────┐
│ 审批流程 (SP) │
│ • 部门领导审核 │
│ • 所级领导审批 │
└─────────────┬───────────────┘
┌─────────────┐
│ 审批通过 │
│ 计划生效 │
└─────────────┘
┌──────────────────────────────────────────────────────────────────────────────┐
│ 计划来源 (jhly) │
├──────────────────────────────────────────────────────────────────────────────┤
│ jhly='sj' → 所级/院级计划(由所级管理员统一制定下发) │
│ jhly='bmn' → 部门级计划内(部门申报,经审批后纳入) │
│ jhly='bmw' → 部门级计划外(部门临时申请,不占用年度预算) │
└──────────────────────────────────────────────────────────────────────────────┘
```
### 2.3 培训实施流程
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ 培训实施管理流程 │
└──────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 开班流程 (et_train_pd_cc) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐ │
│ │ -1:被驳回 │───▶│ 0:未开班 │───▶│ 1:已下发 │───▶│ 2:已开班 │───▶│ 3:待审核│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └────────┘ │
│ │ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ (驳回重编) │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 课程状态 (coursestatus) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 培训科目 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ status=-1,0,1│───▶│ 未完成 │ │
│ │ (未完成) │ └──────┬──────┘ │
│ └─────────────┘ │ │
│ ▲ ▼ │
│ │ ┌─────────────┐ │
│ └───────────│ 完成 │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 培训完成判定逻辑 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ IF (nd >= 2023) THEN │
│ 完成条件 = yxx.status = 2 (问卷/心得状态=已完成) │
│ ELSE │
│ 完成条件 = yxx.status IS NOT NULL ? yxx.status=2 : pg.status=1 │
│ END IF │
│ │
│ 说明2023年起新增培训效果问卷反馈环节替代原有的评分机制 │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.4 考试管理流程
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ 考试管理流程 │
└──────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 试卷管理 (exampaper) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ et_exam_exampaper_and_editexampaper ──1:N──▶ et_exam_editexampaper │
│ │
│ 试卷基础信息表 题库表(题目详情) │
│ • name: 试卷名称 • subject: 题目内容 │
│ • description: 描述 • type: 单选/多选/判断/简答 │
│ • sc: 所属课程 • score: 分值 │
│ • state: 状态 • answer: 标准答案 │
│ • startdate/enddate • optionA-F: 选项 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 考试状态 (state) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 已撤销 │ │ 未开始 │───▶│ 正在进行 │───▶│ 已关闭 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │ │
│ │ ▼ ▼ ▼ │
│ │ datediff datediff datediff │
│ │ (startdate)>0 (startdate)<=0 (enddate)<0
│ │ &&(enddate)>=0 │
│ └─────────────────────────────────────(不等于已撤销)───────────────│
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 判卷规则 (自动判分) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 自动判分题型: │
│ • 单选题 (type='单选题') │
│ • 多选题 (type='多选题') │
│ • 判断题 (type='判断题') │
│ │
│ 判分逻辑: │
│ user_answer == answer → user_score = score │
│ 否则 → user_score = 0 │
│ │
│ 主观题(简答等) → 需人工判卷 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 参考人员来源 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 人员限定方式: │
│ • et_exam_limitation → 指定人员 │
│ • et_exam_limitation_class → 按班级/培训班 │
│ • et_exam_limitation_course → 按课程学员 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
---
## 三、BPMN业务流程模型
> 本章节使用标准流程图符号描述系统的核心业务流程,包含流程定义、参与者、任务节点和流程路径。
### 3.1 培训计划管理流程
#### 流程定义
| 属性 | 值 |
|------|-----|
| **流程名称** | 培训计划管理流程 (Training Plan Management) |
| **流程ID** | PROC-TRAIN-PLAN |
| **流程版本** | v1.0 |
| **流程类型** | 审批流 + 数据填报流 |
| **触发方式** | 手工触发(所级管理员发起) |
| **流程周期** | 年度每年Q4制定下一年度计划 |
#### 参与者定义
| 参与者 | 角色 | 职责 |
|--------|------|------|
| 所级管理员 | Initiator | 发起计划、下发通知、汇总生成、审批 |
| 部门管理员 | Department Admin | 填报课程需求、反馈调研 |
| 部门领导 | Department Head | 审核部门申报 |
| 所级领导 | Institute Head | 最终审批 |
#### 流程图
```mermaid
flowchart TB
subgraph 计划来源选择
A([开始: 制定年度培训计划]) --> B{计划来源类型?}
B -->|所级计划| C[创建所级计划<br/>et_train_ip]
B -->|部门计划内| D[创建部门计划内<br/>et_train_gip]
B -->|部门计划外| E[创建部门计划外<br/>et_train_gop]
end
subgraph 部门填报阶段
C --> F1[下发填报通知]
D --> F1
F1 --> G[部门管理员填报课程需求<br/>et_train_gipgroup_kc<br/>et_train_ipgroup_kc]
G --> H{是否需要调研?}
H -->|是| I[下发调研问卷<br/>et_train_ipdy]
I --> J[部门反馈需求<br/>et_train_ipdy_kc]
J --> K[汇总需求]
H -->|否| K
end
subgraph 所级处理阶段
K --> L[所级管理员汇总生成<br/>et_train_ipf]
L --> M{数据完整?}
M -->|否| N[补充完善]
N --> L
M -->|是| O[提交审批]
end
subgraph 审批阶段
O --> P{部门领导审核}
P -->|驳回| Q([驳回: 重新填报])
Q --> G
P -->|通过| R{所级领导审批}
R -->|驳回| S([驳回: 重新汇总])
S --> L
R -->|通过| T([结束: 计划生效])
end
style A fill:#e1f5fe
style T fill:#c8e6c9
style Q fill:#ffcdd2
style S fill:#ffcdd2
```
#### 流程节点详情
| 节点ID | 节点名称 | 类型 | 输入 | 输出 | 执行人 |
|--------|----------|------|------|------|--------|
| PROC-TRAIN-PLAN.START | 开始 | StartEvent | - | 年度计划请求 | 所级管理员 |
| PROC-TRAIN-PLAN.CREATE | 创建计划 | Task | 计划类型 | et_train_ip/gip/gop记录 | 所级管理员 |
| PROC-TRAIN-PLAN.NOTIFY | 下发通知 | Task | 计划ID | 通知消息 | 系统 |
| PROC-TRAIN-PLAN.FILL | 填报需求 | Task | 通知 | et_train_gipgroup_kc | 部门管理员 |
| PROC-TRAIN-PLAN.SURVEY | 调研征集 | ExclusiveGateway | - | et_train_ipdy | 所级管理员 |
| PROC-TRAIN-PLAN.SUMMARY | 汇总生成 | Task | 部门需求 | et_train_ipf | 所级管理员 |
| PROC-TRAIN-PLAN.APPROVE | 审批流程 | SubProcess | 计划ID | 审批结果 | 领导层 |
| PROC-TRAIN-PLAN.END | 计划生效 | EndEvent | 审批通过 | 状态变更 | 系统 |
---
### 3.2 培训实施管理流程
#### 流程定义
| 属性 | 值 |
|------|-----|
| **流程名称** | 培训实施管理流程 (Training Implementation) |
| **流程ID** | PROC-TRAIN-IMPLEMENT |
| **流程版本** | v1.0 |
| **流程类型** | 状态驱动流程 |
| **触发方式** | 培训计划批准后自动/手工创建 |
| **流程周期** | 单次培训(按班级) |
#### 参与者定义
| 参与者 | 角色 | 职责 |
|--------|------|------|
| 所级管理员 | Institute Admin | 开班审核、下发 |
| 培训管理员 | Training Admin | 课程分配、学员管理 |
| 讲师 | Teacher | 授课、签到 |
| 学员 | Trainee | 参训、反馈 |
| 管理员 | Admin | 归档审核 |
#### 流程图
```mermaid
flowchart TB
subgraph 开班准备
A([开始: 培训计划批准]) --> B[创建培训班级<br/>et_train_pd_cc<br/>status=0]
B --> C[选择培训讲师<br/>teacher字段]
C --> D[设置培训时间<br/>starttime/endtime]
D --> E[设置培训参数<br/>pxxsh/sfkh/khlx]
E --> F{开班审核}
end
subgraph 开班下发
F -->|通过| G[下发开班通知<br/>status=1]
F -->|驳回| H([驳回: 修改班级信息])
H --> B
end
subgraph 培训实施
G --> I[学员管理<br/>et_train_pd_cc_user<br/>添加/移除学员]
I --> J{是否需要签到?}
J -->|是| K[创建签到任务<br/>et_train_pd_cc_dt]
K --> L[学员签到]
J -->|否| M
L --> M[授课管理]
M --> N[填写实际讲师<br/>realteacher]
N --> O[标记开班完成<br/>status=2]
end
subgraph 效果评估
O --> P{是否需要考核?}
P -->|是| Q[发布评分问卷<br/>et_train_pd_cc_pg]
Q --> R[学员填写反馈<br/>et_train_pd_cc_pgwjyxx]
P -->|否| S
R --> S[问卷状态更新<br/>status=2]
end
subgraph 归档完成
S --> T[提交归档<br/>status=3]
T --> U{管理员审核}
U -->|通过| V([结束: 培训完成])
U -->|驳回| W([驳回: 补充材料])
W --> T
end
style A fill:#e1f5fe
style V fill:#c8e6c9
style H fill:#ffcdd2
style W fill:#ffcdd2
```
#### 状态机定义
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 培训班级状态机 (et_train_pd_cc.status) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ │
│ │ -1 │◀──────────────────────┐ │
│ │ 被驳回 │ │ │
│ └────┬────┘ │ │
│ │ │ │
│ ▼ │ │
│ ┌─────────┐ 驳回重编 │ │
│ │ 0 │───────────────────────┘ │
│ │ 未开班 │ │
│ └────┬────┘ │
│ │ 开班审核通过 │
│ ▼ │
│ ┌─────────┐ │
│ │ 1 │ 下发通知 │
│ │ 已下发 │ │
│ └────┬────┘ │
│ │ 学员就位/开始授课 │
│ ▼ │
│ ┌─────────┐ │
│ │ 2 │ 培训进行中/完成 │
│ │ 已开班 │ │
│ └────┬────┘ │
│ │ 培训效果确认 │
│ ▼ │
│ ┌─────────┐ │
│ │ 3 │ 待归档审核 │
│ │ 待审核 │─────────────────────────────────────▶ [培训完成] │
│ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
#### 流程节点详情
| 节点ID | 节点名称 | 类型 | 状态值 | 后置条件 |
|--------|----------|------|--------|----------|
| PROC-IMPL.CREATE | 创建班级 | Task | 0 | status=0 |
| PROC-IMPL.ALLOCATE | 分配课程 | Task | 0 | 讲师/时间已设置 |
| PROC-IMPL.REVIEW | 开班审核 | Task | 0→1/-1 | 通过/驳回 |
| PROC-IMPL.PUBLISH | 下发通知 | Task | 1 | 学员可查看 |
| PROC-IMPL.MANAGE | 学员管理 | Task | 1 | 学员列表已确定 |
| PROC-IMPL.SIGN | 签到管理 | Task | 1 | 考勤记录生成 |
| PROC-IMPL.TEACH | 授课管理 | Task | 1→2 | 实际讲师已填 |
| PROC-IMPL.FEEDBACK | 效果反馈 | Task | 2 | 问卷状态=2 |
| PROC-IMPL.ARCHIVE | 归档待审 | Task | 3 | 提交审核 |
| PROC-IMPL.END | 培训完成 | EndEvent | 3 | 流程结束 |
#### 培训完成判定规则
```mermaid
flowchart TD
A([判定培训完成]) --> B{年份 >= 2023?}
B -->|是| C[问卷反馈判定]
B -->|否| D{是否有问卷?}
C --> E{yxx.status == 2?}
E -->|是| F([完成]))
E -->|否| G([未完成]))
D -->|是| E
D -->|否| H[评分判定]
H --> I{pg.status == 1?}
I -->|是| F
I -->|否| G
style F fill:#c8e6c9
style G fill:#ffcdd2
```
---
### 3.3 考试管理流程
#### 流程定义
| 属性 | 值 |
|------|-----|
| **流程名称** | 考试管理流程 (Examination Management) |
| **流程ID** | PROC-EXAM |
| **流程版本** | v1.0 |
| **流程类型** | 定时触发 + 手工触发 |
| **触发方式** | 试卷发布后自动计时/手工开始 |
| **流程周期** | 按试卷设定的考试周期 |
#### 参与者定义
| 参与者 | 角色 | 职责 |
|--------|------|------|
| 考试管理员 | Exam Admin | 试卷创建、发布、管理 |
| 考生 | Candidate | 答题 |
| 阅卷教师 | Marker | 主观题判分 |
| 系统 | System | 自动判分 |
#### 流程图
```mermaid
flowchart TB
subgraph 试卷管理
A([开始: 创建试卷]) --> B[基本信息<br/>et_exam_exampaper<br/>name/sc/state]
B --> C[添加题目<br/>et_exam_editexampaper<br/>type/subject/score]
C --> D{题目类型?}
D -->|客观题| E[设置标准答案<br/>answer字段]
D -->|主观题| F[不设答案<br/>待人工判分]
E --> G
F --> G[人员限定<br/>et_exam_limitation<br/>人员/班级/课程]
end
subgraph 考试执行
G --> H{到达开始时间?}
H -->|否| H
H -->|是| I[状态: 正在进行]
I --> J[考生登录]
J --> K[抽取试卷]
K --> L[在线答题<br/>et_exam_usertest<br/>user_answer]
L --> M{题目类型?}
M -->|客观题| N[自动判分<br/>user_score]
M -->|主观题| O[待阅卷<br/>user_score=NULL]
N --> P{全部提交?}
O --> P
P -->|否| L
P -->|是| Q{全部已判?}
end
subgraph 判卷与归档
Q -->|否| R{有待判题目?}
R -->|是| S[阅卷教师判分<br/>mark_teacher<br/>user_score]
R -->|否| Q
S --> Q
Q -->|是| T[状态: 已关闭]
end
T --> U[成绩发布]
U --> V([结束: 考试完成])
style A fill:#e1f5fe
style V fill:#c8e6c9
```
#### 考试状态机
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 考试状态机 (exampaper.state) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 已撤销 │ │ 未开始 │───▶│ 正在进行 │───▶│ 已关闭 │ │ 已归档 │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ └─────────┘ └────┬────┘ └────┬────┘ └─────────┘ └─────────┘ │
│ ▲ │ │ │
│ │ ▼ ▼ │
│ │ datediff datediff │
│ │ (startdate)>0 (startdate)<=0 │
│ │ &&(enddate)>=0 │
│ │ │
│ │ datediff(enddate)<0 [自动关闭]
│ └──────────────────────────────────────── (不等于已撤销) │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
#### 判分规则
| 题型 | 自动判分 | 人工判分 | 说明 |
|------|----------|----------|------|
| 单选题 | ✅ | ❌ | 答案一致得分 |
| 多选题 | ✅ | ❌ | 答案一致得分 |
| 判断题 | ✅ | ❌ | 答案一致得分 |
| 简答题 | ❌ | ✅ | 需阅卷教师评分 |
---
### 3.4 外派培训管理流程
#### 流程定义
| 属性 | 值 |
|------|-----|
| **流程名称** | 外派培训管理流程 (External Training) |
| **流程ID** | PROC-OUTTRAIN |
| **流程版本** | v1.0 |
| **流程类型** | 审批流 |
| **触发方式** | 手工发起 |
| **流程周期** | 单次外派 |
#### 参与者定义
| 参与者 | 角色 | 职责 |
|--------|------|------|
| 申请人 | Applicant | 发起外派申请 |
| 审批领导 | Approver | 审批申请 |
| 外派学员 | Trainee | 参训人员 |
| 登记员 | Recorder | 外派归来登记 |
#### 流程图
```mermaid
flowchart TB
subgraph 外派申请
A([开始: 发起外派申请]) --> B[填写外派信息<br/>et_train_ot<br/>pxmc/pxfy/sld]
B --> C{培训对象范围?}
C -->|本部门| D[自动关联本部门人员]
C -->|指定人员| E[指定参训人员<br/>et_train_ot_xy]
D --> F[提交审批]
E --> F
end
subgraph 审批执行
F --> G{审批结果?}
G -->|通过| H[等待外派开始]
G -->|驳回| I([驳回: 修改申请])
I --> B
H --> J{到达开始时间?}
J -->|否| J
J -->|是| K[外派培训进行中]
end
subgraph 归来登记
K --> L{培训结束?}
L -->|否| L
L -->|是| M[外派归来]
M --> N[外派登记<br/>et_train_ot_pxdj<br/>status=4]
N --> O{经济责任制?}
O -->|是| P[关联经济责任制考核]
O -->|否| Q[关联非经济责任制考核]
P --> R([结束: 外派完成]))
Q --> R
end
style A fill:#e1f5fe
style R fill:#c8e6c9
style I fill:#ffcdd2
```
#### 流程节点详情
| 节点ID | 节点名称 | 涉及表 | 关键字段 |
|--------|----------|--------|----------|
| PROC-OUTTRAIN.APPLY | 发起申请 | et_train_ot | pxmc, pxfy, sld, pxdjfw |
| PROC-OUTTRAIN.SCOPE | 确定范围 | et_train_ot_xy | usercode, username |
| PROC-OUTTRAIN.APPROVE | 审批 | et_train_sp | spresult |
| PROC-OUTTRAIN.REGISTER | 归来登记 | et_train_ot_pxdj | status=4 |
| PROC-OUTTRAIN.ASSESS | 考核关联 | - | 单位性质判定 |
---
### 3.5 审批流程(通用子流程)
#### 子流程定义
| 属性 | 值 |
|------|-----|
| **子流程名称** | 通用审批流程 (Approval Process) |
| **子流程ID** | SUB-APPROVAL |
| **调用方式** | 被主流程调用 |
| **审批层级** | 多级(可配置) |
#### 流程图
```mermaid
flowchart TB
A([开始: 提交审批]) --> B[获取审批人列表<br/>et_train_sp_person<br/>按order排序]
B --> C{还有未审批项?}
C -->|是| D[当前审批人审批]
D --> E{审批结果?}
E -->|通过| F{还有下一级?}
E -->|驳回| G[驳回意见<br/>yj字段]
G --> H([结束: 审批驳回])
F -->|是| I[流转下一审批人]
I --> C
F -->|否| J[记录审批通过]
J --> K([结束: 审批通过])
C -->|否| K
style A fill:#e1f5fe
style K fill:#c8e6c9
style H fill:#ffcdd2
```
#### 审批数据存储
| 字段 | 表 | 说明 |
|------|-----|------|
| tname | et_train_sp | 目标业务表名 |
| tid | et_train_sp | 目标业务记录ID |
| spusername | et_train_sp | 审批人姓名 |
| spdate | et_train_sp | 审批时间 |
| yj | et_train_sp | 审批意见 |
| spresult | et_train_sp | 审批结果 |
---
### 3.6 年度培训总结流程
#### 流程定义
| 属性 | 值 |
|------|-----|
| **流程名称** | 年度培训总结流程 (Yearly Summary) |
| **流程ID** | PROC-YEAR-SUMMARY |
| **流程版本** | v1.0 |
| **触发方式** | 年度结束通常12月 |
| **流程周期** | 年度 |
#### 流程图
```mermaid
flowchart TB
A([开始: 年度培训结束]) --> B[所级管理员创建年度总结<br/>et_train_ys]
B --> C[下发填报通知]
C --> D[部门填报<br/>et_train_ysgroup<br/>status=待填报]
D --> E[提交部门总结]
E --> F[状态更新<br/>status=3 已填报]
F --> G[所级管理员汇总<br/>合并各部门数据]
G --> H{数据完整?}
H -->|否| I[返回部门补充]
I --> D
H -->|是| J[生成所级总结报告]
J --> K([结束: 总结完成])
style A fill:#e1f5fe
style K fill:#c8e6c9
```
---
### 3.7 流程模型总览
| 流程ID | 流程名称 | 类型 | 触发方式 | 关联主表 |
|--------|----------|------|----------|----------|
| PROC-TRAIN-PLAN | 培训计划管理 | 审批流 | 手工触发 | et_train_ip / et_train_gip |
| PROC-TRAIN-IMPLEMENT | 培训实施管理 | 状态流 | 计划批准后 | et_train_pd_cc |
| PROC-EXAM | 考试管理 | 定时流 | 试卷发布 | et_exam_exampaper |
| PROC-OUTTRAIN | 外派培训 | 审批流 | 手工发起 | et_train_ot |
| SUB-APPROVAL | 通用审批 | 子流程 | 被调用 | et_train_sp |
| PROC-YEAR-SUMMARY | 年度总结 | 填报流 | 年度结束 | et_train_ys |
---
## 四、数据字典
### 4.1 系统管理表JCDP_SYS_前缀
#### 用户表 JCDP_SYS_USER
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| LOGINNAME | VARCHAR | 登录名 |
| USERNAME | VARCHAR | 用户姓名 |
| PASSWORD | VARCHAR | 密码 |
| SEX | VARCHAR | 性别 |
| STATUS | VARCHAR | 状态 |
| USERTYPE | VARCHAR | 用户类型 |
| USERCODE | VARCHAR | 用户工号 |
| DELETE_FLAG | INT | 删除标记(0未删) |
#### 扩展信息表 JCDP_SYS_USER_EXT
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键(关联USER) |
| EMAIL | VARCHAR | 邮箱 |
| MOBILE | VARCHAR | 手机 |
| PHONE | VARCHAR | 电话 |
| ADDRESS | VARCHAR | 地址 |
| IDNO | VARCHAR | 身份证号 |
| BIRTHDAY | DATE | 生日 |
| AVATARS | VARCHAR | 头像 |
| USERIMG | VARCHAR | 用户图片 |
| DYNAMIC_FIELD | TEXT | 动态字段(JSON) |
#### 组织机构表 JCDP_SYS_ORG
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| CASCADE_ID | VARCHAR | 级联ID(树形结构) |
| NAME | VARCHAR | 组织名称 |
| PARENT_ID | VARCHAR | 父节点ID |
| IS_LEAF | INT | 是否叶子节点 |
| ORGTYPE | VARCHAR | 组织类型 |
| STATUS | INT | 状态 |
| SORT_NO | INT | 排序号 |
| CODE | VARCHAR | 组织编码 |
#### 角色表 JCDP_SYS_ROLE
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| NAME | VARCHAR | 角色名称 |
| ROLETYPE | INT | 角色类型(0系统/1默认/2自定义) |
| STATUS | INT | 状态 |
| CREATER_ID | VARCHAR | 创建人ID |
| CREATER_ORGID | VARCHAR | 创建人组织ID |
#### 用户-角色关联 JCDP_SYS_USER_ROLE
| 字段 | 类型 | 说明 |
|------|------|------|
| USERID | VARCHAR | 用户ID |
| ROLEID | VARCHAR | 角色ID |
| ROLETYPE | VARCHAR | 角色类型 |
#### 用户-组织关联 JCDP_SYS_USER_ORG
| 字段 | 类型 | 说明 |
|------|------|------|
| USERID | VARCHAR | 用户ID |
| ORGID | VARCHAR | 组织ID |
| IS_DEFAULT_ORG | INT | 是否默认组织 |
#### 权限模块表 JCDP_SYS_MODULE
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| HREF | VARCHAR | 访问路径 |
| ACTIONVALUE | VARCHAR | 操作权限值 |
| MODULETYPE | VARCHAR | 模块类型 |
| MODULENAME | VARCHAR | 模块名称 |
#### 用户权限表 JCDP_SYS_USER_MODULE
| 字段 | 类型 | 说明 |
|------|------|------|
| USERID | VARCHAR | 用户ID |
| ACTIONVALUE | VARCHAR | 权限值 |
| ACTIONOP_JSON | VARCHAR | 操作JSON |
#### 角色权限表 JCDP_SYS_ROLE_MODULE
| 字段 | 类型 | 说明 |
|------|------|------|
| ROLEID | VARCHAR | 角色ID |
| ACTIONVALUE | VARCHAR | 权限值 |
### 3.2 培训业务表ET_TRAIN_前缀
#### 培训课程表 ET_TRAIN_KC
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| KCMC | VARCHAR | 课程名称 |
| KCNR | TEXT | 课程内容 |
| GROUPID | VARCHAR | 所属部门ID |
| GROUPNAME | VARCHAR | 所属部门名称 |
| JHLY | VARCHAR | 计划来源(sj/bmn/bmw) |
| SFWP | VARCHAR | 是否外派(是/否) |
| ND | VARCHAR | 年度 |
| KCXL | VARCHAR | 课程系列 |
| PXRS | INT | 培训人数 |
#### 培训班级表 ET_TRAIN_PD_CC
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| KCMC | VARCHAR | 课程名称 |
| KCMCID | VARCHAR | 课程ID |
| BJMC | VARCHAR | 班级名称 |
| BJLB | VARCHAR | 班级类别 |
| JHLY | VARCHAR | 计划来源 |
| STARTTIME | VARCHAR | 开始时间 |
| ENDTIME | VARCHAR | 结束时间 |
| PXXSH | INT | 培训学时 |
| PXXS | INT | 培训小时 |
| TEACHER | VARCHAR | 计划讲师 |
| REALTEACHER | VARCHAR | 实际讲师 |
| TEACHER_CODE | VARCHAR | 讲师工号 |
| TEACHER_DEPARTMENT | VARCHAR | 讲师部门 |
| STATUS | INT | 状态(-1驳回/0未开/1已下发/2已开班/3待审核) |
| SFKH | VARCHAR | 是否考核(是/否) |
| KHLX | VARCHAR | 考核类型 |
| KHFS | VARCHAR | 考核方式 |
| PRICE | DECIMAL | 培训费用 |
| SFBFZS | VARCHAR | 是否必需证书 |
#### 班级学员表 ET_TRAIN_PD_CC_USER
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| CCID | VARCHAR | 班级ID |
| USERCODE | VARCHAR | 学员工号 |
| USERNAME | VARCHAR | 学员姓名 |
| ISTRAIN | VARCHAR | 是否参训(1是) |
| REALPERIOD | DECIMAL | 实际学时 |
#### 部门计划内表 ET_TRAIN_GIPGROUP
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| GPPID | VARCHAR | 计划ID |
| ADDGROUPID | VARCHAR | 填报部门ID |
| ADDGROUPNAME | VARCHAR | 填报部门名称 |
| ADDUSERCODE | VARCHAR | 填报人 |
| ADDUSERNAME | VARCHAR | 填报人姓名 |
| ADDTIME | DATETIME | 填报时间 |
| STATUS | INT | 状态 |
#### 部门计划外表 ET_TRAIN_GOP
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| PXMC | VARCHAR | 培训名称 |
| SQDW | VARCHAR | 申请单位 |
| SQR | VARCHAR | 申请人 |
| SQTIME | DATETIME | 申请时间 |
| LXTEL | VARCHAR | 联系电话 |
| STATUS | INT | 状态 |
| DWXZ | VARCHAR | 单位性质(经济/非经济责任制) |
#### 所级计划表 ET_TRAIN_IP
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| NAME | VARCHAR | 计划名称 |
| STARTTIME | VARCHAR | 开始时间 |
| ENDTIME | VARCHAR | 结束时间 |
| STATUS | INT | 状态 |
#### 外派培训表 ET_TRAIN_OT
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| WPID | VARCHAR | 物品ID(关联课程) |
| PXMC | VARCHAR | 培训名称 |
| PXDJFW | VARCHAR | 培训对象范围(0本部门/1指定人员) |
| PXSTARTTIME | VARCHAR | 培训开始时间 |
| PXENDTIME | VARCHAR | 培训结束时间 |
| PXFy | DECIMAL | 培训费用 |
| SLD | VARCHAR | 审批领导 |
| STATUS | INT | 状态(5已完成) |
| DELSTATUS | INT | 删除状态(0正常/1已删除) |
#### 外派学员表 ET_TRAIN_OT_XY
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| OTID | VARCHAR | 外派培训ID |
| USERCODE | VARCHAR | 学员工号 |
| USERNAME | VARCHAR | 学员姓名 |
| ETSORT | INT | 排序 |
#### 外派登记表 ET_TRAIN_OT_PXDJ
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| OTID | VARCHAR | 外派培训ID |
| ADDUSERCODE | VARCHAR | 登记人 |
| ADDGROUPNAME | VARCHAR | 登记部门 |
| STATUS | INT | 状态(4已完成) |
#### 年度总结表 ET_TRAIN_YSGROUP
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| YSID | VARCHAR | 总结ID |
| ADDGROUPID | VARCHAR | 填报部门ID |
| ADDGROUPNAME | VARCHAR | 填报部门名称 |
| ADDUSERCODE | VARCHAR | 填报人 |
| ADDUSERNAME | VARCHAR | 填报人姓名 |
| ADDTIME | DATETIME | 填报时间 |
| STATUS | INT | 状态 |
#### 审批流程表 ET_TRAIN_SP
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| TNAME | VARCHAR | 表名 |
| TID | VARCHAR | 记录ID |
| SPUSERNAME | VARCHAR | 审批人 |
| SPDATE | DATETIME | 审批日期 |
| YJ | TEXT | 审批意见 |
| SPRESULT | VARCHAR | 审批结果 |
### 3.3 考试业务表ET_EXAM_前缀
#### 试卷表 ET_EXAM_EXAMPAPER_AND_EDITEXAMPAPER
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| NAME | VARCHAR | 试卷名称 |
| DESCRIPTION | VARCHAR | 描述 |
| SC | VARCHAR | 所属课程 |
| STATE | VARCHAR | 状态(未开始/正在进行/已关闭/已撤销) |
| STARTDATE | DATE | 开始日期 |
| ENDDATE | DATE | 结束日期 |
#### 题目表 ET_EXAM_EDITEXAMPAPER
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| EDIT_ID | VARCHAR | 试卷ID |
| NUM | INT | 题号 |
| SUBJECT | TEXT | 题目内容 |
| TYPE | VARCHAR | 题型(单选题/多选题/判断题/简答题) |
| TYPE_NUM | INT | 题型序号 |
| ISMUST | VARCHAR | 是否必答 |
| SCORE | DECIMAL | 分值 |
| OPTIONA-F | VARCHAR | 选项 |
| ANSWER | VARCHAR | 标准答案 |
| ISPARAGRAPH | VARCHAR | 是否段落题 |
#### 用户答题表 ET_EXAM_USERTEST
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| EXAM_ID | VARCHAR | 试卷ID |
| QUESTION_ID | VARCHAR | 题目ID |
| USER_ID | VARCHAR | 用户ID |
| USER | VARCHAR | 用户姓名 |
| DEPARTMENT | VARCHAR | 部门 |
| USER_ANSWER | VARCHAR | 用户答案 |
| USER_SCORE | DECIMAL | 用户得分 |
| USER_TIME | VARCHAR | 用时 |
| MARK_TEACHER | VARCHAR | 判卷教师 |
#### 人员限定表 ET_EXAM_LIMITATION
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| EXAM_ID | VARCHAR | 试卷ID |
| USER_ID | VARCHAR | 用户工号 |
| USER | VARCHAR | 用户姓名 |
#### 班级限定表 ET_EXAM_LIMITATION_CLASS
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| EXAM_ID | VARCHAR | 试卷ID |
| CLASS_ID | VARCHAR | 班级ID |
| CLASS_PERSON_ID | VARCHAR | 学员工号 |
| CLASS_PERSON | VARCHAR | 学员姓名 |
#### 课程限定表 ET_EXAM_LIMITATION_COURSE
| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 |
| EXAM_ID | VARCHAR | 试卷ID |
| COURSE_ID | VARCHAR | 课程ID |
| COURSE_PERSON_ID | VARCHAR | 学员工号 |
| COURSE_PERSON | VARCHAR | 学员姓名 |
### 3.4 即时通讯表
#### 聊天用户状态表 JCDP_CHAT_USERSTATUS
| 字段 | 类型 | 说明 |
|------|------|------|
| USERID | VARCHAR | 用户ID |
| USERSTATUS | INT | 在线状态(0离线/1在线) |
| HEARTBEAT | DATETIME | 最后心跳时间 |
---
## 五、核心业务流程详解(补充)
### 4.1 培训计划制定流程
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 阶段1: 所级管理员下发通知 │
├─────────────────────────────────────────────────────────────────────────────┤
│ 操作: INSERT et_train_ip / et_train_gip │
│ 状态: status=1 (待填报) │
│ 对象: 关联部门 (et_train_ip_group / et_train_gip_group) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 阶段2: 部门管理员填报课程需求 │
├─────────────────────────────────────────────────────────────────────────────┤
│ 操作: INSERT et_train_gipgroup_kc / et_train_ipgroup_kc │
│ 内容: 培训课程、人数、预算、时间段 │
│ 状态: status=1 (已填报,待调研) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 阶段3: 所级调研征集(可选) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 操作: INSERT et_train_ipdy │
│ 内容: 下发调研问卷给部门 │
│ 反馈: 部门填写 et_train_ipdy_kc │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 阶段4: 所级汇总生成计划 │
├─────────────────────────────────────────────────────────────────────────────┤
│ 操作: INSERT et_train_ipf │
│ 内容: 整合所有部门需求,生成正式计划 │
│ 关联: et_train_ipf_kc │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 阶段5: 审批流程 │
├─────────────────────────────────────────────────────────────────────────────┤
│ 操作: INSERT et_train_sp │
│ 内容: tname=目标表名, tid=记录ID │
│ 审批人: 从 et_train_sp_person 获取 │
│ 结果: spresult (通过/驳回) │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 4.2 培训实施完整流程
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 培训实施完整流程 │
└─────────────────────────────────────────────────────────────────────────────┘
培训计划 ──▶ 课程分配 ──▶ 开班管理 ──▶ 学员管理 ──▶ 授课管理 ──▶ 考核管理 ──▶ 完成归档
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤1: 课程分配 (et_train_pd_cc) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 根据计划关联课程: │
│ • 选择培训讲师 (teacher) │
│ • 设置培训时间 (starttime, endtime) │
│ • 设置培训人数 (pxxsh) │
│ • 设置是否考核 (sfkh) │
│ 初始状态: status=0 (未开班) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤2: 开班下发 (status=1) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 所级管理员审核后下发 │
│ 状态: 1 (已下发) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤3: 学员管理 (et_train_pd_cc_user) │
├─────────────────────────────────────────────────────────────────────────────┤
│ • 添加学员 │
│ • 设置是否参训 (istrain=1) │
│ • 记录实际学时 (realperiod) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤4: 签到管理 (et_train_pd_cc_dt) │
├─────────────────────────────────────────────────────────────────────────────┤
│ • 创建签到任务 │
│ • 学员签到记录 │
│ • 统计出勤率 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤5: 授课完成 (status=2) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 填写实际讲师: realteacher │
│ 状态: 2 (已开班) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤6: 培训效果反馈 │
├─────────────────────────────────────────────────────────────────────────────┤
│ et_train_pd_cc_pg → 评分问卷发布 │
│ et_train_pd_cc_pgwjyxx → 问卷/心得反馈 │
│ 2023年起完成条件改为: yxx.status = 2 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 步骤7: 归档待审 (status=3) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 状态: 3 (待审核) │
│ 管理员审核后完成归档 │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 4.3 外派培训流程
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 外派培训管理流程 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 外派培训申请 (et_train_ot) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 字段说明: │
│ • wpid: 关联培训计划课程ID │
│ • pxdjfw: 培训对象范围(0=本部门/1=指定人员) │
│ • sld: 审批领导工号 │
│ • status: 5 (已完成) │
│ • delstatus: 0 (正常)/1 (删除) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 指定参训人员 (et_train_ot_xy) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 当 pxdjfw='1' 时需要指定人员 │
│ otid: 外派培训ID │
│ usercode/username: 学员信息 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 外派登记 (et_train_ot_pxdj) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 学员返回后进行登记 │
│ status='4' 表示已完成登记 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 删除申请 (et_train_ot_del) │
├─────────────────────────────────────────────────────────────────────────────┤
│ 需要走审批流程 │
│ 原记录 otid 保留在 del 表 │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 六、SQL映射文件清单
### 5.1 系统管理模块
| 文件 | 核心SQL |
|------|--------|
| `jcdp_sys_user.map.xml` | getUserListbyOrg, sys_user_valid, getUserPermissonList |
| `jcdp_sys_org.map.xml` | getorg_list, getorg_cascadeList, getCurrentUserOrgTree |
| `jcdp_sys_role.map.xml` | getRoleList, getRoleUsers, getNoRoleUserList |
| `jcdp_sys_module.map.xml` | getModuleList, getUserModules |
| `jcdp_sys_log.map.xml` | getLogList |
| `parameter.map.xml` | getParamList, updateParam |
| `dict.map.xml` | getDictList, getDictItems |
| `dictItem.map.xml` | getDictItemList |
### 5.2 培训计划模块
| 文件 | 核心SQL |
|------|--------|
| `et_train_groupinplan.map.xml` | getGroupInPlanList, getGroupInPlanGroupList, getDbGroupInPlanGroupList |
| `et_train_groupinplan_bg.map.xml` | 计划变更相关 |
| `et_train_groupoutplan.map.xml` | getGroupOutPlanList |
| `et_train_instituteplan.map.xml` | getInstitutePlanList, getInstituteDyList, getInstitutePlanFList |
| `et_train_instituteplan_bg.map.xml` | 院级计划变更 |
| `et_train_kc.map.xml` | getet_train_kcList, getet_train_kc_sl (培训统计) |
| `et_train_sp.map.xml` | getspList, updatespyw, getMyManageList (审批) |
| `et_train_yearsummary.map.xml` | getYearSummaryList, getYearSummaryGroupList |
### 5.3 培训实施模块
| 文件 | 核心SQL |
|------|--------|
| `et_train_pd.map.xml` | getPdList, getPd_KcList, getPd_CcUserList |
| `et_train_pd_classopener.map.xml` | 开班管理 |
| `pd_query.map.xml` | queryTrainFlow, queryTrainTotal (综合查询) |
### 5.4 外派培训模块
| 文件 | 核心SQL |
|------|--------|
| `et_train_outtrain.map.xml` | getOutTrainList, getOutTrainPxdjList, getOutTrainDeleteList |
### 5.5 考试模块
| 文件 | 核心SQL |
|------|--------|
| `et_exam_editexampaper.map.xml` | 试卷管理 |
| `et_exam_exampaper_and_editexampaper.map.xml` | 试卷创建 |
| `et_exam_usertest.map.xml` | getExamTestList, getExamResultList, getExamMarkList |
| `et_exam_limitation.map.xml` | 参考人员管理 |
### 5.6 即时通讯模块
| 文件 | 核心SQL |
|------|--------|
| `chat.map.xml` | getChatUserByOrg, getOnlineUserIds, ChatUserHeartBeat |
| `chatGroup.map.xml` | 群组管理 |
| `chatFriends.map.xml` | 好友管理 |
---
## 七、关键业务规则
### 6.1 状态值汇总
| 表/实体 | 状态字段 | 状态值说明 |
|--------|----------|------------|
| et_train_pd_cc | status | -1:被驳回, 0:未开班, 1:已下发, 2:已开班, 3:待审核 |
| et_train_gipgroup | status | 同上 |
| et_train_ipgroup | status | 同上 |
| et_train_ip | status | 1:待填报, 2:已过期 |
| et_exam_exampaper | state | 未开始, 正在进行, 已关闭, 已撤销 |
| et_train_ot | status | 5:已完成 |
| et_train_ot | delstatus | 0:正常, 1:已删除 |
| et_train_ot_pxdj | status | 4:已完成登记 |
| et_train_ysgroup | status | 3:已填报 |
### 6.2 计划来源 (jhly)
| 值 | 说明 | 来源 |
|----|------|------|
| sj | 所级/院级计划 | 所级管理员统一制定下发 |
| bmn | 部门级计划内 | 部门申报,纳入年度预算 |
| bmw | 部门级计划外 | 部门临时申请,不占预算 |
### 6.3 培训完成判定
```
2023年及以后:
完成条件 = et_train_pd_cc_pgwjyxx.status = 2 (问卷/心得已完成)
2023年以前:
完成条件 = IF(yxx.status IS NOT NULL, yxx.status=2, pg.status=1)
```
### 6.4 权限控制
```
用户类型 (usertype):
- 普通用户
- 管理员 (可管理所有数据)
角色类型 (roletype):
0: 系统级角色 (全局有效)
1: 默认角色 (新建用户自动分配)
2: 自定义角色 (部门级或用户级)
```
---
## 八、接口与集成
### 7.1 WebService (Apache CXF)
- **服务名**: ETMSService
- **暴露地址**: 可配置
- **功能**: 提供外部系统调用接口
### 7.2 消息队列 (RabbitMQ)
- **客户端**: amqp-client
- **用途**: 异步消息通知、事件触发
### 7.3 HCM接口 (et_hcm_interface)
- **用途**: 与人力资源管理系统数据同步
### 7.4 报表集成 (FineReport)
- **版本**: FineReport 8.0
- **配置**: fr-* 相关配置
- **使用**: 统计分析模块
---
## 九、开发规范参考
详见同目录下的 `CODE_REVIEW_GUIDE.md`,包含:
- SQL注入防护规范
- FTL模板规范
- JavaScript规范
- CSS规范
- 审查流程与问题等级
---
*文档生成时间: 2026-04-16*
*最后更新: 2026-04-16 (增加BPMN业务流程模型章节)*
*更新内容: 新增第三章"BPMN业务流程模型"包含6个核心流程的完整流程定义、参与者定义、流程图和节点详情*