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

246 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 诊断指南:为什么历史记录中没有日报
## 快速诊断
运行诊断脚本:
```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