18 KiB
培训业务模块与 14 组 CRUD 盘点
1. 审计口径
本文件来自对以下实际目录的逐项比对:
- Controller:
RuoYi-Vue/ruoyi-admin/src/main/java/com/ruoyi/web/controller/train/ - Domain:
RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/domain/ - Mapper:
RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/mapper/ - Service:
RuoYi-Vue/ruoyi-train/src/main/java/com/ruoyi/train/service/ - XML:
RuoYi-Vue/ruoyi-train/src/main/resources/mapper/train/ - 前端:
build_ui/src/views/train/、build_ui/src/api/train/ - 表设计:
doc/学员管理系统数据表设计_20260907_1_.docx
14 组后端均为同一生成式结构:分页列表、Excel 导出、详情、新增、修改、物理批量删除。未发现培训专用 DTO/VO;Controller 直接接收并返回 Domain。ServiceImpl 基本为 Mapper 委托,没有领域校验、跨表编排、事务流程或外部系统调用。
2. 模块逐项盘点
2.1 教师信息
模块名称: 教师信息(train_teacher)
后端:
- Controller:
TrainTeacherController - Service:
ITrainTeacherService - ServiceImpl:
TrainTeacherServiceImpl - Mapper:
TrainTeacherMapper - XML:
TrainTeacherMapper.xml - Domain / Entity:
TrainTeacher - DTO / VO:无
前端:
- views:
build_ui/src/views/train/teacher/index.vue - api:
build_ui/src/api/train/teacher.js
数据库: 涉及表 train_teacher
当前已有功能:
- 教师条件列表、详情、新增、修改、批量删除。
- 基于
@Excel字段注解的导出。 - 字段覆盖工号、姓名、性别、出生日期、院系、职称、电话、邮箱及公共审计字段。
明显缺失:
- 没有教师与
sys_user的账号关联。 - 没有资质/证书、状态、可授课程、授课范围及教师数据权限。
- 删除为物理删除;无导入接口、查重与跨表引用校验。
2.2 学员信息
模块名称: 学员信息(train_student)
后端:
- Controller:
TrainStudentController - Service:
ITrainStudentService - ServiceImpl:
TrainStudentServiceImpl - Mapper:
TrainStudentMapper - XML:
TrainStudentMapper.xml - Domain / Entity:
TrainStudent - DTO / VO:无
前端:
- views:
build_ui/src/views/train/student/index.vue - api:
build_ui/src/api/train/student.js
数据库: 涉及表 train_student
当前已有功能:
- 学员条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存学号、姓名、性别、出生日期、院系、专业、班级、电话。
明显缺失:
- 没有学员与
sys_user的账号关联,也没有身份证/人脸等报到和门禁所需身份数据。 - 没有参训/报名关系、学员在某期培训中的状态。
- 删除为物理删除;无培训学员导入接口和重复校验。
2.3 课程信息
模块名称: 课程信息(train_course)
后端:
- Controller:
TrainCourseController - Service:
ITrainCourseService - ServiceImpl:
TrainCourseServiceImpl - Mapper:
TrainCourseMapper - XML:
TrainCourseMapper.xml - Domain / Entity:
TrainCourse - DTO / VO:无
前端:
- views:
build_ui/src/views/train/course/index.vue - api:
build_ui/src/api/train/course.js
数据库: 涉及表 train_course
当前已有功能:
- 课程条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 文档、视频、模型链接和模型资源 ID 以文本字段保存。
明显缺失:
- 没有课程版本、章节、课次、课表、资源实体及资源关系。
- 附件和多资源使用逗号分隔/文本 URL,没有与已有上传能力形成业务关系。
- 无课程发布、审核、上下架等动作。
2.4 开班计划
模块名称: 开班计划(train_class_plan)
后端:
- Controller:
TrainClassPlanController - Service:
ITrainClassPlanService - ServiceImpl:
TrainClassPlanServiceImpl - Mapper:
TrainClassPlanMapper - XML:
TrainClassPlanMapper.xml - Domain / Entity:
TrainClassPlan - DTO / VO:无
前端:
- views:
build_ui/src/views/train/plan/index.vue - api:
build_ui/src/api/train/plan.js
数据库: 涉及表 train_class_plan
当前已有功能:
- 计划条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存单个
c_id、单个t_id、起止时间、地点、招生人数、报名条件、状态。
明显缺失:
- 一个计划只有一个课程与一个教师,不能表达一班多课、多教师、逐课次安排。
- 没有参训名单、报名审核、开班/结班等状态动作。
- 没有教室、实训场地、课程时间冲突校验。
2.5 宿舍信息
模块名称: 宿舍信息(train_dormitory_info)
后端:
- Controller:
TrainDormitoryInfoController - Service:
ITrainDormitoryInfoService - ServiceImpl:
TrainDormitoryInfoServiceImpl - Mapper:
TrainDormitoryInfoMapper - XML:
TrainDormitoryInfoMapper.xml - Domain / Entity:
TrainDormitoryInfo - DTO / VO:无
前端:
- views:
build_ui/src/views/train/dormitory/index.vue(有未提交修改) - api:
build_ui/src/api/train/dormitory.js(未跟踪)
数据库: 涉及表 train_dormitory_info
当前已有功能:
- 当前工作树页面与 API 支持宿舍列表、详情、新增、修改、删除。
- 保存楼栋、房间号、床位总数/已用数、门锁序列号、状态。
- Controller 同时接受
/train/dorminfo与/train/dormitory,该别名改动尚未提交。
明显缺失:
- 当前页面没有导出按钮和
v-hasPermi按钮权限控制;后端仍有导出接口。 - 没有独立床位实体、床位占用唯一性或容量一致性校验。
- 无楼栋/楼层层级和住宿状态流转。
2.6 宿舍权限分配
模块名称: 宿舍权限分配(train_dorm_auth)
后端:
- Controller:
TrainDormAuthController - Service:
ITrainDormAuthService - ServiceImpl:
TrainDormAuthServiceImpl - Mapper:
TrainDormAuthMapper - XML:
TrainDormAuthMapper.xml - Domain / Entity:
TrainDormAuth - DTO / VO:无
前端:
- views:
build_ui/src/views/train/auth/index.vue - api:
build_ui/src/api/train/auth.js
数据库: 涉及表 train_dorm_auth
当前已有功能:
- 权限记录条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存学员、计划、宿舍、床号、授权起止时间和人脸下发状态。
明显缺失:
- 没有实际门锁下发接口、回调、重试、错误详情或操作流水。
- 住宿分配与设备授权耦合在一张表,没有独立住宿分配状态。
- 没有床位冲突、时段重叠、人员/计划/房间存在性校验。
2.7 教室信息
模块名称: 教室信息(train_classroom_info)
后端:
- Controller:
TrainClassroomInfoController - Service:
ITrainClassroomInfoService - ServiceImpl:
TrainClassroomInfoServiceImpl - Mapper:
TrainClassroomInfoMapper - XML:
TrainClassroomInfoMapper.xml - Domain / Entity:
TrainClassroomInfo - DTO / VO:无
前端:
- views:
build_ui/src/views/train/classroom/index.vue - api:页面实际导入
build_ui/src/api/train/info.js;另有未跟踪的classroom.js
数据库: 涉及表 train_classroom_info
当前已有功能:
- 教室列表、详情、新增、修改、删除与导出。
- 保存名称、位置、容量、状态。
- 当前 Controller 接受
/train/classroominfo、/train/classroom、/train/info三个前缀,属于未提交兼容改动。
明显缺失:
- 前后端权限分别为
train:info:*和system:info:*,不一致。 - 多个 API 文件/别名并存,规范入口尚未收敛。
- 无排课占用、时间冲突与容量校验。
2.8 实训场地
模块名称: 实训场地(train_training_site)
后端:
- Controller:
TrainTrainingSiteController - Service:
ITrainTrainingSiteService - ServiceImpl:
TrainTrainingSiteServiceImpl - Mapper:
TrainTrainingSiteMapper - XML:
TrainTrainingSiteMapper.xml - Domain / Entity:
TrainTrainingSite - DTO / VO:无
前端:
- views:
build_ui/src/views/train/site/index.vue - api:
build_ui/src/api/train/site.js
数据库: 涉及表 train_training_site
当前已有功能:
- 场地条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存名称、位置、容量、配套设备文本、状态。
明显缺失:
- 配套设备仅为文本字段,没有设备资产关系。
- 无场地排期、占用、冲突和容量校验。
- 无场地类型、设备可用状态的独立管理。
2.9 开班报到
模块名称: 开班报到(train_class_report)
后端:
- Controller:
TrainClassReportController - Service:
ITrainClassReportService - ServiceImpl:
TrainClassReportServiceImpl - Mapper:
TrainClassReportMapper - XML:
TrainClassReportMapper.xml - Domain / Entity:
TrainClassReport - DTO / VO:无
前端:
- views:
build_ui/src/views/train/report/index.vue - api:
build_ui/src/api/train/report.js
数据库: 涉及表 train_class_report
当前已有功能:
- 报到记录条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存报到方式、设备号、时间、状态,以及宿舍/教室/场地分配 ID。
明显缺失:
- 页面是人工维护 CRUD,没有身份证/人脸设备接入或回调接口。
- 没有参训名单作为报到资格来源,也没有防重复报到与状态流转。
- 报到事件与三类资源分配耦合,未见原子事务和容量/冲突校验。
2.10 电子班牌
模块名称: 电子班牌设备(train_electronic_board)
后端:
- Controller:
TrainElectronicBoardController - Service:
ITrainElectronicBoardService - ServiceImpl:
TrainElectronicBoardServiceImpl - Mapper:
TrainElectronicBoardMapper - XML:
TrainElectronicBoardMapper.xml - Domain / Entity:
TrainElectronicBoard - DTO / VO:无
前端:
- views:
build_ui/src/views/train/board/index.vue - api:
build_ui/src/api/train/board.js
数据库: 涉及表 train_electronic_board
当前已有功能:
- 班牌设备条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存序列号、绑定教室/计划、IP、显示内容、播放模式、签到类型、在线状态、最后心跳。
明显缺失:
- 没有心跳上报、内容发布、设备命令、签到回调等外部接入接口。
- 没有设备认证、签名、幂等和离线判定任务。
board_playmode的设计注释与board_status都使用“离线/在线”语义,字段边界不清。
2.11 学员签到
模块名称: 学员签到(train_student_checkin)
后端:
- Controller:
TrainStudentCheckinController - Service:
ITrainStudentCheckinService - ServiceImpl:
TrainStudentCheckinServiceImpl - Mapper:
TrainStudentCheckinMapper - XML:
TrainStudentCheckinMapper.xml - Domain / Entity:
TrainStudentCheckin - DTO / VO:无
前端:
- views:
build_ui/src/views/train/checkin/index.vue - api:
build_ui/src/api/train/checkin.js
数据库: 涉及表 train_student_checkin
当前已有功能:
- 签到记录条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存计划、课程、学员、班牌、签到方式/状态,以及课次起止时间。
明显缺失:
- 没有
lesson_id/课次实体;每条签到重复保存课程起止时间。 - 没有设备签到接入、二维码生成/核验、迟到早退计算或补签审批。
- 没有同一学员同一课次的唯一约束/幂等证据。
2.12 多类型成绩
模块名称: 多类型成绩(train_score_info)
后端:
- Controller:
TrainScoreInfoController - Service:
ITrainScoreInfoService - ServiceImpl:
TrainScoreInfoServiceImpl - Mapper:
TrainScoreInfoMapper - XML:
TrainScoreInfoMapper.xml - Domain / Entity:
TrainScoreInfo - DTO / VO:无
前端:
- views:
build_ui/src/views/train/score/index.vue(未跟踪) - api:
build_ui/src/api/train/score.js(未跟踪) - 只读衍生视图:
student-score/index.vue、course-score/index.vue(均未跟踪)
数据库: 涉及表 train_score_info
当前已有功能:
- 当前工作树有成绩列表、详情、新增、修改、删除页面/API;后端有导出接口。
- 保存课程成绩、实训成绩、考核成绩、来源类型/系统、导入时间。
- 学员成绩和课程成绩页面只是调用同一列表接口做筛选;课程成绩页以
examScore在前端计算显示评级。
明显缺失:
- 成绩页面没有按钮权限指令和导出入口,文件仍未纳入 Git。
- 没有 Excel 导入接口、外部采集接口、错误反馈、审核/发布/锁定。
- 没有权重、综合分公式及版本;代码未计算真正综合成绩。
2.13 学习时长
模块名称: 学习时长统计(train_study_duration)
后端:
- Controller:
TrainStudyDurationController - Service:
ITrainStudyDurationService - ServiceImpl:
TrainStudyDurationServiceImpl - Mapper:
TrainStudyDurationMapper - XML:
TrainStudyDurationMapper.xml - Domain / Entity:
TrainStudyDuration - DTO / VO:无
前端:
- views:
build_ui/src/views/train/duration/index.vue - api:
build_ui/src/api/train/duration.js
数据库: 涉及表 train_study_duration
当前已有功能:
- 时长记录条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存设备类型、起止时间、时长秒数和同步时间。
明显缺失:
- 没有设备/外部系统上报接口、外部事件 ID、幂等与异常记录。
- 没有由起止时间校验或计算
study_seconds的业务逻辑。 - 无汇总统计接口;所谓“统计”当前仍是明细 CRUD。
2.14 学员画像
模块名称: 学员画像(train_student_portrait)
后端:
- Controller:
TrainStudentPortraitController - Service:
ITrainStudentPortraitService - ServiceImpl:
TrainStudentPortraitServiceImpl - Mapper:
TrainStudentPortraitMapper - XML:
TrainStudentPortraitMapper.xml - Domain / Entity:
TrainStudentPortrait - DTO / VO:无
前端:
- views:
build_ui/src/views/train/portrait/index.vue - api:
build_ui/src/api/train/portrait.js
数据库: 涉及表 train_student_portrait
当前已有功能:
- 画像记录条件列表、详情、新增、修改、批量删除。
- Excel 导出。
- 保存总学习时长、平均成绩、签到率、标签和综合描述。
明显缺失:
- 没有从签到、成绩、学习时长聚合生成画像的服务。
- 没有指标/标签规则、版本、快照历史或生成时间。
- 前端只是表格 CRUD,没有雷达图、趋势或画像工作台。
3. 14 组 CRUD 完整度
| 模块 | 数据表 | Entity | Mapper | Service | Controller | 前端 API | 前端页面 | CRUD 完整度 |
|---|---|---|---|---|---|---|---|---|
| 教师 | train_teacher |
TrainTeacher |
接口+XML | 接口+Impl | TrainTeacherController |
teacher.js |
teacher/index.vue |
疑似生成但未接通 |
| 学员 | train_student |
TrainStudent |
接口+XML | 接口+Impl | TrainStudentController |
student.js |
student/index.vue |
疑似生成但未接通 |
| 课程 | train_course |
TrainCourse |
接口+XML | 接口+Impl | TrainCourseController |
course.js |
course/index.vue |
疑似生成但未接通 |
| 开班计划 | train_class_plan |
TrainClassPlan |
接口+XML | 接口+Impl | TrainClassPlanController |
plan.js |
plan/index.vue |
疑似生成但未接通 |
| 宿舍 | train_dormitory_info |
TrainDormitoryInfo |
接口+XML | 接口+Impl | TrainDormitoryInfoController |
dormitory.js(未跟踪) |
dormitory/index.vue(已修改) |
疑似生成但未接通 |
| 宿舍权限 | train_dorm_auth |
TrainDormAuth |
接口+XML | 接口+Impl | TrainDormAuthController |
auth.js |
auth/index.vue |
疑似生成但未接通 |
| 教室 | train_classroom_info |
TrainClassroomInfo |
接口+XML | 接口+Impl | TrainClassroomInfoController(已修改) |
info.js(已修改) |
classroom/index.vue |
疑似生成但未接通 |
| 实训场地 | train_training_site |
TrainTrainingSite |
接口+XML | 接口+Impl | TrainTrainingSiteController |
site.js |
site/index.vue |
疑似生成但未接通 |
| 开班报到 | train_class_report |
TrainClassReport |
接口+XML | 接口+Impl | TrainClassReportController |
report.js |
report/index.vue |
疑似生成但未接通 |
| 电子班牌 | train_electronic_board |
TrainElectronicBoard |
接口+XML | 接口+Impl | TrainElectronicBoardController |
board.js |
board/index.vue |
疑似生成但未接通 |
| 学员签到 | train_student_checkin |
TrainStudentCheckin |
接口+XML | 接口+Impl | TrainStudentCheckinController |
checkin.js |
checkin/index.vue |
疑似生成但未接通 |
| 多类型成绩 | train_score_info |
TrainScoreInfo |
接口+XML | 接口+Impl | TrainScoreInfoController(已修改) |
score.js(未跟踪) |
score/index.vue(未跟踪) |
疑似生成但未接通 |
| 学习时长 | train_study_duration |
TrainStudyDuration |
接口+XML | 接口+Impl | TrainStudyDurationController |
duration.js |
duration/index.vue |
疑似生成但未接通 |
| 学员画像 | train_student_portrait |
TrainStudentPortrait |
接口+XML | 接口+Impl | TrainStudentPortraitController |
portrait.js |
portrait/index.vue |
疑似生成但未接通 |
判断说明
这里的“疑似生成但未接通”不是说缺少 CRUD 文件。相反,14 组的六类后端构件和对应前端页面/API在当前工作树都存在。采用该结论是因为:
- 仓库没有培训表 DDL或迁移,无法证明运行数据库有表。
- 仓库没有培训
sys_menu/权限初始化 SQL,前后端权限字符串还普遍不一致。 - 成绩、宿舍 API及部分页面/Controller适配尚未提交。
- 没有端到端测试、接口测试或当前启动验证证据。
若只按“是否具有生成器产出的 CRUD 文件”衡量,14 组均为代码层齐全;若按“用户可从菜单登录并完成 CRUD”衡量,目前没有一组可以由仓库证据确认“完整”。