refactor(fulfillment): 移除飞飞/乐玩通道,仅保留 affiliate_dash

新单只路由 affiliate_dash(未命中走 manual_dispatch);历史飞飞/乐玩任务保留只读 stub,避免订单重同步失败。同步清理 cloudtentacles 调度、Admin 写路径与相关 env。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yml2213
2026-09-14 17:29:47 +08:00
co-authored by Cursor
parent 0cbcb89dd8
commit b3aad0044c
155 changed files with 661 additions and 23351 deletions
@@ -5,16 +5,11 @@
*
* 语义:核销 = 领取链接已交付(售出闭环),≠ 游戏内道具已到账。
*
* 交付后会 best-effort 自动准备 Cloud 绑定资源(取号/绑链),避免
* 「已核销却停在待准备资源」只能靠后台手动点「准备资源」。
*/
import { attachKuaishouIndustryVoucherToTask } from '../platforms/kuaishou-industry/voucher-binding-service.js'
import { consumeKuaishouIndustryVoucher } from '../platforms/kuaishou-industry/voucher-service.js'
import { prepareFulfillmentBinding } from '../fulfillment/executors/registry.js'
import { normalizeKuaishouCloudFlow } from '../fulfillment/kuaishou-cloud/index.js'
import { listKuaishouIndustryVouchersByOid } from '../../repositories/kuaishou-industry-voucher-repo.js'
import { logIntegration, logWarn } from '../../utils/logger.js'
import { parseTaskContext } from '../../utils/task-json.js'
import type { KuaishouIndustryVoucherRow, OrderRow, TaskRow } from '../../types/repository/rows.js'
export const OPEN_91_DELIVER_CONSUME_SOURCE = 'open91_query_deliver'
@@ -133,18 +128,8 @@ export async function consumeIndustryVouchersBeforeOpen91Deliver(options: {
continue
}
const attachedTask =
(await attachKuaishouIndustryVoucherToTask(task, result.voucher, {
source,
})) || task
// 核销后立刻补准备绑定资源;失败不阻断 cards(领取页仍会再兜底 prepare)
await ensureBindingPreparedAfterDeliver({
task: attachedTask,
await attachKuaishouIndustryVoucherToTask(task, result.voucher, {
source,
requestId: options.requestId || '',
orderId: options.order.id,
orderNo: oid,
})
if (alreadyConsumed) {
@@ -192,48 +177,3 @@ export async function consumeIndustryVouchersBeforeOpen91Deliver(options: {
alreadyConsumedTaskIds,
}
}
async function ensureBindingPreparedAfterDeliver(options: {
task: TaskRow
source: string
requestId: string
orderId: number
orderNo: string
}) {
const executorKey = String(options.task.executor_key || '').trim()
// lewan / 行业凭证任务才需要 Cloud 绑定资源
if (
executorKey !== 'kuaishou_ct_assisted' &&
executorKey !== 'kuaishou-industry' &&
!parseTaskContext(options.task).kuaishouCloudFulfillment
) {
return
}
const flow = normalizeKuaishouCloudFlow(parseTaskContext(options.task).kuaishouCloudFulfillment)
if (flow.binding.prepareStatus === 'ready' && String(flow.binding.bindUrl || '').trim()) {
return
}
try {
await prepareFulfillmentBinding(options.task, {
source: `${options.source}_prepare_binding`,
actor: { source: options.source },
})
logIntegration('[open-91/query]', '91交付后自动准备绑定资源成功', {
requestId: options.requestId,
orderId: options.orderId,
orderNo: options.orderNo,
taskId: options.task.id,
source: options.source,
})
} catch (error) {
logWarn('[open-91/query]', '91交付后自动准备绑定资源失败(不阻断 cards,领取页将再试)', {
requestId: options.requestId,
orderId: options.orderId,
orderNo: options.orderNo,
taskId: options.task.id,
error: error instanceof Error ? error.message : String(error || ''),
})
}
}