diff --git a/fzjgact/huodong/__pycache__/views.cpython-311.pyc b/fzjgact/huodong/__pycache__/views.cpython-311.pyc
index 661d527..ce78a92 100644
Binary files a/fzjgact/huodong/__pycache__/views.cpython-311.pyc and b/fzjgact/huodong/__pycache__/views.cpython-311.pyc differ
diff --git a/fzjgact/huodong/templates/branch_info.html b/fzjgact/huodong/templates/branch_info.html
index cee8103..32e6080 100644
--- a/fzjgact/huodong/templates/branch_info.html
+++ b/fzjgact/huodong/templates/branch_info.html
@@ -25,7 +25,7 @@
{% if forloop.first %}
|
- {{ province }}
+ {{ province }}({{ branches|length }})
|
{% endif %}
diff --git a/fzjgact/huodong/views.py b/fzjgact/huodong/views.py
index 7a33c71..8f159ee 100644
--- a/fzjgact/huodong/views.py
+++ b/fzjgact/huodong/views.py
@@ -290,17 +290,74 @@ def export_branches_xls(request):
worksheet.title = "分支机构信息"
# 添加表头
- headers = ['分支机构名称', '信息系统类别']
+ headers = ['所在省份', '分支机构名称', '信息系统类别']
for col_num, header in enumerate(headers, 1):
worksheet.cell(row=1, column=col_num, value=header)
- # 获取所有分支机构数据
- branches = Branch.objects.all()
+ # 获取所有分支机构数据并按省份分组
+ branches = Branch.objects.all().order_by('location', 'name')
+ from collections import defaultdict
+ branches_by_province = defaultdict(list)
+ for branch in branches:
+ branches_by_province[branch.location].append(branch)
+ branches_by_province = dict(sorted(branches_by_province.items()))
# 填充数据
- for row_num, branch in enumerate(branches, 2):
- worksheet.cell(row=row_num, column=1, value=branch.name)
- worksheet.cell(row=row_num, column=2, value=branch.category)
+ row_num = 2
+ for province, province_branches in branches_by_province.items():
+ # 添加省份标题行
+ worksheet.cell(row=row_num, column=1, value=f"{province}({len(province_branches)})")
+ worksheet.cell(row=row_num, column=2, value="")
+ worksheet.cell(row=row_num, column=3, value="")
+
+ # 设置省份标题行样式
+ province_row = worksheet[row_num]
+ for cell in province_row:
+ cell.font = Font(bold=True)
+ cell.fill = PatternFill(start_color="D3D3D3", end_color="D3D3D3", fill_type="solid")
+
+ row_num += 1
+
+ # 填充该省份的分支机构数据
+ for branch in province_branches:
+ worksheet.cell(row=row_num, column=1, value=branch.location)
+ worksheet.cell(row=row_num, column=2, value=branch.name)
+ worksheet.cell(row=row_num, column=3, value=branch.category)
+ row_num += 1
+
+ row_num += 1 # 空行分隔
+
+ # 添加统计信息
+ row_num += 1
+ worksheet.cell(row=row_num, column=1, value="省份统计")
+ worksheet.cell(row=row_num, column=2, value=f"总计 {len(branches)} 个分支机构,分布在 {len(branches_by_province)} 个省份")
+ worksheet.cell(row=row_num, column=3, value="")
+
+ # 设置统计行样式
+ stats_row = worksheet[row_num]
+ for cell in stats_row:
+ cell.font = Font(bold=True)
+ cell.fill = PatternFill(start_color="FFD700", end_color="FFD700", fill_type="solid")
+
+ # 添加类别统计
+ row_num += 1
+ type_a_count = branches.filter(category='A型').count()
+ type_b_count = branches.filter(category='B型').count()
+ type_c_count = branches.filter(category='C型').count()
+ worksheet.cell(row=row_num, column=1, value="类别统计")
+ worksheet.cell(row=row_num, column=2, value=f"A型: {type_a_count}家 | B型: {type_b_count}家 | C型: {type_c_count}家")
+ worksheet.cell(row=row_num, column=3, value="")
+
+ # 设置类别统计行样式
+ category_row = worksheet[row_num]
+ for cell in category_row:
+ cell.font = Font(bold=True)
+ cell.fill = PatternFill(start_color="FFD700", end_color="FFD700", fill_type="solid")
+
+ # 设置列宽
+ worksheet.column_dimensions['A'].width = 25
+ worksheet.column_dimensions['B'].width = 40
+ worksheet.column_dimensions['C'].width = 15
# 设置响应
response = HttpResponse(content_type='application/vnd.ms-excel')
@@ -353,13 +410,28 @@ def export_branches_pdf(request):
title = Paragraph("分支机构信息", title_style)
elements.append(title)
- # 获取所有分支机构数据
- branches = Branch.objects.all()
+ # 获取所有分支机构数据并按省份分组
+ branches = Branch.objects.all().order_by('location', 'name')
+ from collections import defaultdict
+ branches_by_province = defaultdict(list)
+ for branch in branches:
+ branches_by_province[branch.location].append(branch)
+ branches_by_province = dict(sorted(branches_by_province.items()))
# 准备表格数据
- data = [['分支机构名称', '信息系统类别']] # 表头
- for branch in branches:
- data.append([branch.name, branch.category])
+ data = [['所在省份', '分支机构名称', '信息系统类别']] # 表头
+
+ # 按省份填充数据
+ for province, province_branches in branches_by_province.items():
+ # 添加省份标题行
+ data.append([f"{province}({len(province_branches)})", '', ''])
+
+ # 填充该省份的分支机构数据
+ for branch in province_branches:
+ data.append([branch.location, branch.name, branch.category])
+
+ # 添加空行分隔
+ data.append(['', '', ''])
# 创建表格
table = Table(data)
@@ -368,19 +440,59 @@ def export_branches_pdf(request):
style = TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
+ ('ALIGN', (0, 0), (-1, -1), 'LEFT'),
('FONTNAME', (0, 0), (-1, 0), chinese_font), # 使用中文字体
('FONTSIZE', (0, 0), (-1, 0), 14),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
- ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('FONTNAME', (0, 1), (-1, -1), chinese_font), # 使用中文字体
('GRID', (0, 0), (-1, -1), 1, colors.black)
])
+
+ # 设置省份标题行的样式
+ current_row = 1
+ for province, province_branches in branches_by_province.items():
+ # 省份标题行
+ style.add('BACKGROUND', (0, current_row), (-1, current_row), colors.lightgrey)
+ style.add('FONTNAME', (0, current_row), (-1, current_row), chinese_font)
+ style.add('FONTSIZE', (0, current_row), (-1, current_row), 12)
+ style.add('TEXTCOLOR', (0, current_row), (-1, current_row), colors.black)
+
+ current_row += 1
+
+ # 分支机构数据行
+ for _ in province_branches:
+ style.add('BACKGROUND', (0, current_row), (-1, current_row), colors.beige)
+ current_row += 1
+
+ # 空行
+ current_row += 1
+
table.setStyle(style)
# 添加表格到文档
elements.append(table)
+ # 添加统计信息
+ elements.append(Spacer(1, 20))
+
+ # 省份统计
+ stats_style = ParagraphStyle(
+ 'Stats',
+ parent=styles['Normal'],
+ fontName=chinese_font,
+ fontSize=12,
+ spaceAfter=10
+ )
+ stats_text = f"省份统计:总计 {len(branches)} 个分支机构,分布在 {len(branches_by_province)} 个省份"
+ elements.append(Paragraph(stats_text, stats_style))
+
+ # 类别统计
+ type_a_count = branches.filter(category='A型').count()
+ type_b_count = branches.filter(category='B型').count()
+ type_c_count = branches.filter(category='C型').count()
+ category_text = f"类别统计:A型: {type_a_count}家 | B型: {type_b_count}家 | C型: {type_c_count}家"
+ elements.append(Paragraph(category_text, stats_style))
+
# 构建PDF
doc.build(elements)
|