Test #1

Merged
admin merged 256 commits from test into main 2026-09-28 16:01:16 +08:00
Showing only changes of commit b8343d0298 - Show all commits
@@ -30,7 +30,7 @@
| CT-D10 | DO/PU 未齐、部分完成、全部完成 | 柜次与运输协同已建立 | `DELIVERY_ORDER`、`PICKUP_ORDER` 可独立查询、上传和鉴权下载,版本与幂等有效 | 柜次详情入口待回传 | 服务端已冻结;人工入口待定 |
| CT-D11 | 正常、异常、取消异常 | 任意有效柜次及显式货柜版本 | 标记/取消使用版本和必填原因;overview 保留 `MARK`/`CANCEL` 全部历史 | 货柜详情入口待回传 | 服务端已冻结;人工入口待定 |
| CT-D12 | 多节点运输轨迹与操作日志 | CT-D10 | overview 时间线含运输更新、异常和 PDA 事件,按发生时间升序 | 详情时间线入口待回传 | 服务端聚合已冻结;人工入口待定 |
| CT-D13 | PDA 确认装柜并推进 `LOADED` | inbound `LOADING`、bridge、订舱 `RELEASED`、PDA 全拣和五类 ACTIVE 证据齐备;拖车允许缺失或未完成 | PDA `complete` 不以拖车缺失/状态为阻断;若同稳定 `containerBookingId` 存在有效拖车,则同一业务动作将其推进“已完成装柜”,并原子完成 task/plan/inbound `LOADED` | 订单/柜次详情显示完成且编辑锁定 | `BLOCKED_CONTRACT`:现 OpenAPI 仍要求预先 `COMPLETED` 拖车;等待新响应、拖车历史和回滚字段冻结 |
| CT-D13 | PDA 确认装柜并推进 `LOADED` | inbound `LOADING`、bridge、订舱 `RELEASED`、PDA 全拣和五类 ACTIVE 证据齐备;拖车允许缺失或未完成 | PDA `complete` 不以拖车缺失/状态为阻断;若同稳定 `containerBookingId` 存在唯一有效拖车,则同一事务推进拖车 `COMPLETED`,并完成 task/plan/inbound `LOADED`;多拖车或真实并发返回 A0409 且零写入 | 订单/柜次详情显示完成且编辑锁定 | `LANDED_STATIC`:OpenAPI、Service 与结算后版本刷新回归已冻结;待部署后 HTTP 复核 |
| CT-D14 | PDA 未最终完成前向同一预装计划增加入库单 | 已有稳定 `loadingPlanId/taskId/containerBookingId`,任务尚未最终完成;新增票满足同客户、仓库、渠道、容量与柜型约束 | `EDITING/LOADING` 可增量;`LOADING` 不回退且复用同一 task;plan/task/item 版本递增,旧 inventory token A0409 后必须刷新;全拣后增项将 `AWAITING_REVIEW` 撤回 `IN_PROGRESS`,证据保留;未拣项可删,已拣数量形成 `minPackageCount` | Admin 预装增量入口与 PDA 同步显示新增项 | `LANDED_STATIC`:assign/adjust/delete 与 capability DTO 已冻结并接入脚本;待部署后真实 HTTP 复核 |
## 全链验收用例
@@ -49,7 +49,8 @@
| CT-E10 | DO/PU | 通用查询、multipart 上传、鉴权下载;上传要求 `Idempotency-Key`、真实文件、`expectedVersion`,重放不得重复上传 | Admin 入口待回传 | 两类型响应、文件哈希/ID、二进制下载、幂等重放 | 服务端契约已冻结 |
| CT-E11 | 货柜异常及取消历史 | `POST/DELETE /api/platform/v1/containers/{id}/exception` 要求 `expectedVersion` 和必填原因;冲突失败;overview 历史只追加不覆盖 | Admin 入口待回传 | 标记/取消响应、版本冲突、overview 历史 | 服务端契约已冻结;版本来源阻断 |
| CT-E12 | 运输轨迹/日志 | overview `timeline` 聚合 `TRANSPORT_UPDATE`、`MARK/CANCEL`、`PDA_*`,时间升序且含详情、操作者和发生时间 | Admin 入口待回传 | overview 时间线响应 | 服务端契约已冻结 |
| CT-E13 | PDA complete 拖车联动正反例 | 有同柜 `LOADING` 拖车时 complete 后拖车 `COMPLETED` 且 inbound `LOADED`;无拖车仍成功;错柜拖车不修改;同键重放不新增拖车或 task 历史;并发/任一保留门禁失败时全部对象原子回滚 | PDA 完成页、入库单、订单详情及拖车详情显示同一最终事实 | 三条正反链 + 幂等重放 + 并发;记录 task/plan/inbound/truck 前后版本、历史数量、业务码和 `requestId/traceId` | `BLOCKED_CONTRACT`:等待关联有效拖车的精确判定、完成状态/动作名和响应 DTO |
| CT-E13 | PDA complete 拖车联动正反例 | 有同柜 `LOADING` 拖车时 complete 后拖车 `COMPLETED` 且 inbound `LOADED`;无拖车仍成功;错柜拖车不修改;同键重放不新增拖车或 task 历史;并发/任一保留门禁失败时全部对象原子回滚 | PDA 完成页、入库单、订单详情及拖车详情显示同一最终事实 | 三条正反链 + 幂等重放 + 并发;记录 task/plan/inbound/truck 前后版本、历史数量、业务码和 `requestId/traceId` | `LANDED_STATIC`:关联有效拖车、状态推进、幂等和事务回滚已冻结;多 fixture HTTP 待跑 |
| CT-E19 | PDA 结算导致版本递增后的最终完成 | final complete 前来源 inbound 为 `LOADING`;settle 可能将来源 version 递增并生成全量或部分实装分片 | complete 必须在 settle 后重新锁定实际完成行并使用当前 version,不得复用结算前快照;full/partial 均成功,真实并发仍 A0409,失败 task/plan/inbound/operation/history 零写入 | PDA、计划、入库单和统一订单显示唯一 `LOADED` 事实 | `LANDED_STATIC`:真实缺陷样本 task `2089254643058184193` 已转为 Node/Java 回归;待修复版本部署后 HTTP 复核 |
| CT-E14 | 跨客户与跨仓库隔离 | 交叉资源 ID 不可读写下载,不泄露资源存在性 | 页面无越权入口 | 双身份交叉请求证据 | 待契约 |
| CT-E15 | push 幂等、冲突与事务回滚 | 首次成功请求冻结 path/body/expectedVersion/key;同 key 原样重放只读且返回首次结果;同 key 异参、新 key 重复均冲突;各负向后计划、版本、历史、bridge、PDA 全快照零漂移;首次 push 在 bridge 中途失败时整事务零残留且不得触发 PDA | 冲突或失败后页面刷新仍只显示首次成功事实 | 原始请求、三次回查全快照、失败 `requestId/traceId`;中途失败由后端事务合同覆盖 | 新时序合同已冻结,待环境验收 |
| CT-E16 | 默认 Admin HTTP 同 marker 完整链 | 默认入口按 `phase3-container-loading -> phase3-loading -> overview/PDA/evidence -> customs -> loading-finalize` 串行;下游只消费 `phase3Loading` 发布的 `taskId/inboundId/loadingPlanId/containerBookingId`,最终同一订单详情和列表均为 `LOADED` | 同一批次可从订单、柜次、预装、PDA、报关入口逐级回查 | 全新 marker、关键资源 ID、五类二进制证据、各请求 `requestId/traceId`、最终统一订单状态 | 静态合同已接入默认入口,待环境 HTTP |
@@ -62,7 +63,8 @@
- 门禁只读证据:`ocean_ready=1`、`truck_ready=0`;同柜拖车预约 `TA2089239590749704194` 的 `loading_plan_id=NULL`、状态为 `LOADING`。
- 最新用户覆盖:`phase3-loading` 仍只完成 claim/batch/证据与动态增量,任务保持 `LOADING/AWAITING_REVIEW`;最终入口仍为 `POST /pda-loading/tasks/{taskId}/complete`,但拖车缺失或尚未完成不再是阻断。
- 目标联动:若稳定 `containerBookingId` 有关联有效拖车,PDA complete 同一业务动作将其推进“已完成装柜”;若无拖车仍成功;错柜拖车不得修改。保留订舱 `RELEASED`、bridge 和五类 ACTIVE 证据门禁。
- 待冻结回归包:① 有 `LOADING` 拖车 → PDA complete → 拖车 `COMPLETED` + inbound `LOADED`;② 无拖车仍成功;③ 错柜拖车零修改;④ 同键重放不新增历史;⑤ 增量/final complete 并发和任一保留门禁失败时 task/plan/inbound/truck 原子回滚。当前 finalize 已主动 `BLOCKED_CONTRACT`,禁止继续执行旧“拖车必须预先 COMPLETED”的 HTTP。
- 已冻结回归包:① 有 `LOADING` 拖车 → PDA complete → 拖车 `COMPLETED` + inbound `LOADED`;② 无拖车仍成功;③ 错柜拖车零修改;④ 同键重放不新增历史;⑤ 增量/final complete 并发和任一保留门禁失败时 task/plan/inbound/truck 原子回滚。finalize 已恢复正式 complete 接线,不再执行旧“拖车必须预先 COMPLETED”门禁。
- 结算版本缺陷证据:task `2089254643058184193`、inbound `2089181999189299202` 在 taskVersion=1/inboundVersion=6、PICKED 2/2 与五证据齐备时返回 A0409;requestId=`12a913ba-9845-45f6-91ec-bdba28e3eb9d`、traceId=`395d11b5c0da45eca948a39a08e29d3d`。回归锁定 settle 后重新读取 full/partial 实际完成分片版本;真实并发仍冲突,失败必须零写入。
## PDA 进行中增量预装冻结回归
@@ -73,7 +75,7 @@
- 删除与减量:已拣项删除或减量必须拒绝且全链零漂移;未拣项删除成功后同步 task、计划、库存快照与 readiness。正式写端点为 plan assignments、item PATCH、item DELETE,分别使用 planVersion/itemVersion 与 operationId。
- 并发与终态:Admin 增量与 PDA final complete 并发只允许一个事务成功,失败方必须取得明确业务冲突证据;task/计划进入 `COMPLETED` 后,添加、删除、减量全部拒绝。
- 隔离基线不变:容量/限重、客户、仓库、物流渠道、柜型/规格和 ACTIVE 柜次归属继续 fail-closed;任何增量都不得借历史入库单、跨 marker 或创建第二个任务绕过。
- 默认全量接入:`phase3-loading` 已在首次 batch 与 final complete 之间接入本轮 marker 的独立入库单、旧 token 负向、未拣删除、重新加入、调整、刷新补拣和已拣删除/减量零写入;`phase3-pda-convergence` 回查稳定四元和唯一任务,最后由 `phase3-loading-finalize` 并发提交同数量调整与 final complete,断言恰好一方成功、刷新胜方版本后唯一收敛 `LOADED`,并验证 `COMPLETED` 后全部写拒绝。真实 HTTP 待部署后定向执行。
- 默认全量接入:`phase3-loading` 已在首次 batch 与 final complete 之间接入本轮 marker 的独立入库单、旧 token 负向、未拣删除、重新加入、调整、刷新补拣和已拣删除/减量零写入;`phase3-pda-convergence` 回查稳定四元和唯一任务,最后由 `phase3-loading-finalize` 串行执行正式 complete,确保结算自身的版本变化不被人为并发遮蔽,成功后回查实际 full/partial 履约分片及唯一 `LOADED` 事实;失败则保存业务码、`requestId/traceId` 并回查 task/plan/inbound/operation 零漂移。真实增量/final 并发使用独立 fixture,不复用主正向链。
## P3-Q14 文档同步待总控统一