# 诊断指南:为什么历史记录中没有日报 ## 快速诊断 运行诊断脚本: ```bash python test_diagnosis.py ``` 这个脚本会检查: 1. ✓ 数据库连接是否正常 2. ✓ 表是否存在 3. ✓ 配置是否创建 4. ✓ 历史记录是否有数据 5. ✓ 订单表中是否有数据 ## 常见问题和解决方案 ### 问题1:历史记录为空 **可能原因:** 1. 还没有生成过日报 2. 生成日报失败,但没有保存失败记录 3. 数据库表没有初始化 **解决方案:** #### 方案1:确保已初始化数据库表 ```bash # 方法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. 检查订单表中是否有数据: ```sql SELECT COUNT(*) FROM t_equipment_charge_order WHERE state = 3; ``` 2. 查看订单的时间范围: ```sql 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'** **原因:** - 数据库表没有初始化 **解决方案:** ```bash # 初始化数据库表 curl -X POST http://localhost:5000/api/init-tables ``` ### 问题3:历史记录中有记录,但无法下载 **可能原因:** 1. 文件路径不正确 2. 文件已被删除 3. 权限问题 **解决方案:** 1. 检查文件是否存在: ```bash # Windows dir public\reports\*.xlsx # Linux/Mac ls -la public/reports/*.xlsx ``` 2. 检查文件路径是否正确 3. 确认文件权限 ## 手动检查数据库 ### 查看历史记录 ```sql 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; ``` ### 查看配置 ```sql SELECT id, config_name, split_type, split_value, is_active, selected_fields, sort_order FROM t_daily_report_config ORDER BY sort_order ASC; ``` ### 查看订单数据统计 ```sql -- 总订单数 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`,确保有以下日志输出: ```python print(f"[日报生成] 开始生成日报") print(f" 配置ID: {config_id}") print(f" 查询到 {len(orders)} 条订单") ``` ### 2. 测试API接口 使用curl测试API: ```bash # 获取配置 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