Files
ylt_diy/问题已定位.md
user9994793890 bce2f363b5 fix: 创建强制修复脚本,解决file_path为null的问题
问题定位:API返回的file_path字段为null,导致前端没有显示下载按钮。

解决方案:

1. 新增 force_rebuild.py 强制修复脚本:
   - 删除旧的配置表和历史表
   - 重新创建表结构(确保file_path字段正确)
   - 验证表结构是否完整
   - 显示file_path字段的类型

2. 新增 问题已定位.md 文档:
   - 详细的问题分析
   - 5个修复步骤
   - 4种验证方法
   - 手动测试SQL语句
   - 需要提供的信息清单

使用步骤:
1. 运行 python force_rebuild.py
2. 重启服务 python app.py
3. 重新创建配置
4. 生成日报
5. 查看历史记录(应该有下载按钮)

注意:修复会删除所有配置和历史记录,需要重新创建配置。

Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 9894087
2026-07-09 13:21:03 +08:00

3.3 KiB
Raw Blame History

问题已定位:file_path 为 null

问题原因

从API返回的数据可以看到:

{
  "id": 1752038179055,
  "status": 1,
  "file_path": null,  // ❌ 这里是 null!
  ...
}

file_path 是 null,所以前端没有显示下载按钮。

解决方案

步骤1:运行强制修复脚本

python force_rebuild.py

这个脚本会:

  1. 删除旧的配置表和历史表
  2. 重新创建表结构
  3. 验证 file_path 字段是否存在

步骤2:重启服务

python app.py

步骤3:重新创建配置

由于旧表被删除,需要重新创建配置:

  1. 访问 http://localhost:5000
  2. 切换到"配置管理"标签
  3. 创建新的配置

步骤4:生成日报

  1. 切换到"日报生成"标签
  2. 选择配置和时间范围
  3. 点击"生成日报"
  4. 查看服务器控制台的日志

应该看到:

[日报生成] Excel文件已生成: /reports/daily_report_xxx.xlsx
[日报生成] 准备保存历史记录,file_path=/reports/daily_report_xxx.xlsx
[保存历史] 准备保存历史记录
  ID: xxx
  file_path: '/reports/daily_report_xxx.xlsx'
  status: 1
[保存历史] 执行SQL插入...
[保存历史] 插入完成,返回ID: xxx

步骤5:验证修复

方法1:查看API返回

在浏览器中访问:

http://localhost:5000/api/report/history

检查 file_path 字段是否有值(不是 null)。

方法2:查看前端页面

  1. 切换到"历史记录"标签
  2. 应该能看到下载按钮
  3. 点击"下载"按钮应该能下载Excel文件

如果还是不行

检查1:查看服务器日志

在运行 python app.py 的窗口中,查看完整的日志输出。

请复制完整的日志,特别是:

  • [日报生成] 开头的日志
  • [保存历史] 开头的日志

检查2:检查文件是否存在

# Windows
dir public\reports\*.xlsx

确认 Excel 文件是否真的生成了。

检查3:手动测试插入

如果有MySQL客户端,可以手动测试插入:

-- 连接到数据库
mysql -h haoslm2.xicp.net -P 10216 -u root -p

-- 手动插入测试数据
INSERT INTO t_daily_report_history 
(id, report_date, start_time, end_time, split_type, split_value, split_name, 
 config_id, total_orders, total_amount, sum_results, file_path, status, create_time)
VALUES 
(9999999999, '2025-01-08', '2025-01-07 08:00:00', '2025-01-08 08:00:00', 
 'company_id', '123', '测试企业', 1234567890, 10, 100.00, '{}', 
 '/reports/test.xlsx', 1, NOW());

-- 查询是否成功
SELECT id, file_path, status FROM t_daily_report_history WHERE id = 9999999999;

-- 如果file_path有值,说明表结构没问题
-- 如果file_path是null,说明数据库有问题

检查4:检查Doris数据库特性

由于使用的是 Apache Doris 数据库,可能有特殊的存储行为。

检查表是否真的创建成功:

DESCRIBE t_daily_report_history;

确认 file_path 字段的类型是 VARCHAR(500)。

请提供以下信息

如果问题仍然存在,请提供:

  1. force_rebuild.py 的完整输出
  2. 服务器控制台的日志(从生成到查看历史)
  3. API返回的JSON数据(刷新后重新获取)
  4. public/reports/ 目录的文件列表
  5. 截图:历史记录页面的截图

最后更新: 2025-01-08