diff --git a/Generate_Report.py b/Generate_Report.py deleted file mode 100644 index 692aea6..0000000 --- a/Generate_Report.py +++ /dev/null @@ -1,525 +0,0 @@ -# 文档处理工具 -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,split_table_by_row_content, - search_and_replace,add_picture_to_table -) - -from tools.get_pictures import ( - make_Thumbnail,resize_and_reduce_quality, - get_picture_nums,find_image,collect_defect_data, - process_picture_data -) - -from tools.Get_Json import ( - get_project_info,get_jizu_info, - get_jizu_shigong_info,get_weather, - get_part_picture -) - -from tools.dataproccess import ( - caculate_work_days,add_dynamic_table, - get_year_month,merge_info, -) - -import asyncio - -from core.tables import fill_tables - -from tools.defines import * -import os, re, datetime -from pathlib import Path - -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' - turbine_id = base_info['turbine_id'] - - jizu_data = get_jizu_info(turbine_id) - project_data = get_project_info(jizu_data['projectId']) - shigong_data = get_jizu_shigong_info(turbine_id) - - try: - fengchang_name = project_data['farmName'] - Yi_company = project_data['inspectionUnit'] - yi_fuzeren = project_data['inspectionContact'] - yi_phone = project_data['inspectionPhone'] - fengchang_location = project_data['farmAddress'] - Jia_company = project_data['client'] - jia_fuzeren = project_data['clientContact'] - jia_phone = project_data['clientPhone'] - jizu_num = project_data['scale'] - jizu_xinghao = project_data['turbineModel'] - project_name = project_data['projectName'] - jizu_bianhao = jizu_data["turbineName"] - start_date = project_data['startDate'] - end_date = project_data['endDate'] - gongqi = caculate_work_days(start_date, end_date) - except Exception as e: - print(f"数据库的项目-机组基本信息获取失败:{e}") - return - - try: - baogao_date = datetime.datetime.now().strftime("%Y年%m月%d日 %H:%M") #现在的时间 - date_year_month = get_year_month(baogao_date) - - #前端信息 - baogao_info = merge_info(baogao_info, DEFAULT_BAOGAO_INFO) - key_words= re.compile('|'.join(map(re.escape, baogao_info['key_words'].split(',')))) - shengcheng_dir = baogao_info['shengcheng_dir'] - muban_dir = baogao_info['muban_dir'] - if muban_dir == "" or shengcheng_dir == "": - print("未配置模板/生成路径,请检查配置") - return - if_waibu = baogao_info["if_waibu"] - if_neibu = baogao_info["if_neibu"] - if_fanglei = baogao_info["if_fanglei"] - - quexian_type = baogao_info['quexian_enum'] - - dianxing_type = baogao_info['dianxing_enum'] - - - #数据库拉取信息 - Jiancha_date = shigong_data["startTime"].replace("T", " ") #检查日期 - image_count = shigong_data['imageCount'] #从施工方案获取的图片数量,待定!!! - temperature = shigong_data['temperature'] #温度 - wind_speed = shigong_data['windSpeed'] #风速 - weather = get_weather(shigong_data["weatherCode"]) #天气 不从此接口获取,待定!!! - - #拉取部件、图片数据 - part_data, picture_data = get_part_picture(turbine_id) - - #获取叶片信息 - print(part_data) - Yepians = [] - yepian_to_find = ["叶片1","叶片2","叶片3"] - #依次获取叶片1,2,3的信息(未考虑多个同叶片的信息情况,正常情况下不会发生) - for name in yepian_to_find: - # 找到第一个匹配的部件并添加到列表中 - for part in part_data: - if part['partName'] == name: - Yepians.append(part) - print(Yepians) - print(f"找到叶片号{[yepian["partCode"] for yepian in Yepians]}") - Y_Code = [yepian["partCode"] for yepian in Yepians] - - image_source_to_find = [] - baogao_label = [] - renyuan_peizhi = [] - gongzuo_neirong = [] - shigong_fangan = [] - shebei_peizhi = [] - beizhu = [] - jiancha = [] - neirong = [] - #获取对应枚举字段 - if if_waibu: - baogao_label.append("外观") - image_source_to_find.append(baogao_info['waibu_enum']) - if baogao_info["shigong_fangan"] == "None": - print("未传入施工方案,使用已有枚举") - renyuan_peizhi.append(SHIGONG_FANGAN_ENUM.WAIBU.RENYUAN_PEIZHI) - gongzuo_neirong.append(SHIGONG_FANGAN_ENUM.WAIBU.GONGZUO_NEIRONG) - shebei_peizhi.append(SHIGONG_FANGAN_ENUM.WAIBU.SHEBEI_PEIZHI) - shigong_fangan.append(SHIGONG_FANGAN_ENUM.WAIBU.SHIGONG_FANGAN) - else: - pass #待添加如果从平台传入枚举,但目前没必要,如果这种枚举标准信息库有更好的优化则可以实现 - jiancha.append("无人机近距离外观检查") - neirong.append(f"、".join(Y_Code) + "三支叶片的前缘、后缘、迎风面、背风面。") - if if_neibu: - baogao_label.append("内部") - image_source_to_find.append(baogao_info['neibu_enum']) - if baogao_info["shigong_fangan"] == "None": - renyuan_peizhi.append(SHIGONG_FANGAN_ENUM.NEIBU.RENYUAN_PEIZHI) - gongzuo_neirong.append(SHIGONG_FANGAN_ENUM.NEIBU.GONGZUO_NEIRONG) - shebei_peizhi.append(SHIGONG_FANGAN_ENUM.NEIBU.SHEBEI_PEIZHI) - shigong_fangan.append(SHIGONG_FANGAN_ENUM.NEIBU.SHIGONG_FANGAN) - else: - pass - jiancha.append("人工内部拍摄") - neirong.append(f"、".join(Y_Code) + "三支叶片的内部导雷卡、腹板、透光、人孔盖版、叶根盖板...") - if if_fanglei: - baogao_label.append("防雷") - image_source_to_find.append(baogao_info['fanglei_enum']) - if baogao_info["shigong_fangan"] == "None": - renyuan_peizhi.append(SHIGONG_FANGAN_ENUM.FANGLEI.YEPIAN.RENYUAN_PEIZHI) - gongzuo_neirong.append(SHIGONG_FANGAN_ENUM.FANGLEI.YEPIAN.GONGZUO_NEIRONG) - shebei_peizhi.append(SHIGONG_FANGAN_ENUM.FANGLEI.YEPIAN.SHEBEI_PEIZHI) - shigong_fangan.append(SHIGONG_FANGAN_ENUM.FANGLEI.YEPIAN.SHIGONG_FANGAN) - else: - pass - jiancha.append("人工防雷") - neirong.append(f"轮毂至塔基导通、内部导线线阻、外部导线线阻...") - - #获取缺陷图列表和典型图列表 - defect_pictures, typical_pictures = process_picture_data(picture_data, image_source_to_find, quexian_type, dianxing_type) - print(f"\n\n\n缺陷图片列表:{defect_pictures}\n\n\n典型图片列表:{typical_pictures}\n\n\n") - - #处理图片数据待完成,图片绑定施工后 - defect_pictures_id = [pic for pic in defect_pictures] - - - baogao_bianzhi = baogao_info["userName"] - baogao_shenghe = baogao_info["baogaoCheck"] - - except Exception as e: - print(f"报告基本信息获取失败:{e}") - return - - normal_picture_num = 0 - - output_doc = None - head_num = 1 - ###封面创建### - cover_dirs = [os.path.join(muban_dir,"fengmian1.docx"),os.path.join(muban_dir,"fengmian.jpg"),os.path.join(muban_dir,"fengmian2.docx")] - #输出目录 - baogao_name = "叶片" + "、".join(baogao_label) - output_dir = os.path.normpath(f"{shengcheng_dir}/{project_name}项目{baogao_name}{jizu_bianhao}{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 - - mianzhe_shengming = f"本报告仅涵盖{'、'.join(baogao_label)}检测内容" - - #创建文档、添加封面 - print(await create_document(output_dir)) - print(add_documents(output_dir, cover_dirs[0])) - print(await add_picture(output_dir, cover_dirs[1])) - print(add_documents(output_dir, cover_dirs[2])) - print("封面创建成功") - - #更改文档信息 - print(await search_and_replace(output_dir, TITLE_OF_REPORT, jizu_bianhao)) - print(await search_and_replace(output_dir, baogao_name1, baogao_name)) - print(await search_and_replace(output_dir, baogao_name2, baogao_name)) - print(await search_and_replace(output_dir, company_name_yi, Yi_company)) - print(await search_and_replace(output_dir, cover_project, fengchang_name)) - print(await search_and_replace(output_dir, cover_encode, jizu_bianhao)) - 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 - #项目概况表 - print("开始添加项目概况表") - XIANG_MU_GAI_KUANG = os.path.join(muban_dir,"xiangmugaikuo.docx") - print(f"查找模板,找到模板:{XIANG_MU_GAI_KUANG}") - project_location = fengchang_location - company_name_jia = Jia_company - fuzeren = yi_fuzeren - phone_fuzeren = yi_phone - xiangmuguige = jizu_num - Yi_company = Yi_company - XIANGMU_GAIKUO = list(list("" for i in range(6)) for j in range(5)) - XIANGMU_GAIKUO[0][1] = fengchang_name - #XIANGMU_GAIKUO[0][3]=XIANGMU_GAIKUO[0][4] = "盐城市滨海县" - XIANGMU_GAIKUO[0][4] = project_location - #XIANGMU_GAIKUO[1][1]=XIANGMU_GAIKUO[2,1]=XIANGMU_GAIKUO[3,1] = "国家电投集团滨海风力发电有限公司" - XIANGMU_GAIKUO[1][1] = company_name_jia - XIANGMU_GAIKUO[1][4] = Yi_company - XIANGMU_GAIKUO[2][1] = jia_fuzeren - XIANGMU_GAIKUO[2][4] = fuzeren - XIANGMU_GAIKUO[3][2] = jia_phone - XIANGMU_GAIKUO[3][5] = phone_fuzeren - XIANGMU_GAIKUO[4][1] = jizu_xinghao - XIANGMU_GAIKUO[4][3] = xiangmuguige - XIANGMU_GAIKUO[4][5] = gongqi - print("建立表结构完毕,开始插入模板") - #添加项目概况表 - print(f"输出路径:{output_dir},模板路径:{XIANG_MU_GAI_KUANG},插入数据:{XIANGMU_GAIKUO}") - output_doc, message = await add_table_to_document(output_dir, XIANG_MU_GAI_KUANG,5,5,total_table_num,XIANGMU_GAIKUO) - print(message) - print("模板插入完毕,开始替换内容") - total_table_num += 1 - print(await search_and_replace(output_dir, jiegou_xuhao, num_to_chinese[head_num])) - head_num += 1 - - #检查方案描述 - FANGAN_JIANCHA_DIR = os.path.join(muban_dir,"checkmethod.docx") - list_to_replace = { - 'renyuan_peizhi' : "\n".join(renyuan_peizhi), - 'shebei_peizhi' : "\n".join(shebei_peizhi), - 'shigong_fangan' : "\n".join(shigong_fangan), - 'gongzuo_neirong' : "\n".join(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 - - - JIANCHA_XINGXI_DIR = os.path.join(muban_dir,"checkinfo.docx") - JIANCHA_XINGXI = list(list("" for i in range(4)) for j in range(9)) - JIANCHA_XINGXI[0][1] = "" - JIANCHA_XINGXI[1][1] = Jiancha_date.split(' ')[0] - JIANCHA_XINGXI[1][3] = jizu_bianhao - JIANCHA_XINGXI[2][1] = "风力发电机组" + baogao_name - JIANCHA_XINGXI[2][3] = "、".join(jiancha) - JIANCHA_XINGXI[3][2] = ""#需要使用查看叶片详情接口获取,待完成 - JIANCHA_XINGXI[4][1] = '机组编号:' + jizu_bianhao+ '机组' - JIANCHA_XINGXI[5][1] = Y_Code[0] - JIANCHA_XINGXI[6][1] = Y_Code[1] if len(Y_Code) > 1 else "" - JIANCHA_XINGXI[7][1] = Y_Code[2] if len(Y_Code) > 2 else "" - JIANCHA_XINGXI[8][0] = "本次" + "、".join(_ for _ in jiancha) + f"检查,采集叶片图片{normal_picture_num}张,内容覆盖" + ";".join(_ for _ in neirong) - # if total_picture_dir == "": - # Thumbnail_Picture = await make_Thumbnail(Picture_dir, Picture_dir)#添加图片 - # else: - # print('传入了总图片路径,获取图片数量') - # Thumbnail_Picture = await make_Thumbnail(total_picture_dir, Picture_dir)#添加图片 - # normal_picture_num = get_picture_nums(total_picture_dir) - # JIANCHA_XINGXI42 = tatong_image_path - #新建检查信息表 - output_doc, message = await add_table_to_document(output_dir, JIANCHA_XINGXI_DIR,9,4,total_table_num ,JIANCHA_XINGXI,False) - print(message) - # 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 = os.path.join(muban_dir,"chengguo_sub.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] - 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 = os.path.join(muban_dir,"total_check.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 = os.path.join(muban_dir,"check2.docx") - # JIANCHA_NEIRONG_Y1_DIR = os.path.join(muban_dir,"check_content.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 = os.path.join(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 = os.path.join(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(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 = os.path.join(muban_dir,"check_check.docx") - # QUEXIAN_XIANGQING_TITLE_DIR = os.path.join(muban_dir,"check_check_title.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(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 = os.path.join(muban_dir,"result.docx") - ZONG_JIE_BEFORE = "result" - ZONG_JIE = baogao_info['baogao_zongjie'] - print(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])) - -def main(): - json_data1 = { - "turbine_id" : "183463dbf40d9278549a76b82b175dd9", - } - - json_data2 = { - 'shengcheng_dir': r".\output", - 'muban_dir': r".\muban", - # "shigong_fangan_enum" : { #可能放入标准信息库?但不论如何,修改了这个枚举的话,报告生成逻辑也要修改,待优化! - # "SHIGONG_FANGAN_ENUM": { - # "WAIBU": { - # "GONGZUO_NEIRONG": "无人机叶片外观巡检", - # "RENYUAN_PEIZHI": "1人;主检飞手1人", - # "SHEBEI_PEIZHI": "1、大疆无人机1台(M350rtk,M300rtk,M30T,M30,精灵4PRO)2、大疆精灵4PRO+索尼A7R2机身+索尼200-600mm镜头/适马150-600mm镜头", - # "SHIGONG_FANGAN": None - # }, - # "NEIBU": { - # "GONGZUO_NEIRONG": "叶片内部检查", - # "RENYUAN_PEIZHI": "2人;轮毂作业检查2人", - # "SHEBEI_PEIZHI": "1、人工检查:照明设备2套,视频记录手机2台,含氧量监测仪1台,电动扳手2套,卷尺1个。2、爬壁机器人检查:无人作业校车+视频图传1套,照明设备2套,含氧量监测仪1台,电动扳手2套,卷尺1个。", - # "SHIGONG_FANGAN": None - # }, - # "FANGLEI": { - # "YEPIAN": { - # "GONGZUO_NEIRONG": "无人机叶片防雷导通测试", - # "RENYUAN_PEIZHI": "2人;主检飞手1人,副检抄表1人", - # "SHEBEI_PEIZHI": "1四轴电阻无人机1套,电子微欧计1台,视频记录手机1台", - # "SHIGONG_FANGAN": None - # }, - # "DIAOLAN": { - # "GONGZUO_NEIRONG": "无人吊篮叶片导通测试(含机舱设备、)", - # "RENYUAN_PEIZHI": "3人,轮毂机舱作业1人,揽风绳作业1人,无人设备操作员及抄表1人", - # "SHEBEI_PEIZHI": "无人吊篮系统1套(爬绳器+接触平台)、电子微欧计1套,视频记录手机1台,对讲机2台", - # "SHIGONG_FANGAN": None - # }, - # "SHESHI": { - # "GONGZUO_NEIRONG": "风机基础、办公楼、变电站防雷接地检测及浪涌保护器测试", - # "RENYUAN_PEIZHI": "1人;抄表人员1人,检测人员1人,监护1人。", - # "SHEBEI_PEIZHI": "接地电阻测试仪1套、SPD测试仪1套、对讲机2个、", - # "SHIGONG_FANGAN": None - # }, - # "FEISHOURENYUAN_PEIZHI": "1人;主检飞手1人", - # "LUNGUZUOYERENYUAN_PEIZHI": "2人;轮毂作业检查2人" - # } - # } - # }, - } - asyncio.run(generate_report(json_data1,json_data2)) - print('文档生成完毕') -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/muban/checkinfo.docx b/muban/checkinfo.docx index 6c60b8f..83c8c29 100644 Binary files a/muban/checkinfo.docx and b/muban/checkinfo.docx differ diff --git a/muban/chengguo_sub.docx b/muban/chengguo_sub.docx index a36e983..d3ff098 100644 Binary files a/muban/chengguo_sub.docx and b/muban/chengguo_sub.docx differ diff --git a/output/三峡能源阿城万兴风电场防雷通道检测项目项目叶片外观、内部、防雷一期012号2025年07月08日版3.docx b/output/三峡能源阿城万兴风电场防雷通道检测项目项目叶片外观、内部、防雷检查报告一期012号2025年07月09日版2.docx similarity index 93% rename from output/三峡能源阿城万兴风电场防雷通道检测项目项目叶片外观、内部、防雷一期012号2025年07月08日版3.docx rename to output/三峡能源阿城万兴风电场防雷通道检测项目项目叶片外观、内部、防雷检查报告一期012号2025年07月09日版2.docx index eb657f2..a7258a1 100644 Binary files a/output/三峡能源阿城万兴风电场防雷通道检测项目项目叶片外观、内部、防雷一期012号2025年07月08日版3.docx and b/output/三峡能源阿城万兴风电场防雷通道检测项目项目叶片外观、内部、防雷检查报告一期012号2025年07月09日版2.docx differ diff --git a/output/三峡能源阿城万兴风电场项目风力发电机组叶片检查报告H3-08#2025年07月04日版.docx b/output/三峡能源阿城万兴风电场项目风力发电机组叶片检查报告H3-08#2025年07月04日版.docx deleted file mode 100644 index 947aa1d..0000000 Binary files a/output/三峡能源阿城万兴风电场项目风力发电机组叶片检查报告H3-08#2025年07月04日版.docx and /dev/null differ diff --git a/tools/API.py b/tools/API.py index 0a1db69..0c194f9 100644 --- a/tools/API.py +++ b/tools/API.py @@ -5,3 +5,4 @@ GETSHIGONGINFO = "/t-construction/list" GETWEATHERINFO = "/weather-type/{weatherCode}" GETPICTURELIST = "/image/list" GETPARTLIST = "/part/list" +GETYEPIANINFO = "/part/detail/{partId}" diff --git a/tools/Get_Json.py b/tools/Get_Json.py index 0b55c19..70aaeaf 100644 --- a/tools/Get_Json.py +++ b/tools/Get_Json.py @@ -102,6 +102,10 @@ def get_part_picture(turbineId : str) -> tuple[list[dict], list[dict]]: print(f"图片数据获取成功:{result}") return part_data, result +def get_yepian_xiangqing(yepian_id : str) -> dict: + url = GETYEPIANINFO.format(partId=yepian_id) + return get_data(DTURL + url, "data") + def find_defect_record(defect_pictures : list[dict]): """查找缺陷图片的缺陷记录 diff --git a/tools/__pycache__/API.cpython-313.pyc b/tools/__pycache__/API.cpython-313.pyc index 23f7340..f24d831 100644 Binary files a/tools/__pycache__/API.cpython-313.pyc and b/tools/__pycache__/API.cpython-313.pyc differ diff --git a/tools/__pycache__/Get_Json.cpython-313.pyc b/tools/__pycache__/Get_Json.cpython-313.pyc index 0a79772..b78b18d 100644 Binary files a/tools/__pycache__/Get_Json.cpython-313.pyc and b/tools/__pycache__/Get_Json.cpython-313.pyc differ diff --git a/tools/__pycache__/defines.cpython-313.pyc b/tools/__pycache__/defines.cpython-313.pyc index f98d6dc..f54027b 100644 Binary files a/tools/__pycache__/defines.cpython-313.pyc and b/tools/__pycache__/defines.cpython-313.pyc differ diff --git a/tools/__pycache__/get_pictures.cpython-313.pyc b/tools/__pycache__/get_pictures.cpython-313.pyc index ab09f33..bf7f984 100644 Binary files a/tools/__pycache__/get_pictures.cpython-313.pyc and b/tools/__pycache__/get_pictures.cpython-313.pyc differ diff --git a/tools/defines.py b/tools/defines.py index a8303ea..ab3e2dc 100644 --- a/tools/defines.py +++ b/tools/defines.py @@ -20,6 +20,7 @@ DEFAULT_BAOGAO_INFO = { "dianxing_enum" : "TYPICAL", "quexian_enum" : "DEFECT", + "other_enum" : "OTHER", "waibu_enum" : "out_work", "neibu_enum" : "in_work", "fanglei_enum" : "lightning-protection-work", diff --git a/tools/get_pictures.py b/tools/get_pictures.py index 5497237..65f3182 100644 --- a/tools/get_pictures.py +++ b/tools/get_pictures.py @@ -236,7 +236,9 @@ def create_thumbnail(file_path: str, size: tuple) -> Image: def process_picture_data(picture_data : list[dict], image_source_to_find : list[str], quexian_type : str, - dianxing_type : str) -> tuple[list[str], list[str]]: + dianxing_type : str, + other_type : str +) -> tuple[list[str], list[str]]: """处理从数据库获取的图片数据 Args: @@ -244,14 +246,20 @@ def process_picture_data(picture_data : list[dict], image_source_to_find (list[str]): 要查找的图片来源枚举(外内防雷) quexian_type (str): 缺陷类型枚举值 dianxing_type (str): 典型类型枚举值 + other_type (str): 其他类型枚举值 Returns: tuple( defct_pictures, 缺陷图列表 - dianxing_pictures 典型图列表 + dianxing_pictures, 典型图列表 + other_pictures, 其他图列表 + total_num 总图片数量 ) """ #过滤目标来源的图片数据 picture_data = [pic for pic in picture_data if pic['imageSource'] in image_source_to_find] #分别择出缺陷图和典型图 - return [pic for pic in picture_data if pic['imageType'] == quexian_type], [pic for pic in picture_data if pic['imageType'] == dianxing_type] + return ([pic for pic in picture_data if pic['imageType'] == quexian_type], + [pic for pic in picture_data if pic['imageType'] == dianxing_type], + [pic for pic in picture_data if pic['imageType'] == other_type], + len(picture_data)) \ No newline at end of file