# expense-report-deploy **Repository Path**: quligang/expense-report-deploy ## Basic Information - **Project Name**: expense-report-deploy - **Description**: 发票报销 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-24 - **Last Updated**: 2026-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 费用报销表格生成接口 这是一个基于Flask的API服务,用于将dify工作流的JSON输出写入Excel模板,生成费用报销表格。 ## 功能说明 - 接收dify工作流的JSON数据 - 解析报销信息(费用类型、日期、金额等) - 将数据写入Excel模板 - 返回生成的Excel文件 ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 启动服务 ```bash python app.py ``` 服务将在 `http://localhost:5000` 启动 ## API接口 ### 1. 生成报销表格 - **URL**: `/api/generate-expense-report` - **方法**: `POST` - **Content-Type**: `application/json` **请求体格式(支持两种):** 方式1:完整dify响应 ```json { "text": "[{\"type\": \"滴滴出行\", \"日期\": \"2026-03-30\", ...}]", "usage": {...}, "finish_reason": "stop" } ``` 方式2:直接传递数组 ```json [ { "type": "滴滴出行", "日期": "2026-03-30", "出差/报销人员": "张三", "起始点(市县)": "济南市", "目的地(市县)": "淄博市", "出差/报销事由": "客户拜访", "费用发生明细": "费用", "报销金额": 56.00, "有无发票": "有", "费用归属": "研发部" } ] ``` **响应**: Excel文件(二进制流) ### 2. 健康检查 - **URL**: `/api/health` - **方法**: `GET` **响应示例**: ```json { "status": "ok", "message": "费用报销表格生成服务运行中" } ``` ### 3. 测试接口 - **URL**: `/api/test` - **方法**: `POST` - **说明**: 只解析数据不生成文件,用于调试 **响应示例**: ```json { "success": true, "data": [...], "count": 2 } ``` ### 4. 合并发票接口 - **URL**: `/api/merge-invoices` - **方法**: `POST` - **Content-Type**: `multipart/form-data` - **参数**: `files`(多个文件,支持 `.pdf` / `.png` / `.jpg` / `.jpeg` 等发票文件) **功能**: 将上传的 PDF/图片发票按类型分组合并成一个 PDF: - 类型顺序:出行(打车/客运)→ 餐饮 → 通行费 → 铁路(火车票)→ 其他(图片/无法分类,放末尾) - 组内保持上传顺序;每个发票占一页,PDF 保持原页面尺寸,图片按宽高比适配 **请求示例**: ```bash curl -F "files=@发票1.pdf" -F "files=@发票2.png" \ http://localhost:5000/api/merge-invoices -o 发票合计.pdf ``` **响应**: PDF 文件(`application/pdf` 二进制流) ### 5. 付款截图合并接口 - **URL**: `/api/merge-payment-screenshots` - **方法**: `POST` - **Content-Type**: `application/json` **功能**: 根据图片 URL 列表 JSON,下载图片并按 4 列 × 3 行网格排版成 PDF(每页 12 张,A4 纵向) **请求体格式**: ```json { "llm_output": "[{\"image\":\"图片1\",\"url\":\"http://...\",\"datetime\":\"2026-03-30 00:13:17\",\"description\":\"滴滴出行支付时间\"},{\"image\":\"图片2\",\"url\":\"http://...\",\"datetime\":\"2026-05-06 17:13:40\",\"description\":\"山东高速账单支付时间\"}]" } ``` 或直接传数组: ```json [ { "image": "图片1", "url": "http://192.168.3.252/files/xxx/file-preview?...", "datetime": "2026-03-30 00:13:17", "description": "滴滴出行支付时间" } ] ``` **响应**: PDF 文件(`application/pdf` 二进制流),图片按 4×3 网格排版,每页 12 张 ## 数据字段说明 | 字段名 | 说明 | 示例 | |--------|------|------| | type | 费用类型 | 滴滴出行、过路过桥费 | | 日期 | 费用发生日期 | 2026-03-30 | | 出差/报销人员 | 报销人姓名 | 张三 | | 起始点(市县) | 出发地点 | 济南市 | | 目的地(市县) | 目的地 | 淄博市 | | 出差/报销事由 | 报销原因 | 客户拜访 | | 费用发生明细 | 费用详细说明 | 订单金额53.00 | | 报销金额 | 报销金额(数字) | 56.00 | | 有无发票 | 是否有发票 | 有/无 | | 费用归属 | 费用归属部门 | 研发部 | ## 在dify中使用 1. 在dify工作流中添加 **HTTP请求** 节点 2. 配置如下: - **URL**: `http://你的服务器地址:5000/api/generate-expense-report` - **方法**: `POST` - **Headers**: `Content-Type: application/json` - **Body**: 将LLM输出节点的结果传入 示例配置: ``` URL: http://localhost:5000/api/generate-expense-report Method: POST Body: {{llm_output}} ``` ## 测试 运行测试脚本: ```bash # 先启动服务 python app.py # 在另一个终端运行测试 python test_request.py ``` ## 目录结构 ``` . ├── app.py # Flask应用主程序 ├── test_request.py # 测试脚本 ├── requirements.txt # 依赖列表 ├── 费用报销表格模板.xlsx # Excel模板文件 └── output/ # 生成的文件输出目录 ``` ## 注意事项 1. 确保 `费用报销表格模板.xlsx` 文件存在于同一目录 2. 模板从第4行开始填写数据(前3行为标题) 3. 生成的文件保存在 `output/` 目录,文件名带时间戳 4. 支持CORS跨域请求 ## 故障排查 - 如果报错 "模板文件不存在",检查模板文件路径 - 如果端口5000被占用,修改 `app.py` 最后一行的端口号 - 如果数据格式错误,使用 `/api/test` 接口先测试数据解析