问题:生成日报后,历史记录中没有显示订单。
原因:
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
5.2 KiB
5.2 KiB
诊断指南:为什么历史记录中没有日报
快速诊断
运行诊断脚本:
python test_diagnosis.py
这个脚本会检查:
- ✓ 数据库连接是否正常
- ✓ 表是否存在
- ✓ 配置是否创建
- ✓ 历史记录是否有数据
- ✓ 订单表中是否有数据
常见问题和解决方案
问题1:历史记录为空
可能原因:
- 还没有生成过日报
- 生成日报失败,但没有保存失败记录
- 数据库表没有初始化
解决方案:
方案1:确保已初始化数据库表
# 方法1:浏览器访问
http://localhost:5000/api/init-tables
# 方法2:curl命令
curl -X POST http://localhost:5000/api/init-tables
方案2:创建配置并生成日报
- 访问 http://localhost:5000
- 点击"配置管理"标签
- 点击"创建配置"
- 填写配置信息:
- 配置名称:测试配置
- 拆分方式:选择"按企业ID"或"按用户ID"
- 选择企业/用户:从下拉列表选择
- 选择字段:至少勾选一个字段
- 点击"保存"
- 切换到"日报生成"标签
- 选择刚创建的配置
- 选择时间范围(点击"昨天"按钮)
- 点击"生成日报"
- 查看结果
方案3:查看服务器日志
启动服务后,控制台会输出详细日志:
[日报生成] 开始生成日报
配置ID: 1234567890
配置名称: 测试配置
拆分方式: company_id = 123
时间范围: 2025-01-07 08:00:00 至 2025-01-08 08:00:00
选择字段: 5 个
[日报生成] 查询到 0 条订单
[日报生成] ✗ 生成失败: 时间范围内没有符合条件的订单数据
[日报生成] 已保存失败记录到历史表
问题2:生成日报失败
错误信息:时间范围内没有符合条件的订单数据
原因:
- 选择的时间范围内没有订单
- 或者订单状态不是3(已完成)
- 或者企业/用户ID不正确
解决方案:
-
检查订单表中是否有数据:
SELECT COUNT(*) FROM t_equipment_charge_order WHERE state = 3; -
查看订单的时间范围:
SELECT MIN(report_time), MAX(report_time) FROM t_equipment_charge_order WHERE state = 3; -
调整生成日报的时间范围,确保包含订单数据
-
确认企业/用户ID是否正确
错误信息:Unknown column 'xxx'
原因:
- 选择的字段在订单表中不存在
解决方案:
- 编辑配置
- 取消选择不存在的字段
- 保存配置
错误信息:Unknown table 't_daily_report_history'
原因:
- 数据库表没有初始化
解决方案:
# 初始化数据库表
curl -X POST http://localhost:5000/api/init-tables
问题3:历史记录中有记录,但无法下载
可能原因:
- 文件路径不正确
- 文件已被删除
- 权限问题
解决方案:
-
检查文件是否存在:
# Windows dir public\reports\*.xlsx # Linux/Mac ls -la public/reports/*.xlsx -
检查文件路径是否正确
-
确认文件权限
手动检查数据库
查看历史记录
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. 查看浏览器控制台
- 按F12打开开发者工具
- 切换到"Console"标签
- 生成日报
- 查看是否有JavaScript错误
- 查看Network标签,检查API请求是否成功
4. 查看服务器日志
服务器控制台会输出所有操作日志,包括:
- 数据库查询
- 文件生成
- 错误信息
- 异常堆栈
联系支持
如果以上方法都无法解决问题,请提供以下信息:
- 诊断脚本的输出结果
- 服务器控制台的完整日志
- 浏览器控制台的错误信息
- 数据库中的配置和历史记录数据
- 订单表的数据统计
最后更新: 2025-01-08