Report_Generator/Windows/baogao_project/generate_report.py

560 lines
26 KiB
Python
Raw Permalink Normal View History

2025-07-02 09:19:15 +08:00
# 文档处理工具
from tools.document_tools import (
create_document, add_documents,add_table_and_replace,
add_table_to_document,process_images_table,
)
# 内容处理工具
from tools.content_tools import (
add_picture,
search_and_replace,add_picture_to_table
)
import asyncio, os, re
from pathlib import Path
from get_pictures import (make_Thumbnail,resize_and_reduce_quality,
get_picture_nums,find_image,collect_defect_data
)
from core.tables import fill_tables
async def add_dynamic_table(output_doc, output_dir, table_num, TABLES, JIANCHA_XIANGQING_DIR, PICTURES, row, col, i, FLAG, xuhao):
"""创建动态表
Args:
output_doc (Document): 文档对象
output_dir (str): 输出目录
table_num (int): 表格序号
TABLES (list): 表格数据
JIANCHA_XIANGQING_DIR (str): 检查详情表目录
PICTURES (dict): 图片数据字典键为表索引值为图片路径列表
row (int): 行数
col (int): 列数
i (int): 表格序号
FLAG: 其他标志
Returns:
tuple: (i, table_num) 更新后的表格序号和表格数量
"""
for table_idx, Table in enumerate(TABLES):
print(Table)
output_doc, message = await add_table_to_document(output_dir, JIANCHA_XIANGQING_DIR, row, col, i, Table, FLAG)
print(message)
# 获取当前表格对应的图片
current_table_pictures = PICTURES.get(table_idx, [])
print(f"开始处理图片列表: {current_table_pictures}")
for picturedir in current_table_pictures:
try:
print(f"添加 {picturedir} {type(picturedir)}到表格{table_idx}")
resize_and_reduce_quality(picturedir, picturedir)
await add_picture_to_table(output_doc, output_dir, 4, 0, picturedir, i, 4.7232)
except Exception as e:
print(f"添加图片失败:{e}")
print(await search_and_replace(output_dir, 'tupian_xuhao', f'{xuhao}'))
table_num += 1
i += 1
xuhao += 1
return i, table_num, xuhao
def get_year_month(date):
"""根据格式化date字符串获取年月 'date': '二〇二一年十二月十日 9:00'
Args: date (str): 日期字符串
Returns: 年月字符串 '二〇二一年十二月'
"""
unit_map = {'1' : '', '2' : '', '3' : '', '4' : '', '5' : '', '6' : '', '7' : '', '8' : '', '9' : '', '0' : ''}
unit_map_month = {1 : '', 2 : '', 3 : '', 4 : '', 5 : '', 6 : '', 7 : '', 8 : '', 9 : '', 10 : '', 11 : '十一', 12 : '十二'}
year = date.split('')[0]
month = date.split('')[1].split('')[0]
year = ''.join([unit_map[i] for i in year])
month = unit_map_month[int(month)]
return f"{year}{month}"
def merge_info(frontend_info, default_info):
"""
合并前端传入的 info 和默认 info
规则如果前端传入的值为空None 或空字符串则使用默认值
Args:
frontend_info: 前端传入的字典
default_info: 默认的完整字典
Returns:
合并后的完整字典
"""
if not isinstance(frontend_info, dict) or frontend_info is None:
return default_info.copy()
merged_info = {}
for key, default_value in default_info.items():
# 获取前端传入的值
frontend_value = frontend_info.get(key)
# 判断前端值是否为空None 或空字符串)
if frontend_value is None or frontend_value == "":
merged_info[key] = default_value
else:
merged_info[key] = frontend_value
return merged_info
async def generate_report(base_info, baogao_info):
#获取模板编号、模板名称
num_to_chinese = {1 : '', 2 : '', 3 : '', 4 : '', 5 : '', 6 : '', 7 : '', 8 : '', 9 : '', 10 : '', 11 : '十一', 12 : '十二'}
cover_encode = "encode"
cover_project = "project"
baogao_name1 = "baogaoname1"
baogao_name2 = "baogaoname2"
company_name_yi = "company_name_yi"
cover_date = "time"
TITLE_OF_REPORT = "companyencode"
jiegou_xuhao = 'num'
DEFAULT_BASE_INFO = { #项目基本信息
#目录
'picture_dir': "", #图片存放地址 为了报告美观希望总的汇总图片数量为3的倍数
'shengcheng_dir': "", #工作路径(报告生成的路径、报告模板存放的路径)
'muban_dir': "", #文档模板存放路径
#项目概况
'jituan_jianxie': '甲方集团',
'jia_Company': '甲方公司名',
'jizu_num': '项目规格(台)',
'fengchang_name': '风场名称',
'fengchang_location': '风场位置',
#乙方信息
'yi_Company': '乙方公司名',
'fuzeren': '甲方负责人(吴明洲)',
'phone_fuzeren': '联系电话18807109269 ',
}
try:
base_info = merge_info(base_info, DEFAULT_BASE_INFO)
jituan_name = base_info['jituan_jianxie']
fengchang_name = base_info['fengchang_name']
work_dir = base_info['muban_dir']
shengcheng_dir = base_info['shengcheng_dir']
Yi_company = base_info['yi_Company']
fengchang_location = base_info['fengchang_location']
Jia_company = base_info['jia_Company']
Jia_fuzeren = base_info['fuzeren']
Jia_phone = base_info['phone_fuzeren']
jizu_num = base_info['jizu_num']
Picture_dir = base_info['picture_dir']
if Picture_dir == "" or work_dir == "" or shengcheng_dir == "":
print("未配置图片/模板/生成路径、请检查配置")
return
except Exception as e:
print(f"项目基本信息获取失败:{e}")
return
"""
缺陷图目录格式
缺陷图期望格式 _隔开
外部内部命名格式都如下
图片名xuhao_缺陷类型_缺陷位置_缺陷尺寸_可见程度_紧急程度_危重等级_维修建议
涂层损伤_叶片ps面距叶根3m处_缺陷尺寸弦向100mm轴向800mm_轻微_紧急_重要_建议打磨维修
每个的选项见我发的图
防雷
轮毂至塔基导通阻值_169mΩ
缺陷例轮毂至塔基未导通 #即标明未导通即可
"""
DEFAULT_BAOGAO_INFO = {
'key_words': '缺,损,裂,脱,污',
#当前检查报告基本内容
'jizu_type': 'H3-08#', #检查的机组编号
'jiancha_date': '2021年12月10日 9.00', #检查叶片日期 注意空格分开 小时分钟间隔为.
'baogao_date': '2021年12月10日 9.00', #生成报告时间 注意空格分开
'baogao_type': "风力发电机组叶片检查报告", #报告类型
#检查方案
'jiancha_renyuan': '张三', #检查人员
'shebei_peizhi': '无人机1台......', #设备配置
'shigong_fangan': '无人机近距离检查........', #施工方案
#检查信息
'waibu_jiancha': 'True', #是否包含外部检查
'neibu_jiancha': 'True', #是否包含内部检查
'fanglei_jiancha': 'True', #是否包含防雷检查 #注:防雷检测占不存放缺陷图
'jiancha_location': '叶片外部外观', #检查内容文字
'jiancha_fangshi': '作业无人机近距离外观检查', #检查方式文字
'yepian_changjia': '株洲时代新材料科技股份有限公司', #叶片厂家信息
#报告处理信息
'yezhu_renyuan': '李四', #业主(人员)
'changjia_renyuan': '王五', #厂家(人员)
'date_process': '生成报告人员', #数据处理人员 吴总希望获取前端用户执行生成人员为这个人
'baogao_bianzhi': '生成报告人员', #报告编制人员 吴总希望获取前端用户执行生成人员为这个人
'baogao_shenghe': '待填写(人员)', #报告审核人员
'shenghe_date': '待填写(日期)', #报告审核日期
#检查情况汇总表(文字信息) 前端根据是否包含对应部分检查自行确定检查内容,这里默认全部包含
'Y1_jiancha_neirong': '''1.叶片前缘、后缘、PS面、SS面
2.叶片内部导雷卡腹板透光人孔盖版叶根盖板...
3.轮毂至塔基导通内部导线线阻外部导线线阻...''',
'Y2_jiancha_neirong': '''1.叶片前缘、后缘、PS面、SS面
2.叶片内部导雷卡腹板透光人孔盖版叶根盖板...
3.轮毂至塔基导通内部导线线阻外部导线线阻...''',
'Y3_jiancha_neirong': '''1.叶片前缘、后缘、PS面、SS面
2.叶片内部导雷卡腹板透光人孔盖版叶根盖板...
3.轮毂至塔基导通内部导线线阻外部导线线阻...''',
#报告总结
'baogao_zongjie': '''1、因海上风电叶片运行环境恶劣、空气盐碱度高叶片前缘合模缝区域及PS面迎风面涂层易受腐蚀建议定期观察维护。
2经无人机近距离外观检查发现H3-08#机位Y200220AF叶片PS面距叶根20m处发现一处裂纹损伤长度轴向3m该缺陷经我方判定为严重缺陷建议尽快结安排对该机组停机并结合其他检查手段如人工打磨进一步勘查并决定维修处置方案防止风险进一步升级。
3经无人机近距离外观检查未发现H3-08#机位Y200249AF、Y200250AF叶片有明显影响机组正常运行的外部缺陷。
''', #报告总结文字
}
try:
baogao_info = merge_info(baogao_info, DEFAULT_BAOGAO_INFO)
key_words= re.compile('|'.join(map(re.escape, baogao_info['key_words'].split(','))))
Jiancha_date = baogao_info['jiancha_date']
baogao_type = baogao_info['baogao_type']
baogao_date = baogao_info['baogao_date']
project_number = baogao_info['jizu_type']
date_year_month = get_year_month(baogao_date)
Jiancha_renyuan = baogao_info['jiancha_renyuan']
shebei_peizhi = baogao_info['shebei_peizhi']
shigong_fangan = baogao_info['shigong_fangan']
Jiancha_location = baogao_info['jiancha_location']
Jiancha_fangshi = baogao_info['jiancha_fangshi']
Changjia = baogao_info['yepian_changjia']
yezhu_renyuan = baogao_info['yezhu_renyuan']
changjia_renyuan = baogao_info['changjia_renyuan']
data_process = baogao_info['date_process']
baogao_bianzhi = baogao_info['baogao_bianzhi']
baogao_shenghe = baogao_info['baogao_shenghe']
shenghe_date = baogao_info['shenghe_date']
Y1_jiancha = baogao_info['Y1_jiancha_neirong']
Y2_jiancha = baogao_info['Y2_jiancha_neirong']
Y3_jiancha = baogao_info['Y3_jiancha_neirong']
except Exception as e:
print(f"报告基本信息获取失败:{e}")
return
if not os.path.exists(Picture_dir):
print("图片目录不存在或路径错误")
return
if not os.path.exists(work_dir):
print("工作目录不存在或路径错误")
return
normal_picture_num = get_picture_nums(Picture_dir)
P_Picture_dir = Path(Picture_dir)
folder_names = [f.name for f in P_Picture_dir.iterdir() if f.is_dir()]
Y1 = folder_names[0]
Y2 = folder_names[1]
Y3 = folder_names[2]
tatong_image_path = find_image(Picture_dir, "tatong")
output_doc = None
head_num = 1
###封面创建###
#封面目录
cover_dirs = [rf"{work_dir}\封面\外部封面1.docx",rf"{work_dir}\封面\封面图片.jpg",rf"{work_dir}\封面\外部封面2.docx"]
#输出目录
output_dir = fr"{shengcheng_dir}\{jituan_name}{fengchang_name}项目{baogao_type}{project_number}{baogao_date.split(' ')[0]}版.docx"
version = 1
while os.path.exists(output_dir):
if version != 1:
output_dir = output_dir.replace(f"{version - 1}",f"{version}")
else:
output_dir = output_dir.replace("",f"{version}")
version += 1
ifwaibu = baogao_info['waibu_jiancha']
ifneibu = baogao_info['neibu_jiancha']
iffanglei = baogao_info['fanglei_jiancha']
parts = []
if ifwaibu:
parts.append("叶片外观")
if ifneibu:
parts.append("叶片内部")
if iffanglei:
parts.append("叶片防雷")
if not parts:
print("前端未指定检查内容")
mianzhe_shengming = f"本报告仅涵盖{''.join(parts)}检测内容"
#创建文档、添加封面
print(await create_document(output_dir))
print(await add_documents(output_dir, cover_dirs[0]))
print(await add_picture(output_dir, cover_dirs[1]))
print(await add_documents(output_dir, cover_dirs[2]))
print("封面创建成功")
#更改文档信息
print(await search_and_replace(output_dir, TITLE_OF_REPORT, jituan_name + project_number))
print(await search_and_replace(output_dir, baogao_name1, baogao_type))
print(await search_and_replace(output_dir, baogao_name2, baogao_type))
print(await search_and_replace(output_dir, company_name_yi, Yi_company))
print(await search_and_replace(output_dir, cover_project, jituan_name + fengchang_name))
print(await search_and_replace(output_dir, cover_encode, jituan_name + project_number))
print(await search_and_replace(output_dir, cover_date, date_year_month))
print(await search_and_replace(output_dir, 'bianzhi', baogao_bianzhi))
print(await search_and_replace(output_dir, 'shenghe', baogao_shenghe))
print(await search_and_replace(output_dir, 'mianzhe_shengming', mianzhe_shengming))
total_table_num = 0
#项目概况表
XIANG_MU_GAI_KUANG = rf"{work_dir}\报告表格模板\项目概括表.docx"
project_location = fengchang_location
company_name_jia = Jia_company
fuzeren = Jia_fuzeren
phone_fuzeren = Jia_phone
jizu_type = project_number
xiangmuguige = jizu_num
Yi_company = Yi_company
XIANGMU_GAIKUO = list(list("" for i in range(5)) for j in range(5))
XIANGMU_GAIKUO[0][1] = fengchang_name
#XIANGMU_GAIKUO[0][3]=XIANGMU_GAIKUO[0][4] = "盐城市滨海县"
XIANGMU_GAIKUO[0][3] = project_location
#XIANGMU_GAIKUO[1][1]=XIANGMU_GAIKUO[2,1]=XIANGMU_GAIKUO[3,1] = "国家电投集团滨海风力发电有限公司"
XIANGMU_GAIKUO[1][1] = company_name_jia
XIANGMU_GAIKUO[1][3] = Yi_company
XIANGMU_GAIKUO[2][3] = fuzeren
XIANGMU_GAIKUO[3][4] = phone_fuzeren
XIANGMU_GAIKUO[4][1] = jizu_type
XIANGMU_GAIKUO[4][4] = xiangmuguige
#添加项目概况表
output_doc, message = await add_table_to_document(output_dir, XIANG_MU_GAI_KUANG,5,5,total_table_num,XIANGMU_GAIKUO)
print(message)
total_table_num += 1
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
head_num += 1
#检查方案描述
FANGAN_JIANCHA_DIR = rf"{work_dir}\报告表格模板\检查方案.docx"
list_to_replace = {
'renyuanzu' : Jiancha_renyuan,
'shebeipeizhi' : shebei_peizhi,
'shigongfangan' : shigong_fangan,
'num' : num_to_chinese[head_num],
}
print(await add_table_and_replace(output_dir, FANGAN_JIANCHA_DIR, 0, list_to_replace))
total_table_num += 1
head_num += 1
JIANCHA_XINGXI_DIR = rf"{work_dir}\报告表格模板\检查信息表.docx"
JIANCHA_XINGXI = list(list("" for i in range(4)) for j in range(9))
JIANCHA_XINGXI[0][1] = Jiancha_renyuan
JIANCHA_XINGXI[1][1] = Jiancha_date.split(' ')[0]
JIANCHA_XINGXI[1][3] = project_number
JIANCHA_XINGXI[2][1] = Jiancha_location
JIANCHA_XINGXI[2][3] = Jiancha_fangshi
JIANCHA_XINGXI[3][2] = Changjia
JIANCHA_XINGXI[4][1] = '机组编号:' + project_number + '机组'
JIANCHA_XINGXI[5][1] = Y1
JIANCHA_XINGXI[6][1] = Y2
JIANCHA_XINGXI[7][1] = Y3
JIANCHA_XINGXI[8][0] = f"本次无人机叶片外部高精度飞行检查,采集叶片图片{normal_picture_num}张,内容覆盖{Y1}{Y2}{Y3}三支叶片的前缘、后缘、迎风面、背风面。"
JIANCHA_XINGXI42 = tatong_image_path
print(JIANCHA_XINGXI42)
#新建检查信息表
output_doc, message = await add_table_to_document(output_dir, JIANCHA_XINGXI_DIR,9,4,total_table_num ,JIANCHA_XINGXI,False)
print(message)
Thumbnail_Picture = await make_Thumbnail(Picture_dir, Picture_dir)#添加图片
print(await add_picture_to_table(output_doc, output_dir, 4, 2, JIANCHA_XINGXI42, total_table_num , 1.18))
#添加略缩图片
print(await add_picture_to_table(output_doc, output_dir, 8, 0, Thumbnail_Picture, total_table_num))
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
head_num += 1
total_table_num += 1
#添加成果递交表
CHENGGUO_DIJIAO_DIR = rf"{work_dir}\报告表格模板\成果递交表.docx"
CHENGGUO_DIJIAO = list(list("" for i in range(4)) for j in range(6))
CHENGGUO_DIJIAO[0][1] = Jiancha_renyuan
CHENGGUO_DIJIAO[1][1] = yezhu_renyuan
CHENGGUO_DIJIAO[2][1] = Jiancha_date.split(' ')[0]
CHENGGUO_DIJIAO[3][1] = data_process
CHENGGUO_DIJIAO[4][1] = baogao_bianzhi
CHENGGUO_DIJIAO[5][1] = baogao_shenghe
CHENGGUO_DIJIAO[1][3] = changjia_renyuan
CHENGGUO_DIJIAO[2][3] = Jiancha_date.split(' ')[1].replace('.',':')
CHENGGUO_DIJIAO[3][3] = baogao_date.split(' ')[0]
CHENGGUO_DIJIAO[4][3] = baogao_date.split(' ')[0]
CHENGGUO_DIJIAO[5][3] = shenghe_date.split(' ')[0]
output_doc, message = await add_table_to_document(output_dir, CHENGGUO_DIJIAO_DIR,5,5,total_table_num,CHENGGUO_DIJIAO,True,0.04)
print(message)
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
head_num += 1
total_table_num += 1
#检查情况汇总表(文字信息)
try:
search_file_list = []
if ifwaibu:
search_file_list.append("外缺陷图")
if ifneibu:
search_file_list.append("内缺陷图")
Y1_quexian_num, Y1_quexian_dict = collect_defect_data(Y1, Picture_dir, ifwaibu, ifneibu, search_file_list)
Y2_quexian_num, Y2_quexian_dict = collect_defect_data(Y2, Picture_dir, ifwaibu, ifneibu, search_file_list)
Y3_quexian_num, Y3_quexian_dict = collect_defect_data(Y3, Picture_dir, ifwaibu, ifneibu, search_file_list)
weak_num_Y1 = f"{Y1}共发现缺陷{Y1_quexian_num}"
weak_num_Y2 = f"{Y2}共发现缺陷{Y2_quexian_num}"
weak_num_Y3 = f"{Y3}共发现缺陷{Y3_quexian_num}"
except Exception as e:
print(f"缺陷图获取失败:{e}")
return
#添加检查情况汇总表
JIANCHA_HUIZONG_DIR = rf"{work_dir}\报告表格模板\检查情况汇总表.docx"
JIANCHA_HUIZONG = list(list("" for i in range(3)) for j in range(4))
JIANCHA_HUIZONG[1][0] = weak_num_Y1
JIANCHA_HUIZONG[2][0] = weak_num_Y2
JIANCHA_HUIZONG[3][0] = weak_num_Y3
JIANCHA_HUIZONG[1][1] = Y1_jiancha
JIANCHA_HUIZONG[2][1] = Y2_jiancha
JIANCHA_HUIZONG[3][1] = Y3_jiancha
JIANCHA_HUIZONG[1][2] = "\n".join([f"{i+1}.{name}" for i, (name, path) in enumerate(Y1_quexian_dict.items())]) if Y1_quexian_num else '未发现明显影响风力发电机组正常运行的缺陷'
JIANCHA_HUIZONG[2][2] = "\n".join([f"{i+1}.{name}" for i, (name, path) in enumerate(Y2_quexian_dict.items())]) if Y2_quexian_num else '未发现明显影响风力发电机组正常运行的缺陷'
JIANCHA_HUIZONG[3][2] = "\n".join([f"{i+1}.{name}" for i, (name, path) in enumerate(Y3_quexian_dict.items())]) if Y3_quexian_num else '未发现明显影响风力发电机组正常运行的缺陷'
output_doc, message = await add_table_to_document(output_dir, JIANCHA_HUIZONG_DIR,4,3,total_table_num,JIANCHA_HUIZONG,False,ALIGMENT='LEFT')
print(message)
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
total_table_num += 1
head_num += 1
#主要部位图片展示表/检查内容表
search_file_list = ["外汇总","内汇总","防汇总"]
picture_Y1_num, Y1_dict = collect_defect_data(Y1, Picture_dir, ifwaibu, ifneibu, search_file_list, iffanglei)
picture_Y2_num, Y2_dict = collect_defect_data(Y2, Picture_dir, ifwaibu, ifneibu, search_file_list, iffanglei)
picture_Y3_num, Y3_dict = collect_defect_data(Y3, Picture_dir, ifwaibu, ifneibu, search_file_list, iffanglei)
print(f"图片、文字数量:{picture_Y1_num} {picture_Y2_num} {picture_Y3_num}")
JIANCHA_NEIRONG_TOTAL_NUM = picture_Y1_num+ picture_Y2_num + picture_Y3_num
col ,row = 3, 0
JIANCHA_NEIRONG_PICTURES_TABLE = rf"{work_dir}\报告表格模板\check2.docx"
JIANCHA_NEIRONG_Y1_DIR = rf"{work_dir}\报告表格模板\检查内容表.docx"
JIANCHA_NEIRONG_Y1 = list(list("" for _ in range(3)) for j in range(1))
JIANCHA_NEIRONG_Y1[0][0] = f"叶片1{Y1}检查内容"
print(f"Y1标题内容{JIANCHA_NEIRONG_Y1}")
JIANCHA_NEIRONG_Y2_DIR = rf"{work_dir}\报告表格模板\check3.docx"
JIANCHA_NEIRONG_Y2 = list(list("" for _ in range(3)) for j in range(1))
JIANCHA_NEIRONG_Y2[0][0] = f"叶片2{Y2}检查内容"
print(f"Y2标题内容{JIANCHA_NEIRONG_Y2}")
JIANCHA_NEIRONG_Y3_DIR = rf"{work_dir}\报告表格模板\check3.docx"
JIANCHA_NEIRONG_Y3 = list(list("" for _ in range(3)) for j in range(1))
JIANCHA_NEIRONG_Y3[0][0] = f"叶片3{Y3}检查内容"
print(f"Y3标题内容{JIANCHA_NEIRONG_Y3}")
print(f"当前表格序号为 {total_table_num}")
print(key_words)
output_doc, message = await add_table_to_document(output_dir, JIANCHA_NEIRONG_Y1_DIR,1,3,total_table_num,JIANCHA_NEIRONG_Y1,True, 1)
print(message)
total_table_num += 1
total_table_num = await process_images_table(Y1_dict, output_dir, total_table_num, JIANCHA_NEIRONG_PICTURES_TABLE, key_words)
output_doc, message = await add_table_to_document(output_dir, JIANCHA_NEIRONG_Y2_DIR,1,3,total_table_num,JIANCHA_NEIRONG_Y2,True, 1)
print(message)
total_table_num += 1
total_table_num = await process_images_table(Y2_dict, output_dir, total_table_num, JIANCHA_NEIRONG_PICTURES_TABLE, key_words)
output_doc, message = await add_table_to_document(output_dir, JIANCHA_NEIRONG_Y3_DIR,1,3,total_table_num,JIANCHA_NEIRONG_Y3,True, 1)
print(message)
total_table_num += 1
total_table_num = await process_images_table(Y3_dict, output_dir, total_table_num, JIANCHA_NEIRONG_PICTURES_TABLE, key_words)
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
head_num += 1
#缺陷详情
QUEXIAN_XIANGQING_DIR = rf"{work_dir}\报告表格模板\检查详情表.docx"
QUEXIAN_XIANGQING_TITLE_DIR = rf"{work_dir}\报告表格模板\检查详情标题.docx"
Y_tables = [Y1_quexian_dict,Y2_quexian_dict,Y3_quexian_dict]
Y1_table_list = []
Y2_table_list = []
Y3_table_list = []
table_lists = [Y1_table_list, Y2_table_list, Y3_table_list]
for i, (table_list, Y_dict) in enumerate(zip(table_lists, Y_tables)):
for image_name, image_path in Y_dict.items():
# 从图片名解析各个字段
parts = image_name.split('_')
if len(parts) >= 8: # 确保有7个部分
defect_type = parts[1]
defect_location = parts[2]
defect_size = parts[3]
visibility = parts[4]
urgency = parts[5]
severity = parts[6]
repair_suggestion = parts[7]
print(f"获取第{i+1}个叶片的缺陷图: {image_path}")
table_list.append({
"QueXianLeiXing": defect_type,
"QueXianWeiZhi": defect_location,
"QueXianChiCun": defect_size,
"WeiZongDengJi": severity,
"Tupian_Dir": image_path,
"visibility": visibility,
"urgency": urgency,
"repair_suggestion": repair_suggestion.split('.')[0], # 新增维修建议字段
})
else:
table_list.append({
"QueXianLeiXing": "图片命名有误",
"QueXianWeiZhi": "图片命名有误",
"QueXianChiCun": "图片命名有误",
"WeiZongDengJi": "图片命名有误",
"Tupian_Dir": image_path,
"visibility": "图片命名有误",
"urgency": "图片命名有误",
"repair_suggestion": "图片命名有误", # 新增维修建议字段
})
Y1_TABLES, Y1_TABLES_PICTURES = fill_tables(table_lists[0],4,5,len(table_lists[0]),Y1)
Y2_TABLES, Y2_TABLES_PICTURES = fill_tables(table_lists[1],4,5,len(table_lists[1]),Y2)
Y3_TABLES, Y3_TABLES_PICTURES = fill_tables(table_lists[2],4,5,len(table_lists[2]),Y3)
print(await add_documents(output_dir, QUEXIAN_XIANGQING_TITLE_DIR))
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
head_num += 1
table_num = 0
Xu_Hao = 0
total_table_num,table_num,Xu_Hao = await add_dynamic_table(output_doc,output_dir,table_num,Y1_TABLES,QUEXIAN_XIANGQING_DIR,Y1_TABLES_PICTURES,4,5,total_table_num,False,xuhao=Xu_Hao)
total_table_num,table_num,Xu_Hao = await add_dynamic_table(output_doc,output_dir,table_num,Y2_TABLES,QUEXIAN_XIANGQING_DIR,Y2_TABLES_PICTURES,4,5,total_table_num,False,xuhao=Xu_Hao)
total_table_num,table_num,Xu_Hao = await add_dynamic_table(output_doc,output_dir,table_num,Y3_TABLES,QUEXIAN_XIANGQING_DIR,Y3_TABLES_PICTURES,4,5,total_table_num,False,xuhao=Xu_Hao)
#总结
ZONG_JIE_DIR = rf"{work_dir}\报告表格模板\总结.docx"
ZONG_JIE_BEFORE = "result"
ZONG_JIE = baogao_info['baogao_zongjie']
print(await add_documents(output_dir, ZONG_JIE_DIR))
print(await search_and_replace(output_dir, ZONG_JIE_BEFORE, ZONG_JIE))
print(await search_and_replace(output_dir, 'company_yi', Yi_company))
print(await search_and_replace(output_dir, 'baogao_date', baogao_date.split(' ')[0]))
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
if __name__ == '__main__':
base_info = {
'picture_dir': r"C:\Users\DTAI\Desktop\work\报告生成\机组外部",
'muban_dir': r"C:\Users\DTAI\Desktop\work\报告生成",
'shengcheng_dir': r"C:\Users\DTAI\Desktop\work\报告生成\结果",
}
asyncio.run(generate_report(base_info,None))
# #添加总结