# 培训业务模块与 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` **当前已有功能:** 1. 教师条件列表、详情、新增、修改、批量删除。 2. 基于 `@Excel` 字段注解的导出。 3. 字段覆盖工号、姓名、性别、出生日期、院系、职称、电话、邮箱及公共审计字段。 **明显缺失:** 1. 没有教师与 `sys_user` 的账号关联。 2. 没有资质/证书、状态、可授课程、授课范围及教师数据权限。 3. 删除为物理删除;无导入接口、查重与跨表引用校验。 ### 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` **当前已有功能:** 1. 学员条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存学号、姓名、性别、出生日期、院系、专业、班级、电话。 **明显缺失:** 1. 没有学员与 `sys_user` 的账号关联,也没有身份证/人脸等报到和门禁所需身份数据。 2. 没有参训/报名关系、学员在某期培训中的状态。 3. 删除为物理删除;无培训学员导入接口和重复校验。 ### 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` **当前已有功能:** 1. 课程条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 文档、视频、模型链接和模型资源 ID 以文本字段保存。 **明显缺失:** 1. 没有课程版本、章节、课次、课表、资源实体及资源关系。 2. 附件和多资源使用逗号分隔/文本 URL,没有与已有上传能力形成业务关系。 3. 无课程发布、审核、上下架等动作。 ### 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` **当前已有功能:** 1. 计划条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存单个 `c_id`、单个 `t_id`、起止时间、地点、招生人数、报名条件、状态。 **明显缺失:** 1. 一个计划只有一个课程与一个教师,不能表达一班多课、多教师、逐课次安排。 2. 没有参训名单、报名审核、开班/结班等状态动作。 3. 没有教室、实训场地、课程时间冲突校验。 ### 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` **当前已有功能:** 1. 当前工作树页面与 API 支持宿舍列表、详情、新增、修改、删除。 2. 保存楼栋、房间号、床位总数/已用数、门锁序列号、状态。 3. Controller 同时接受 `/train/dorminfo` 与 `/train/dormitory`,该别名改动尚未提交。 **明显缺失:** 1. 当前页面没有导出按钮和 `v-hasPermi` 按钮权限控制;后端仍有导出接口。 2. 没有独立床位实体、床位占用唯一性或容量一致性校验。 3. 无楼栋/楼层层级和住宿状态流转。 ### 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` **当前已有功能:** 1. 权限记录条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存学员、计划、宿舍、床号、授权起止时间和人脸下发状态。 **明显缺失:** 1. 没有实际门锁下发接口、回调、重试、错误详情或操作流水。 2. 住宿分配与设备授权耦合在一张表,没有独立住宿分配状态。 3. 没有床位冲突、时段重叠、人员/计划/房间存在性校验。 ### 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` **当前已有功能:** 1. 教室列表、详情、新增、修改、删除与导出。 2. 保存名称、位置、容量、状态。 3. 当前 Controller 接受 `/train/classroominfo`、`/train/classroom`、`/train/info` 三个前缀,属于未提交兼容改动。 **明显缺失:** 1. 前后端权限分别为 `train:info:*` 和 `system:info:*`,不一致。 2. 多个 API 文件/别名并存,规范入口尚未收敛。 3. 无排课占用、时间冲突与容量校验。 ### 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` **当前已有功能:** 1. 场地条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存名称、位置、容量、配套设备文本、状态。 **明显缺失:** 1. 配套设备仅为文本字段,没有设备资产关系。 2. 无场地排期、占用、冲突和容量校验。 3. 无场地类型、设备可用状态的独立管理。 ### 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` **当前已有功能:** 1. 报到记录条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存报到方式、设备号、时间、状态,以及宿舍/教室/场地分配 ID。 **明显缺失:** 1. 页面是人工维护 CRUD,没有身份证/人脸设备接入或回调接口。 2. 没有参训名单作为报到资格来源,也没有防重复报到与状态流转。 3. 报到事件与三类资源分配耦合,未见原子事务和容量/冲突校验。 ### 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` **当前已有功能:** 1. 班牌设备条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存序列号、绑定教室/计划、IP、显示内容、播放模式、签到类型、在线状态、最后心跳。 **明显缺失:** 1. 没有心跳上报、内容发布、设备命令、签到回调等外部接入接口。 2. 没有设备认证、签名、幂等和离线判定任务。 3. `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` **当前已有功能:** 1. 签到记录条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存计划、课程、学员、班牌、签到方式/状态,以及课次起止时间。 **明显缺失:** 1. 没有 `lesson_id`/课次实体;每条签到重复保存课程起止时间。 2. 没有设备签到接入、二维码生成/核验、迟到早退计算或补签审批。 3. 没有同一学员同一课次的唯一约束/幂等证据。 ### 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` **当前已有功能:** 1. 当前工作树有成绩列表、详情、新增、修改、删除页面/API;后端有导出接口。 2. 保存课程成绩、实训成绩、考核成绩、来源类型/系统、导入时间。 3. 学员成绩和课程成绩页面只是调用同一列表接口做筛选;课程成绩页以 `examScore` 在前端计算显示评级。 **明显缺失:** 1. 成绩页面没有按钮权限指令和导出入口,文件仍未纳入 Git。 2. 没有 Excel 导入接口、外部采集接口、错误反馈、审核/发布/锁定。 3. 没有权重、综合分公式及版本;代码未计算真正综合成绩。 ### 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` **当前已有功能:** 1. 时长记录条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存设备类型、起止时间、时长秒数和同步时间。 **明显缺失:** 1. 没有设备/外部系统上报接口、外部事件 ID、幂等与异常记录。 2. 没有由起止时间校验或计算 `study_seconds` 的业务逻辑。 3. 无汇总统计接口;所谓“统计”当前仍是明细 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` **当前已有功能:** 1. 画像记录条件列表、详情、新增、修改、批量删除。 2. Excel 导出。 3. 保存总学习时长、平均成绩、签到率、标签和综合描述。 **明显缺失:** 1. 没有从签到、成绩、学习时长聚合生成画像的服务。 2. 没有指标/标签规则、版本、快照历史或生成时间。 3. 前端只是表格 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在当前工作树都存在。采用该结论是因为: 1. 仓库没有培训表 DDL或迁移,无法证明运行数据库有表。 2. 仓库没有培训 `sys_menu`/权限初始化 SQL,前后端权限字符串还普遍不一致。 3. 成绩、宿舍 API及部分页面/Controller适配尚未提交。 4. 没有端到端测试、接口测试或当前启动验证证据。 若只按“是否具有生成器产出的 CRUD 文件”衡量,14 组均为代码层齐全;若按“用户可从菜单登录并完成 CRUD”衡量,目前没有一组可以由仓库证据确认“完整”。