增加序号,配置导出,导入,求和采集数据导出

This commit is contained in:
2026-07-14 16:05:43 +08:00
parent fdd232989b
commit cc2214ccf6
9 changed files with 587 additions and 42 deletions

View File

@@ -474,7 +474,8 @@ def generate_daily_report(config_id, start_time=None, end_time=None):
has_supplement=has_supplement,
show_monthly_total=config.get('show_monthly_total', 0) == 1,
config_id=config['id'],
report_date=start_time.strftime('%Y-%m-%d')
report_date=start_time.strftime('%Y-%m-%d'),
sort_order=config.get('sort_order')
)
print(f"[日报生成] Excel文件已生成: {file_path}")
@@ -564,7 +565,7 @@ 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):
show_monthly_total=False, config_id=None, report_date=None, sort_order=None):
"""
生成Excel文件
@@ -585,7 +586,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
reports_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'public', 'reports')
os.makedirs(reports_dir, exist_ok=True)
# 生成文件名 - 格式配置名称_几月几日消费记录.xlsx
# 生成文件名 - 格式:序号_配置名称_几月几日消费记录.xlsx
# 从 start_time 提取日期(报表数据对应的是开始时间那天的数据)
try:
start_dt = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')
@@ -595,7 +596,13 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
# 如果有补单,添加标记
supplement_suffix = '_有补单' if has_supplement else ''
filename = f'{config_name}_{date_str}消费记录{supplement_suffix}.xlsx'
# 顺序号前缀(两位数字,不足补零)
sort_prefix = ''
if sort_order:
sort_prefix = f'{sort_order:02d}_'
filename = f'{sort_prefix}{config_name}_{date_str}消费记录{supplement_suffix}.xlsx'
file_path = os.path.join(reports_dir, filename)
# 创建工作簿
@@ -668,7 +675,15 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
decimal3_fields = numeric_fields
# 写入表头
for col_idx, field in enumerate(selected_fields, 1):
# 第1列序号
cell = ws.cell(row=header_row, column=1)
cell.value = '序号'
cell.font = header_font
cell.fill = header_fill
cell.alignment = header_alignment
cell.border = thin_border
for col_idx, field in enumerate(selected_fields, 2):
cell = ws.cell(row=header_row, column=col_idx)
if field in field_custom_names and field_custom_names[field]:
display_name = field_custom_names[field]
@@ -688,7 +703,17 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
data_start_row = header_row + 1
for row_idx, order in enumerate(orders, data_start_row):
is_even = (row_idx - data_start_row) % 2 == 1
for col_idx, field in enumerate(selected_fields, 1):
# 第1列序号
seq_num = row_idx - data_start_row + 1
seq_cell = ws.cell(row=row_idx, column=1)
seq_cell.value = seq_num
seq_cell.border = thin_border
seq_cell.alignment = Alignment(horizontal='center', vertical='center')
if is_even:
seq_cell.fill = even_row_fill
for col_idx, field in enumerate(selected_fields, 2):
cell = ws.cell(row=row_idx, column=col_idx)
value = order.get(field, '')
@@ -734,7 +759,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
ws.cell(row=sum_row, column=1).alignment = Alignment(horizontal='center', vertical='center')
ws.cell(row=sum_row, column=1).border = thin_border
for col_idx, field in enumerate(selected_fields, 1):
for col_idx, field in enumerate(selected_fields, 2):
cell = ws.cell(row=sum_row, column=col_idx)
cell.fill = sum_fill
cell.border = thin_border
@@ -767,9 +792,9 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
# 月度总计行(在合计行下面空一行)
monthly_row = sum_row + 2 if sum_fields else sum_row + 1
# 找 charge_degree 字段所在的列
# 找 charge_degree 字段所在的列+1因为序号占了第1列
charge_degree_col = None
for col_idx, field in enumerate(selected_fields, 1):
for col_idx, field in enumerate(selected_fields, 2):
if field == 'charge_degree':
charge_degree_col = col_idx
break
@@ -782,7 +807,7 @@ 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) + 1):
for col_idx in range(2, len(selected_fields) + 2):
cell = ws.cell(row=monthly_row, column=col_idx)
cell.fill = monthly_fill
cell.border = thin_border
@@ -799,7 +824,11 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results,
print(f"[日报生成] 写入月度总计时出错: {e}")
# 调整列宽中文按2个字符宽度计算
for col_idx, field in enumerate(selected_fields, 1):
# 序号列固定宽度
from openpyxl.utils import get_column_letter
ws.column_dimensions['A'].width = 8
for col_idx, field in enumerate(selected_fields, 2):
header_name = get_field_display_name(field)
if field in field_custom_names and field_custom_names[field]:
header_name = field_custom_names[field]