问题:生成日报后,历史记录中没有显示订单。
原因:
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
246 lines
5.2 KiB
Markdown
246 lines
5.2 KiB
Markdown
# 诊断指南:为什么历史记录中没有日报
|
||
|
||
## 快速诊断
|
||
|
||
运行诊断脚本:
|
||
```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 |