2026-07-14 14:24:21 +08:00
|
|
|
"""
|
|
|
|
|
数据库初始化
|
|
|
|
|
"""
|
|
|
|
|
from lib.db import execute_update, execute_query
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def init_database_tables():
|
|
|
|
|
"""初始化所有数据库表(应用启动时自动调用)"""
|
|
|
|
|
try:
|
|
|
|
|
# 创建配置表
|
|
|
|
|
create_config_table = """
|
|
|
|
|
CREATE TABLE IF NOT EXISTS 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 '求和字段列表',
|
|
|
|
|
time_periods VARCHAR(1000) NULL COMMENT '分时段电量配置',
|
|
|
|
|
merge_telecom TINYINT NULL COMMENT '是否合并特来电数据',
|
|
|
|
|
telecom_vehicle_no VARCHAR(500) NULL COMMENT '特来电车量自编号',
|
|
|
|
|
field_custom_names VARCHAR(2000) 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")
|
|
|
|
|
"""
|
|
|
|
|
execute_update(create_config_table)
|
|
|
|
|
print("[数据库] t_daily_report_config 表已就绪")
|
|
|
|
|
|
|
|
|
|
# 创建历史表
|
|
|
|
|
create_history_table = """
|
|
|
|
|
CREATE TABLE IF NOT EXISTS 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',
|
|
|
|
|
config_name VARCHAR(200) NULL COMMENT '配置名称',
|
|
|
|
|
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")
|
|
|
|
|
"""
|
|
|
|
|
execute_update(create_history_table)
|
|
|
|
|
print("[数据库] t_daily_report_history 表已就绪")
|
|
|
|
|
|
|
|
|
|
# 为已存在的表添加 config_name 字段(如果不存在)
|
|
|
|
|
try:
|
|
|
|
|
execute_update("""
|
|
|
|
|
ALTER TABLE t_daily_report_history
|
|
|
|
|
ADD COLUMN IF NOT EXISTS config_name VARCHAR(200) NULL COMMENT '配置名称'
|
|
|
|
|
""")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"[数据库] 添加 config_name 字段时出错(可能已存在): {e}")
|
|
|
|
|
|
|
|
|
|
# 创建求和数据表
|
|
|
|
|
create_sum_data_table = """
|
|
|
|
|
CREATE TABLE IF NOT EXISTS t_daily_report_sum_data (
|
|
|
|
|
id BIGINT NOT NULL COMMENT '主键 ID',
|
|
|
|
|
report_date VARCHAR(20) NULL COMMENT '报表日期',
|
|
|
|
|
config_id BIGINT NULL COMMENT '配置 ID',
|
|
|
|
|
config_name VARCHAR(200) NULL COMMENT '配置名称',
|
|
|
|
|
split_type VARCHAR(20) NULL COMMENT '拆分方式',
|
|
|
|
|
split_value VARCHAR(100) NULL COMMENT '拆分值',
|
|
|
|
|
split_name VARCHAR(200) NULL COMMENT '拆分显示名称',
|
|
|
|
|
sum_field_key VARCHAR(100) NULL COMMENT '求和字段键名',
|
|
|
|
|
sum_field_name VARCHAR(100) NULL COMMENT '求和字段中文名称',
|
|
|
|
|
sum_value DECIMAL(18,3) NULL COMMENT '求和值',
|
|
|
|
|
total_orders INT NULL COMMENT '订单数',
|
|
|
|
|
data_source VARCHAR(20) NULL COMMENT '数据来源 auto=自动采集 manual=手动编辑',
|
|
|
|
|
remark VARCHAR(500) 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")
|
|
|
|
|
"""
|
|
|
|
|
execute_update(create_sum_data_table)
|
|
|
|
|
print("[数据库] t_daily_report_sum_data 表已就绪")
|
|
|
|
|
|
2026-07-14 14:39:38 +08:00
|
|
|
# 给配置表增加 show_monthly_total 字段
|
|
|
|
|
try:
|
|
|
|
|
execute_update(
|
|
|
|
|
"ALTER TABLE t_daily_report_config ADD COLUMN show_monthly_total TINYINT NULL COMMENT '是否显示当月充电量总计' "
|
|
|
|
|
)
|
|
|
|
|
print("[数据库] 配置表新增 show_monthly_total 字段成功")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# 字段已存在会报错,忽略
|
|
|
|
|
if "Duplicate" in str(e) or "duplicate" in str(e) or "Exists" in str(e) or "exists" in str(e):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
print(f"[数据库] 新增 show_monthly_total 字段时出错(可能已存在): {e}")
|
|
|
|
|
|
2026-07-14 14:24:21 +08:00
|
|
|
# 数据迁移:给 sort_order 为 NULL 的配置记录按 id 顺序赋值
|
|
|
|
|
try:
|
|
|
|
|
null_count = execute_query(
|
|
|
|
|
"SELECT COUNT(*) as cnt FROM t_daily_report_config WHERE sort_order IS NULL"
|
|
|
|
|
)
|
|
|
|
|
if null_count and null_count[0]['cnt'] > 0:
|
|
|
|
|
print(f"[数据库] 检测到 {null_count[0]['cnt']} 条配置 sort_order 为空,开始初始化排序...")
|
|
|
|
|
all_configs = execute_query(
|
|
|
|
|
"SELECT id FROM t_daily_report_config ORDER BY id ASC"
|
|
|
|
|
)
|
|
|
|
|
for idx, cfg in enumerate(all_configs):
|
|
|
|
|
execute_update(
|
|
|
|
|
"UPDATE t_daily_report_config SET sort_order = %s WHERE id = %s",
|
|
|
|
|
(idx + 1, cfg['id'])
|
|
|
|
|
)
|
|
|
|
|
print("[数据库] 配置 sort_order 初始化完成")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"[数据库] 初始化 sort_order 时出错: {e}")
|
|
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"[数据库] 初始化失败: {e}")
|
|
|
|
|
return False
|