This commit is contained in:
2026-08-08 21:14:43 +08:00
parent c6655b6101
commit 4712b21ace
6 changed files with 448 additions and 41 deletions
+2 -1
View File
@@ -10,6 +10,7 @@
## 文档
- [三期闭环审计报告(2026-08-08)](三期闭环审计报告-2026-08-08.md):基于当前代码、接口、自动化和测试环境证据的闭环审计,列出阻断项、优先级和 GO 准入标准。
- [三期开发规划:国内出仓](三期开发规划.md)
- [三期开发进度表](三期开发进度表.md):参考一期采用“大任务 → 详细任务 → 里程碑 → 未确认事项 → 开工准入 → 验收”结构维护。
- [虫虫出海三期开发进度表(Excel)](虫虫出海三期开发进度表.xlsx):可筛选、可下拉维护并使用公式汇总的项目进度工作簿。
@@ -19,4 +20,4 @@
## 当前状态
三期处于范围规划阶段,当前开工结论为 `NO-GO`。当前以原型图片中的“完成国内出仓,等待装船”为阶段终点。动作依赖与并行关系、排柜规则、PDA 设备、拖车协作、柜封照片清单、报关回执及放行门禁、港务/船期信息范围和来源仍需在启动前确认。产品和业务完成确认后先进入契约与任务准备,六项开工准入全部通过后再进入全面功能开发;通过准入也不授权引入真实租户层。
三期已有排柜/预装/PDA 拣货/装柜清单子链路,订舱和拖车子模块 API 也已实现并完成独立环境验证;但 2026-08-08 闭环审计结论仍为 `NO-GO`。已确认不新建出仓单,现有订单列表承载待分柜、装柜中、装柜完成和派送完成等主状态。当前缺少订单三期统一编排、五张装柜照片真实上传与硬门禁、报关协同、冲正、Client 三期协同及 PDA 真实身份/真机验收,暂不具备整期验收条件。详细缺口和 GO 标准以最新闭环审计报告为准。
+30 -32
View File
@@ -5,6 +5,8 @@
> 流程依据:[出仓流程](参考资料/出仓流程.png)中的头程物流“03 出仓”;当前以图片中的“完成国内出仓,等待装船”为阶段终点
> 前置阶段:[一期文档](../一期/README.md) · [二期文档](../二期/README.md)
> 2026-08-08 已确认调整:三期不新建独立出仓单,现有订单列表承载全部主状态,柜次、订舱、拖车、拣货、证据和报关作为订单关联子对象。PDA 拣货后必传空仓、半仓、满仓、锁仓、带锁码照共 5 张图片,并必填锁码文本;全部真实上传成功后 PDA 装柜任务才能完结。
> 主体模型与硬约束:三期只实现“平台—客户”两级,业务 `tenant_id > 0` / `tenantId` 当前表示客户 ID;`tenant_id=0` 是平台身份、平台 RBAC 和平台公共仓储资源技术作用域,客户往来单位、订单、文件和费用归属客户 `tenant_id>0`。禁止新增租户主表、租户选择器、客户所属租户配置、租户切换、租户级 RBAC 或租户级配置,禁止把现有 `tenant_id` 改义为上级租户 ID;历史类名、路径和字段继续兼容。
## 一、三期目标
@@ -35,7 +37,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| 2. 订舱 | 订舱与港务/船期信息 | P3-BOOK-01 | 已覆盖 |
| 3. 预约托车 | 预约拖车 | P3-TRUCK-01 | 已覆盖,用词待 P3-Q3 确认 |
| 4. PDA 拣货 | PDA 拣货与复核 | P3-PICK-01、P3-PDA-01、P3-PDA-02 | 已覆盖 |
| 5. 拍货柜及铅封照上传 | 装柜及柜封证据 | P3-LOAD-01、P3-LOAD-02 | 已补充现场拍照上传任务,清单待 P3-Q6 确认 |
| 5. 拍货柜及铅封照上传 | 装柜及柜封证据 | P3-LOAD-01、P3-LOAD-02 | 已确认空仓、半仓、满仓、锁仓、带锁码照共 5 张必传,锁码文本必填 |
| 6. 客户上传报关资料 | 报关资料协同 | P3-CUS-01 | 已覆盖 |
| 7. 整理给到报关代理报关 | 报关资料协同 | P3-CLEAR-01 | 已覆盖 |
| 8. 回执上传到系统供客户下载 | 报关回执与客户下载 | P3-CLEAR-01、P3-CUS-02 | 已覆盖,回执类型待 P3-Q12 确认 |
@@ -45,7 +47,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
### 纳入三期
- 出仓单、柜次、智能排柜建议、人工调整和版本确认。
- 现有订单三期状态、订单-柜次关联、智能排柜建议、人工调整和版本确认。
- 订舱申请、舱位结果,以及原型所述预计开船、到港等港务/船期信息;具体字段和数据源待确认。
- 预约拖车、车辆司机、到仓装柜和离仓记录。
- PDA 任务领取、扫码拣货、部分拣货、异常、复核和幂等提交。
@@ -67,32 +69,28 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| 角色 | 数据范围 | 主要操作 |
|---|---|---|
| 企业订单操作员 | 当前企业订单与出仓单 | 上传/补充报关资料、查看出仓和港务/船期进度、下载回执 |
| 平台运营 | 授权客户、订单和出仓单 | 创建出仓单、确认排柜、订舱、维护港务/船期信息和协调异常 |
| 企业订单操作员 | 当前企业订单及关联柜次 | 上传/补充报关资料、查看订单后程和港务/船期进度、下载回执 |
| 平台运营 | 授权客户、订单和柜次 | 确认排柜、订舱、维护港务/船期信息和协调异常 |
| 仓库主管 | 被授权的平台收货仓 | 分配拣货任务、复核差异、确认装柜和出仓条件 |
| 仓库作业员 | 分配给本人或本仓的任务 | PDA 扫码、数量确认、异常上报和任务提交 |
| 拖车调度员 | 授权出仓单与车辆范围 | 预约车辆、维护司机/车牌、到仓和离仓节点 |
| 拖车调度员 | 授权订单/柜次与车辆范围 | 预约车辆、维护司机/车牌、到仓和离仓节点 |
| 报关专员 | 授权客户、订单和报关批次 | 审核、退回、整理、提交资料并上传回执 |
| 平台管理员 | 平台授权范围 | 维护权限、规则、服务商和高风险冲正 |
服务端必须依据登录身份确定企业、仓库、客户和数据范围。前端传入的订单 ID、出仓单 ID、仓库 ID、客户 ID、作业员 ID 或报关批次 ID 不能单独作为授权依据。
服务端必须依据登录身份确定企业、仓库、客户和数据范围。前端传入的订单 ID、柜次 ID、仓库 ID、客户 ID、作业员 ID 或报关批次 ID 不能单独作为授权依据。
## 四、流程与状态设计
原型以 1 至 9 编号表达动作顺序,但尚未说明哪些是强制前置、哪些允许并行。当前按原型顺序规划业务节点,同时使用主状态和子流程状态保留后续调整空间;在 P3-Q11 确认前,不把并行关系写成固定业务规则。
### 1. 出仓单主状态
### 1. 现有订单的三期主状态
| 稳定编码 | 中文名称 | 含义 |
|---|---|---|
| `DRAFT` | 草稿 | 出仓单已创建,排柜方案尚未确认 |
| `PLANNING` | 排柜中 | 系统生成建议或人工调整方案 |
| `PREPARING` | 出仓准备中 | 按已确认的依赖关系处理订舱、拖车、拣货和报关 |
| `READY_TO_DISPATCH` | 待出仓 | 必要子流程和证据已满足 |
| `DISPATCHED` | 已出仓 | 货柜已离开国内仓库 |
| `WAITING_FOR_LOADING` | 等待装船 | 国内出仓已完成,等待对应船班装船 |
| `CANCELLED` | 已取消 | 按规则取消并保留原因与历史 |
| `BLOCKED` | 已阻塞 | 存在必须人工解除的关键异常 |
| `WAIT_SPLIT` | 待分柜 | 二期已完成,等待排柜/预装 |
| `LOADING` | 装柜中 | 预装已确认,PDA 执行拣货和装柜证据上传 |
| `LOADED` | 装柜完成 | 拣货已完成,5 张必传照片和锁码文本已通过服务端门禁 |
| `DELIVERED` | 派送完成 | 当前订单列表终态;具体触发动作和与三期终点的关系待 P3-Q13 确认 |
### 2. 子流程状态
@@ -106,13 +104,13 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
## 五、业务模块
### 1. 出仓单
### 1. 现有订单与柜次
- 从已上架且允许出仓的头程订单创建一张或多张出仓单。
- 支持一张订单分多个柜次,也支持多个订单拼柜,具体开放范围由产品确认。
- 保存订单、客户、仓库、货物、往来单位和计量数据快照。
- 维护计划出仓时间、优先级、负责人、异常和整体时间线。
- 重复创建和确认使用幂等键,并通过版本字段防止并发覆盖。
- 不创建独立出仓单,现有订单从 `WAIT_SPLIT` 继续推进三期状态。
- 通过订单-柜次关系表达一张订单分多柜、多张订单拼柜和拆批,具体开放范围由 P3-Q2 确认。
- 订单保持用户当前看到的主状态;柜次承载多订单共享的订舱、拖车、装柜证据和船期信息。
- 订单详情展示关联柜次、子流程状态、异常和整体时间线。
- 所有主状态推进使用服务端门禁、幂等键和版本字段防止绕过与并发覆盖。
### 2. 智能排柜
@@ -151,7 +149,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
### 6. 装柜及柜封证据
- 维护柜号、铅封号、装柜开始/完成时间、操作人和异常说明。
- 支持按可配置清单上传货柜及铅封照片;柜体、开门空柜、装柜过程、满柜、关门和铅封照仅为候选类型,必传类型、角度和数量以 P3-Q6 为准。
- 必须上传空仓、半仓、满仓、锁仓、带锁码照共 5 张图片,并必填锁码文本。
- 现场执行端支持直接拍照或从相册选择后上传,上传前显示柜次、柜号、铅封号和照片类型,防止证据关联错误。
- 支持上传进度、失败重试、重复照片提示和提交前预览;弱网下不得因重复点击产生多份有效证据。
- 照片记录文件哈希、上传人、上传时间、关联柜次和客户可见范围。
@@ -186,7 +184,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| 数据对象 | 关键内容 |
|---|---|
| 出仓单 | 订单、企业、仓库、计划/实际时间、主状态、负责人和版本 |
| 现有订单三期投影 | 订单、客户、仓库、三期主状态、关联柜次、子流程摘要和版本 |
| 排柜方案 | 经确认的规则版本、输入快照、柜次、货物分配、规则计算结果和确认记录 |
| 柜次 | 柜型、柜号、铅封号、装载顺序、重量、体积和关联订单 |
| 订舱记录 | 船公司/代理、订舱号、船名航次、港口、舱位和异常 |
@@ -203,7 +201,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
### 管理后台 `apps/admin-web`
- 出仓单列表、筛选、详情、异常和状态操作。
- 增强现有订单列表/详情,展示柜次、各子流程、异常和状态操作。
- 按已确认的排柜规则提供建议、冲突展示、人工调整、版本对比和确认。
- 订舱、船期、拖车预约、装柜、柜号、铅封和照片。
- 报关资料审核、补件、提交批次、回执上传和客户可见控制。
@@ -211,7 +209,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
### 企业客户端 `apps/client-web`
- 查看本企业出仓单、柜次和允许公开的进度时间线。
- 在现有订单中查看关联柜次和允许公开的进度时间线。
- 上传、补充和查看报关资料及处理结果。
- 下载客户可见的报关回执。
- 查看预计开船、到港和船期变更,不暴露内部成本、供应商敏感信息和内部备注。
@@ -236,7 +234,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| 里程碑 | 交付目标 | 进入条件 |
|---|---|---|
| P3-M0 规则与设备锁定 | 流程、角色、状态、排柜规则、PDA、文件和验收确认 | 二期到仓契约稳定 |
| P3-M1 出仓单与排柜 | 出仓单可创建,并按确认范围提供排柜建议、人工确认与追溯 | 排柜规则确认 |
| P3-M1 订单与排柜 | 现有订单可进入待分柜,并按确认范围提供柜次建议、人工确认与追溯 | 排柜规则确认 |
| P3-M2 订舱与拖车 | 订舱、船期、拖车预约和异常处理可用 | 服务商与权限可用 |
| P3-M3 PDA 拣货 | 任务生成、扫码、差异、复核和幂等提交可用 | 目标设备与仓库流程确认 |
| P3-M4 装柜封柜 | 柜号、铅封和照片证据完整,门禁生效 | 文件能力与必传清单确认 |
@@ -249,8 +247,8 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| ID | 端 | 模块 | 交付内容 | 优先级 | 依赖 |
|---|---|---|---|---|---|
| P3-BASE-01 | 公共 | 出仓契约 | 主/子状态、权限、事件、错误码、门禁和快照模型 | P0 | 二期到仓契约 |
| P3-BASE-02 | 公共 | 数据模型 | 出仓单、排柜、柜次、订舱、拖车、拣货、装柜、报关和时间线 | P0 | P3-BASE-01 |
| P3-DSP-01 | 后台 | 出仓单 | 列表、筛选、创建、详情、异常和取消 | P0 | P3-BASE-02 |
| P3-BASE-02 | 公共 | 数据模型 | 现有订单三期投影、订单-柜次、排柜、订舱、拖车、拣货、装柜、报关和时间线 | P0 | P3-BASE-01 |
| P3-DSP-01 | 后台 | 订单三期编排 | 在现有订单列表/详情中接入柜次、子流程、异常、时间线和门禁操作 | P0 | P3-BASE-02 |
| P3-PLAN-01 | 公共 | 排柜规则 | 按已确认规则实现输入、约束、偏好和冲突判断 | P0 | P3-BASE-02、P3-Q1 |
| P3-PLAN-02 | 后台 | 智能排柜 | 按已确认范围实现建议、人工确认和追溯 | P0 | P3-PLAN-01 |
| P3-BOOK-01 | 后台 | 订舱 | 订舱和经确认的船名航次、港口、变更及异常 | P0 | P3-DSP-01、P3-Q9 |
@@ -259,8 +257,8 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| P3-PICK-01 | 公共 | 拣货任务 | 按排柜方案生成任务、明细、差异和复核规则 | P0 | P3-PLAN-02 |
| P3-PDA-01 | PDA | 扫码拣货 | 领取、扫描、部分拣货、跳拣、撤销和异常 | P0 | P3-PICK-01 |
| P3-PDA-02 | PDA/服务端 | 弱网幂等 | 重试、去重、冲突、换班和设备缓存清理 | P0 | P3-PDA-01 |
| P3-LOAD-01 | 后台 | 装柜封柜 | 柜号、铅封号、装柜节点、可配置照片清单和复核 | P0 | P3-PICK-01、P3-Q6 |
| P3-LOAD-02 | PDA/服务端 | 柜封拍照上传 | 现场拍照/相册选择、关联确认、进度、预览、失败重试、去重和提交 | P0 | P3-LOAD-01、文件能力可用 |
| P3-LOAD-01 | 后台 | 装柜封柜 | 柜号、锁码文本、装柜节点、5 张必传照片和门禁复核 | P0 | P3-PICK-01 |
| P3-LOAD-02 | PDA/服务端 | 柜封拍照上传 | 空仓、半仓、满仓、锁仓、带锁码照的拍摄/相册选择、真实文件上传、预览、失败重试、去重和提交 | P0 | P3-LOAD-01、文件能力可用 |
| P3-CUS-01 | 客户端 | 报关资料 | 清单、上传、补件、版本和进度查看 | P0 | 文件能力可用 |
| P3-CLEAR-01 | 后台 | 报关协同 | 审核、退回、提交代理、批次、回执和可见范围 | P0 | P3-CUS-01 |
| P3-CUS-02 | 客户端 | 回执及港务信息 | 回执下载、预计开船/到港信息、数据来源、更新时间和变更时间线 | P0 | P3-PORT-01、P3-CLEAR-01 |
@@ -293,7 +291,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
| P3-Q3 | “预约托车”是否统一为“预约拖车”? | 建议统一使用行业常用的“拖车”,并确认业务实际含义 |
| P3-Q4 | 目标 PDA 型号、系统和扫描头接入方式是什么? | 设备确认前保持适配层,不绑定厂商 SDK |
| P3-Q5 | 拣货是否依赖实时库存和库位可用量? | 若需要,完整 WMS 前置范围会显著扩大,必须单独评估 |
| P3-Q6 | 柜封照片有哪些必传角度和留存期限? | 启动前由仓库、业务和合规共同锁定 |
| P3-Q6 | 柜封照片有哪些必传角度和留存期限? | 已确认空仓、半仓、满仓、锁仓、带锁码照共 5 张必传,锁码文本必填;留存期限尚待确认 |
| P3-Q7 | 报关资料清单是否按国家、渠道和货物类型变化? | 建议配置化,并保留下单使用的清单版本 |
| P3-Q8 | 报关代理如何接收资料和返回回执? | 首版系统内整理加线下提交,正式接口后续评估 |
| P3-Q9 | 原型中的“港务信息”具体指船期、港口作业状态还是两者,包含哪些字段,由谁维护? | 先确认业务词义和字段;首版建议平台人工维护并审计,外部接口仅预留适配层 |
@@ -305,7 +303,7 @@ PDA 拣货 → 装柜并上传货柜/铅封照片
## 十二、建议实施顺序
1. 锁定待确认事项、业务规则、目标设备和协作责任人。
2. 统一出仓单、柜次、订舱、拖车、拣货、报关和港务/船期信息的稳定编码。
2. 统一订单、柜次、订舱、拖车、拣货、报关和港务/船期信息的稳定编码与关联契约。
3. 先实现服务端权限、状态、门禁、幂等、并发和审计,再接各端页面。
4. 完成管理后台的出仓编排,再接 PDA 现场执行和客户资料协同。
5. 使用脱敏数据演练拼柜、一单多柜、错拣、补件、改船和冲正。
@@ -0,0 +1,234 @@
# 虫虫出海三期闭环审计报告
> 审计日期:2026-08-08
> 审计范围:二期终点→智能排柜→订舱→拖车→PDA 拣货→装柜/柜封证据→报关协同→国内出仓→等待装船
> 审计对象:Admin、Client、PDA、`baiyue-firstleg` 后端、OpenAPI/SQL、自动化测试与现有测试环境报告
> 结论:**NO-GO,当前不能按“三期业务闭环”验收**
## 1. 执行摘要
当前已实现多个真实持久化的三期子能力,不是纯页面原型:智能装柜/预装、订舱、拖车、PDA 拣货接口、装柜证据元数据和装柜清单均已有后端实现,订舱和拖车 API 也已在测试环境完成独立生命周期验证。
用户已于 2026-08-08 确认:**三期不新建独立出仓单,现有订单列表就是主流程承载面**,当前页面使用“待分柜→装柜中→装柜完成→派送完成”状态。因此“没有出仓单”不再是缺口;真正的缺口是现有订单与柜次、订舱、拖车、拣货、装柜证据和报关子流程尚未统一编排,服务端也没有为订单终态提供组合门禁。
最重要的判断是:
- **已经做出了“排柜到装柜清单”的技术子链路。**
- **订舱和拖车是可独立运行的业务模块,但尚未与出仓主链强绑定。**
- **报关资料/补件/代理提交/回执/客户下载基本未建模。**
- **现有订单的统一后程门禁、冲正和终态业务含义尚未闭合。**
- **Client 没有三期协同入口,PDA 仍是演示数据与真实接口混合,尚未完成真实身份、任务领取、文件上传和真机验收。**
## 2. 闭环判定口径
本次不以“有页面”、“有 Controller”或“单模块测试全绿”作为闭环标准。三期只有同时满足以下条件才算闭环:
1. 同一个真实客户订单能从二期终点 `WAIT_SPLIT + APPROVED + CONFIRMED` 进入三期。
2. 同一订单可追溯所属柜次、排柜方案、订舱、拖车、拣货、装柜证据、报关文件与回执。
3. 服务端独立校验所有强制前置,不能靠页面按钮顺序保证。
4. 弱网、重复提交、并发、越权、证据缺失和冲正均有明确行为和审计记录。
5. Admin、Client、PDA 都能用真实身份和真实数据完成各自职责。
6. 订单终态及“派送完成”的触发动作、业务含义和必备门禁已明确。
7. 有一条测试环境证据,让同一业务对象贯穿全流程,并完成负向门禁验证。
## 3. 三期业务矩阵
| 环节 | 当前能力 | 审计结论 | 主要缺口 | 优先级 |
|---|---|---|---|---|
| 二期入口 | 统一订单已有 `WAIT_SPLIT` 投影 | 部分具备 | 没有一条验收数据从二期贯穿到三期终点 | P0 |
| 订单三期主编排 | 订单列表已承载待分柜、装柜中、装柜完成、派送完成 | 部分具备 | 无订单级统一门禁、子流程关联和整体时间线;不需新建出仓单 | P0 |
| 智能排柜 | 有容量型推荐、预装和持久化 | 部分具备 | 无业务硬约束/软偏好规则版本、冲突解释、独立方案确认和版本对比 | P0 |
| 订舱/船期 | 后端生命周期可用,测试环境 API 已通过 | 部分具备 | Admin 创建/版本/返回 DTO 存在契约错配;未与订单/柜次强关联;无数据来源和时效语义 | P0 |
| 拖车预约 | 后端和 Admin 正式模块已存在,API 生命周期已验证 | 部分具备 | 与出仓门禁未汇聚;前端需手填多个关联 ID;附件上传未接入;幂等重放不完整 | P0 |
| PDA 拣货 | 有柜次级拣货服务和入库单级汇总接口 | 部分具备 | 两套语义可互相绕过;无领取/分配/复核/异常挂起/撤销闭环;未校验实时处理单元与库位量 | P0 |
| 装柜/柜封证据 | 有证据元数据和 File 归属校验 | 部分具备 | 已确认空仓、半仓、满仓、锁仓、带锁码照共 5 张必传,锁码文本必填;当前 Admin/PDA 真实文件上传和服务端硬门禁未实现 | P0 |
| 客户上传报关资料 | Client 无正式入口 | **未具备** | 无清单版本、上传、补件、进度和客户隔离契约 | P0 |
| 平台报关协同 | 仅有历史文档类型占位 | **未具备** | 无审核退回、补件、代理提交批次、文件版本冻结 | P0 |
| 回执上传/客户下载 | 无业务模型和页面 | **未具备** | 无回执类型、版本、可见范围、下载授权和门禁关联 | P0 |
| 港务/船期查询 | 订舱实体有 ETD/ETA、船名航次等字段 | 部分具备 | 无来源、更新时间和过期标识;无独立客户查询端 | P1 |
| 国内出仓门禁 | 有 `LOADING -> LOADED -> DELIVERED` | **未具备** | 无统一门禁、无确认出仓、无冲正、无 `WAITING_FOR_LOADING` | P0 |
| 客户三期可见性 | 订单详情有拣货/装柜少量只读摘要 | 严重不足 | 无柜次、报关、回执、船期变更时间线 | P0 |
## 4. 核心阻断项
### P0-1:现有订单缺少三期统一编排和服务端门禁
产品已确认不新建独立出仓单,因此应复用现有订单作为三期主对象,柜次作为多订单共享的执行对象。当前问题不是少一张单,而是订单状态与各子流程尚未由统一编排器计算。
当前实际是四条彼此独立的状态链:
```text
装柜计划:EDITING -> LOADING -> COMPLETED
入库单后程:LOADING -> LOADED -> DELIVERED
订舱:DRAFT -> SUBMITTED -> CONFIRMED -> RELEASED
拖车:DRAFT -> ... -> DEPARTED -> COMPLETED
```
订单上没有一个汇聚节点计算“是否可进入下一状态”,因此即使四条链各自通过,也不等于三期闭环。应在现有订单/入库履约聚合上增加统一编排,不应新建重复的出仓单业务对象。
### P0-2:装柜完成可绕过拣货和柜封证据
`LoadingDeliveryService` 在类注释中明确声明“不检查证据完整度,不阻断业务流转”。`completeLoading` 只校验当前状态为 `LOADING`,没有校验:
- 柜次级拣货是否全部复核完成;
- 入库单级汇总拣货是否与柜次明细一致;
- 空仓、半仓、满仓、锁仓、带锁码照 5 张必传图片及锁码文本是否齐全;
- 铅封号是否重复;
- 拖车是否已离仓;
- 报关与船期门禁是否满足。
现有单元测试 `completesLoadingWithoutEvidenceGate` 还把“无证据也可完成”固化成预期,与三期规划直接冲突。
### P0-3:报关协同和回执链路未实现
当前未找到以下业务对象和契约:
- 按国家/渠道/货物类型选择的报关资料清单及版本;
- 客户上传、替换、补件和进度;
- 平台完整性审核、退回原因和截止时间;
- 提交报关代理批次及文件版本冻结;
- 接收/申报/退单/查验/放行等回执类型;
- 客户可见范围和授权下载;
- 回执或海关放行与出仓门禁的关系。
数据库中的 `CUSTOMS_CLEARANCE` 文档类型只是占位,不构成业务闭环。
### P0-4:Admin 的后半程组件未装配,订舱 UI 与后端契约错配
- `UnifiedOrderWorkflowPanel.vue` 已有排柜、拣货、证据和完成装柜交互,但对应作业页未注册到正式路由,统一订单详情也未引用该组件。
- Admin 现有订单详情没有正式的报关、回执和后程门禁操作面板。
- 订舱新建页把 `expectedVersion` 初始化为 `null`,而后端创建请求要求非空且大于等于 0。
- 后端创建订舱返回 Detail 对象,前端 API 按字符串解包并直接用作路由 ID。
- 订舱状态操作在前端统一用 edit 权限,后端对 submit/confirm/release/change/cancel 使用独立权限和特定 DTO。
测试环境订舱 API 23/23 通过,证明后端模块可用;上述问题说明浏览器端真实操作仍需独立验收。
### P0-5:Client 和 PDA 没有形成真实角色闭环
Client 只在头程订单详情中显示“拣货进度”和“装柜资料”摘要,没有报关上传/补件、回执下载、船期变更和柜次时间线。
PDA 已有调用拣货/证据/装柜接口的适配代码,但当前仍存在:
- 登录使用演示账号,Token、客户和 API Base 由本地选项注入,不是真实仓库作业身份;
- 任务列表和页面仍保留演示数据与本地成功分支;
- 拍照后把本地临时路径放进 `fileName`,未先上传 File 服务获得 `fileId`;
- 无任务领取/作业员分配/后台复核闭环;
- 无可验证的 Android/HBuilderX 构建命令,未做真机连续扫码、断网重连、前后台切换和重复提交验收。
## 5. 已实现且可保留的能力
本次 NO-GO 不代表三期必须重做。以下能力已有明确复用价值:
- 柜次、智能装柜、预装和装柜清单的持久化模型。
- 订舱 `DRAFT -> SUBMITTED -> CONFIRMED -> RELEASED` 生命周期、历史和幂等。
- 拖车从草稿到完成的状态、历史和附件后端能力。
- 柜次级 PDA 明细拣货、部分拣货和跳过与防重操作。
- 装柜证据文件归属校验、业务历史、乐观锁和部分幂等基础。
- Admin 订舱和拖车页面壳、统一订单后半程组件。
- Client 对统一订单三期只读摘要的兼容映射。
## 6. 需求确认项重新定性
`P3-Q1` 至 `P3-Q13` 在文档中仍是待确认。结合现代码,可重新定性为:
| 编号 | 当前代码事实 | 审计定性 |
|---|---|---|
| P3-Q1 排柜规则 | 仅基础容量贪心推荐 | 仍为 P0 产品/业务阻断 |
| P3-Q2 拼柜/一单多柜/拆批 | 已确认不新建出仓单;拼柜和拆批应由订单-柜次关系表达 | 仍需确认具体可开放场景 |
| P3-Q3 “拖车”用词 | 代码已统一使用拖车 | 可直接确认,非阻断 |
| P3-Q4 PDA 设备 | 有广播适配,无目标设备和真机验收 | 仍为上线阻断 |
| P3-Q5 实时库存/库位 | `locationIds` 未进入服务业务校验 | 仍为 P0 流程阻断 |
| P3-Q6 柜封照片 | 已确认 5 张必传:空仓、半仓、满仓、锁仓、带锁码照;锁码文本必填 | 需实现文件上传与服务端硬门禁 |
| P3-Q7/Q8/Q12 报关 | 业务模型未实现 | 仍为 P0 范围和契约阻断 |
| P3-Q9 港务 | 仅有订舱船期字段 | 仍为 P1,但必须在客户展示前确认 |
| P3-Q10 冲正 | 无 reverse 动作 | 仍为 P0 高风险状态阻断 |
| P3-Q11 强制前置/并行 | 子模块彼此独立 | 仍为 P0 统一门禁阻断 |
| P3-Q13 三期终点 | 实际终态与规划不一致 | 必须在统一状态机前确认 |
## 7. 自动化和环境证据
### 7.1 本次实际执行
| 项目 | 命令 | 结果 |
|---|---|---|
| Admin | `pnpm test` | 80 个测试文件,418 项通过 |
| Admin | `pnpm build` | 通过,包含 TypeScript 检查 |
| Client | `pnpm test` | 176 项通过 |
| Client | `pnpm build` | 通过,包含 TypeScript 检查 |
| PDA | `node --test tests/*.test.mjs` | 32 项通过 |
| Backend | `.\scripts\backend-full-regression.ps1` | Reactor 成功;最终 firstleg 报告 391 项、0 失败、0 错误、2 跳过 |
### 7.2 已有测试环境证据
`reports/admin-test-env-acceptance-all-green-20260808.json` 记录 Gateway `http://8.163.30.128:9000` 的 549/549 项通过,其中订舱 23 项、拖车 43 项、service-center-flow 10 项。这证明已部署子模块的 API 生命周期可用。
`docs/二三期业务功能测试回归报告.md` 在 2026-08-07 将“三期结果”写为通过,但其明确的三期测试范围只有:虚拟柜、智能装柜、预装、PDA 拣货和最终装柜清单。该结论应改名为“三期装柜子链路通过”,不应作为整期闭环证据。
### 7.3 测试缺口
当前缺少以下验收证据:
- 同一订单从二期 `WAIT_SPLIT` 贯穿到三期终点。
- 订舱、拖车、柜次、拣货、证据和报关关联到同一批订单/柜次。
- 缺拣货复核、缺照片、缺铅封、拖车未离仓或报关未满足时,确认出仓必须失败。
- 两个并发确认出仓请求只产生一次状态迁移和一条有效审计事件。
- 出仓后冲正不直接篡改旧状态,且有反向审计记录。
- 客户 A 无法查看、上传或下载客户 B 的报关文件与回执。
- PDA 真实设备弱网、连续扫描、重复扫码、前后台切换和重复提交。
## 8. 建议修复顺序
### 里程碑 A:锁定业务契约(P0)
1. 由产品/业务对 P3-Q1/Q2/Q5/Q6/Q7/Q8/Q10/Q11/Q12/Q13 给出最终结论。
2. 固定三期终点为“国内出仓完成,等待装船”,或明确替代终点。
3. 定义哪些前置必须完成,哪些子流程允许并行。
### 里程碑 B:在现有订单上建立三期统一编排与门禁(P0)
1. 复用现有订单主状态,补齐订单-柜次关联、整体时间线、版本和审计投影,不新建出仓单。
2. 将排柜、订舱、拖车、拣货、证据和报关子流程绑定到订单/柜次。
3. 服务端实现 `check gate`、最终状态推进、冲正和并发/幂等。
4. 禁止入库单汇总拣货绕过柜次明细拣货与复核。
### 里程碑 C:补齐报关与文件闭环(P0)
1. 建立资料清单版本、客户文件版本、补件、代理提交批次、回执和可见范围。
2. Client 实现上传/补件/回执下载,Admin 实现审核/退回/提交/回执上传。
3. Admin/PDA 证据上传必须先经 File 服务获得 `fileId`,不得使用文件名或本地路径代替。
### 里程碑 D:接通三端(P0)
1. 修复 Admin 订舱 DTO/版本/动作权限,将后半程作业页挂到正式路由。
2. 拖车从可选资源中关联订单、订舱和柜次,不让用户手填 ID。
3. Client 增加出仓进度、柜次、报关、回执和船期变更。
4. PDA 接真实仓库身份、任务领取、服务端详情和文件上传,删除正式业务中的演示成功分支。
### 里程碑 E:端到端验收(P0)
1. 使用一个独立测试客户和一组可追溯订单完成全链路。
2. 按本报告 7.3 节逐项做负向、权限、并发、幂等和冲正验收。
3. 在目标 PDA 真机上完成弱网与扫码验收。
4. 输出包含订单 ID、柜次 ID、订舱 ID、拖车 ID、证据 ID、报关批次 ID、终态和审计事件的验收报告。
## 9. GO 准入标准
以下条件全部满足后,才建议将三期从 NO-GO 改为 GO:
- [ ] P3-Q1至P3-Q13 已有明确结论,文档与代码口径一致。
- [ ] 现有订单可通过柜次追溯全部三期子流程。
- [ ] 统一出仓门禁在服务端生效,负向场景全部阻断。
- [ ] 报关资料、补件、代理提交、回执和客户下载闭环。
- [ ] Admin 所有三期正式入口可达,前后端 DTO 和权限一致。
- [ ] Client 只能访问当前客户的三期数据和文件。
- [ ] PDA 真实鉴权、任务、扫码、文件上传、弱网和重试已真机通过。
- [ ] 确认出仓后进入已确认的三期终态,并支持授权冲正。
- [ ] 同一测试订单完成全链路正向与负向验收,证据可重放。
## 10. 最终结论
当前三期建议对外口径为:
> **三期已确认复用现有订单列表承载全部状态,不新建出仓单;已完成排柜/预装/PDA 拣货/装柜清单子链路,订舱和拖车 API 可用。但订单三期统一编排、五张装柜照片硬门禁、报关协同、冲正、Client 协同和 PDA 真机仍未闭环,当前不具备整期验收条件。**
因此,现阶段不应标记“三期完成”,应标记为“**子能力已实现,闭环整改中**”。
+14 -8
View File
@@ -16,11 +16,11 @@
| 编号 | 决策/问题 | 当前建议 | 阻断级别 | 状态 | 负责人 | 计划确认 | 最终结论 | 影响模块 |
|---|---|---|---|---|---|---|---|---|
| P3-Q1 | 智能排柜需考虑哪些硬约束和软偏好? | 业务提供可执行规则表,建议可解释并由人工确认 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 智能排柜、拣货任务 |
| P3-Q2 | 是否存在拼柜、一单多柜和拆批出仓? | 数据模型预留能力,页面按高频场景逐步开放 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 出仓单、柜次、排柜、拣货 |
| P3-Q2 | 是否存在拼柜、一单多柜和拆批出仓? | 通过订单-柜次关系预留能力,页面按高频场景逐步开放 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 订单、柜次、排柜、拣货 |
| P3-Q3 | 原型“预约托车”是否统一为“预约拖车”? | 建议使用行业常用的“拖车”,同时确认业务实际含义 | 非阻断 | 待确认 | 待分配 | 待排期 | - | 页面文案、接口字段说明 |
| P3-Q4 | 目标 PDA 型号、系统和扫描头接入方式是什么? | 确认前保持设备适配层,不绑定厂商 SDK | 模块阻断 | 待确认 | 待分配 | 待排期 | - | PDA 拣货、真机验收 |
| P3-Q5 | 拣货是否依赖实时库存和库位可用量? | 默认使用二期处理单元和当前位置;如需完整库存,单独评估 WMS 范围 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 二三期契约、拣货、库存边界 |
| P3-Q6 | 柜封照片有哪些必传类型、角度、数量和留存期限? | 使用可配置清单,由仓库、业务和合规共同确认 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 装柜、PDA 拍照、文件存储、出仓门禁 |
| P3-Q6 | 柜封照片有哪些必传类型、角度、数量和留存期限? | 使用可配置清单,由仓库、业务和合规共同确认 | 模块阻断 | 已确认 | 用户当前对话确认 | 2026-08-08 | PDA 拣货后必须上传空仓、半仓、满仓、锁仓、带锁码照共 5 张图片,并必填锁码文本;5 张全部真实上传成功后 PDA 装柜任务才能完结 | 装柜、PDA 拍照、文件存储、订单后程门禁 |
| P3-Q7 | 报关资料清单是否按国家、渠道和货物类型变化? | 清单配置化,并保存业务使用的清单版本 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 客户资料、报关审核、文件版本 |
| P3-Q8 | 报关代理如何接收资料并返回回执? | 首版系统内整理、线下提交,正式接口后续评估 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 报关协同、回执上传 |
| P3-Q9 | “港务信息”指船期、港口作业状态还是两者,包含哪些字段,由谁维护? | 先确认词义和字段;首版平台人工维护并审计 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 订舱、港务查询、客户展示 |
@@ -29,30 +29,36 @@
| P3-Q12 | 报关回执包含哪些类型,海关放行是否为国内出仓硬门禁? | 当前不默认以放行为门禁,业务明确各类回执含义 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 报关状态、出仓门禁、客户回执 |
| P3-Q13 | 三期终点以“等待装船”还是“装船发运”为准? | 当前以“完成国内出仓,等待装船”为基线 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 阶段边界、状态、里程碑、验收 |
## 三、建议确认顺序
## 三、已确认架构决策
| 编号 | 确认日期 | 最终结论 | 影响 |
|---|---|---|---|
| P3-D1 | 2026-08-08 | 三期不新建独立出仓单,现有订单列表承载全部主状态;柜次、订舱、拖车、拣货、证据和报关作为订单关联子对象 | 取消出仓单页面和数据模型规划,改为增强现有订单列表/详情及服务端统一编排 |
## 四、建议确认顺序
1. 先确认 P3-Q13、P3-Q11,锁定阶段终点和流程依赖。
2. 再确认 P3-Q1、P3-Q2、P3-Q5,锁定排柜、柜次和拣货输入。
3. 然后确认 P3-Q12、P3-Q7、P3-Q8,锁定报关和出仓门禁。
4. 最后确认设备、照片、港务信息、冲正和文案事项。
## 四、产品与业务确认会议
## 五、产品与业务确认会议
### 4.1 参会角色
### 5.1 参会角色
- 产品负责人:逐项说明问题、候选方案和影响范围,维护最终结论。
- 业务负责人:确认流程、规则、例外、责任边界和客户可见范围。
- 仓库/运营代表:确认现场作业、PDA、照片、拖车、装柜和冲正可执行性。
- 研发与测试代表:识别数据、接口、设备、权限和验收风险,不代替业务作决定。
### 4.2 会议输入
### 5.2 会议输入
- 本确认表中的 P3-Q1~P3-Q13。
- `三期开发规划.md` 的流程、状态、里程碑和任务骨架。
- `三期页面与原型清单.md` 中已有参考原型和待补页面。
- 二期输出契约、目标 PDA 信息、文件存储能力及报关/港务协作现状。
### 4.3 每项确认要求
### 5.3 每项确认要求
1. 必须填写负责人、计划确认日期和可执行的最终结论,不能只记录“按建议处理”。
2. 最终结论需明确正常流程、异常/冲正、权限责任和验收口径。
@@ -60,7 +66,7 @@
4. 开工阻断项未解除时,不得将受影响模块标记为可开发。
5. 会议结束后,将结论同步到开发规划、开发进度表、页面原型和后续验收任务。
### 4.4 会议输出
### 5.4 会议输出
- 13 项确认事项的状态和最终结论。
- 需要新增或调整的原型清单。