474 lines
24 KiB
Python
474 lines
24 KiB
Python
from info_core.esay_docx_func import *
|
||
from info_core.get_pictures import *
|
||
|
||
from tools.document_tools import add_documents, add_table_to_document, add_picture_to_table, add_table_and_replace, create_document
|
||
from tools.content_tools import search_and_replace, add_picture, split_table_by_row_content
|
||
|
||
import os, re
|
||
|
||
from get_imformation import contentfill_window, Ui_MainWindow
|
||
|
||
async def generate_report(ui : Ui_MainWindow, widget : contentfill_window, base_info = None, baogao_info = None):
|
||
"""生成报告函数-Qt专供版,所有信息从Qt的ui获取
|
||
即,图片从ui中label的图片路径获取。
|
||
"""
|
||
#获取模板编号、模板名称
|
||
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 = ui.jituan_jianxie.text()
|
||
fengchang_name = ui.fengchang_name.text()
|
||
muban_dir = ui.muban_dir.text()
|
||
shengcheng_dir = ui.output_dir.text()
|
||
Yi_company = ui.Yi_Company.text()
|
||
fengchang_location = ui.fengchang_location.text()
|
||
Jia_company = ui.Jia_Company .text()
|
||
Jia_fuzeren = ui.fuzeren.text()
|
||
Jia_phone = ui.phone_fuzeren.text()
|
||
jizu_num = ui.project_num.text()
|
||
|
||
if muban_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': "风力发电机组叶片检查报告", #报告类型
|
||
#检查方案
|
||
#待完善
|
||
'beizhu': '无',
|
||
'renyuan_peizhi': '''2人;主检飞手1人,副检抄表1人
|
||
3人,轮毂机舱作业1人,揽风绳作业1人,无人设备操作员及抄表1人
|
||
1人;抄表人员1人,检测人员1人,监护1人。
|
||
1人;主检飞手1人
|
||
2人;轮毂作业检查2人''',
|
||
'gongzuo_neirong': '''无人机叶片防雷导通测
|
||
无人吊篮叶片导通测试(含机舱设备、)
|
||
风机基础、办公楼、变电站防雷接地检测及浪涌保护器测试
|
||
无人机叶片外观巡检
|
||
叶片内部检查''',
|
||
'shigong_fangan': '无',
|
||
'shebei_peizhi': '''1四轴电阻无人机1套,电子微欧计1台,视频记录手机1台
|
||
无人吊篮系统1套(爬绳器+接触平台)、电子微欧计1套,视频记录手机1台,对讲机2台
|
||
接地电阻测试仪1套、SPD测试仪1套、对讲机2个、
|
||
1、大疆无人机1台(M350rtk,M300rtk,M30T,M30,精灵4PRO)2、大疆精灵4PRO+索尼A7R2机身+索尼200-600mm镜头/适马150-600mm镜头
|
||
1、人工检查:照明设备2套,视频记录手机2台,含氧量监测仪1台,电动扳手2套,卷尺1个。2、爬壁机器人检查:无人作业校车+视频图传1套,照明设备2套,含氧量监测仪1台,电动扳手2套,卷尺1个。''',
|
||
'jiancha_renyuan': '张三',
|
||
#检查信息
|
||
'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 = ui.jiancha_date.text()
|
||
baogao_type = ui.baogao_name.text()
|
||
baogao_date = ui.shenghe_shijian.text()
|
||
project_number = ui.jizu_type.text()
|
||
|
||
#date_year_month = get_year_month(baogao_date)
|
||
|
||
Jiancha_renyuan = ui.jiancha_renyuan.text()
|
||
shebei_peizhi = widget.check_method_textedits['工作内容'].toPlainText()
|
||
shigong_fangan = widget.check_method_textedits['施工方案'].toPlainText()
|
||
renyuan_peizhi = widget.check_method_textedits['人员配置'].toPlainText()
|
||
gongzuo_neirong = widget.check_method_textedits['工作内容'].toPlainText()
|
||
beizhu = widget.check_method_textedits['备注'].toPlainText()
|
||
|
||
Jiancha_location = ui.baogao_name.text()
|
||
Jiancha_fangshi = ui.jiancha_fangshi.text()
|
||
Changjia = ui.changjia.text()
|
||
|
||
yezhu_renyuan = ui.yezhu_renyuan.text()
|
||
changjia_renyuan = ui.changjia_renyuan.text()
|
||
data_process = ui.shujuchuli.text()
|
||
baogao_bianzhi = ui.baogao_bianzhi.text()
|
||
baogao_shenghe = ui.baogao_shenghe.text()
|
||
shenghe_date = ui.shenghe_shijian.text()
|
||
|
||
Y1_jiancha = ui.textEdit_4.toPlainText()
|
||
Y2_jiancha = ui.textEdit_5.toPlainText()
|
||
Y3_jiancha = ui.textEdit_6.toPlainText()
|
||
|
||
Picture_dir = widget.Picture_dir
|
||
|
||
except Exception as e:
|
||
print(f"报告基本信息获取失败:{e}")
|
||
return
|
||
if not os.path.exists(muban_dir):
|
||
print("模板目录不存在或路径错误")
|
||
return
|
||
|
||
Y1 = widget.Y1
|
||
Y2 = widget.Y2
|
||
Y3 = widget.Y3
|
||
tatong_image_path = ui.Tatong_label.current_path
|
||
if tatong_image_path == None:
|
||
print(f'塔筒图片未导入,置空')
|
||
tatong_image_path = ""
|
||
|
||
output_doc = None
|
||
head_num = 1
|
||
###封面创建###
|
||
#封面目录
|
||
cover_dirs = [rf"{muban_dir}\封面\外部封面1.docx",rf"{muban_dir}\封面\封面图片.jpg",rf"{muban_dir}\封面\外部封面2.docx"]
|
||
#输出目录
|
||
output_dir = fr"{shengcheng_dir}\{jituan_name}{fengchang_name}项目{baogao_type}{project_number}{baogao_date.replace('/', '.')}版.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 = widget.ifwaibu
|
||
ifneibu = widget.ifneibu
|
||
iffanglei = widget.iffanglei
|
||
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, baogao_date))
|
||
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
|
||
if not ui.checkBox.isChecked():
|
||
#项目概况表
|
||
XIANG_MU_GAI_KUANG = rf"{muban_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"{muban_dir}\报告表格模板\检查方案.docx"
|
||
list_to_replace = {
|
||
'renyuan_peizhi' : renyuan_peizhi,
|
||
'shebei_peizhi' : shebei_peizhi,
|
||
'shigong_fangan' : shigong_fangan,
|
||
'gongzuo_neirong' : gongzuo_neirong,
|
||
'beizhu' : beizhu,
|
||
'num' : num_to_chinese[head_num],
|
||
}
|
||
print(await add_table_and_replace(output_dir, FANGAN_JIANCHA_DIR, 0, list_to_replace))
|
||
print(split_table_by_row_content(output_dir,output_dir,total_table_num))
|
||
total_table_num += 1
|
||
head_num += 1
|
||
|
||
if not ui.checkBox_8.isChecked():
|
||
JIANCHA_XINGXI_DIR = rf"{muban_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
|
||
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] = ui.label_52.text() + ui.total_picture_num.text() + ui.label_56.text() + ui.jiancha_xiangqing.toPlainText()
|
||
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(widget.total_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
|
||
|
||
if not ui.checkBox_9.isChecked():
|
||
#添加成果递交表
|
||
CHENGGUO_DIJIAO_DIR = rf"{muban_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
|
||
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
|
||
CHENGGUO_DIJIAO[3][3] = baogao_date
|
||
CHENGGUO_DIJIAO[4][3] = baogao_date
|
||
CHENGGUO_DIJIAO[5][3] = shenghe_date
|
||
|
||
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
|
||
|
||
if not ui.checkBox_10.isChecked():
|
||
#添加检查情况汇总表
|
||
JIANCHA_HUIZONG_DIR = rf"{muban_dir}\报告表格模板\检查情况汇总表.docx"
|
||
JIANCHA_HUIZONG = list(list("" for i in range(3)) for j in range(4))
|
||
|
||
JIANCHA_HUIZONG[1][0] = ui.weak_num_Y1.text()
|
||
JIANCHA_HUIZONG[2][0] = ui.weak_num_Y2.text()
|
||
JIANCHA_HUIZONG[3][0] = ui.weak_num_Y3.text()
|
||
JIANCHA_HUIZONG[1][1] = Y1_jiancha
|
||
JIANCHA_HUIZONG[2][1] = Y2_jiancha
|
||
JIANCHA_HUIZONG[3][1] = Y3_jiancha
|
||
JIANCHA_HUIZONG[1][2] = ui.textEdit.toPlainText()
|
||
JIANCHA_HUIZONG[2][2] = ui.textEdit_2.toPlainText()
|
||
JIANCHA_HUIZONG[3][2] = ui.textEdit_3.toPlainText()
|
||
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
|
||
|
||
if not ui.checkBox_11.isChecked():
|
||
#主要部位图片展示表/检查内容表
|
||
Y1_dict = {}
|
||
Y2_dict = {}
|
||
Y3_dict = {}
|
||
total_dict = [Y1_dict, Y2_dict, Y3_dict]
|
||
for i in range(3):
|
||
if widget.get_info_mode == 0:
|
||
for j in range(len(widget.line_init_list[i])):
|
||
total_dict[i][widget.line_init_list[i][j].text()] = widget.label_init_list[i][j].current_path
|
||
for j in range(len(widget.new_add_dlabel[i])):
|
||
total_dict[i][widget.new_add_lines[i][j].text()] = widget.new_add_dlabel[i][j].current_path
|
||
picture_Y1_num = len(total_dict[0])
|
||
picture_Y2_num = len(total_dict[1])
|
||
picture_Y3_num = len(total_dict[2])
|
||
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"{muban_dir}\报告表格模板\check2.docx"
|
||
JIANCHA_NEIRONG_Y1_DIR = rf"{muban_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"{muban_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"{muban_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(total_dict[0], 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(total_dict[1], 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(total_dict[2], 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
|
||
|
||
if not ui.checkBox_13.isChecked():
|
||
#缺陷详情
|
||
QUEXIAN_XIANGQING_DIR = rf"{muban_dir}\报告表格模板\检查详情表.docx"
|
||
QUEXIAN_XIANGQING_TITLE_DIR = rf"{muban_dir}\报告表格模板\检查详情标题.docx"
|
||
|
||
Y1_quexian_dicts = []
|
||
Y2_quexian_dicts = []
|
||
Y3_quexian_dicts = []
|
||
Y_tables = [Y1_quexian_dicts,Y2_quexian_dicts,Y3_quexian_dicts]
|
||
Y1_table_list = []
|
||
Y2_table_list = []
|
||
Y3_table_list = []
|
||
table_lists = [Y1_table_list, Y2_table_list, Y3_table_list]
|
||
|
||
for i in range(len(Y_tables)):
|
||
for image in widget.table_infos_modules[i]:
|
||
Y_tables[i].append({
|
||
'visibility': image['visibility_combo'].currentText(),
|
||
'severity': image['severity_combo'].currentText(),
|
||
'urgency': image['urgency_combo'].currentText(),
|
||
'defect_type': image['defect_type_combo'].combo_box.currentText(),
|
||
'defect_location': image['defect_location_edit'].text(),
|
||
'defect_size': image['defect_size_edit'].text(),
|
||
'repair_suggestion': image['repair_suggestion_edit'].toPlainText(),
|
||
'image_path': image['image_path'],
|
||
})
|
||
|
||
for i, (table_list, Y_table) in enumerate(zip(table_lists, Y_tables)):
|
||
for image_info in Y_table:
|
||
# 从图片名解析各个字段
|
||
defect_type = image_info['defect_type']
|
||
defect_location = image_info['defect_location']
|
||
defect_size = image_info['defect_size']
|
||
visibility = image_info['visibility']
|
||
urgency = image_info['urgency']
|
||
severity = image_info['severity']
|
||
repair_suggestion = image_info['repair_suggestion']
|
||
|
||
print(f"获取第{i+1}个叶片的缺陷图: {image_info['image_path']}")
|
||
|
||
table_list.append({
|
||
"QueXianLeiXing": defect_type,
|
||
"QueXianWeiZhi": defect_location,
|
||
"QueXianChiCun": defect_size,
|
||
"WeiZongDengJi": severity,
|
||
"Tupian_Dir": image_info['image_path'],
|
||
"visibility": visibility,
|
||
"urgency": urgency,
|
||
"repair_suggestion": 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"{muban_dir}\报告表格模板\总结.docx"
|
||
ZONG_JIE_BEFORE = "result"
|
||
ZONG_JIE = ui.conclusion.toPlainText()
|
||
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))
|
||
print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num]))
|
||
return output_dir |