新增 affiliate_dash 履约配置与商品映射(阶段 3)

- bootstrap CORE_PROFILES + routing ROUTABLE/DEFAULT_PRIORITY 接入 affiliate_dash
- planner 上下文 affiliateDash 块 + resolveDynamicAffiliateDashProfile
- product-resolution: 91 productNo→sku 映射匹配(skuMapping) + snapshot.affiliateDash
- prepare 前余额预检(getAffiliateDashWallet)
- AFFILIATE_DASH_SKU_MAPPING_JSON env 注入
- admin 后端接口(GET/POST 配置、match、products、wallet)+ 前端 Tabs 面板
- 联调:模拟 91 进单命中 affiliate_dash 路由, 未命中回退;前后端 typecheck + 212 测试通过
This commit is contained in:
yml2213
2026-08-05 15:08:41 +08:00
parent 867ffd2f3c
commit 3284fed7a1
16 changed files with 817 additions and 5 deletions
@@ -468,3 +468,28 @@ order_site 处理要求:
| GET /orders/{order_no}/delivery | `data` 透传(91单号 + game_account)正确 ✅ |
**联调中发现并修复**`POST /orders` 响应是 `data.order`(非 `data` 直接),首次实现 map 错了层级导致 orderNo 全空;已改为取 `data.order` 并暴露 `idempotent` 标志。幂等校验要求**同单号参数完全一致**,否则 400「参数与原订单不一致」——重试时必须复用原参数。
---
## 17. 阶段 3 落地记录(v2.3 · 已完成)
产出文件(`apps/backend/src/` + `apps/frontend/src/`):
| 文件 | 内容 |
| --- | --- |
| `services/bootstrap/fulfillment-bootstrap-service.ts` | `CORE_PROFILES` 追加 affiliate_dash profilerequiresClaim: true, external_platform |
| `services/fulfillment/routing-config-service.ts` | `ROUTABLE_EXECUTOR_KEYS` + `DEFAULT_EXECUTOR_PRIORITY``AFFILIATE_DASH`(路由可命中) |
| `services/fulfillment/planner.ts` | `buildFulfillmentTaskContext``affiliateDash` 块(flowType/sku/productName/orderNo/... 与 `AffiliateDashFlow` 对齐);`resolveDynamicFulfillmentProfile` 加 AFFILIATE_DASH 分支 + 新增 `resolveDynamicAffiliateDashProfile`configId `affiliate_dash:${sku}` |
| `services/fulfillment/product-resolution-service.ts` | `resolveConfiguredItemCandidate` 91 分支加 affiliate_dash 候选(`resolveAffiliateDashSkuByProductNo`key=snapshot.productNo+ resolvedSkuCode/resolvedSkuName/snapshot.affiliateDash/matchMode |
| `services/fulfillment/affiliate-dash/index.ts` | `prepareAffiliateDashTask` 下单前 `preflightAffiliateDashWallet`(余额 ≤0 → `affiliate_dash_wallet_not_enough` 提前拦截;查询失败不阻塞) |
| `config/env-overrides.ts` | `AFFILIATE_DASH_SKU_MAPPING_JSON` env 注入(仿 KUAISHOU_FEIFEI_PRODUCT_RULES_JSON |
| `routes/admin/platform-config/affiliate-dash.ts`(新)+ `platform-config.ts` | GET/POST 配置、POST matchproductNo→sku)、POST products、POST wallet |
| `services/admin/platform-config/affiliate-dash-service.ts`(新) | get/update/match/listProducts/walletaudit 不落密钥 |
| 前端 `types/admin/.../affiliate-dash.ts` + `services/admin/platform-config/affiliate-dash.ts` + 两处 index export | 类型与 API 封装 |
| 前端 `AdminPlatformFulfillmentPage.tsx` | `ROUTING_EXECUTORS` 加 affiliate_dashgold+ Tabs 面板 `AffiliateDashFulfillmentPanel`(配置表单/密钥、skuMapping 行编辑、映射测试、商品目录、钱包余额) |
**联调验证(模拟 91 进单 → resolveOrderItemForFulfillment**
- `productNo='X91-LUCKY-90'` + skuMapping 命中 → `selectedExecutorKey='affiliate_dash'``matchMode='affiliate_dash_sku_mapping'``resolvedSkuCode='lucky_coin_x90'`、snapshot.affiliateDash 完整 ✅
- 未命中映射的商品 → 不选 affiliate_dash,回退 ✅
**验证**:前后端 typecheck 通过;后端全量 212 测试通过。