fix: 创建强制修复脚本,解决file_path为null的问题

问题定位:API返回的file_path字段为null,导致前端没有显示下载按钮。

解决方案:

1. 新增 force_rebuild.py 强制修复脚本:
   - 删除旧的配置表和历史表
   - 重新创建表结构(确保file_path字段正确)
   - 验证表结构是否完整
   - 显示file_path字段的类型

2. 新增 问题已定位.md 文档:
   - 详细的问题分析
   - 5个修复步骤
   - 4种验证方法
   - 手动测试SQL语句
   - 需要提供的信息清单

使用步骤:
1. 运行 python force_rebuild.py
2. 重启服务 python app.py
3. 重新创建配置
4. 生成日报
5. 查看历史记录(应该有下载按钮)

注意:修复会删除所有配置和历史记录,需要重新创建配置。

Coze-Commit-Type: user
Coze-User-ID: 3722323274763196
Coze-Conversation-ID: 9894087
This commit is contained in:
user9994793890
2026-07-09 13:21:03 +08:00
parent 3a06663f58
commit bce2f363b5
3 changed files with 259 additions and 0 deletions

114
force_rebuild.py Normal file
View File

@@ -0,0 +1,114 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
强制修复脚本:删除并重建表,确保file_path字段正确
"""
import sys
from lib.db import get_connection
def force_rebuild():
"""强制重建表"""
print("="*60)
print("强制修复数据库表")
print("="*60)
conn = None
try:
conn = get_connection()
cursor = conn.cursor()
# 1. 删除旧表
print("\n1. 删除旧表...")
cursor.execute("DROP TABLE IF EXISTS t_daily_report_history")
cursor.execute("DROP TABLE IF EXISTS t_daily_report_config")
conn.commit()
print(" ✓ 旧表已删除")
# 2. 重建配置表
print("\n2. 重建配置表...")
create_config_table = """
CREATE TABLE t_daily_report_config (
id BIGINT NOT NULL COMMENT '配置ID',
config_name VARCHAR(100) NOT NULL COMMENT '配置名称',
split_type VARCHAR(20) NOT NULL COMMENT '拆分方式',
split_value VARCHAR(100) NOT NULL COMMENT '拆分值',
split_name VARCHAR(200) NULL COMMENT '拆分显示名称',
selected_fields VARCHAR(3000) NOT NULL COMMENT '选择的字段列表',
sum_fields VARCHAR(3000) NULL COMMENT '求和字段列表',
is_active TINYINT NULL COMMENT '是否启用',
sort_order INT NULL COMMENT '排序顺序',
create_time DATETIME NULL COMMENT '创建时间',
update_time DATETIME NULL COMMENT '更新时间'
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES("replication_num" = "1")
"""
cursor.execute(create_config_table)
conn.commit()
print(" ✓ 配置表已创建")
# 3. 重建历史表
print("\n3. 重建历史表...")
create_history_table = """
CREATE TABLE t_daily_report_history (
id BIGINT NOT NULL COMMENT '历史ID',
report_date VARCHAR(20) NULL COMMENT '报表日期',
start_time VARCHAR(50) NULL COMMENT '开始时间',
end_time VARCHAR(50) NULL COMMENT '结束时间',
split_type VARCHAR(20) NULL COMMENT '拆分方式',
split_value VARCHAR(100) NULL COMMENT '拆分值',
split_name VARCHAR(200) NULL COMMENT '拆分显示名称',
config_id BIGINT NULL COMMENT '配置ID',
total_orders INT NULL COMMENT '订单总数',
total_amount DECIMAL(10,2) NULL COMMENT '总金额',
sum_results VARCHAR(2000) NULL COMMENT '求和结果',
file_path VARCHAR(500) NULL COMMENT '文件路径',
status TINYINT NULL COMMENT '状态',
create_time DATETIME NULL COMMENT '创建时间'
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES("replication_num" = "1")
"""
cursor.execute(create_history_table)
conn.commit()
print(" ✓ 历史表已创建")
# 4. 验证表结构
print("\n4. 验证表结构...")
cursor.execute("DESCRIBE t_daily_report_history")
columns = cursor.fetchall()
print(" 历史表字段:")
for col in columns:
print(f" - {col[0]}: {col[1]}")
# 检查file_path字段
file_path_col = [c for c in columns if c[0] == 'file_path']
if file_path_col:
print(f"\n ✓ file_path 字段存在: {file_path_col[0][1]}")
else:
print("\n ❌ file_path 字段不存在!")
print("\n" + "="*60)
print("✓ 修复完成!")
print("="*60)
print("\n下一步:")
print("1. 重启服务: python app.py")
print("2. 创建配置")
print("3. 生成日报")
print("4. 查看历史记录(应该有下载按钮)")
except Exception as e:
print(f"\n❌ 修复失败: {e}")
import traceback
traceback.print_exc()
finally:
if conn:
conn.close()
input("\n按回车键退出...")
if __name__ == '__main__':
force_rebuild()