继续优化数据库

This commit is contained in:
2026-07-30 10:59:44 +08:00
parent 4e20d7edac
commit 08dec03371
7 changed files with 721 additions and 108 deletions

View File

@@ -133,17 +133,13 @@ def collect_sum_data_from_history(history_id=None, start_date=None, end_date=Non
filtered_fields.add('charge_degree') # 充电电量始终采集
sum_results = {k: v for k, v in sum_results.items() if k in filtered_fields}
# 逐条插入求和字段数据
# 收集所有待插入的数据
batch_params = []
# 收集求和字段数据
for field_key, field_value in sum_results.items():
sum_data_id = int(datetime.now().timestamp() * 1000000) + collected_count
sql = '''
INSERT INTO t_daily_report_sum_data
(id, report_date, config_id, config_name, split_type, split_value, split_name,
sum_field_key, sum_field_name, sum_value, total_orders, sort_order, data_source, remark,
create_time, update_time)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW())
'''
params = (
sum_data_id = int(datetime.now().timestamp() * 1000000) + collected_count + len(batch_params)
batch_params.append((
sum_data_id,
history['report_date'],
history['config_id'],
@@ -158,11 +154,10 @@ def collect_sum_data_from_history(history_id=None, start_date=None, end_date=Non
sort_order,
'auto',
f'从历史记录自动采集历史ID: {history["id"]}'
)
execute_insert(sql, params)
collected_count += 1
))
# 如果配置了自定义服务费单价,自动计算并采集自定义服务费
custom_service_fee = None
if custom_service_fee_price is not None and custom_service_fee_price != '' and sum_results.get('charge_degree') is not None:
try:
charge_degree = float(sum_results['charge_degree'])
@@ -171,15 +166,8 @@ def collect_sum_data_from_history(history_id=None, start_date=None, end_date=Non
fee_display_name = str(custom_service_fee_name).strip()
else:
fee_display_name = f'自定义服务费({custom_service_fee_price}元/kWh)'
sum_data_id = int(datetime.now().timestamp() * 1000000) + collected_count
sql = '''
INSERT INTO t_daily_report_sum_data
(id, report_date, config_id, config_name, split_type, split_value, split_name,
sum_field_key, sum_field_name, sum_value, total_orders, sort_order, data_source, remark,
create_time, update_time)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW())
'''
params = (
sum_data_id = int(datetime.now().timestamp() * 1000000) + collected_count + len(batch_params)
batch_params.append((
sum_data_id,
history['report_date'],
history['config_id'],
@@ -194,16 +182,17 @@ def collect_sum_data_from_history(history_id=None, start_date=None, end_date=Non
sort_order,
'auto',
f'自动计算:充电电量{charge_degree}kWh × 单价{custom_service_fee_price}元/kWh'
)
execute_insert(sql, params)
collected_count += 1
# 计算自定义实收总金额(实收电费 + 自定义服务费)
# 实收电费从 sum_results 中获取charge_elecfee_amount
))
except Exception as fee_error:
log_warning(f"[采集] 历史记录 {history['id']} 自定义服务费计算失败: {fee_error}", 'sum_data')
# 计算自定义实收总金额(实收电费 + 自定义服务费)
if custom_service_fee is not None:
try:
charge_elecfee_amount = float(sum_results.get('charge_elecfee_amount', 0) or 0)
custom_total_amount = round(charge_elecfee_amount + custom_service_fee, 2)
sum_data_id = int(datetime.now().timestamp() * 1000000) + collected_count
params = (
sum_data_id = int(datetime.now().timestamp() * 1000000) + collected_count + len(batch_params)
batch_params.append((
sum_data_id,
history['report_date'],
history['config_id'],
@@ -218,11 +207,22 @@ def collect_sum_data_from_history(history_id=None, start_date=None, end_date=Non
sort_order,
'auto',
f'自动计算:实收电费{charge_elecfee_amount}元 + 自定义服务费{custom_service_fee}'
)
execute_insert(sql, params)
collected_count += 1
except Exception as fee_error:
log_error(f"[采集] 计算自定义服务费失败: {fee_error}", 'sum_data')
))
except Exception as total_error:
log_warning(f"[采集] 历史记录 {history['id']} 自定义实收总金额计算失败: {total_error}", 'sum_data')
# 批量插入所有数据Doris 优化)
if batch_params:
sql = '''
INSERT INTO t_daily_report_sum_data
(id, report_date, config_id, config_name, split_type, split_value, split_name,
sum_field_key, sum_field_name, sum_value, total_orders, sort_order, data_source, remark,
create_time, update_time)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW())
'''
from lib.db import execute_batch_insert
inserted = execute_batch_insert(sql, batch_params, batch_size=50)
collected_count += inserted
log_info(f'[采集] 采集完成,共采集 {collected_count} 条求和数据,跳过 {skipped_count} 条无求和数据的记录', 'sum_data')
return {
@@ -289,7 +289,7 @@ def _calculate_charge_degree(history):
def get_sum_data_list(page=None, page_size=20, start_date=None, end_date=None, config_id=None,
config_name=None, sum_field_key=None, data_source=None):
config_name=None, sum_field_key=None, data_source=None, skip_count=False):
"""
查询求和数据列表
@@ -302,6 +302,7 @@ def get_sum_data_list(page=None, page_size=20, start_date=None, end_date=None, c
config_name: 配置名称(可选,模糊搜索)
sum_field_key: 求和字段键名(可选)
data_source: 数据来源(可选)
skip_count: 是否跳过 COUNT 查询(优化性能)
Returns:
dict: 查询结果
@@ -336,12 +337,14 @@ def get_sum_data_list(page=None, page_size=20, start_date=None, end_date=None, c
where_sql = ' AND '.join(where_clauses)
# 查询总数
total_result = execute_query(
f'SELECT COUNT(*) as total FROM t_daily_report_sum_data WHERE {where_sql}',
tuple(params)
)
total = total_result[0]['total']
# 查询总数(如果不跳过)
total = 0
if not skip_count:
total_result = execute_query(
f'SELECT COUNT(*) as total FROM t_daily_report_sum_data WHERE {where_sql}',
tuple(params)
)
total = total_result[0]['total']
# 查询数据
if page is not None: