use idempotency key for finance export replay

This commit is contained in:
2026-09-23 23:32:56 +08:00
parent 3a2a8d8f79
commit 7a8f9c8968
@@ -112,7 +112,9 @@ async function poll(context, taskId, expected = 'SUCCEEDED', attempts = 45) {
async function createTask(context, type, parameters, suffix, expectedHeaders, expectedTokens = []) {
const body = { exportType: type, format: 'XLSX', taskName: `${context.marker}-${suffix}`, parameters }
const createdResponse = await context.request('POST', '/api/platform/v1/files/export-tasks', body)
const idempotencyKey = `${context.marker}-export-${type}-${suffix}`.slice(0, 128)
const createdResponse = await context.request('POST', '/api/platform/v1/files/export-tasks', body,
context.token, { 'Idempotency-Key': idempotencyKey })
const created = context.apiSuccess(MODULE, `${type} 创建导出任务`, createdResponse,
`type=${type}`, OPTIONS)
const taskId = id(created?.id)
@@ -122,7 +124,8 @@ async function createTask(context, type, parameters, suffix, expectedHeaders, ex
`taskId=${taskId || 'missing'}, status=${created?.status ?? 'missing'}`, OPTIONS)
if (!taskId) return null
const duplicateResponse = await context.request('POST', '/api/platform/v1/files/export-tasks', body)
const duplicateResponse = await context.request('POST', '/api/platform/v1/files/export-tasks', body,
context.token, { 'Idempotency-Key': idempotencyKey })
const duplicate = context.apiSuccess(MODULE, `${type} 重复请求`, duplicateResponse, '', OPTIONS)
context.assert(MODULE, `${type} 60 秒同参请求合并`, duplicateResponse, id(duplicate?.id) === taskId,
`original=${taskId}, duplicate=${id(duplicate?.id) || 'missing'}`, OPTIONS)