Files
ylt_diy/诊断指南.md

246 lines
5.2 KiB
Markdown
Raw Normal View History

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