优化
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
总入口是 `../admin-test-env-acceptance.mjs`。每个业务模块使用独立的同名 `.mjs` 文件,避免多个对话同时修改总入口。
|
||||
|
||||
需要为人工联调批量准备同一客户、同一国内仓和同一渠道的 `WAIT_SPLIT` 数据时,使用[《批量待分柜数据生成指南》](批量待分柜数据生成指南.md)。该入口通过正式下单、入库、称重和测量接口生成数据,支持 FBA、海外仓、私人地址及一件代发等稳定随机组合;不得直接写库或用于生产环境。
|
||||
|
||||
例如 `--modules system,inbound-weight-ocr` 会依次加载:
|
||||
|
||||
- `system.mjs`
|
||||
|
||||
@@ -32,6 +32,9 @@ test('统一初始化 SQL 提供人工验收所需公共仓储主数据', () =>
|
||||
"'CAR-001'", "'CARRIER'", "'SHIPPER'", "'EXP-TEST'", "'IT 测试快递'",
|
||||
]) assert.ok(sql.includes(marker), `missing initialization marker: ${marker}`)
|
||||
assert.match(sql, /'EXP-TEST', 'IT 测试快递'[\s\S]*?'ACTIVE'/)
|
||||
assert.match(sql, /193000000000400003,0,193000000000200003,'RECEIVING','海外收货',1,'16:00:00',[\s\S]*?'洛杉矶仓海外接柜入仓收货能力'/)
|
||||
assert.match(sql, /193000000000400004,0,193000000000200004,'RECEIVING','海外收货',1,'16:00:00',[\s\S]*?'纽约仓海外接柜入仓收货能力'/)
|
||||
assert.match(sql, /固定平台作业仓收货能力写入校验失败/)
|
||||
|
||||
const palletSeed = sql.match(/INSERT INTO wh_pallet \([\s\S]*?remark = VALUES\(remark\);/)?.[0]
|
||||
assert.ok(palletSeed, 'missing pallet initialization seed')
|
||||
|
||||
@@ -0,0 +1,155 @@
|
||||
# 批量待分柜数据生成指南
|
||||
|
||||
本文说明如何复用 `scripts/admin-test-env-acceptance.mjs`,通过正式 HTTP 业务接口批量生成停在“测量完成待分柜”的头程订单。生成链路包含客户登录、下单、平台审核、入库、称重、测量、测量审核,不直接写业务数据库,也不模拟成功。
|
||||
|
||||
## 适用范围
|
||||
|
||||
- 用于开发、联调或经明确授权的验收环境准备人工操作数据。
|
||||
- 生成结果固定为入库单 `processStatus=WAIT_SPLIT`、测量审核 `APPROVED`。
|
||||
- 单次支持 `1-100` 条;更大批量分多次执行并分别保存报告。
|
||||
- 不负责后续分柜、装柜、订舱、国内出仓、海外入仓或 PDA 收货。
|
||||
- 禁止用于生产环境。对任何共享环境执行前,必须在当前对话明确获得该环境的写数据授权。
|
||||
|
||||
## 固定项与随机项
|
||||
|
||||
批量模式可固定以下三个线路字段:
|
||||
|
||||
1. 国内起运仓名称:`--origin-warehouse-name`
|
||||
2. 渠道名称:`--channel-name`
|
||||
3. 渠道编码:`--channel-code`
|
||||
|
||||
客户通过复用已审核商户账号固定;服务端从登录身份解析客户,脚本不会手填客户 ID。
|
||||
|
||||
使用 `--order-profile-mode randomized` 后,脚本在服务端允许的真实组合中轮换:
|
||||
|
||||
- 目的类型:`FBA`、`OVERSEAS`、`PRIVATE`
|
||||
- 履约类型:`STANDARD`、`ONE_CLICK_DROPSHIP`
|
||||
- 提货方式:`PICKUP`、`SELF_EXPRESS`、`SELF_TRUCK`
|
||||
- 买单/退税:`BUY_DECLARATION`、`TAX_REFUND`
|
||||
- 报价税制:`TAX_INCLUDED`、`TAX_EXCLUDED`,以固定渠道实际支持项为准
|
||||
- 装载方式:`LCL`、`FULL_CONTAINER`
|
||||
- 是否查验
|
||||
- SKU 数、每 SKU 箱数、托数、重量和测量箱型
|
||||
- FBA/海外仓目的仓:只从固定渠道当前价格簿真实可计价仓库中选择
|
||||
|
||||
随机档案是可重复的稳定轮换,不是不可复现的纯随机数。每六条覆盖一次“3 种目的类型 × 2 种履约类型”的核心组合,便于复核覆盖率。
|
||||
|
||||
特殊规则:
|
||||
|
||||
- `PRIVATE` 不引用公共目的仓 ID,必须携带收件人地址;当前契约不对私人地址做自动报价。
|
||||
- `FBA` 必须使用真实可计价 FBA 目的仓,并冻结 Amazon 仓码、Shipment ID 和 Reference ID。
|
||||
- `OVERSEAS` 必须使用真实可计价海外仓;固定渠道只有一个可用海外仓时允许重复使用,不伪造第二个仓。
|
||||
- 默认 `--order-profile-mode fixed` 仍生成 FBA + STANDARD,不启用上述随机组合。
|
||||
|
||||
## 执行前置
|
||||
|
||||
执行前确认:
|
||||
|
||||
- 目标 Gateway 和服务已部署当前接口。
|
||||
- 平台管理员账号可用。
|
||||
- 复用客户已审核通过,商户账号可登录。
|
||||
- 客户固定箱型初始化完成。
|
||||
- 固定国内仓为 `ACTIVE` 且具备收货能力。
|
||||
- 固定渠道存在当前 `ACTIVE` 价格簿和进仓码前缀。
|
||||
- FBA/OVERSEAS 至少存在一个与固定渠道价格明细匹配的目的仓。
|
||||
- File、Order、Firstleg、Warehouse、IAM、Auth 等链路可用。
|
||||
|
||||
账号、密码、环境域名和 Token 不得写入本文、源码、提交记录或报告。建议由本地未提交环境文件或当前终端环境变量提供。
|
||||
|
||||
## PowerShell 命令模板
|
||||
|
||||
先在当前终端提供敏感执行参数:
|
||||
|
||||
```powershell
|
||||
$env:ADMIN_TEST_GATEWAY = '<目标环境国内 Gateway>'
|
||||
$env:ADMIN_TEST_USERNAME = '<平台管理员账号>'
|
||||
$env:ADMIN_TEST_PASSWORD = '<平台管理员密码>'
|
||||
$env:MERCHANT_TEST_USERNAME = '<已审核商户账号>'
|
||||
$env:MERCHANT_TEST_PASSWORD = '<已审核商户密码>'
|
||||
```
|
||||
|
||||
从 `baiyue-firstleg/` 执行:
|
||||
|
||||
```powershell
|
||||
node scripts/admin-test-env-acceptance.mjs `
|
||||
--modules inbound-measurement `
|
||||
--merchant-username $env:MERCHANT_TEST_USERNAME `
|
||||
--merchant-password $env:MERCHANT_TEST_PASSWORD `
|
||||
--origin-warehouse-name '<固定国内仓名称>' `
|
||||
--channel-name '<固定渠道名称>' `
|
||||
--channel-code '<固定渠道编码>' `
|
||||
--order-profile-mode randomized `
|
||||
--wait-split-count 100 `
|
||||
--output '<本地报告绝对路径>.json'
|
||||
```
|
||||
|
||||
`inbound-measurement` 会自动展开 `orders` 前置。提供完整商户账号和密码后,总入口会复用该客户并移除自动创建客户的 `merchant-qualification-fixture`;两个商户参数必须同时提供。
|
||||
|
||||
如果需要自动新建并审核一个隔离客户,不传复用商户账号,改用:
|
||||
|
||||
```powershell
|
||||
node scripts/admin-test-env-acceptance.mjs `
|
||||
--modules merchant-qualification-fixture,orders,inbound-measurement `
|
||||
--customer-name '<本轮客户名称>' `
|
||||
--origin-warehouse-name '<固定国内仓名称>' `
|
||||
--channel-name '<固定渠道名称>' `
|
||||
--channel-code '<固定渠道编码>' `
|
||||
--order-profile-mode randomized `
|
||||
--wait-split-count 100 `
|
||||
--output '<本地报告绝对路径>.json'
|
||||
```
|
||||
|
||||
## 报告核验
|
||||
|
||||
成功报告中的 `createdResources.waitSplitFixtures` 每条至少应核对:
|
||||
|
||||
- `tenantId`、`orderId`、`inboundId`、`inboundCode`
|
||||
- `processStatus=WAIT_SPLIT`
|
||||
- `reviewStatus=APPROVED`
|
||||
- `receivingWarehouseName`、`channelCode`、`channelName`
|
||||
- `destinationType`、目的仓字段、`fulfillmentType`
|
||||
- `pickupMethod`、`taxMode`、`pricingTaxMode`、`containerMode`、`customsInspection`
|
||||
- SKU 数、总箱数、托数、毛重、净重和测量档案
|
||||
|
||||
建议同时检查:
|
||||
|
||||
- fixture 数量等于本轮 `--wait-split-count`
|
||||
- `inboundCode` 去重数等于 fixture 数量
|
||||
- 固定客户、国内仓和渠道只有一个唯一值
|
||||
- `failed=0` 且报告顶层 `success=true`
|
||||
- 随机批次包含预期目的类型和履约类型
|
||||
|
||||
报告生成前会扫描密码、Token、文件二进制、base64 和 OCR 原文等敏感内容。报告仍属于本地验收证据,不应提交到源码仓库。
|
||||
|
||||
## 失败、重跑与批量拆分
|
||||
|
||||
- 批次遇到第一条失败即停止,已经成功创建的订单不会自动删除或回滚。
|
||||
- 先查看日志和 JSON 报告中最后一个成功 fixture、失败接口的 `code/requestId/traceId`,修复前置后再运行剩余数量。
|
||||
- 重跑会生成新业务单号和入仓码,不覆盖旧订单;不要假设跨多次运行的入仓码一定连续。
|
||||
- 每次运行的随机序列从 1 重新开始;分批执行时组合可能重复,但仍保持固定三项和真实契约。
|
||||
- 大于 100 条时建议按 50-100 条拆批,并为每批使用独立报告文件名。
|
||||
- 若固定渠道只有少量目的仓,目的仓重复是合法结果;脚本只保证从真实可计价集合选择,不保证每批目的仓均匀分布。
|
||||
|
||||
## 常见阻断
|
||||
|
||||
| 现象 | 核对项 |
|
||||
|---|---|
|
||||
| 未找到固定起运仓 | 仓库名称是否精确一致、状态是否 ACTIVE、类型是否 DOMESTIC |
|
||||
| 未找到固定物流渠道 | 渠道编码/名称是否精确一致、价格簿是否 ACTIVE、起运仓是否匹配 |
|
||||
| 没有可计价目的仓 | 价格簿目的类型、目的仓映射、报价税制和仓库状态 |
|
||||
| 私人地址创建失败 | `destinationWarehouseId` 必须为空,收件人字段必须完整 |
|
||||
| 测量审核未到 WAIT_SPLIT | 称重图片、托数、净重、总箱数和测量箱数是否精确核平 |
|
||||
| 报告数量不足 | 查看首个失败模块;已成功数据不会因后续失败回滚 |
|
||||
|
||||
## 离线验证
|
||||
|
||||
修改生成器或本文关联参数后,至少运行:
|
||||
|
||||
```powershell
|
||||
node --check scripts/admin-test-env-acceptance.mjs
|
||||
node --check scripts/admin-test-env-modules/orders.mjs
|
||||
node --test scripts/admin-test-env-modules/merchant-qualification-fixture-contract.test.mjs scripts/admin-test-env-modules/inbound-measurement-box-code-contract.test.mjs
|
||||
git diff --check
|
||||
```
|
||||
|
||||
离线检查不访问环境,也不代表 HTTP 批量生成已经通过。真实生成必须另行获得目标环境写数据授权。
|
||||
Reference in New Issue
Block a user