升级外部生成为正式任务列表

将 external_generation_job 扩展为含价格、确认时间、退款流水和事件审计的正式生成任务事实源

新增外部生成任务列表与确认 BFF,并让平台入口按后端任务补弹完成或失败提示

保护画布生成队列超时、快照回写和自动保存覆盖场景

将 worker 计费退款流水写入 externalGenerationJobId,并补充冷备份后 worker/controller 恢复守护
This commit is contained in:
2026-06-24 15:17:12 +08:00
parent ed6b17442a
commit 73a17193d4
66 changed files with 2416 additions and 122 deletions
@@ -1,6 +1,9 @@
import type {
ExternalGenerationJobStatusResponse,
ExternalGenerationQueueOverviewResponse,
ExternalGenerationTaskAcknowledgeRequest,
ExternalGenerationTaskAcknowledgeResponse,
ExternalGenerationTaskListResponse,
} from '../../../packages/shared/src/contracts/externalGeneration';
import { BACKGROUND_AUTH_REQUEST_OPTIONS, requestJson } from '../apiClient';
@@ -43,7 +46,54 @@ export async function getExternalGenerationJobStatus(
);
}
export async function listExternalGenerationTasks(
options: {
limit?: number;
includeAcknowledgedTerminal?: boolean;
signal?: AbortSignal;
} = {},
) {
const params = new URLSearchParams();
if (typeof options.limit === 'number') {
params.set('limit', String(options.limit));
}
if (typeof options.includeAcknowledgedTerminal === 'boolean') {
params.set(
'includeAcknowledgedTerminal',
options.includeAcknowledgedTerminal ? 'true' : 'false',
);
}
const query = params.toString();
return requestJson<ExternalGenerationTaskListResponse>(
`${EXTERNAL_GENERATION_API_BASE}/jobs${query ? `?${query}` : ''}`,
{
method: 'GET',
signal: options.signal,
},
'读取生成任务列表失败',
EXTERNAL_GENERATION_READ_OPTIONS,
);
}
export async function acknowledgeExternalGenerationTasks(
payload: ExternalGenerationTaskAcknowledgeRequest,
signal?: AbortSignal,
) {
return requestJson<ExternalGenerationTaskAcknowledgeResponse>(
`${EXTERNAL_GENERATION_API_BASE}/jobs/acknowledge`,
{
method: 'POST',
body: JSON.stringify(payload),
signal,
},
'确认生成任务通知失败',
EXTERNAL_GENERATION_READ_OPTIONS,
);
}
export const externalGenerationClient = {
getQueueOverview: getExternalGenerationQueueOverview,
getJobStatus: getExternalGenerationJobStatus,
listTasks: listExternalGenerationTasks,
acknowledgeTasks: acknowledgeExternalGenerationTasks,
};
@@ -1,5 +1,7 @@
export {
acknowledgeExternalGenerationTasks,
externalGenerationClient,
getExternalGenerationJobStatus,
getExternalGenerationQueueOverview,
listExternalGenerationTasks,
} from './externalGenerationClient';