122 lines
6.3 KiB
Markdown
122 lines
6.3 KiB
Markdown
# 尾程平台已完成功能报告(2026-08-15)
|
||
|
||
## 1. 交付结论
|
||
|
||
头程装柜完成到尾程订单的真实链路已打通。头程按客户发布
|
||
`FirstLegLoadingPlanCompleted V1` 事件,经 Event Bridge 可靠投递后,尾程按事件中
|
||
每一笔最终实装入仓单分别落一条订单记录。同一柜的订单记录共享尾程单号,
|
||
`sourceInboundId` 作为来源建单唯一标识。
|
||
|
||
本报告仅描述当前代码和已经取得证据的能力,不把规划中的功能列为已完成。
|
||
|
||
## 2. 已完成功能
|
||
|
||
### 2.1 跨区域事件桥
|
||
|
||
- 接收并持久化版本化事件信封,保存幂等键、负载摘要和冻结 JSON。
|
||
- 使用数据库租约领取待投递事件,支持多实例竞争和超时租约恢复。
|
||
- `RECEIVED` 与 `RETRY` 都可重新调度,失败采用指数退避,达到上限进入 `DEAD`。
|
||
- 每次投递写入 `bridge_delivery_attempt`,记录投递序号、结果、响应码和错误。
|
||
- 支持经过内部令牌保护的死信人工补投;成功后才把 Inbox 标记为 `PROCESSED`。
|
||
- Event Bridge 与尾程内部接口使用统一的 `X-Internal-Service-Token`。
|
||
|
||
### 2.2 装柜完成事件消费与尾程建单
|
||
|
||
- 只接受 `CN -> OVERSEAS`、`LOADING_PLAN`、版本为 1 的装柜完成事件。
|
||
- 强制校验实际 `containerNo` 和非空 `orders`,尾程不回查头程数据。
|
||
- 事件 Inbox 以 `eventId` 防重复,并校验重复事件的 `payloadHash`。
|
||
- 按 `orders` 逐笔创建尾程订单;同柜入仓单共享一个不可碰撞的尾程单号。
|
||
- 以 `(tenant_id, source_region, source_inbound_id)` 保证来源入仓单建单幂等。
|
||
- 保存根入仓单、来源订单、装柜计划版本、交接版本和来源摘要等追溯字段。
|
||
- 保存商品、箱数、数量、托数、重量、体积、目的仓、SKU、FBA 跟踪号、
|
||
shipmentNo 和唛头等实装冻结明细。
|
||
- 新订单初始化为 `PENDING_ASSIGNMENT`,同步写入状态历史。
|
||
- 同一来源入仓单摘要不一致时拒绝静默覆盖。
|
||
|
||
### 2.3 尾程订单查询与转仓
|
||
|
||
- 按租户分页查询,支持尾程单号、入仓码、头程订单号、柜号、状态、转仓、
|
||
异常、暂扣和创建时间筛选。
|
||
- 查询订单详情、实装明细和状态历史。
|
||
- 导出 UTF-8 CSV,并处理公式注入风险。
|
||
- 支持单笔和批量转仓,更新订单及明细目的仓快照并写状态历史。
|
||
- 已生成入库计划的订单禁止再次修改目的仓。
|
||
- 普通客户只能查询认证身份对应租户;平台身份必须显式指定客户租户,
|
||
不允许通过请求参数任意跨客户查询。
|
||
|
||
### 2.4 尾程入库计划与 PDA 作业
|
||
|
||
- 按租户和实际集装箱生成唯一入库计划。
|
||
- 保存入仓码明细、目的仓快照、计划托盘和托盘分配关系。
|
||
- 按目的仓隔离合托,支持固定容量托盘分配。
|
||
- 提供 PDA 任务、操作幂等记录、托盘合并记录及仓库资源锁关联字段。
|
||
|
||
### 2.5 仓库资源和海外认证边界
|
||
|
||
- 仓库维护库位、托盘及资源锁,资源锁使用租户幂等键并记录业务归属。
|
||
- 仓库数据源启动保护避免 schema 接错后误执行建表脚本。
|
||
- 海外 Gateway 使用 JWKS 验证非对称 JWT,校验 `lastleg-api` Audience 及必需 claims。
|
||
- 尾程内部事件入口使用常量时间令牌比较;未配置或令牌错误时拒绝消费。
|
||
|
||
### 2.6 工程规范与数据库交付
|
||
|
||
- 生产 Spring Bean 的依赖注入已统一为 `jakarta.annotation.Resource`;仅保留配置值
|
||
`@Value` 和普通值对象/校验器构造器参数,不把不可变业务值误当作 Bean 注入。
|
||
- 新增统一增量入口 `scripts/db/incremental.sql`,按 `001-006` 归档 Event Bridge、尾程订单与入库计划/PDA、仓库资源及仓库主数据的字段、中文注释和索引变更。
|
||
- 增量脚本使用 `information_schema` 守卫,45 个动态 DDL 均成对释放,且不包含业务数据写入、删除或清理语句。
|
||
|
||
## 3. 真实链路验收证据
|
||
|
||
| 项目 | 结果 |
|
||
|---|---|
|
||
| loadingPlanId | `2091000814000009002` |
|
||
| containerNo | `LLSYNC-CNTR-20260814` |
|
||
| tenantId/accountId | `10001` |
|
||
| eventId | `88cd0f63-dc9e-4c16-bdb7-c32b20a83c3b` |
|
||
| payloadHash | `sha256:23011feff2ff91203fb94ebab7cab8306f58e3e128f61d17913d2f74af5c87f4` |
|
||
| Event Bridge 状态 | `PROCESSED` |
|
||
| 尾程单号 | `LMO43831679558828067566368238939` |
|
||
|
||
同一事件实际生成两条入仓单维度订单记录:
|
||
|
||
| sourceInboundId | 入仓码 | 箱数 | 托数 | 明细数 |
|
||
|---|---|---:|---:|---:|
|
||
| `2091000814000000301` | `LLSYNC-20260814-IN-01` | 2 | 1 | 1 |
|
||
| `2091000814000001301` | `LLSYNC-20260814-IN-02` | 2 | 1 | 1 |
|
||
|
||
重复投递相同 `eventId` 后接口仍返回成功,数据库订单记录总数保持为 2,未重复建单。
|
||
|
||
## 4. 数据库交付约定
|
||
|
||
全量初始化脚本继续由各服务维护:
|
||
|
||
- `lastleg/src/main/resources/db/lastleg.sql`
|
||
- `event-bridge-service/src/main/resources/db/event-bridge.sql`
|
||
- `warehouse/src/main/resources/db/warehouse.sql`
|
||
|
||
从本次交付开始,所有字段和索引变更同时追加到
|
||
`scripts/db/incremental.sql`。该文件按日期和序号只追加,已发布段落不得修改;
|
||
新增字段和索引必须查询 `information_schema` 后再执行,禁止放入测试数据、
|
||
业务数据修复、`DELETE` 或 `TRUNCATE`。
|
||
|
||
当前归档段为 `001` Event Bridge、`002` 仓库资源、`003` 入库计划/PDA、
|
||
`004` Event Bridge 存量字段升级、`005` 尾程订单投影和 `006` 仓库主数据注释/索引。
|
||
脚本静态契约校验结果:UTF-8、614 行、45 个 `PREPARE` 与 45 个释放操作,
|
||
未包含业务 DML,也未检测到乱码字符。
|
||
|
||
## 5. 验证结果
|
||
|
||
- `mvn -pl lastleg -am test`:34 tests passed。
|
||
- `mvn -pl event-bridge-service -am test`:15 tests passed。
|
||
- `mvn -pl warehouse -am test`:26 tests passed。
|
||
- `mvn -pl gateway -am test`:7 tests passed。
|
||
- 注入改造额外验证:`integration-service` 1 test passed,`audit-service` 编译通过。
|
||
- 生产代码扫描无 `@Autowired`、`@Inject` 或 Lombok 构造器注入残留;文档和 SQL UTF-8 乱码扫描通过。
|
||
|
||
## 6. 当前未声明完成的范围
|
||
|
||
- 到港、清关、拆柜、正式入库、出库、派送和签收的完整状态命令链路。
|
||
- 前端尾程订单页面。
|
||
- 权限冻结事件的海外本地投影和完整生产密钥轮换演练。
|
||
- 生产级 mTLS、来源网络白名单、监控告警和灾备演练。
|