Files
ylt_diy/诊断指南.md
user9994793890 9fa2745daa fix: 修复日报生成后历史记录不显示的问题
问题:生成日报后,历史记录中没有显示订单。

原因:
1. 如果时间范围内没有订单数据,函数直接返回失败,没有保存失败记录
2. 缺少详细的日志输出,难以诊断问题

修复内容:

1. lib/report_generator.py:
   - 即使没有订单数据,也保存失败记录到历史表(status=0)
   - 添加详细的日志输出:
     * 开始生成时的配置信息
     * 查询到的订单数量
     * 生成成功的详细信息
     * 生成失败的错误堆栈
   - 改进异常处理,确保失败记录一定被保存

2. 新增 test_diagnosis.py:
   - 自动检查数据库连接
   - 检查表是否存在
   - 查看配置和历史记录
   - 检查订单数据统计
   - 提供诊断建议

3. 新增 诊断指南.md:
   - 常见问题和解决方案
   - 手动检查数据库的SQL语句
   - 调试技巧和API测试方法

现在用户可以:
1. 运行 python test_diagnosis.py 快速诊断问题
2. 查看服务器控制台的详细日志
3. 参考诊断指南排查问题
4. 即使生成失败,也能在历史记录中看到记录

Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 9894087
2026-07-09 12:54:22 +08:00

5.2 KiB
Raw Blame History

诊断指南:为什么历史记录中没有日报

快速诊断

运行诊断脚本:

python test_diagnosis.py

这个脚本会检查:

  1. ✓ 数据库连接是否正常
  2. ✓ 表是否存在
  3. ✓ 配置是否创建
  4. ✓ 历史记录是否有数据
  5. ✓ 订单表中是否有数据

常见问题和解决方案

问题1:历史记录为空

可能原因:

  1. 还没有生成过日报
  2. 生成日报失败,但没有保存失败记录
  3. 数据库表没有初始化

解决方案:

方案1:确保已初始化数据库表

# 方法1:浏览器访问
http://localhost:5000/api/init-tables

# 方法2:curl命令
curl -X POST http://localhost:5000/api/init-tables

方案2:创建配置并生成日报

  1. 访问 http://localhost:5000
  2. 点击"配置管理"标签
  3. 点击"创建配置"
  4. 填写配置信息:
    • 配置名称:测试配置
    • 拆分方式:选择"按企业ID"或"按用户ID"
    • 选择企业/用户:从下拉列表选择
    • 选择字段:至少勾选一个字段
  5. 点击"保存"
  6. 切换到"日报生成"标签
  7. 选择刚创建的配置
  8. 选择时间范围(点击"昨天"按钮)
  9. 点击"生成日报"
  10. 查看结果

方案3:查看服务器日志

启动服务后,控制台会输出详细日志:

[日报生成] 开始生成日报
  配置ID: 1234567890
  配置名称: 测试配置
  拆分方式: company_id = 123
  时间范围: 2025-01-07 08:00:00 至 2025-01-08 08:00:00
  选择字段: 5 个
[日报生成] 查询到 0 条订单
[日报生成] ✗ 生成失败: 时间范围内没有符合条件的订单数据
[日报生成] 已保存失败记录到历史表

问题2:生成日报失败

错误信息:时间范围内没有符合条件的订单数据

原因:

  • 选择的时间范围内没有订单
  • 或者订单状态不是3(已完成)
  • 或者企业/用户ID不正确

解决方案:

  1. 检查订单表中是否有数据:

    SELECT COUNT(*) FROM t_equipment_charge_order WHERE state = 3;
    
  2. 查看订单的时间范围:

    SELECT MIN(report_time), MAX(report_time) 
    FROM t_equipment_charge_order 
    WHERE state = 3;
    
  3. 调整生成日报的时间范围,确保包含订单数据

  4. 确认企业/用户ID是否正确

错误信息:Unknown column 'xxx'

原因:

  • 选择的字段在订单表中不存在

解决方案:

  1. 编辑配置
  2. 取消选择不存在的字段
  3. 保存配置

错误信息:Unknown table 't_daily_report_history'

原因:

  • 数据库表没有初始化

解决方案:

# 初始化数据库表
curl -X POST http://localhost:5000/api/init-tables

问题3:历史记录中有记录,但无法下载

可能原因:

  1. 文件路径不正确
  2. 文件已被删除
  3. 权限问题

解决方案:

  1. 检查文件是否存在:

    # Windows
    dir public\reports\*.xlsx
    
    # Linux/Mac
    ls -la public/reports/*.xlsx
    
  2. 检查文件路径是否正确

  3. 确认文件权限

手动检查数据库

查看历史记录

SELECT 
    id,
    report_date,
    start_time,
    end_time,
    split_type,
    split_value,
    total_orders,
    total_amount,
    status,
    file_path,
    create_time
FROM t_daily_report_history 
ORDER BY create_time DESC;

查看配置

SELECT 
    id,
    config_name,
    split_type,
    split_value,
    is_active,
    selected_fields,
    sort_order
FROM t_daily_report_config 
ORDER BY sort_order ASC;

查看订单数据统计

-- 总订单数
SELECT COUNT(*) as total FROM t_equipment_charge_order WHERE state = 3;

-- 时间范围
SELECT 
    MIN(report_time) as earliest,
    MAX(report_time) as latest
FROM t_equipment_charge_order 
WHERE state = 3;

-- 按企业统计
SELECT 
    company_id,
    COUNT(*) as order_count
FROM t_equipment_charge_order 
WHERE state = 3
GROUP BY company_id
ORDER BY order_count DESC
LIMIT 10;

调试技巧

1. 启用详细日志

编辑 lib/report_generator.py,确保有以下日志输出:

print(f"[日报生成] 开始生成日报")
print(f"  配置ID: {config_id}")
print(f"  查询到 {len(orders)} 条订单")

2. 测试API接口

使用curl测试API:

# 获取配置
curl http://localhost:5000/api/config

# 获取历史记录
curl http://localhost:5000/api/report/history

# 生成日报
curl -X POST http://localhost:5000/api/report/generate \
  -H "Content-Type: application/json" \
  -d '{"config_id": 1234567890, "start_time": "2025-01-07 08:00:00", "end_time": "2025-01-08 08:00:00"}'

3. 查看浏览器控制台

  1. 按F12打开开发者工具
  2. 切换到"Console"标签
  3. 生成日报
  4. 查看是否有JavaScript错误
  5. 查看Network标签,检查API请求是否成功

4. 查看服务器日志

服务器控制台会输出所有操作日志,包括:

  • 数据库查询
  • 文件生成
  • 错误信息
  • 异常堆栈

联系支持

如果以上方法都无法解决问题,请提供以下信息:

  1. 诊断脚本的输出结果
  2. 服务器控制台的完整日志
  3. 浏览器控制台的错误信息
  4. 数据库中的配置和历史记录数据
  5. 订单表的数据统计

最后更新: 2025-01-08