完整流程-调试

This commit is contained in:
yml
2026-05-03 18:44:44 +08:00
parent 063c3fd8a1
commit 90cb7aa154
25 changed files with 2337 additions and 27 deletions
@@ -41,6 +41,7 @@ export async function syncDeliveryTasksForOrder(order, orderItems) {
const requirements = await listFulfillmentProfileRequirements(profile.profile_id || profile.id)
const primaryRequirement = requirements.find((requirement) => requirement.is_required !== false) || requirements[0] || null
const quantity = Math.max(1, Number(item.quantity || 1))
const fulfillmentConfig = parseJsonObject(profile.config_json)
for (let index = 0; index < quantity; index += 1) {
const createdAt = nowIso()
@@ -84,6 +85,58 @@ export async function syncDeliveryTasksForOrder(order, orderItems) {
credentialType: String(primaryRequirement.credential_type || primaryRequirement.credentialType || 'tencent_code'),
}
: null,
kuaishouCloudFulfillment: isKuaishouCloudExecutor(profile.executor_key)
? {
flowType: 'kuaishou_cloud_fulfillment',
configId: String(fulfillmentConfig.configId || '').trim(),
internalSkuCode: item.sku_code,
internalSkuName: item.sku_name,
ticket: {
code: '',
capturedAt: null,
capturedBy: null,
},
binding: {
prepareStatus: 'pending',
cloudSourceKey: String(fulfillmentConfig.cloudtentacles?.cloudSourceKey || 'default').trim() || 'default',
skuId: Number(fulfillmentConfig.cloudtentacles?.skuId || 0) || 0,
skuName: String(fulfillmentConfig.cloudtentacles?.skuName || '').trim(),
vnKey: String(fulfillmentConfig.cloudtentacles?.vnKey || '').trim(),
vnId: 0,
vnPhone: '',
bindUrl: '',
bindPreparedAt: null,
},
purchase: {
autoBuyEnabled: fulfillmentConfig.cloudtentacles?.autoBuyEnabled !== false,
minAssetReserve: Number(fulfillmentConfig.cloudtentacles?.minAssetReserve || 0) || 0,
usedKnapsack: false,
purchaseTriggered: false,
assetBefore: 0,
assetAfter: 0,
purchaseAt: null,
},
dispatch: {
status: 'pending',
dispatchAt: null,
dispatchBy: null,
sendType: 0,
note: '',
},
returnNumber: {
status: 'pending',
returnedAt: null,
returnedBy: null,
autoReturnEnabled: fulfillmentConfig.cloudtentacles?.autoReturnNumberAfterDispatch === true,
},
consume: {
status: 'pending',
shopId: String(fulfillmentConfig.kuaishouConsume?.shopId || '').trim(),
autoConsumeEnabled: fulfillmentConfig.kuaishouConsume?.autoConsumeAfterDispatch === true,
},
notes: String(fulfillmentConfig.notes || '').trim(),
}
: null,
}),
createdAt,
updatedAt: createdAt,
@@ -114,6 +167,27 @@ async function preparePaidTask(task) {
return task
}
if (isKuaishouCloudExecutor(task.executor_key)) {
if ([
'pending_binding_prepare',
'waiting_binding',
'dispatched_pending_return',
'completed',
'manual_review',
'failed',
].includes(String(task.task_status || '').trim())) {
return task
}
return updateTask(task.id, {
task_status: 'pending_binding_prepare',
inventory_status: 'not_required',
user_action_status: 'pending',
last_error: task.last_error || '等待准备绑定资源',
updated_at: now,
})
}
if (!task.requires_claim || String(task.executor_key || '').trim() === 'manual_dispatch') {
return updateTask(task.id, {
task_status: 'manual_review',
@@ -182,6 +256,10 @@ function resolvePaidTaskStatus(profile) {
return 'paid'
}
if (isKuaishouCloudExecutor(profile?.executor_key)) {
return 'pending_binding_prepare'
}
if (String(profile?.executor_key || '').trim() === 'manual_dispatch') {
return 'manual_review'
}
@@ -206,3 +284,24 @@ function parseTaskContext(task) {
return {}
}
}
function parseJsonObject(value) {
if (!value) {
return {}
}
if (typeof value === 'object' && !Array.isArray(value)) {
return value
}
try {
const parsed = JSON.parse(String(value || '{}'))
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {}
} catch {
return {}
}
}
function isKuaishouCloudExecutor(value) {
return String(value || '').trim() === 'kuaishou_ct_assisted'
}