增加t自定义服务费单价

This commit is contained in:
2026-07-15 11:23:02 +08:00
parent 9c3c1e26cc
commit 96cca34de0
6 changed files with 245 additions and 28 deletions

View File

@@ -475,7 +475,9 @@ def generate_daily_report(config_id, start_time=None, end_time=None):
show_monthly_total=config.get('show_monthly_total', 0) == 1,
config_id=config['id'],
report_date=start_time.strftime('%Y-%m-%d'),
sort_order=config.get('sort_order')
sort_order=config.get('sort_order'),
custom_service_fee_price=config.get('custom_service_fee_price'),
custom_service_fee_name=config.get('custom_service_fee_name')
)
print(f"[日报生成] Excel文件已生成: {file_path}")
@@ -565,7 +567,8 @@ def generate_daily_report(config_id, start_time=None, end_time=None):
def generate_excel(orders, selected_fields, sum_fields, sum_results,
config_name, split_name, start_time, end_time,
id_name_maps=None, field_custom_names=None, has_supplement=False,
show_monthly_total=False, config_id=None, report_date=None, sort_order=None):
show_monthly_total=False, config_id=None, report_date=None, sort_order=None,
custom_service_fee_price=None, custom_service_fee_name=None):
"""
生成Excel文件
@@ -697,6 +700,21 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
cell.alignment = header_alignment
cell.border = thin_border
# 自定义服务费列表头(如果设置了单价)
has_custom_service_fee = custom_service_fee_price is not None and custom_service_fee_price != ''
if has_custom_service_fee:
custom_fee_col = len(selected_fields) + 2
cell = ws.cell(row=header_row, column=custom_fee_col)
if custom_service_fee_name and str(custom_service_fee_name).strip():
header_name = str(custom_service_fee_name).strip()
else:
header_name = f'自定义服务费({custom_service_fee_price}元/kWh)'
cell.value = header_name
cell.font = header_font
cell.fill = header_fill
cell.alignment = header_alignment
cell.border = thin_border
ws.row_dimensions[header_row].height = 25
# 写入数据
@@ -747,6 +765,19 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
if is_even:
cell.fill = even_row_fill
# 自定义服务费列(如果设置了单价)
if has_custom_service_fee:
custom_fee_col = len(selected_fields) + 2
cell = ws.cell(row=row_idx, column=custom_fee_col)
charge_degree = float(order.get('charge_degree', 0) or 0)
custom_fee = round(charge_degree * float(custom_service_fee_price), 2)
cell.value = custom_fee
cell.border = thin_border
cell.alignment = Alignment(horizontal='right', vertical='center')
cell.number_format = '0.00'
if is_even:
cell.fill = even_row_fill
ws.row_dimensions[row_idx].height = 22
# 写入求和行
@@ -769,6 +800,19 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
cell.alignment = Alignment(horizontal='right', vertical='center')
cell.number_format = '0.000'
# 自定义服务费合计
if has_custom_service_fee:
custom_fee_col = len(selected_fields) + 2
cell = ws.cell(row=sum_row, column=custom_fee_col)
cell.fill = sum_fill
cell.border = thin_border
total_charge_degree = sum_results.get('charge_degree', 0)
total_custom_fee = round(float(total_charge_degree) * float(custom_service_fee_price), 2)
cell.value = total_custom_fee
cell.font = sum_font
cell.alignment = Alignment(horizontal='right', vertical='center')
cell.number_format = '0.00'
ws.row_dimensions[sum_row].height = 25
# 写入当月充电量累计总计行(从求和采集表查询,对账后数据)
@@ -807,7 +851,10 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
ws.cell(row=monthly_row, column=1).border = thin_border
# 其他列也填充背景色
for col_idx in range(2, len(selected_fields) + 2):
total_cols = len(selected_fields) + 2
if has_custom_service_fee:
total_cols += 1
for col_idx in range(2, total_cols):
cell = ws.cell(row=monthly_row, column=col_idx)
cell.fill = monthly_fill
cell.border = thin_border
@@ -848,6 +895,18 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
col_letter = get_column_letter(col_idx)
ws.column_dimensions[col_letter].width = min(max_length + 2, 50)
# 自定义服务费列宽度
if has_custom_service_fee:
custom_fee_col = len(selected_fields) + 2
if custom_service_fee_name and str(custom_service_fee_name).strip():
header_name = str(custom_service_fee_name).strip()
else:
header_name = f'自定义服务费({custom_service_fee_price}元/kWh)'
cn_count = sum(1 for c in str(header_name) if '\u4e00' <= c <= '\u9fff')
max_length = len(str(header_name)) + cn_count
col_letter = get_column_letter(custom_fee_col)
ws.column_dimensions[col_letter].width = min(max_length + 2, 50)
# 冻结首行
ws.freeze_panes = 'A2'