后端开发规则
本文件适用于 BatteryDetection。同时遵守父目录 AGENTS.md 的项目不变量。
模块边界
ruoyi-device 负责厂商无关设备接口、BTS 协议实现、模拟器契约和采集调度。协议 XML、TCP 帧、固定地址和厂商枚举停留在该模块内部。
ruoyi-system 负责测试业务、状态聚合、事务、持久化和审计;它依赖设备抽象,不解析 BTS XML。
ruoyi-admin 只负责应用装配及 REST/SSE 控制器,不承载采集或状态机业务。
- 第一阶段打包为一个后端进程,并明确保持单采集实例。适配器租约字段只为后续高可用预留。
设备路径
- 每个设备适配器实例从数据库读取名称、类型、主机、端口、启停、轮询周期、时区和能力,不在代码中固定连接参数。
- 每个实例只有一个串行请求队列;一次
inquire 批量查询需监测通道。状态查询默认每 5 秒,历史下载使用较低优先级。
- 连接拒绝、最长约 30 秒响应超时、断线和后端重启均进入对账与恢复流程。恢复时重新查询设备事实并从持久化游标补采,不推断设备已停止。
- 历史补采按测试结束时间和通道公平轮转,每批最多 1000 条;数据保存成功后才推进数据库游标。
- 解析器拒绝 DOCTYPE/外部实体,限制响应大小,并显式处理缺字段、非法数值和未知枚举。
- 协议报文压缩保存到文件系统,数据库仅保存索引、校验值和解析结果;普通报文保留 30 天,解析失败或冲突报文保留 180 天。
业务事务
- 开始接收在一个事务内校验全部检测柜和采集器在线可观测及必填映射完整;任一条件失败则整体回滚。暂停接收停止该测试的数据请求,继续接收恢复请求,停止测试进入不可恢复终态并释放业务占用。
- 检测柜通道允许运行中接入;同一次设备运行可依次服务多个测试,数据归属按测试级动作时间判断,不建立来源接收区间约束。
- 停止测试或设备自然结束后进入内部“完成确认中”;只有所有来源补采完成且接收时段内没有未解释缺口、冲突或异常,才聚合为“检测完成”。
- “检测完成”和“已终止”是不可恢复终态。异常恢复、数据缺口处置、终止和负责人转交都追加审计。
- 相同“测试 + 通道 + 异常类型”在未恢复期间聚合首次时间、最近时间和次数;恢复后关闭,再次发生创建新事件。
数据库迁移
- 开发数据库是 WSL 内 Docker 的 MySQL 8,通过 Windows 端口映射
127.0.0.1:3307/battery_detection 访问。连接配置保留可覆盖能力,部署环境通过参数提供凭据。
- 已应用的
V1、V2、V3 迁移是不可变基线。任何结构或种子变化新增下一个 V<n>__description.sql,不要改写已应用脚本或整库导出文件。
- 迁移必须可从空库顺序执行,并可在已迁移库重复启动。迁移不得导入演示设备、演示测试、采样数据或历史日志。
- 项目排除了默认
DataSourceAutoConfiguration;Flyway 在 FlywayMigrationConfig 中使用独立 JDBC 连接,并且 dynamicDataSource 必须等待迁移完成。
- 修改迁移前先只读检查目标库和
flyway_schema_history。清库、覆盖或修复迁移历史需要用户明确授权。
API 与实时流
- 普通提交和历史数据查询使用 REST;实时快照、状态变化和异常使用
SseEmitter。
- SSE 只保留每测试每数据来源最新快照。设备状态、接收状态、测试状态和异常变化不可合并;发送失败关闭连接。重连先发当前事实,历史由 REST 查询。
- 权限由后端统一执行。创建人、负责人和管理员是独立字段和角色;不要依赖前端隐藏按钮实现授权。
- API 时间输出 ISO 8601 带时区,测量值同时返回明确单位。
验证
- 设备协议或调度改动至少覆盖正常多通道、拒绝连接、断线恢复、超时、畸形 XML、重复/乱序/缺失历史和重启补采中受影响的场景。
- 运行设备模块测试:
mvn -pl ruoyi-device test。
- 跨模块改动运行全量测试:
mvn test。
- 验证可执行包:
mvn -pl ruoyi-admin -am package -DskipTests。启动验证时使用可写的 LOG_PATH,完成后停止临时进程。
- 浏览器主接缝由前端仓库
npm run test:e2e:ticket04 编排隔离 MySQL 8、Redis、完整可执行包和模拟器;不得连接共享开发库或复用已有服务端口。