From e107e1eb921e2d56b2286614c4b885d9882c9b92 Mon Sep 17 00:00:00 2001 From: CloseIn Date: Fri, 8 May 2026 12:01:26 +0800 Subject: [PATCH] chore: update OpenAPI spec with new service title and server URL --- docs/openapi.yaml | 53 ++---------------- .../templates/annualReportTemplate.docx | Bin 2010 -> 11300 bytes 2 files changed, 6 insertions(+), 47 deletions(-) diff --git a/docs/openapi.yaml b/docs/openapi.yaml index d96791b..8a1a355 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -1,15 +1,11 @@ openapi: "3.1.0" info: - title: GMP Mock Service API - description: | - Mock 服务,提供基于 Word 模板的文档导出功能。 - 模板使用 poi-tl 的 `{{variable}}` 语法标记占位符, - 业务数据通过 `businessData` 传入。 + title: Service API version: "1.0.0" contact: name: closein servers: - - url: http://localhost:6666 + - url: http://193.112.146.124:6666 description: 本地开发服务器 paths: @@ -17,9 +13,7 @@ paths: post: summary: 导出 Word 文档 description: | - 根据模板 ID 选择模板,填充业务数据后流式返回 `.docx` 文件。 - - 请求成功时直接流式下载文件,失败时返回 JSON 错误体。 + 请求成功时返回文件流,失败时返回 JSON 错误体。 operationId: exportDocx tags: - Docx Export @@ -31,10 +25,10 @@ paths: $ref: '#/components/schemas/DocxExportRequest' example: exportId: "annualReport" - businessData: {} + businessData: { startYear: 2023, endYear: 2024 } responses: "200": - description: 成功 — 流式下载 `.docx` 文件 + description: 成功 — 流式下载文件 content: application/vnd.openxmlformats-officedocument.wordprocessingml.document: schema: @@ -84,7 +78,7 @@ components: description: | 业务数据键值对,用于填充模板中的变量。 当前模板自行定义默认值,后续可改为从此处读取。 - example: {} + example: { } additionalProperties: false ApiError: @@ -101,38 +95,3 @@ components: type: string description: 错误描述 example: "exportId 不能为空" - - # --- 模板定义(非 OpenAPI 标准,用于文档参考) --- - - Template: - type: object - description: 可用模板 - properties: - exportId: - type: string - description: 模板标识 - example: "annualReport" - fileName: - type: string - description: 生成的文件名 - example: "annualReport.docx" - variables: - type: array - description: 模板中可用的占位符变量 - items: - type: string - example: - - "{{title}}" - - "{{companyName}}" - - "{{reportPeriod}}" - - "{{generatedDate}}" - -x-templates: - - exportId: "annualReport" - fileName: "annualReport.docx" - description: 年度工作报告模板,包含标题、公司信息、表格(3 行数据) - variables: - - title - - companyName - - reportPeriod - - generatedDate diff --git a/src/main/resources/templates/annualReportTemplate.docx b/src/main/resources/templates/annualReportTemplate.docx index 1dbee72493ef6c50ab28842b3db86504849173cd..3004bdb48c12cbe287f51f1c306baf49c4d86ca9 100644 GIT binary patch literal 11300 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