7/9update

This commit is contained in:
Voge1imkafig 2025-07-09 17:19:59 +08:00
parent e28007f5b0
commit 2dc5d79fcb
13 changed files with 17 additions and 528 deletions

View File

@ -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"]
#依次获取叶片123的信息未考虑多个同叶片的信息情况正常情况下不会发生
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台M350rtkM300rtkM30TM30精灵4PRO2、大疆精灵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()

Binary file not shown.

Binary file not shown.

View File

@ -5,3 +5,4 @@ GETSHIGONGINFO = "/t-construction/list"
GETWEATHERINFO = "/weather-type/{weatherCode}" GETWEATHERINFO = "/weather-type/{weatherCode}"
GETPICTURELIST = "/image/list" GETPICTURELIST = "/image/list"
GETPARTLIST = "/part/list" GETPARTLIST = "/part/list"
GETYEPIANINFO = "/part/detail/{partId}"

View File

@ -102,6 +102,10 @@ def get_part_picture(turbineId : str) -> tuple[list[dict], list[dict]]:
print(f"图片数据获取成功:{result}") print(f"图片数据获取成功:{result}")
return part_data, 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]): def find_defect_record(defect_pictures : list[dict]):
"""查找缺陷图片的缺陷记录 """查找缺陷图片的缺陷记录

View File

@ -20,6 +20,7 @@ DEFAULT_BAOGAO_INFO = {
"dianxing_enum" : "TYPICAL", "dianxing_enum" : "TYPICAL",
"quexian_enum" : "DEFECT", "quexian_enum" : "DEFECT",
"other_enum" : "OTHER",
"waibu_enum" : "out_work", "waibu_enum" : "out_work",
"neibu_enum" : "in_work", "neibu_enum" : "in_work",
"fanglei_enum" : "lightning-protection-work", "fanglei_enum" : "lightning-protection-work",

View File

@ -236,7 +236,9 @@ def create_thumbnail(file_path: str, size: tuple) -> Image:
def process_picture_data(picture_data : list[dict], def process_picture_data(picture_data : list[dict],
image_source_to_find : list[str], image_source_to_find : list[str],
quexian_type : str, quexian_type : str,
dianxing_type : str) -> tuple[list[str], list[str]]: dianxing_type : str,
other_type : str
) -> tuple[list[str], list[str]]:
"""处理从数据库获取的图片数据 """处理从数据库获取的图片数据
Args: Args:
@ -244,14 +246,20 @@ def process_picture_data(picture_data : list[dict],
image_source_to_find (list[str]): 要查找的图片来源枚举(外内防雷) image_source_to_find (list[str]): 要查找的图片来源枚举(外内防雷)
quexian_type (str): 缺陷类型枚举值 quexian_type (str): 缺陷类型枚举值
dianxing_type (str): 典型类型枚举值 dianxing_type (str): 典型类型枚举值
other_type (str): 其他类型枚举值
Returns: Returns:
tuple( tuple(
defct_pictures, 缺陷图列表 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] 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))