diff --git a/Generate_Report.py b/Generate_Report.py index 6bb666f..561fb8d 100644 --- a/Generate_Report.py +++ b/Generate_Report.py @@ -15,7 +15,10 @@ from tools.get_pictures import ( get_picture_nums,find_image,collect_defect_data ) -from tools.Get_Json import get_project_info,get_jizu_info,get_jizu_shigong_info,get_weather +from tools.Get_Json import (get_project_info,get_jizu_info, + get_jizu_shigong_info,get_weather, + get_picture) + import asyncio @@ -121,11 +124,11 @@ async def generate_report(base_info, baogao_info): cover_date = "time" TITLE_OF_REPORT = "companyencode" jiegou_xuhao = 'num' + turbine_id = base_info['turbine_id'] - jizu_data = get_jizu_info(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(base_info['turbine_id']) - print(shigong_data) + shigong_data = get_jizu_shigong_info(turbine_id) try: fengchang_name = project_data['farmName'] Yi_company = project_data['inspectionUnit'] @@ -140,30 +143,49 @@ async def generate_report(base_info, baogao_info): except Exception as e: print(f"数据库的项目-机组基本信息获取失败:{e}") return - + try: baogao_date = datetime.datetime.now().strftime("%Y年%m月%d日 %H:%M") #现在的时间 - #数据库拉取信息 - 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"]) #天气 #前端信息 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"] + image_source_to_find = [] + #获取对应枚举字段 + if if_waibu: + image_source_to_find.append(baogao_info['waibu_enum']) + if if_neibu: + image_source_to_find.append(baogao_info['neibu_enum']) + if if_fanglei: + image_source_to_find.append(baogao_info['fanglei_enum']) + + 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"]) #天气 + picture_data = get_picture(turbine_id) + + + date_year_month = get_year_month(baogao_date) + project_number = baogao_info['jizu_type'] baogao_type = baogao_info['baogao_type'] - if muban_dir == "" or shengcheng_dir == "": - print("未配置图片/生成路径/总图片路径,请检查配置") - return - - 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'] diff --git a/tools/API.py b/tools/API.py index e56987e..7e4a6f3 100644 --- a/tools/API.py +++ b/tools/API.py @@ -2,4 +2,6 @@ DTURL = "http://pms.dtyx.net:9158" GETPROJECTINFO = "/project/detail/{projectId}" GETJIZUINFO = "/turbine/detail/{turbineId}" GETSHIGONGINFO = "/t-construction/list" -GETWEATHERINFO = "/weather-type/{weatherCode}" \ No newline at end of file +GETWEATHERINFO = "/weather-type/{weatherCode}" +GETPICTURELIST = "/image/list" +GETPARTLIST = "/part/list" \ No newline at end of file diff --git a/tools/Get_Json.py b/tools/Get_Json.py index cdbcdd5..594e888 100644 --- a/tools/Get_Json.py +++ b/tools/Get_Json.py @@ -2,7 +2,7 @@ import requests import json from tools.API import * -def get_data(url, data_type="data", params=None): +def get_data(url : str, data_type : str = "data", params : dict = None ) -> dict: headers = { "content_type": "application/x-www-form-urlencoded" } @@ -11,7 +11,7 @@ def get_data(url, data_type="data", params=None): if response.status_code == 200: data = json.loads(response.text) print(f"获取到数据:{data}") - return data.get(data_type) + return data[data_type] else: print(f"请求数据失败,状态码:{response.status_code}") return None @@ -19,15 +19,15 @@ def get_data(url, data_type="data", params=None): print(f"请求数据失败,异常:{e}") return None -def get_project_info(projectId): +def get_project_info(projectId : str) -> dict: projecturl = DTURL + GETPROJECTINFO.format(projectId=projectId) return get_data(projecturl, "data") -def get_jizu_info(turbineId): +def get_jizu_info(turbineId : str) -> dict: jizuurl = DTURL + GETJIZUINFO.format(turbineId=turbineId) return get_data(jizuurl, "data") -def get_jizu_shigong_info(turbineId): +def get_jizu_shigong_info(turbineId : str) -> dict: jizuurl = DTURL + GETSHIGONGINFO params = { "rows": { @@ -37,6 +37,73 @@ def get_jizu_shigong_info(turbineId): result = get_data(jizuurl, "rows", params) return result[0] if result else None -def get_weather(weatherid): +def get_weather(weatherid : str) -> dict: weatherurl = DTURL + GETWEATHERINFO.format(weatherCode=weatherid) - return get_data(weatherurl, "data") \ No newline at end of file + return get_data(weatherurl, "data") + +def get_part_list(turbineId : str) -> dict: + parturl = DTURL + GETPARTLIST + params = { + "turbineId" : turbineId + } + result = get_data(parturl, params = params) + result = [item["partId"] for item in result] + print(f"获取到部件{result}") + return result + + + +def get_picture(turbineId : str): + """获取对应机组所有图片 + + Args: + turbineId (str): 机组ID + Return: + list: 包含所有图片信息的列表(按部件分list) + [ + [ + { + "imageId": "字符串", + "imageName": "字符串", + "imagePath": "字符串", + "partId": "字符串", + "partName": "字符串", + "imageResolution": "字符串", + "focalDistance": "字符串/None", + "shootingTime": "字符串/None", + "cameraManufacturer": "字符串/None", + "cameraModel": "字符串/None", + "weather": "字符串/None", + "weatherLabel": "字符串/None", + "humidness": "数值/None", + "temperature": "字符串/None", + "windLevel": "数值/None", + "shootingMethod": "字符串/None", + "shootingMethodLabel": "字符串/None", + "shootingDistance": "数值/None", + "collectorName": "字符串/None", + "imageType": "None", + "imageTypeLabel": "None", + "audioList": "None", + "gps": "字符串/None" + }, + ... + ], + [ + { + // 相同结构的字典对象 + }, + ... + ] + ] + """ + picturerul = DTURL + GETPICTURELIST + part_list = get_part_list(turbineId) + result = [] + for part_id in part_list: + params = { + "partId" : part_id, + } + result.append(get_data(picturerul, params = params)) + return result + \ No newline at end of file diff --git a/tools/__pycache__/API.cpython-313.pyc b/tools/__pycache__/API.cpython-313.pyc index 6b62e37..275947e 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 85385b1..ab1f69d 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 27a98fe..3bbad01 100644 Binary files a/tools/__pycache__/defines.cpython-313.pyc and b/tools/__pycache__/defines.cpython-313.pyc differ diff --git a/tools/defines.py b/tools/defines.py index 9d1d3b0..ae59823 100644 --- a/tools/defines.py +++ b/tools/defines.py @@ -15,17 +15,20 @@ DEFAULT_BAOGAO_INFO = { #目录 - 'picture_dir': "", #图片存放地址 为了报告美观,希望总的汇总图片数量为3的倍数 'shengcheng_dir': "", #报告生成的路径 'muban_dir': "", #文档模板存放路径 - 'total_picture_dir': "", #用于生成略缩图的路径 + + "dianxing_enum" : "TYPICAL", + "quexian_enum" : "DEFECT", + "waibu_enum" : "out_work", + "neibu_enum" : "in_work", + "fanglei_enum" : "lightning-protection-work", + "if_waibu" : True, + "if_neibu" : True, + "if_fanglei" : True, '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人 @@ -45,35 +48,6 @@ DEFAULT_BAOGAO_INFO = { 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叶片有明显影响机组正常运行的外部缺陷。 -''', #报告总结文字 } DEFAULT_BASE_INFO = { #项目基本信息