通知系统-1

This commit is contained in:
yml2213
2026-05-14 17:29:12 +08:00
parent 91d74b3e59
commit b6c493d5e7
22 changed files with 1314 additions and 11 deletions
@@ -5,6 +5,7 @@ import {
} from '../../repositories/fulfillment-profile-repo.js'
import { reserveInventoryForTask } from './inventory-service.js'
import { createTaskClaimToken } from '../claim/claim-service.js'
import { notifyTaskAutoManualReview } from '../notification/domain-notifications.js'
import { nowIso } from '../../utils/time.js'
import { randomId } from '../../utils/random.js'
@@ -227,21 +228,35 @@ async function preparePaidTask(task) {
}
if (!task.requires_claim || String(task.executor_key || '').trim() === 'manual_dispatch') {
return updateTask(task.id, {
const lastError = task.last_error || '当前任务需要人工履约处理'
const updatedTask = await updateTask(task.id, {
task_status: 'manual_review',
inventory_status: 'not_required',
user_action_status: 'not_required',
last_error: task.last_error || '当前任务需要人工履约处理',
last_error: lastError,
updated_at: now,
})
await notifyTaskAutoManualReview({
task: updatedTask || task,
reason: lastError,
source: 'manual_dispatch_profile',
})
return updatedTask
}
if (!inventorySkuCode) {
return updateTask(task.id, {
const lastError = '未匹配到 SKU,无法为任务分配库存凭据'
const updatedTask = await updateTask(task.id, {
task_status: 'manual_review',
last_error: '未匹配到 SKU,无法为任务分配库存凭据',
last_error: lastError,
updated_at: now,
})
await notifyTaskAutoManualReview({
task: updatedTask || task,
reason: lastError,
source: 'missing_sku',
})
return updatedTask
}
if (task.primary_inventory_item_id && task.primary_claim_token_id) {
@@ -253,11 +268,18 @@ async function preparePaidTask(task) {
}
if (!primaryRequirement?.credentialType) {
return updateTask(task.id, {
const lastError = '履约档案未配置库存要求,无法自动分配库存'
const updatedTask = await updateTask(task.id, {
task_status: 'manual_review',
last_error: '履约档案未配置库存要求,无法自动分配库存',
last_error: lastError,
updated_at: now,
})
await notifyTaskAutoManualReview({
task: updatedTask || task,
reason: lastError,
source: 'missing_inventory_requirement',
})
return updatedTask
}
const reserved = await reserveInventoryForTask({