| New file |
| | |
| | | # 输送站线程版本合并设计 |
| | | |
| | | ## 1. 目标 |
| | | |
| | | 本次改动只处理输送站线程版本合并,明确以 `ZyStationV5Thread` 全量替代 `ZyStationV4Thread`。 |
| | | |
| | | 目标如下: |
| | | |
| | | - 输送站在代码层只保留 `ZyStationV5Thread` 这一条主实现。 |
| | | - `device_config.thread_impl` 对输送站统一收口到 `ZyStationV5Thread`。 |
| | | - 保留当前 V5 已具备的分段下发、轨迹记录、`routeVersion` 协同、堵塞重规划与环线识别行为。 |
| | | - 删除 `ZyStationV4Thread` 及其残留旧逻辑,不保留运行时兼容分支。 |
| | | |
| | | ## 2. 非目标 |
| | | |
| | | 以下内容不在本次范围内: |
| | | |
| | | - 不改 `ZyStationV3Thread`。 |
| | | - 不改 `ZyStationV4RealConnect`、`ZyStationV4FakeSegConnect` 的类名或协议实现。 |
| | | - 不重构 `StationSegmentExecutor` 现有分段算法与状态流转。 |
| | | - 不改前端 `deviceConfig` 页面交互形式,除非为编译通过必须联动。 |
| | | - 不统计数据库里现有多少条 `ZyStationV4Thread` 配置,直接做幂等迁移。 |
| | | |
| | | ## 3. 现状 |
| | | |
| | | 当前输送站线程存在以下状态: |
| | | |
| | | - [ServerBootstrap.java](/Users/xiejunjie/IdeaProjects/zy-wcs-master/src/main/java/com/zy/core/ServerBootstrap.java) 同时支持 `ZyStationV4Thread` 和 `ZyStationV5Thread` 两个 Devp 版本分支。 |
| | | - [ZyStationConnectDriver.java](/Users/xiejunjie/IdeaProjects/zy-wcs-master/src/main/java/com/zy/core/network/ZyStationConnectDriver.java) 真实设备和 fake 设备都把 `ZyStationV4Thread` 与 `ZyStationV5Thread` 视为同一协议族。 |
| | | - [ZyStationV4Thread.java](/Users/xiejunjie/IdeaProjects/zy-wcs-master/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java) 已经不再走自有分段主链路,实际通过执行器下发,但类内仍残留旧版分段实现。 |
| | | - [ZyStationV5Thread.java](/Users/xiejunjie/IdeaProjects/zy-wcs-master/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java) 是 V4 的功能超集,除共用的状态读取、建命令、下发日志外,还承担堵塞重规划、环线识别与更完整的会话协同。 |
| | | |
| | | 基于当前代码,`V5` 已经是更合理的唯一基线,继续保留 `V4` 只会造成版本边界混乱。 |
| | | |
| | | ## 4. 选择方案 |
| | | |
| | | 采用“以 V5 为唯一版本”的方案: |
| | | |
| | | - 删除 `ZyStationV4Thread`。 |
| | | - 启动入口只保留 `ZyStationV5Thread` 作为输送站新版本实现。 |
| | | - 连接驱动对新版本只识别 `ZyStationV5Thread`。 |
| | | - 通过 SQL 迁移把旧配置值 `ZyStationV4Thread` 统一改成 `ZyStationV5Thread`。 |
| | | |
| | | 不采用“运行时兼容 V4/V5 双配置值”的方案,因为这会继续保留双版本假象,与“V5 全量替代 V4”的目标冲突。 |
| | | |
| | | ## 5. 设计 |
| | | |
| | | ### 5.1 运行实现 |
| | | |
| | | 输送站运行链路统一为: |
| | | |
| | | 1. `device_config.thread_impl = ZyStationV5Thread` |
| | | 2. `ServerBootstrap` 为 Devp 创建设备线程时只实例化 `ZyStationV5Thread` |
| | | 3. `ZyStationV5Thread` 负责: |
| | | - 设备连接与状态读取 |
| | | - 从 `MessageQueue` 获取输送站任务 |
| | | - 委托分段执行器处理 `MOVE` 命令 |
| | | - 通过 `sendCommand` 实际下发命令并记录 `BasStationOpt` |
| | | 4. `StationSegmentExecutor` 继续负责: |
| | | - 路径切段 |
| | | - 首段和后续分段的重试下发 |
| | | - 基于当前位置判断提前下发时机 |
| | | - 处理中断、超时、堵塞、完成 |
| | | - 更新 trace 和 move coordinator |
| | | |
| | | ### 5.2 V4 清理 |
| | | |
| | | 删除 `ZyStationV4Thread` 整个类,而不是只删残留方法。原因是本次目标已从“清理 V4 残留”升级为“V5 全量替代 V4”,保留类文件只会形成错误的可用性暗示。 |
| | | |
| | | ### 5.3 启动与连接分支收口 |
| | | |
| | | 需要同步收口以下代码分支: |
| | | |
| | | - [ServerBootstrap.java](/Users/xiejunjie/IdeaProjects/zy-wcs-master/src/main/java/com/zy/core/ServerBootstrap.java) |
| | | - 删除 `ZyStationV4Thread` 分支 |
| | | - Devp 版本判断只保留 `ZyStationThread`、`ZyStationV3Thread`、`ZyStationV5Thread` |
| | | |
| | | - [ZyStationConnectDriver.java](/Users/xiejunjie/IdeaProjects/zy-wcs-master/src/main/java/com/zy/core/network/ZyStationConnectDriver.java) |
| | | - 真实设备连接时只对 `ZyStationV5Thread` 走 `ZyStationV4RealConnect` |
| | | - fake 设备连接时只对 `ZyStationV5Thread` 走 `ZyStationV4FakeSegConnect` |
| | | - 错误提示不再提到 `ZyStationV4Thread` |
| | | |
| | | 这里协议实现类名仍保持 `V4`,因为它表达的是 PLC/连接协议族,而不是线程版本。线程版本合并不要求同步重命名协议实现。 |
| | | |
| | | ### 5.4 配置迁移 |
| | | |
| | | 新增一条幂等 SQL 脚本,把旧 Devp 配置统一迁移到 `ZyStationV5Thread`: |
| | | |
| | | - 条件:`device_type = Devp` 且 `thread_impl = ZyStationV4Thread` |
| | | - 动作:更新 `thread_impl = ZyStationV5Thread` |
| | | |
| | | 该脚本不依赖事前统计,允许空跑。 |
| | | |
| | | ## 6. 链路检查 |
| | | |
| | | ### 6.1 输入 |
| | | |
| | | - Devp 设备配置中的 `thread_impl` |
| | | - 运行时进入输送站线程的 `StationCommand` |
| | | |
| | | ### 6.2 处理流程 |
| | | |
| | | - 启动时按统一后的 `thread_impl` 创建 `ZyStationV5Thread` |
| | | - 线程读取设备状态、消费任务、构造命令或调用重规划入口 |
| | | - 分段执行器执行分段下发与状态推进 |
| | | |
| | | ### 6.3 状态变化 |
| | | |
| | | - 代码结构从 V4/V5 双线程版本收口为 V5 单版本 |
| | | - 数据库配置值从 `ZyStationV4Thread` 收口为 `ZyStationV5Thread` |
| | | - `routeVersion`、`traceVersion`、堵塞重规划状态、Redis key 不变 |
| | | |
| | | ### 6.4 输出 |
| | | |
| | | - 输送站运行行为以当前 `ZyStationV5Thread` 为准 |
| | | - 新任务轨迹中的 `threadImpl` 将稳定显示为 `ZyStationV5Thread` |
| | | |
| | | ### 6.5 上下游影响 |
| | | |
| | | - 上游 `StationOperateProcessUtils` 继续通过 `StationThread` 接口调用,不需要改接口 |
| | | - 下游设备连接仍使用现有 `V4` 协议实现类,不增加新的协议分支 |
| | | - V3、前端轨迹页面、分段轨迹数据结构不需要改动 |
| | | |
| | | ## 7. 风险与保护 |
| | | |
| | | ### 7.1 风险 |
| | | |
| | | - 如果只删代码分支、不改数据库配置,旧 `thread_impl = ZyStationV4Thread` 会在启动时失效。 |
| | | - 如果同时改线程版本和协议类名,会扩大范围并提高回归风险。 |
| | | |
| | | ### 7.2 保护 |
| | | |
| | | - 用 SQL 迁移先收口配置值,再删除 V4 启动分支。 |
| | | - 保持协议实现类不动,限制变更范围。 |
| | | - 不改 `StationSegmentExecutor` 的既有行为,避免把版本合并和算法调整耦合。 |
| | | |
| | | ## 8. 验证 |
| | | |
| | | 至少执行以下验证: |
| | | |
| | | 1. 文本检索确认运行时代码不再把 `ZyStationV4Thread` 当成可启动分支。 |
| | | 2. 文本检索确认 `ZyStationConnectDriver` 的新版本识别只保留 `ZyStationV5Thread`。 |
| | | 3. 文本检索确认仓库内不再有业务代码引用 `ZyStationV4Thread`,迁移 SQL 中的旧值引用除外。 |
| | | 4. 执行 `mvn -q -DskipTests compile` 进行编译校验。 |
| | | 5. 如环境允许,补充一次 `mvn -q -DskipTests package` 打包校验。 |
| | | |
| | | ## 9. 实施清单 |
| | | |
| | | - 删除 `src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java` |
| | | - 修改 `src/main/java/com/zy/core/ServerBootstrap.java` |
| | | - 修改 `src/main/java/com/zy/core/network/ZyStationConnectDriver.java` |
| | | - 新增一条 Devp `thread_impl` 迁移 SQL |
| | | |
| | | ## 10. 假设与未验证前提 |
| | | |
| | | - 用户确认采用 “V5 全量替代 V4”,不保留运行时兼容。 |
| | | - 用户确认不需要统计数据库里现有多少条 V4 配置。 |
| | | - 当前未验证数据库实际数据分布,迁移脚本按幂等方式设计。 |
| | | - 当前未验证打包环境是否完整,编译和打包结果需在实施阶段实际执行后确认。 |