60 lines
7.3 KiB
Markdown
60 lines
7.3 KiB
Markdown
# 海外采购简化流程
|
|
|
|
2026-10-27 按客户确认的需求收敛采购主流程,适用于海外采购回国内、国内采购发往海外两个方向。
|
|
|
|
| 主状态 | 编码 | 操作 |
|
|
|---|---|---|
|
|
| 资金处理中 | `FUNDING_PENDING` | 订单已受理,等待Finance冻结回执 |
|
|
| 资金失败 | `FUNDING_FAILED` | 展示失败原因,可在原订单重试 |
|
|
| 待审核 | `PENDING_REVIEW` | 冻结成功后,平台审核并确定采购仓 |
|
|
| 收货中 | `RECEIVING` | 平台分批登记数量和照片 |
|
|
| 待客户确认 | `WAIT_CUSTOMER_CONFIRM` | 平台结束本次采购收货,提交客户确认 |
|
|
| 已确认 | `CONFIRMED` | 客户确认实际收货结果,可创建出库批次 |
|
|
| 运输中 | `IN_TRANSIT` | 平台从采购单创建出库批次,填写数量和物流跟踪号 |
|
|
| 派送中 | `DELIVERING` | 平台更新批次派送状态 |
|
|
| 签收完成 | `COMPLETED` | 全部采购库存已出完,且所有出库批次已签收 |
|
|
|
|
拒绝、取消等异常结果独立展示,不增加正常流程节点。采购方向只影响起运仓候选与方向展示,不再增加国内、海外两套作业步骤。
|
|
|
|
收货批次保存实际数量和绑定本采购单的附件。采购完成后冻结收货结果,客户确认前不得出库。客户可确认或填写1~1000字原因驳回;驳回回到收货中,平台展示原因并允许按需重新上传照片,也可保留原照片直接再次提交采购完成,不要求逐批重新上传。选择替换照片时不能把旧附件当作本次新上传结果;仅替换照片,不重复累加数量。重新上传成功后清除当前驳回原因,本轮其他批次仍可继续换图;`photosNeedUpdate` 只标识仍绑定本轮驳回照片,不作为重新提交门禁。再次提交采购完成成功后清除上一轮驳回原因和照片基线,待客户确认及确认后的页面均不展示旧驳回提示。平台不得代客户调用确认接口;客户身份从统一认证上下文取得,不接受请求指定其他客户。
|
|
|
|
出库按批次保存数量、物流跟踪号、派送和签收资料。创建批次时预留可用数量,避免多个批次超出采购库存;签收完成时才扣减该批采购库存。签收请求原键重放不得再次扣减。存在剩余库存时仍可继续创建批次,不能因前一批签收而提前结束整单。采购库存属于采购台账,不写普通尾程 WMS 库存。
|
|
|
|
主单版本、客户隔离、附件归属与幂等键由服务端复核。失败不能留下部分批次或库存变动;同幂等键不同载荷必须拒绝,过期版本须刷新后重新操作。
|
|
|
|
费用明细使用其他海外业务共用的费用窗口和费用来源,采购默认选择余额支付。费用明细缺失或尚未审核时可提示运营补充,但不阻止创建出库批次;出库资格只由采购状态、可用数量、物流跟踪号及操作权限决定。原出库成功请求的幂等重放不重新创建批次。余额冻结、审核实扣、失败重试和扣款回执沿用海外人工费用链;审核通过与扣款成功分别展示,创建费用或发出资金指令不能显示为已扣款。采购履约不以旧的预算核验、装箱、面单或两段运费冻结作为门禁。
|
|
|
|
客户端保留独立下单、列表和详情路由。详情集中展示商品及收件信息、收货批次、出库批次和费用,待客户确认状态提供确认动作。平台列表突出主状态及数量,详情承载审核、收货、提交确认、出库和费用操作;不重复展示旧节点表单。
|
|
|
|
## 验收范围
|
|
|
|
2026-10-27 旧采购模型已与新流程彻底分离:只保留主单、审核流水、采购附件和三张批次表。旧购买、装箱、面单、两段运输及采购专属资金接口退役,详情不再查询旧表;费用统一沿用共用海外费用审核链。[21 张旧采购表清理范围与脚本](procurement-table-cleanup.md)。代码验证与数据库执行分开记录,必须先部署分离版本再执行精确删表脚本。
|
|
|
|
- 客户创建采购单后先资金处理中,冻结成功进入待审核,失败保留原单重试;审核后直接收货中。
|
|
- 两次收货分别保留数量与附件;提交确认后不能追加收货,客户确认前不能创建出库。
|
|
- 客户只能确认自己的采购单;内部备注与内部资料不进入客户投影。
|
|
- 分两批出库;超量、并发、过期版本和异载荷重放被拒绝。
|
|
- 批次派送后上传文件或图片签收,库存仅扣一次;未完成批次与剩余库存阻止整单提前完成。
|
|
- 费用默认余额支付,费用归属本单客户,余额结果以资金回执为准。
|
|
- 无费用、费用尚未审核或驳回时均允许创建出库;页面提示不影响出库操作。
|
|
|
|
自动测试、本地类型检查、真实 HTTP 与页面验收分别记录。现有 `procurement-sample-fulfillment.mjs` 验证旧两段样品链,不能作为本流程验收通过的依据。
|
|
|
|
## 2026-10-27 本地验证记录
|
|
|
|
- 平台端定向检查104项通过,客户端定向检查28项通过;两端 TypeScript 检查通过。
|
|
- 后端七状态、审核、权限、OpenAPI、结构中文备注40项去重定向检查通过;共用费用服务44项、采购费用来源4项、客户详情投影7项、费用真实Mapper持久化11项通过。
|
|
- 流程测试使用隔离内存数据库和真实MyBatis Mapper,覆盖两次收货、客户确认、两批出库、派送及签收扣减,以及超量、并发、重试、版本与文件归属。
|
|
- Gateway路由合同5项通过,Mapper扫描通过。本轮影响文件差异格式检查通过。
|
|
- 指引索引检查已尝试,因工作区缺少 `D:/project/docs/业务快速索引.md` 无法执行完成;不代表业务测试失败,也不计为检查通过。
|
|
- 未执行环境SQL、部署、真实HTTP或页面截图验收。结构脚本为 `deploy/sql/overseas-procurement-workflow.sql`(后端仓库路径),发布需同时包含Lastleg、Admin和Client。余额冻结及实扣仍须在发布后核对Finance实际回执。
|
|
|
|
|
|
## 2026-10-29 客户下单预算与页面调整
|
|
|
|
客户采购直接提交创建请求;预算预占、FUNDING_PENDING订单及冻结Outbox在同一事务落库,响应表示订单已受理。Finance冻结成功后进入PENDING_REVIEW,明确失败进入FUNDING_FAILED,展示失败原因并允许以原订单、原金额及币种重试。处理中重复点击不重复冻结,旧版本回执不能推进新指令。免费样品零金额不发资金指令并直接进入待审核。旧预算预校验接口仅兼容保留,客户端不再等待冻结后建单。未绑定预占15分钟后释放,已绑定订单终态释放,失败定时重试;迟到回执不得复活取消订单。预算预占独立于人工费用冻结/实扣,不计入已扣款汇总。
|
|
|
|
本土卡车采用相同的先受理后异步冻结流程,平台仅可审核PENDING_REVIEW订单。托数与预算金额须大于0,原件数字段不再作为客户下单数量;预算金额及币种创建后不可通过普通编辑改变。Client采购详情将四项数量卡片置顶,商品及收件信息置底。
|
|
|
|
结构变化:Lastleg源基线与海外空库基线同步;已有库的独立增量为 `deploy/sql/overseas-order-budget-and-procurement-rejection.sql`。本轮未执行SQL或部署,Finance真实回执与人工截图验收仍待环境联调。
|