彻底重构-4
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user