14 KiB
14 KiB
四期后端缺口清单
更新日期:2026-08-19
口径与边界
- 本清单以当前四期范围、后端代码、静态 OpenAPI、数据库基线、IAM 初始化 SQL 和本地测试为依据。
- “已实现”表示已有可定位的领域实现、持久化和直接测试,不代表已经部署或完成测试环境 HTTP 验收。
- “部分实现”表示已有主体或单点能力,但缺少安全、契约、状态衔接或页面所需查询中的至少一项,不能作为稳定前端契约交付。
- 明确排除海外仓出库、退货出库、海外派送及其他库存离仓履约。代码中的
dispatch/、delivery/、ll_outbound_*不计入四期完成度。
总览
| 业务域 | 判定 | 当前事实 | 主要缺口或下一闭环 |
|---|---|---|---|
| 海外 Token 与 JWKS | 部分实现 | Auth 登录与刷新已同时返回国内 Token 和短时 RS256 海外 Token,海外 Token Claims 已统一为下划线命名;JWKS、海外网关和两个海外业务服务按 lastleg-api Audience 验签并使用 Claims 授权,不依赖国内 Redis 会话 |
仍缺 Auth—Gateway—Servlet 服务跨模块契约测试;POST /auth/overseas/token 仅保留为过渡兑换能力,不作为四期稳定前端契约 |
gateway-overseas 路由与入口安全 |
部分实现 | 已路由 /api/*/v1/last-leg/**、海外仓库、File/Print 等海外部署服务;可校验 Issuer、Audience、必要 Claims 和应用域,并清洗可信身份头 |
网关只做应用域,不做资源权限;静态路由未覆盖尚未实现的四期通用资料 API;可信身份头只传身份、不传权限是合理边界,资源权限必须由下游 JWT Claims 校验 |
| 装柜完成跨区建单 | 已实现 | Firstleg Outbox、版本化装柜完成事件、Event Bridge Inbox/重试/死信式 DEAD、Lastleg Inbox 幂等和事务建单均有实现及测试 |
与四期到港/可提柜衔接是另一事件,当前缺失,不能复用装柜完成事件冒充到港 |
| 尾程订单 | 部分实现 | 有事件建单、列表、详情、CSV 导出、目的仓单条/批量调整、客户隔离与状态历史 | 平台接口大多仅校验平台应用域,未按 list/edit/export 等资源权限闭环;IAM 仍保留独立 detail 权限,违反“列表包含详情只读”统一语义;缺静态 OpenAPI |
| 海外接柜、卸货与入仓 | 部分实现 | 有入仓计划转换、FBA 预约、托盘分配、PDA 实收/上架/合托/完成以及实收后库存落账 | 缺“国内出仓后到港结果 → 海外可提柜/接柜任务”的事件或内部契约;缺接柜车辆/运抵/卸货节点聚合;入仓单列表和正式详情契约不足,现有 Controller 主要是转换与单号详情;权限资源和静态 OpenAPI 未闭环 |
| 换标 | 部分实现 | 有换标申请、明细、状态历史和库存联动服务及测试 | 仅有平台接口且权限未闭环;状态机与前端四期页面字段尚无静态 OpenAPI;需确认换标完成后库存 SKU/箱唛快照的稳定查询形态 |
| 海外仓托盘与库位 | 部分实现 | warehouse-overseas-service 有仓库、地址、能力、库位、托盘、绑定和资源锁;平台/商户及内部锁定接口均存在 |
平台资源接口要求显式 customerId,与“仓储资源可独立查询全部客户和仓库”的产品约定存在冲突;仅校验平台应用域,缺细粒度权限;缺静态 OpenAPI |
| 箱号管理 | 部分实现 | 一件代发领域保存来源箱唛、箱级库存和箱流水,库存查询可返回部分箱/SKU事实 | 没有面向四期 Admin 的箱号列表、详情、筛选及只读权限契约;现有 Dropship 接口是内部接收口,不能直接作为平台箱号管理 API |
| 产品库 | 缺失 | 现有 SKU 仅作为尾程明细、采购明细或一件代发库存快照存在 | 无独立产品主档、平台 CRUD/查询、唯一键/启停规则、静态 OpenAPI、权限和表结构 |
| 库存及库内操作 | 部分实现 | 有余额、仓位、流水、汇总查询;有 hold/release/allocate/unallocate/pick/ship/adjust 命令幂等;PDA 实收后可入可用库存 | 四期排除库存离仓,因此 pick/ship 不应作为四期交付;其余平台命令有代码权限常量但 IAM 未初始化;查询接口缺只读权限;跨仓转移包含出仓动作,需把四期可验收部分限定为不离仓库内操作;缺静态 OpenAPI |
| 海外采购订单 | 部分实现 | 商户下单、平台审核/管理、采购单据余量及测试已存在,PDA 实收才进入可用库存的边界已建立 | 页面需要的平台列表/详情/编辑字段需与现有 API 冻结;代码使用的 lastleg:overseas-procurement:* 未写入 IAM 种子;手工采购出库属于库存离仓,不纳入四期;缺静态 OpenAPI |
| 本土卡车 | 部分实现 | 平台/商户订单、托盘明细、状态历史和测试存在 | 需确认该子域是四期“本土卡车”而非海外派送;平台只使用单一 manage 权限且 IAM 未初始化;缺列表只读/操作拆分和静态 OpenAPI |
| 本土散板 | 缺失 | lastleg-service 无稳定子域、Controller、表或测试 |
新建独立领域,不能复用出库/派送表;先冻结状态、字段、权限和与库存的非离仓边界 |
| 海外仓合作仓类型 | 已实现 | 国内 Warehouse 已新增正式类型码 OVERSEAS_PARTNER,与普通海外仓 OVERSEAS 明确区分;保存、查询筛选、列表响应、批量导入、Schema 注释、统一 SQL 和测试已同步;Admin 已完成列表筛选、新增/编辑及保存透传;内部服务令牌接口 GET /internal/warehouses/overseas-partners 仅供海外报价服务读取当前启用候选 |
实际环境 SQL 尚未执行;前端不得调用内部合作仓接口,也不跨区域为报价拉取国内候选 |
| 海外仓报价 | 缺失 | 国内 Warehouse 有“海外仓阶梯仓租费”,但没有四期原型所指完整海外仓报价主数据;已冻结合作仓来源方案:海外报价服务仅在创建时通过内部服务身份读取国内 ACTIVE + OVERSEAS_PARTNER 列表并缓存 30 分钟 |
需实现报价维度、币种、有效期、服务项、仓库/客户作用域和权限/OpenAPI/SQL;报价保存合作仓 ID、编码、名称快照,缓存未命中时强制刷新一次后再拒绝 |
| 汇率管理 | 缺失 | 四期目标服务中无汇率主档、接口、权限或表 | 汇率仅作为业务换算主数据;财务记账/结算汇率口径必须交财务总控冻结 |
| 车辆列表/详情 | 缺失 | 卡车订单仅保存车辆字段快照,没有车辆主档 | 需独立车辆主数据、启停/证照字段、平台查询与权限;不得把订单快照当车辆主档 |
| 国内出仓后船节点 | 部分实现 | Firstleg 已有 CarrierScheduleQuery 任务、尝试、历史、来源、过期、幂等、真实订舱/柜次关联和“3 天窗口最多 3 次”约束;船期及查询任务的列表、详情、历史、船司辅助查询已统一使用 *:list,旧 *:view 初始化资源已清理 |
当前适配器全部返回 MANUAL_REQUIRED,Integration 无船司/轨迹 DTO、内部接口或适配器;没有定时调度、任务租约、退避、失败重试、到港停止条件、最新标准节点事实或到港跨区事件;领域 SQL 文件仍沿用历史三期命名 |
| 四期 IAM 权限 | 缺失 | 仅初始化少量尾程订单权限;代码内有库存、PDA、废弃、转仓、采购、卡车等权限常量 | 建立四期资源矩阵;所有正式列表用 *:list 覆盖详情和只读辅助接口,写操作独立;同步 Controller、OpenAPI、IAM 基线、统一 SQL 和契约测试 |
| 四期静态 OpenAPI | 缺失 | 船节点已有静态 YAML;Lastleg、Overseas Warehouse、Auth 海外 Token、到港事件及四期主数据没有完整静态 OpenAPI | 按浏览器公网 API、内部 API、事件三类拆分契约,先于前端正式联调冻结 DTO 与错误码 |
| 海外费用与 Finance | 跨总控依赖 | Lastleg 当前无四期费用事实 Outbox;Finance 口径不属于本总控 | 本总控只定义来源事件候选、业务键、币种/金额/来源快照与幂等字段,提交财务总控冻结入池条件、审核、结算和汇率口径后再实现生产者 |
已确认可复用的实现
common-event-contract的版本化信封、事件 ID、区域、Payload 哈希和装柜完成 V1/V2。event-bridge-service的 Inbox、投递尝试、租约式领取、重试上限、DEAD和人工补投。lastleg-service的装柜完成幂等建单、来源快照、入仓计划/PDA、库存余额/仓位/流水、换标、采购和本土卡车主体。warehouse-overseas-service的海外仓档案、库位、实物托盘、业务绑定和资源锁。- Firstleg
CarrierScheduleQuery的人工任务壳、尝试/历史/来源/过期和操作幂等。
最小闭环实施批次
批次 0:认证与契约门禁
- 收口海外 Token 下划线 Claims、Audience/JWKS 和 Claims 模式权限快照;增加 Auth—Gateway—Servlet 服务跨模块契约测试。
- 冻结四期 API 路径、DTO、错误码和权限矩阵;删除尾程/船节点旧独立详情权限,按
list统一只读语义。 - 为 Lastleg、Overseas Warehouse、海外 Token 增加静态 OpenAPI;补齐 Gateway 路由合同测试。
验收终点:平台/商户海外 Token 能分别访问正确应用域;错误 Audience、缺 Claim、过期/错签、伪造身份头和缺资源权限均稳定拒绝。
批次 1:到港衔接与接柜入仓最小闭环
- 在 Integration 建立标准船节点查询请求/响应、供应商错误归一、超时/限流/重试配置和内部服务令牌接口。
- 在 Firstleg 增加出仓后自动建任务、到期任务租约领取、重试/退避、标准节点幂等落库、目的港到达停止条件。
- 新增“目的港到达/可提柜”版本化跨区事件;Lastleg Inbox 消费后建立接柜/入仓衔接事实。
- 补齐入仓单列表/详情、接柜/运抵/卸货状态,复用现有入仓计划、PDA 实收/上架和库存落账。
验收终点:一条真实装柜/订舱/柜次链路从国内确认出仓,经节点查询,到港后在海外形成可操作入仓单,PDA 完成后生成库存;重复事件和重复任务不产生重复单或库存。
批次 2:海外仓管理面闭环
- 冻结并实现产品主档与箱号平台查询;明确来源快照与可编辑主档的边界。
- 补齐换标、托盘、箱号、产品、库存查询及不离仓库内操作的权限/OpenAPI。
- 调整海外仓资源查询,不以客户筛选限制仓库候选;补细粒度资源权限和越权测试。
验收终点:四期前端所需七类海外仓页面均有稳定的列表、详情和允许操作 API,且不暴露出库/派送能力。
批次 3:海外业务闭环
- 收口采购订单与本土卡车的列表/详情/写操作权限和静态 OpenAPI,排除采购手工出库及派送语义。
- 新建本土散板领域、状态历史、幂等、权限、SQL、OpenAPI 和测试。
验收终点:采购、本土卡车、本土散板均能独立建单、查询、推进本期允许状态,并与库存离仓业务隔离。
批次 4:合作仓与通用资料
- 国内 Warehouse 与 Admin 的
OVERSEAS_PARTNER主数据全链路已完成。 - 实现海外仓报价、汇率、车辆主数据及权限/OpenAPI/SQL。
- 将海外费用事件候选契约提交财务总控;只有财务口径冻结后才实现费用 Outbox。
验收终点:合作仓、报价、汇率、车辆均可作为稳定主数据被四期业务引用;任何财务落账仍以财务总控确认契约为准。
跨总控依赖
| 接收方 | 需要冻结/确认 | 本总控交付 |
|---|---|---|
| 四期前端页面总控 | 合作仓类型码、各页面最小字段/筛选/动作、平台与商户 API 使用范围 | 稳定路径、DTO、枚举、权限码、错误码、分页/幂等约定和 OpenAPI;不修改前端共享导航/根路由 |
| 财务改造总控 | 海外费用入池条件、审核与结算状态、记账/结算汇率、来源作废/调整规则 | 业务来源事件候选、不可变来源快照、业务键/版本/币种/金额/发生时间/区域和幂等语义;不改 Finance 状态机 |
当前协同状态:四期前端总控已完成双 Token 原子适配,登录/刷新消费 overseasAccessToken: string | null 与秒单位 overseasExpiresIn;海外请求缺 Token、临近过期或收到 401 时统一触发一次国内刷新并使用响应中的新海外 Token 重放,不再依赖 POST /auth/overseas/token。共享认证定向 19 个测试已通过;前端后续全量 typecheck 与 build 也已通过。
合作仓协同状态:Admin 已启用 OVERSEAS_PARTNER 的类型、筛选、新增、编辑与保存透传,普通 OVERSEAS 保持独立;前端定向 30 个测试、全量 1144 个测试、typecheck 与 build 均通过。前端不调用 /internal/warehouses/overseas-partners,该接口只属于未来海外报价服务的服务间契约。
本轮直接收口
- Auth 海外 Token Claims 改为与 Gateway、可信身份头和海外服务一致的
user_id、tenant_id、membership_id、app_code、client_type、permission_version,保留roles与authorities授权快照。 - Auth 登录、刷新共用一次权限快照并同时签发国内 Token 与
overseasAccessToken;overseasExpiresIn单位为秒。海外 JWT 未启用的本地配置下两字段分别为null、0。 - 港务船期与船司查询的只读 Controller、静态 OpenAPI、模块 SQL、统一 SQL 和契约测试统一使用
*:list;初始化脚本显式删除旧*:view角色关联与资源,不执行数据库操作。 - 国内 Warehouse 新增
OVERSEAS_PARTNER海外合作仓类型,覆盖保存、筛选、响应、导入和 SQL 注释,并提供受内部服务令牌保护的启用合作仓候选接口;mvn -pl warehouse -am test通过(192 个测试)。海外报价创建读取合作仓采用内部服务调用与 30 分钟缓存,缓存未命中时强制刷新一次。 - 验证:
mvn -pl auth,gateway-overseas -am test通过(33 个测试);mvn -pl firstleg -am test通过(781 个测试,0 失败、0 错误、2 个既有跳过)。