This commit is contained in:
2026-09-20 14:22:12 +08:00
parent 1305753b71
commit 60a41af3ac
10 changed files with 414 additions and 3 deletions
@@ -11,6 +11,7 @@ import {
listPlatformUnifiedOrderFeeDetails,
updatePlatformUnifiedOrderDeclaration,
updatePlatformUnifiedOrderPlanning,
importPlatformLegacyOrders,
} from './unifiedOrders'
vi.mock('@/shared/api/http', () => ({
@@ -25,6 +26,19 @@ describe('unified orders API contract', () => {
vi.mocked(http.put).mockReset()
})
it('uploads the old-system workbook with a retry-safe key', async () => {
vi.mocked(http.post).mockResolvedValue({ data: { total: 1, succeeded: 1, failed: 0, items: [] } })
const file = new File(['xlsx'], 'legacy.xlsx', { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
await expect(importPlatformLegacyOrders(file, 'legacy-key')).resolves.toMatchObject({ succeeded: 1 })
const [path, body, config] = vi.mocked(http.post).mock.calls[0]
expect(path).toBe('/platform/v1/orders/first-leg/legacy-import')
expect(body).toBeInstanceOf(FormData)
expect((body as FormData).get('file')).toBe(file)
expect(config).toEqual({ headers: { 'Content-Type': 'multipart/form-data', 'Idempotency-Key': 'legacy-key' } })
})
it('uses the C02 platform orders endpoint and contract filters', async () => {
vi.mocked(http.get).mockResolvedValue({ data: { records: [], page: '2', size: '20', total: '0', pages: '0' } })
await expect(listPlatformUnifiedOrders({
@@ -611,6 +611,37 @@ export interface UnifiedOrderRemarksUpdateRequest {
customerServiceRemark: string | null
}
export interface LegacyOrderImportItem {
excelRow: number
success: boolean
legacyInboundCode: string | null
orderId: number | string | null
orderNo: string | null
errorMessage: string | null
}
export interface LegacyOrderImportResult {
total: number
succeeded: number
failed: number
items: LegacyOrderImportItem[]
}
export function importPlatformLegacyOrders(file: File, idempotencyKey: string) {
const form = new FormData()
form.append('file', file)
return http.post<ApiEnvelope<LegacyOrderImportResult>, ApiEnvelope<LegacyOrderImportResult>>(
'/platform/v1/orders/first-leg/legacy-import',
form,
{ headers: { 'Content-Type': 'multipart/form-data', 'Idempotency-Key': idempotencyKey } },
).then(unwrapApiResponse)
}
export function createLegacyOrderImportIdempotencyKey() {
const uuid = globalThis.crypto?.randomUUID?.()
return uuid ? `legacy-order-import-${uuid}` : `legacy-order-import-${Date.now()}-${Math.random().toString(36).slice(2)}`
}
export interface UnifiedOrderRemarksUpdateResponse {
version: number
customerRemark: string | null