优化了一些文件 增加多店铺

This commit is contained in:
yml
2026-04-09 01:31:47 +08:00
parent c2ec3aa6d2
commit e4ab1f559e
43 changed files with 1839 additions and 91 deletions
@@ -0,0 +1,119 @@
import { createTask, listTasksByOrderId, updateTask } from '../../repositories/task-repo.js'
import { reserveCdkForTask } from './cdk-service.js'
import { createTaskClaimToken } from '../claim/claim-service.js'
import { nowIso } from '../../utils/time.js'
import { randomId } from '../../utils/random.js'
export function syncDeliveryTasksForOrder(order, orderItems) {
const existingTasks = listTasksByOrderId(order.id)
if (existingTasks.length > 0) {
if (order.pay_status !== 'paid') {
return existingTasks
}
const itemMap = new Map(orderItems.map((item) => [item.id, item]))
return existingTasks.map((task) => preparePaidTask({
...task,
skuCode: itemMap.get(task.order_item_id)?.sku_code || '',
skuName: itemMap.get(task.order_item_id)?.sku_name || '',
}))
}
const tasks = []
for (const item of orderItems) {
const quantity = Math.max(1, Number(item.quantity || 1))
for (let index = 0; index < quantity; index += 1) {
const createdAt = nowIso()
const initialStatus = order.pay_status === 'paid' ? 'paid' : 'pending_payment'
const task = createTask({
orderId: order.id,
orderItemId: item.id,
platformOrderId: order.platform_order_id,
taskNo: randomId('DT'),
taskStatus: initialStatus,
loginType: '',
claimTokenId: null,
reservedCdkId: null,
browserSessionId: '',
nickname: '',
roleId: '',
roleName: '',
area: '',
partitionName: '',
resultCode: '',
resultMessage: '',
screenshotPath: '',
artifactsJson: '{}',
lastError: '',
retryCount: 0,
expiresAt: null,
claimedAt: null,
roleConfirmedAt: null,
redeemedAt: null,
createdAt,
updatedAt: createdAt,
})
tasks.push({
...task,
skuCode: item.sku_code,
skuName: item.sku_name,
})
}
}
if (order.pay_status !== 'paid') {
return tasks
}
return tasks.map((task) => preparePaidTask(task))
}
function preparePaidTask(task) {
const now = nowIso()
if (['link_generated', 'claimed', 'role_confirmed', 'redeeming', 'redeemed'].includes(task.task_status)) {
return task
}
if (!task.skuCode) {
return updateTask(task.id, {
task_status: 'manual_review',
last_error: '未匹配到 SKU,无法为任务分配 CDK',
updated_at: now,
})
}
if (task.reserved_cdk_id && task.claim_token_id) {
return updateTask(task.id, {
task_status: 'link_generated',
last_error: '',
updated_at: now,
})
}
const reserved = reserveCdkForTask(task.skuCode, task.id)
if (!reserved) {
return updateTask(task.id, {
task_status: 'waiting_inventory',
last_error: '库存不足,等待可用 CDK',
updated_at: now,
})
}
const claimToken = createTaskClaimToken(task.id)
return updateTask(task.id, {
task_status: 'link_generated',
reserved_cdk_id: reserved.id,
claim_token_id: claimToken.id,
last_error: '',
expires_at: claimToken.expired_at,
updated_at: now,
})
}