优化 affiliate_dash 核销时机:建单成功即核销(参考 feifei 给用户链接即核销)

- prepareAffiliateDashTask 建单成功(91 卡信息到手、链接可发放)立即核销行业电子凭证
- 核销失败不阻塞下单与链接发放(consumeStatus=failed, delivered 回调兜底补核销)
- sync delivered 分支 alreadyConsumed 短路,避免重复核销
- typecheck + 212 测试通过
This commit is contained in:
yml2213
2026-08-05 16:02:44 +08:00
parent 5ef1ed6018
commit 00d490a2cd
2 changed files with 59 additions and 4 deletions
@@ -523,3 +523,20 @@ order_site 处理要求:
**验证**:前后端 typecheck 通过;后端全量 212 测试通过;claim 详情分流脚本验证(flowType=affiliate_dash、affiliateDash 块完整、product 正确、其他 flow 为 null)。
**领取闭环状态迁移(与 §8 状态机一致)**:输 UID → submitClaimUidbind 触发,task `link_generated → waiting_binding`)→ 轮询详情(bind-result 刷新 bound)→ 提交发货(submitAffiliateDashClaimtask `waiting_binding → redeeming`)→ 回调 delivered → redeemed + 核销。
---
## 19. 核销时机优化(v2.4.1 · 已完成)
**需求**:核销时机从「delivered 回调」提前到「给用户链接(91 卡信息到手、建单成功)」——参考 kuaishou-feifei 的「给用户链接即核销」模式。
**改动**`apps/backend/src/services/fulfillment/affiliate-dash/index.ts`):
| 位置 | 行为 |
| --- | --- |
| `prepareAffiliateDashTask` | 建单成功(orderNo 拿到、task → link_generated、91 侧即可取 claimUrl)后**立即**调用 `consumeKuaishouIndustryVouchersForTask`:有凭证 → 核销并写回 `kuaishouIndustryVoucher` 上下文(`consumeStatus=success`);无凭证 → `not_required`;**核销失败不阻塞**下单与链接发放(`consumeStatus=failed` + warn 日志,delivered 兜底) |
| `syncAffiliateDashTaskStatus`delivered 分支) | `alreadyConsumed` 短路:`consumeStatus ∈ {success, not_required}` 时不再重复调核销,直接 redeemed;`failed/空` 才补核销(原逻辑保留为兜底) |
**效果**:核销由「发货完成后(分钟~小时级)」提前到「建单成功(秒级)」;91 卡信息一经消耗即核销,delivered 回调只做状态收敛。已核销成功的凭证在 delivered 时 `resolveTaskVouchers` 返回空,自然走 redeemed。
**验证**typecheck 通过;后端全量 212 测试通过。