fs-lawrisk/tools/generate_report.py

117 lines
4.9 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
生成三位一体对比表的详细报告
"""
import pandas as pd
def main():
# 读取Excel文件
df = pd.read_excel("许可事项三位一体对比表_v2.xlsx")
# 生成文本报告
with open("三位一体对比报告.txt", "w", encoding="utf-8") as f:
f.write("="*80 + "\n")
f.write("许可事项三位一体对比表 - 详细报告\n")
f.write("="*80 + "\n\n")
f.write(f"总事项数量: {len(df)}\n\n")
# 统计各列的勾选情况
client_count = (df['客户提供'] == '').sum()
received_count = (df['已接收'] == '').sum()
db_count = (df['已入库'] == '').sum()
f.write(f"1. 客户提供的事项: {client_count}\n")
f.write(f"2. 已接收的事项: {received_count}\n")
f.write(f"3. 已入库的事项: {db_count}\n\n")
# 统计状态分布
f.write("状态分布:\n")
f.write("-" * 40 + "\n")
status_counts = df['状态说明'].value_counts()
for status, count in status_counts.items():
f.write(f" {status}: {count}\n")
f.write("\n" + "="*80 + "\n")
f.write("需要关注的事项\n")
f.write("="*80 + "\n\n")
# 完整的事项(三方都有)
complete = df[df['状态说明'] == '完整(三方都有)']
f.write(f"【完整(三方都有)】({len(complete)} 项)\n")
if len(complete) > 0:
for idx, row in complete.iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
f.write("\n")
# 待入库的事项
to_import = df[df['状态说明'] == '待入库']
f.write(f"【待入库】({len(to_import)} 项)\n")
f.write("说明: 客户要求显示,已接收文件,但尚未导入数据库\n")
if len(to_import) > 0:
for idx, row in to_import.iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
f.write("\n")
# 缺少源文件的事项
missing_source = df[df['状态说明'] == '缺少源文件']
f.write(f"【缺少源文件】({len(missing_source)} 项)\n")
f.write("说明: 客户要求显示,已入库,但缺少原始文件\n")
if len(missing_source) > 0:
for idx, row in missing_source.iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
f.write("\n")
# 缺少文件和数据的事项
missing_all = df[df['状态说明'] == '缺少文件和数据']
f.write(f"【缺少文件和数据】({len(missing_all)} 项)\n")
f.write("说明: 客户要求显示,但既没有文件也没有入库\n")
if len(missing_all) > 0:
for idx, row in missing_all.head(50).iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
if len(missing_all) > 50:
f.write(f" ... 还有 {len(missing_all) - 50}\n")
f.write("\n")
# 未入库且客户未要求
not_required = df[df['状态说明'] == '未入库且客户未要求']
f.write(f"【未入库且客户未要求】({len(not_required)} 项)\n")
f.write("说明: 已接收文件但未入库,且客户未要求显示\n")
if len(not_required) > 0:
for idx, row in not_required.head(50).iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
if len(not_required) > 50:
f.write(f" ... 还有 {len(not_required) - 50}\n")
f.write("\n")
# 已接收且已入库(客户未要求)
received_and_db = df[df['状态说明'] == '客户未要求']
f.write(f"【已接收且已入库(客户未要求)】({len(received_and_db)} 项)\n")
f.write("说明: 已接收并入库,但客户未要求显示\n")
if len(received_and_db) > 0:
for idx, row in received_and_db.iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
f.write("\n")
# 仅数据库有
only_db = df[df['状态说明'] == '仅数据库有']
f.write(f"【仅数据库有】({len(only_db)} 项)\n")
f.write("说明: 仅在数据库中,没有源文件且客户未要求\n")
if len(only_db) > 0:
for idx, row in only_db.iterrows():
f.write(f" {row['序号']}. {row['事项名称']}\n")
f.write("\n")
f.write("="*80 + "\n")
f.write("对比表文件: 许可事项三位一体对比表_v2.xlsx\n")
f.write("="*80 + "\n")
print("报告已生成: 三位一体对比报告.txt")
print(f"总事项数: {len(df)}")
print(f"客户提供: {client_count}, 已接收: {received_count}, 已入库: {db_count}")
if __name__ == "__main__":
main()