| | |
| | | | --- | --- | |
| | | | 订单 ID 必须能在进度表中查到 | `未找到订单对应的车辆进度: {orderId}` | |
| | | | 订单所属计划/车辆必须与传入参数一致 | `订单与测试计划/车辆不匹配,无法恢复` | |
| | | | 车辆进度状态必须是 RUNNING(0) | `车辆进度非运行中,无法恢复` | |
| | | | 车辆进度状态必须是 RUNNING(0) 或 ERROR(2) | `车辆进度状态不允许恢复(仅RUNNING/ERROR可操作)` | |
| | | |
| | | **幂等性**:恢复成功后,车辆进度的 `currentOrderId` 会被链式回调清空并替换为下一段订单 ID。前端再传旧 `currentOrderId` 会触发"订单与测试计划/车辆不匹配"。 |
| | | |
| | |
| | | 调用 `manualResume` 之前,必须确认以下信息(建议从 `vehicleProgress` 接口获取): |
| | | |
| | | 1. 当前批次状态为 RUNNING(批次已取消则恢复无意义) |
| | | 2. 目标车辆 `status` = `RUNNING`(COMPLETED / ERROR / CANCELLED 不能恢复) |
| | | 2. 目标车辆 `status` = `RUNNING` 或 `ERROR`(COMPLETED / CANCELLED 不能恢复) |
| | | 3. 当前 `currentOrderId` 真实存在且确实卡死(建议先与现场人员确认) |
| | | |
| | | --- |
| | |
| | | 批量测试详情页 → 车辆进度列表 → 每行操作列。 |
| | | |
| | | ### 显示条件 |
| | | 仅当 **`status === RUNNING`** 时显示「故障恢复」按钮。 |
| | | 当 **`status === RUNNING` 或 `status === ERROR`** 时显示「故障恢复」按钮。 |
| | | |
| | | ### 二次确认弹窗 |
| | | 执行前必须强提示用户: |
| | | |
| | | > ⚠️ 故障恢复将跳过订单 `{currentOrderId}`,并立即派发该车辆的下一段订单。 |
| | | > - 此操作**仅适用于车辆故障已修复、旧订单确认无法继续的场景** |
| | | > - 此操作**适用于车辆故障已修复、旧订单确认无法继续的场景**(RUNNING 卡死或 ERROR 需重跑) |
| | | > - 旧订单将被标记为「已取消」,**不会**通知车端 |
| | | > - 操作前请确认车端已不再执行旧订单,否则可能与新订单冲突 |
| | | > - ERROR 状态的车辆执行后将重新进入 RUNNING 并派发下一段订单 |
| | | > |
| | | > 是否继续? |
| | | |
| | |
| | | |
| | | --- |
| | | |
| | | ## 五-B、后端改动要求(本次设计变更) |
| | | |
| | | > **变更**:故障恢复接口同时支持 `RUNNING` 和 `ERROR` 状态的车辆。 |
| | | |
| | | 后端 `manualResume` 方法需调整: |
| | | 1. 状态校验放宽:`status == RUNNING || status == ERROR` 均允许通过 |
| | | 2. ERROR 状态的车辆恢复时,需先将进度状态重置为 `RUNNING`(同 `batchRetry` 逻辑),再执行链式回调推进 |
| | | 3. 错误信息清空:`errorMsg` 置 null |
| | | |
| | | ```java |
| | | // 原校验 |
| | | if (progress.getStatus() == null || progress.getStatus() != VEHICLE_STATUS_RUNNING) { |
| | | throw new RuntimeException("车辆进度非运行中,无法恢复"); |
| | | } |
| | | |
| | | // 改为 |
| | | if (progress.getStatus() == null || |
| | | (progress.getStatus() != VEHICLE_STATUS_RUNNING && progress.getStatus() != VEHICLE_STATUS_ERROR)) { |
| | | throw new RuntimeException("车辆进度状态不允许恢复(仅RUNNING/ERROR可操作)"); |
| | | } |
| | | |
| | | // ERROR 状态需先重置 |
| | | if (progress.getStatus() == VEHICLE_STATUS_ERROR) { |
| | | progress.setStatus(VEHICLE_STATUS_RUNNING); |
| | | progress.setErrorMsg(null); |
| | | progress.setUpdateTime(LocalDateTime.now()); |
| | | vehicleProgressMapper.updateVehicleProgress(progress); |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 六、注意事项与对接 FAQ |
| | | |
| | | **Q1:故障恢复后,统计数字会怎么变化?** |
| | |
| | | **Q5:恢复失败后该怎么办?** |
| | | A:根据 `msg` 提示分情况: |
| | | - "未找到订单"/"不匹配" → 数据已变化,先刷新进度列表 |
| | | - "非运行中" → 该车辆已 ERROR/CANCELLED,使用 `batchRetry` 而非本接口 |
| | | - "车辆进度状态不允许恢复" → 该车辆已 COMPLETED/CANCELLED,无法恢复 |
| | | - 网络/系统异常 → 建议提示用户稍后重试 |
| | | |
| | | **Q6:是否需要权限控制?** |