Files
railwaysystem/docs/codebase-audit/10_gap_and_conflict_analysis.md
T

304 lines
10 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.
# 当前实现与未来业务设计的冲突点
> 本文件只报告基于当前代码能确认的模型/接通冲突,不提供重构代码,也不假定未入库系统的行为。
## 1. 开班计划只能直接挂一个课程和一个教师
**当前实现**
`TrainClassPlan`/`train_class_plan` 只有一个 `c_id` 和一个 `t_id`,Mapper 为单表 CRUD。
↓
**潜在问题**
一个培训班无法表达多门课程、多名教师、课程顺序和每次上课的时间地点。
↓
**可能影响哪些业务**
课程表、教师排课、教室/场地冲突检查、按课次签到、课程成绩和班级统计。
## 2. 没有参训/报名关系
**当前实现**
学员是独立主数据;报到、签到、成绩、时长、画像各自直接保存 `student_id + plan_id`。代码与表设计中没有 enrollment/plan_student/班级学员关系。
↓
**潜在问题**
无法明确某学员是否被录取、退训、结业或属于哪一期培训,也无法以一份稳定名单约束后续记录。
↓
**可能影响哪些业务**
报名审核、班级花名册、报到资格、住宿分配、签到名单、成绩发布、结业证书与教师数据权限。
## 3. 签到没有课次实体
**当前实现**
`train_student_checkin` 有 `plan_id`、`c_id`、`lesson_start_time`、`lesson_end_time`,但没有 `lesson_id`;每条学生签到重复保存课次时间。
↓
**潜在问题**
无法稳定标识一次上课,课程时间调整会产生历史不一致,也难以建立“一人一课次一次有效签到”的唯一规则。
↓
**可能影响哪些业务**
课程表、二维码签到、设备签到幂等、迟到/早退判断、补签、按课次出勤统计。
## 4. 学员模型偏高校学籍,缺少培训账号和身份信息
**当前实现**
`TrainStudent` 主要字段是院系、专业、班级、学号;没有 `sys_user` 关联、身份证、人脸特征/资源、人员状态或来源单位等代码字段。
↓
**潜在问题**
业务身份与登录身份无法对应,现场报到和门锁人脸授权的数据来源不完整;非高校培训场景也难以表达。
↓
**可能影响哪些业务**
学员登录、自助查询、现场报到、门禁授权、教师查看班级、跨单位培训。
## 5. 教师模型不能支撑账号、资质和授课范围
**当前实现**
`TrainTeacher` 只有工号、姓名、院系、职称、联系方式等基础字段;没有 `sys_user` 关联、启停状态、资质证书、可授课程关系。计划只保存一个 `t_id`。
↓
**潜在问题**
无法从当前登录用户确定教师身份,也无法约束其可查看班级或可教授课程。
↓
**可能影响哪些业务**
教师工作台、教师数据权限、排课、资质审查、课程授权。
## 6. 宿舍只有房间聚合,没有独立床位
**当前实现**
`train_dormitory_info` 保存 `bed_total` 和 `bed_used`;`bed_no` 只作为 `train_dorm_auth` 的自由文本字段存在。
↓
**潜在问题**
无法可靠管理每张床的状态、性别/房间约束、占用唯一性、维修与预留;`bed_used` 容易与授权记录不一致。
↓
**可能影响哪些业务**
自动分房、床位冲突、容量统计、换房、退宿、住宿看板。
## 7. 住宿分配与门锁人脸授权耦合
**当前实现**
`train_dorm_auth` 同时保存学员住宿位置、床位号、授权起止时间和 `face_sync_status`。
↓
**潜在问题**
业务住宿事实与设备同步状态无法独立演进;没有下发流水、重试次数、失败原因、设备回执和撤权记录。
↓
**可能影响哪些业务**
分房、换房、门禁下发、失败补偿、到期撤权、审计追踪。
## 8. 报到记录同时承担资源分配
**当前实现**
`train_class_report` 同一行保存报到事件及 `alloc_dorm_id`、`alloc_classroom_id`、`alloc_site_id`。Service 只是单表新增/修改,没有事务编排。
↓
**潜在问题**
一次报到被迫绑定三类资源,无法记录多次尝试、资源调整或单独失败,也没有容量和冲突校验。
↓
**可能影响哪些业务**
现场报到、住宿分配、教室/场地调度、设备异常恢复、操作审计。
## 9. 成绩固定三列且没有计算/发布规则
**当前实现**
`train_score_info` 固定为 `course_score`、`train_score`、`exam_score`;没有权重、规则版本、综合分、发布状态或审批字段。未跟踪的课程成绩页只按 `examScore` 显示“综合评级”。
↓
**潜在问题**
无法解释综合结果,课程差异化考核和规则变更会直接影响历史成绩可追溯性;页面名称可能造成错误理解。
↓
**可能影响哪些业务**
成绩导入、综合成绩、排名、补考、结业判定、画像和报表。
## 10. “成绩可导入/外部采集”目前只是字段枚举
**当前实现**
`source_type` 注释包含手工、Excel、外部接口,但培训 Controller 只有单条 CRUD和导出,没有导入、回调或批处理接口。
↓
**潜在问题**
数据来源字段会被人工填写,却没有与真实采集渠道、批次、错误行和幂等键绑定。
↓
**可能影响哪些业务**
Excel 批量导入、VR/3D/实操系统对接、数据追溯、重复数据处理。
## 11. 学习时长“统计”仍是人工可编辑明细
**当前实现**
`train_study_duration` 同时存起止时间和 `study_seconds`;Controller 可手工增改删,未见计算校验、外部事件 ID、同步状态或汇总 SQL。
↓
**潜在问题**
同一记录的时间差与秒数可能不一致,外部重传可能重复入库,汇总结果缺少可信来源。
↓
**可能影响哪些业务**
学习达标、时长报表、设备对接、学员画像、考核结果。
## 12. 画像是手工 CRUD 快照,没有生成链路
**当前实现**
`train_student_portrait` 直接保存总时长、平均成绩、签到率、标签和文本;Service 不读取签到、成绩、时长表,前端只提供编辑表格。
↓
**潜在问题**
画像指标可能与来源明细不一致,无法说明何时、按何规则生成,也不能回溯历史版本。
↓
**可能影响哪些业务**
学员评价、推荐、教学改进、结业报告、管理驾驶舱。
## 13. 设备表有状态字段,但没有设备协议接口
**当前实现**
电子班牌保存最后心跳和在线状态,宿舍授权保存人脸同步状态;后端只有管理 CRUD。设备相关前端另有两个无 API 的占位页。
↓
**潜在问题**
页面可编辑“在线/已下发”等结果字段,却没有系统生成这些状态的接入、认证、回执和超时逻辑。
↓
**可能影响哪些业务**
班牌内容发布、签到、人脸门锁、设备在线监控、故障告警。
## 14. 培训权限前后端不一致
**当前实现**
前端多数使用 `train:*`,后端使用 `system:*`;宿舍、教室、成绩后端共用 `system:info:*`;仓库没有培训菜单 SQL。
↓
**潜在问题**
普通角色的按钮显示与后端授权可能不一致,三个资源也无法独立授权;管理员通配权限会隐藏问题。
↓
**可能影响哪些业务**
所有培训菜单、增改删、导入导出和角色验收。
## 15. 培训查询没有数据范围
**当前实现**
`ruoyi-train` 无 `@DataScope`,教师/学员也未关联 `sys_user`,Mapper 列表是单表条件查询。
↓
**潜在问题**
拥有列表权限的普通账号可能看到所有培训数据,无法实现“教师只看所带班级”或“学员只看本人”。
↓
**可能影响哪些业务**
教师门户、学员门户、成绩与画像隐私、组织隔离。
## 16. 培训表没有可执行数据库基线
**当前实现**
14 张表只有 DOCX 设计和 Mapper引用;仓库只有若依系统/Quartz SQL,没有培训 DDL、迁移、索引、外键或菜单脚本。
↓
**潜在问题**
不同环境可能靠人工建表而漂移,代码中字段对齐不代表真实数据库一致,也无法在新环境复现。
↓
**可能影响哪些业务**
所有培训 CRUD、联调、测试、部署、回滚和交接。
## 17. Kingbase 配置与 MySQL 方言并存
**当前实现**
Datasource 使用 Kingbase 8.6.0,但 PageHelper 为 mysql;若依 Mapper/生成器和系统 SQL使用 MySQL 特有语法,设计文档也含 `AUTO_INCREMENT`、`ON UPDATE CURRENT_TIMESTAMP`。
↓
**潜在问题**
是否可运行取决于 Kingbase兼容模式和具体版本;部分系统能力可能启动正常但在特定查询/生成/数据权限路径失败。
↓
**可能影响哪些业务**
分页、用户/角色/菜单查询、数据权限、Quartz、代码生成、初始化部署和数字主键回填。
## 18. DATETIME 在接口展示中被格式化为日期
**当前实现**
开班起止、报到、签到、课次、授权、学习起止/同步、导入、心跳等 Java `Date` 字段普遍使用 `@JsonFormat(pattern="yyyy-MM-dd")`,Excel也只导出日期。
↓
**潜在问题**
时分秒在 JSON/Excel 表示中丢失,时间型业务无法准确展示和回传,前端日期选择器也多按日处理。
↓
**可能影响哪些业务**
课表、报到时间、迟到早退、门禁授权时段、设备心跳、学习时长和数据同步审计。
## 19. 字符串主键没有代码生成策略
**当前实现**
8 个字符串主键只在非空时由 Mapper插入,没有 UUID/雪花/业务编号生成服务;生成页面让用户填写主键。
↓
**潜在问题**
空值是否可插入取决于数据库默认值,手工编号又可能冲突;不同入口难以统一编号规则。
↓
**可能影响哪些业务**
教师、学员、课程、计划、宿舍、教室、场地、班牌的新建和外部同步。
## 20. 当前工作树不是稳定可复现基线
**当前实现**
存在 9 个已跟踪修改文件、多项未跟踪业务页面/API、未跟踪启动脚本,以及大量已跟踪依赖文件。现有 JAR也不保证与当前源码一致。
↓
**潜在问题**
高级负责人、测试和部署人员从 `main` 获取的代码与本机可见能力不同,难以判断哪个状态应作为后续开发起点。
↓
**可能影响哪些业务**
所有开发任务拆分、缺陷复现、联调、发布和责任边界。