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:
114
force_rebuild.py
Normal file
114
force_rebuild.py
Normal 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()
|
||||
Reference in New Issue
Block a user