etms/PROJECT_GUIDE.md
liyuchen d9fba9a316 Remove organization references (de-identify)
- Replace CETC54 references with ETMS
- Replace com.cetc54 package with com.example
- Rename cetc54 directories to etms
- Replace CECT54.WebUI to ETMS.WebUI
- Replace organization names (中国电科54所 -> XX公司)
- Replace internal system URLs (cetc54.com -> example.com)
2026-04-16 17:14:56 +08:00

1431 lines
78 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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个核心流程的完整流程定义、参与者定义、流程图和节点详情*