openapi: 3.0.3 info: title: Order Batch Import File Internal API version: 1.0.0 description: >- Order批量导入源文件与错误报告均为客户所有的不可变XLSX对象;businessId固定为Order生成的batchNo。 File只保存并校验对象归属,不复制导入任务状态。 x-lifecycle-owner: ORDER x-file-object-semantics: IMMUTABLE_CREATE_ONLY paths: /api/merchant/v1/files/order-batch-imports/{batchNo}/error-reports/{fileId}: get: summary: 客户下载本客户批量导入错误报告 description: 需要merchant:order:create;客户作用域只取登录态,文件类别固定ORDER_BATCH_IMPORT_ERROR_REPORT。 security: [{bearerAuth: []}] parameters: - {$ref: '#/components/parameters/BatchNo'} - {$ref: '#/components/parameters/FileId'} responses: '200': description: 精确归属的XLSX错误报告 headers: Cache-Control: {schema: {type: string, enum: [no-store]}} Content-Disposition: {schema: {type: string}} content: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: {type: string, format: binary} /internal/file/v1/business-files/{tenantId}/{businessType}/{batchNo}: post: summary: Order上传批量导入源文件或错误报告 security: [{internalServiceToken: []}] parameters: - {$ref: '#/components/parameters/OperatorId'} - {$ref: '#/components/parameters/TenantId'} - {$ref: '#/components/parameters/BusinessType'} - {$ref: '#/components/parameters/BatchNo'} requestBody: required: true content: multipart/form-data: schema: type: object required: [file] properties: file: type: string format: binary description: 有效XLSX文件,最大5MiB responses: '200': {$ref: '#/components/responses/Metadata'} /internal/file/v1/business-files/{tenantId}/{businessType}/{batchNo}/{fileId}: get: summary: Order精确校验批量导入文件元数据 security: [{internalServiceToken: []}] parameters: - {$ref: '#/components/parameters/TenantId'} - {$ref: '#/components/parameters/BusinessType'} - {$ref: '#/components/parameters/BatchNo'} - {$ref: '#/components/parameters/FileId'} responses: '200': {$ref: '#/components/responses/Metadata'} /internal/file/v1/business-files/{tenantId}/{businessType}/{batchNo}/{fileId}/content: get: summary: Order下载批量导入源文件或错误报告 security: [{internalServiceToken: []}] parameters: - {$ref: '#/components/parameters/TenantId'} - {$ref: '#/components/parameters/BusinessType'} - {$ref: '#/components/parameters/BatchNo'} - {$ref: '#/components/parameters/FileId'} responses: '200': description: 精确归属的XLSX附件;错误客户、类别、batchNo或fileId不得命中 headers: Cache-Control: {schema: {type: string, enum: [no-store]}} Content-Disposition: {schema: {type: string}} content: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: schema: {type: string, format: binary} components: securitySchemes: bearerAuth: {type: http, scheme: bearer, bearerFormat: JWT} internalServiceToken: {type: apiKey, in: header, name: X-Internal-Service-Token} parameters: OperatorId: name: X-Operator-Id in: header required: true schema: {$ref: '#/components/schemas/Id'} TenantId: name: tenantId in: path required: true description: 当前客户ID,必须大于0 schema: {$ref: '#/components/schemas/Id'} BusinessType: name: businessType in: path required: true schema: {type: string, enum: [ORDER_BATCH_IMPORT_SOURCE, ORDER_BATCH_IMPORT_ERROR_REPORT]} BatchNo: name: batchNo in: path required: true schema: {type: string, pattern: '^OBI-[0-9A-F]{20}$'} FileId: name: fileId in: path required: true schema: {$ref: '#/components/schemas/Id'} responses: Metadata: description: 客户批量导入文件元数据 content: application/json: schema: type: object required: [code, data] properties: code: {type: string, enum: ['200']} data: {$ref: '#/components/schemas/Metadata'} schemas: Id: {type: string, pattern: '^[1-9][0-9]*$'} Metadata: type: object required: [fileId, ownerScope, tenantId, businessType, businessId, fileName, sha256, contentType, sizeBytes] properties: fileId: {$ref: '#/components/schemas/Id'} ownerScope: {type: string, enum: [CUSTOMER]} tenantId: {$ref: '#/components/schemas/Id'} businessType: {type: string, enum: [ORDER_BATCH_IMPORT_SOURCE, ORDER_BATCH_IMPORT_ERROR_REPORT]} businessId: {type: string, pattern: '^OBI-[0-9A-F]{20}$'} fileName: {type: string} sha256: {type: string, pattern: '^[0-9a-f]{64}$'} contentType: {type: string, enum: [application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]} sizeBytes: {type: integer, format: int64, minimum: 1, maximum: 5242880} createdAt: {type: string, description: 持久化上传时间LocalDateTime,无时区偏移}