9.6 KiB
9.6 KiB
RailwaySystem 代码基线审计 Executive Summary
1. 当前工程一句话描述
RailwaySystem 是基于 RuoYi-Vue 3.9.1、Spring Boot 2.5.15、Vue 2 与 KingbaseES 配置的前后端分离培训管理项目;当前已形成 14 组培训数据 CRUD 脚手架,但数据库对象、菜单权限、Kingbase兼容和业务闭环尚无仓库证据证明已经端到端跑通。
2. 当前技术栈
- 后端:Java 8 编译目标、Spring Boot 2.5.15、Spring Framework 5.3.39、Spring Security 5.7.14、MyBatis XML、PageHelper 1.4.7、Druid 1.2.27、JJWT 0.9.1、Redis、Quartz、Apache POI。
- 数据库:当前 datasource 指向 KingbaseES,驱动
com.kingbase:kingbase8:8.6.0;MySQL驱动和多处 MySQL方言仍保留。 - 前端:Vue 2.6.12、Vue Router 3.4.9、Vuex 3.6.0、Element UI 2.15.12、Axios 0.24.0、ECharts 5.4.0、Vue CLI 4.4.6。
- 模块:
ruoyi-admin、ruoyi-framework、ruoyi-system、ruoyi-quartz、ruoyi-generator、ruoyi-common、ruoyi-train,以及培训前端build_ui。 - 当前机器:Java 21.0.2、Maven 3.9.2、Node 22.23.2、npm 10.9.8;源码目标与本机工具链有明显年代跨度。
3. 已经存在的培训模块
共 14 组:
- 教师
train_teacher - 学员
train_student - 课程
train_course - 开班计划
train_class_plan - 宿舍
train_dormitory_info - 宿舍权限/门锁授权
train_dorm_auth - 教室
train_classroom_info - 实训场地
train_training_site - 开班报到
train_class_report - 电子班牌
train_electronic_board - 学员签到
train_student_checkin - 多类型成绩
train_score_info - 学习时长
train_study_duration - 学员画像
train_student_portrait
每组都有 Entity、Mapper接口、Mapper XML、Service接口、ServiceImpl和 Controller。当前工作树也有对应前端 CRUD页面和 API,但成绩、宿舍等部分文件尚未跟踪。
4. 已经真正跑通的功能
本次审计没有启动服务或连接数据库,因此不能确认任何培训模块已经端到端跑通。
能够确认的只是代码能力:
- 若依登录、RBAC、动态菜单、日志、分页、统一返回、异常处理、Excel、上传、Quartz和代码生成框架都在仓库中。
- 14 组培训后端静态 CRUD调用链完整。
- 当前文件系统中 14 组前端页面/API可找到。
- 当前存在后端 JAR和前端依赖目录,但它们不保证与未提交源码一致,也不能替代运行验证。
5. 目前只是 CRUD、尚未形成业务闭环的部分
14 个培训 Controller 合计 84 个映射,全部属于列表、导出、详情、新增、修改、删除。没有发现:
- 开班/结班、报名审核、参训名单等业务动作。
- 课次、排课、课程表和资源冲突校验。
- 现场身份证/人脸报到流程。
- 电子班牌心跳、内容发布、签到回调。
- 门锁人脸下发、回执、重试、撤权。
- Excel成绩/学员导入、外部成绩与学习记录采集。
- 综合成绩计算、发布、锁定和追溯。
- 画像计算规则与生成任务。
- 培训统计聚合接口或真正业务工作台。
6. 当前数据库现状
- 代码和设计文档一致指向 14 张
train_*业务表,但仓库没有这些表的可执行 DDL、迁移或种子数据。 - 本次未查询实时数据库,不能确认表是否存在、字段/索引/外键/默认值是否一致。
- 14 个 Entity 都继承 BaseEntity,但表的公共字段不统一;业务表主要用
create_user,并未统一使用若依create_by/update_by。 - 所有培训删除都是物理删除,没有
del_flag逻辑删除。 - 数字主键依赖 JDBC generated keys,设计写为 MySQL
AUTO_INCREMENT;字符串主键没有代码生成策略。 sys_*表继续支撑若依系统功能,不应修改结构或复制一套权限系统。- 当前 Kingbase驱动配置与 MySQL方言并存,是上线/联调前的关键验证项。
7. 当前前端现状
build_ui是培训前端,14 个核心模块页面本质都是 CRUD。- 首页只是“基地学员管理平台 V1.0”信息卡,不是业务工作台。
- 报到、签到、画像、学习时长、电子班牌均只有数据维护页,没有对应业务流程。
- 两个未跟踪成绩页只是对同一成绩列表做筛选;课程成绩页把
examScore单列当作评级依据。 equipment、extra是未跟踪占位页;旧character/analysis页面含随机或遗留接口,不能算培训统计已实现。- 未发现课程表页面。
- 培训路由依赖实时
sys_menu动态加载,仓库没有培训菜单 SQL,所以现有菜单无法由代码仓库确认。
8. 当前权限体系
- 登录主体是
sys_user,角色为sys_role,菜单/按钮权限来自sys_menu.perms。 - Controller 用
@PreAuthorize("@ss.hasPermi(...)"),前端用v-hasPermi。 - 培训前端多数使用
train:*,后端使用system:*,权限码不一致。 - 宿舍、教室、成绩三个 Controller共用
system:info:*,授权粒度冲突。 - 教师和学员均未关联
sys_user。 - 培训模块未使用
@DataScope,不存在“教师只能看所带班级”或“学员只能看本人”的代码。 - 培训增改删和导出已使用若依操作日志;列表/详情和领域状态变化没有专门审计轨迹。
9. 可以直接复用的若依能力
可以直接复用:登录、用户/角色基础 RBAC、操作日志、字典框架、文件上传下载、Excel工具、分页、统一返回、异常处理、系统配置。
需要在现有框架上扩展:培训菜单/按钮权限、培训数据权限、培训 Excel导入、培训 Quartz任务、业务操作流水、公告之外的消息/设备通知。
需要进一步确认:代码生成器、若依系统 Mapper、PageHelper、Quartz和初始化 SQL在目标 Kingbase模式下的完整兼容性。
10. 当前最重要的10个代码/业务冲突
- 没有可执行培训数据库基线:14 张表只有设计文档与 Mapper,无 DDL/迁移,实际数据库状态不可复现。
- Kingbase与MySQL方言混用:Kingbase驱动已启用,但 PageHelper、系统 Mapper、生成器和 SQL仍含 MySQL语法。
- 培训权限未接通:前端
train:*与后端system:*不一致,三个模块共用system:info:*,也没有菜单初始化 SQL。 - 无账号业务身份和数据范围:教师/学员不关联
sys_user,没有教师班级范围和学员本人范围。 - 无参训关系:学员与培训计划之间没有正式 enrollment/花名册实体,后续业务各自直接引用两个 ID。
- 无课次/课表:计划只能关联一个课程与一个教师,签到以重复的起止时间代替课次 ID。
- 报到只是 CRUD且混合资源分配:没有设备报到流程,报到、宿舍、教室、场地绑定在同一记录。
- 住宿和门锁授权耦合:没有独立床位、分配状态、设备下发流水和失败补偿。
- 成绩/时长/画像没有计算与采集闭环:字段存在,但导入、外部采集、综合算法、画像生成均不存在。
- 工作树不是稳定基线:关键路径适配和多个页面/API未提交,当前 JAR与源码也未证明一致。
11. 如果继续开发,建议首先确认的代码层问题
- 确定以当前工作树还是提交
83797f92为开发基线,逐项归属现有未提交/未跟踪文件。 - 获取只读数据库结构快照,核验 14 张业务表、系统表、主键、索引、外键、默认值和 Kingbase兼容模式。
- 建立可版本管理的培训 DDL/迁移与菜单权限 SQL基线;不要修改
sys_*表结构。 - 统一培训 API前缀与权限字符串,取消
system:info:*的跨模块复用,并验证普通角色。 - 明确教师/学员与
sys_user的关联,以及教师、学员、管理员的数据可见范围。 - 在扩展页面前确认参训关系、课次/课表、独立床位等基础领域关系;这些关系决定报到、签到、住宿、成绩和画像的可实现性。
- 在目标 Kingbase环境逐项验证 PageHelper、若依系统查询、数据权限、代码生成、Quartz和 generated keys。
- 统一 DATETIME 的 JSON/Excel格式;当前多个时间字段只输出
yyyy-MM-dd。 - 明确字符串主键生成规则与物理删除/逻辑删除策略。
- 区分管理端 CRUD、业务动作、外部接入和统计接口,避免继续用可编辑状态字段代替真实流程。
12. 需要高级技术负责人进一步评审的文件路径
优先级从高到低:
docs/codebase-audit/10_gap_and_conflict_analysis.md:决定后续领域模型和开发顺序。docs/codebase-audit/03_database_current_state.md:确认 Kingbase、DDL、主键、公共字段、物理删除和系统表边界。docs/codebase-audit/06_security_and_permissions.md:确认权限命名、账号关联和数据范围。docs/codebase-audit/02_training_modules_inventory.md:掌握14组 CRUD的实际代码边界。docs/codebase-audit/08_git_status.md:确定可复现基线和未提交文件归属。RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml:数据库连接与兼容配置;含敏感信息,评审时注意脱敏。RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml:端口、Redis、JWT、MyBatis和 PageHelper配置。RuoYi-Vue/ruoyi-system/src/main/resources/mapper/system/与RuoYi-Vue/ruoyi-generator/src/main/resources/mapper/generator/:Kingbase兼容重点。RuoYi-Vue/ruoyi-train/src/main/resources/mapper/train/:14张表的当前实际 SQL契约。doc/学员管理系统数据表设计_20260907_1_.docx:当前14表设计来源。