彻底重构-4

This commit is contained in:
yml
2026-04-09 15:51:24 +08:00
parent 60054adcc4
commit 4c395103a9
28 changed files with 1917 additions and 404 deletions
@@ -1,33 +0,0 @@
import { assignReservedCdk, findFirstAvailableCdkBySkuCode, releaseReservedCdk } from '../../repositories/cdk-repo.js'
import { nowIso } from '../../utils/time.js'
export async function reserveCdkForTask({ skuCode, taskId, credentialType = 'tencent_code', roleKey = 'primary_code' }) {
if (!skuCode) {
return null
}
const available = await findFirstAvailableCdkBySkuCode(skuCode, credentialType)
if (!available) {
return null
}
return assignReservedCdk(available.id, taskId, nowIso(), roleKey)
}
export async function releaseReservedCdks(cdkIds = [], updatedAt = nowIso()) {
const released = []
for (const cdkId of cdkIds) {
if (!cdkId) {
continue
}
const item = await releaseReservedCdk(cdkId, updatedAt)
if (item) {
released.push(item)
}
}
return released
}
@@ -4,7 +4,7 @@ import {
listFulfillmentProfileRequirements,
resolveFulfillmentBinding,
} from '../../repositories/fulfillment-profile-repo.js'
import { reserveCdkForTask } from './cdk-service.js'
import { reserveInventoryForTask } from './inventory-service.js'
import { createTaskClaimToken } from '../claim/claim-service.js'
import { nowIso } from '../../utils/time.js'
import { randomId } from '../../utils/random.js'
@@ -125,7 +125,7 @@ async function preparePaidTask(task) {
if (!task.skuCode) {
return updateTask(task.id, {
task_status: 'manual_review',
last_error: '未匹配到 SKU,无法为任务分配 CDK',
last_error: '未匹配到 SKU,无法为任务分配库存凭据',
updated_at: now,
})
}
@@ -146,7 +146,7 @@ async function preparePaidTask(task) {
})
}
const reserved = await reserveCdkForTask({
const reserved = await reserveInventoryForTask({
skuCode: task.skuCode,
taskId: task.id,
credentialType: primaryRequirement.credentialType,
@@ -157,7 +157,7 @@ async function preparePaidTask(task) {
return updateTask(task.id, {
task_status: 'waiting_inventory',
inventory_status: 'pending',
last_error: '库存不足,等待可用 CDK',
last_error: '库存不足,等待可用库存凭据',
updated_at: now,
})
}
@@ -188,8 +188,18 @@ function resolvePaidTaskStatus(profile) {
}
function parseTaskContext(task) {
const value = task?.context_json
if (!value) {
return {}
}
if (typeof value === 'object') {
return value
}
try {
return JSON.parse(String(task?.context_json || '{}'))
return JSON.parse(String(value || '{}'))
} catch {
return {}
}
@@ -0,0 +1,37 @@
import {
assignReservedInventoryItem,
findFirstAvailableInventoryItemBySkuCode,
releaseReservedInventoryItem,
} from '../../repositories/inventory-repo.js'
import { nowIso } from '../../utils/time.js'
export async function reserveInventoryForTask({ skuCode, taskId, credentialType = 'tencent_code', roleKey = 'primary_code' }) {
if (!skuCode) {
return null
}
const available = await findFirstAvailableInventoryItemBySkuCode(skuCode, credentialType)
if (!available) {
return null
}
return assignReservedInventoryItem(available.id, taskId, nowIso(), roleKey)
}
export async function releaseReservedInventoryItems(inventoryItemIds = [], updatedAt = nowIso()) {
const released = []
for (const inventoryItemId of inventoryItemIds) {
if (!inventoryItemId) {
continue
}
const item = await releaseReservedInventoryItem(inventoryItemId, updatedAt)
if (item) {
released.push(item)
}
}
return released
}