继续优化数据库
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user