Procházet zdrojové kódy

提交使用网页配置点检表

anmox před 1 rokem
rodič
revize
d63a540620

+ 48 - 24
app.py

@@ -7,8 +7,8 @@ import pandas as pd
 
 from base.TranseParam import TranseParam
 from base.WindFarms import WindFarms
-from utils.conf.read_conf import read_yaml_file, read_param_from_yaml_file
-from utils.db.trans_mysql import get_exec_data
+from utils.conf.read_conf import read_yaml_file, read_param_from_config
+from utils.db.trans_mysql import get_exec_data, get_trans_conf
 from utils.log.trans_log import trans_print, logger, init_log
 
 
@@ -17,15 +17,15 @@ def init_params() -> list[WindFarms]:
     print(df)
     exec_subjects = list()
 
-    path = r'D:\transdata\test\虹梯官风电场-山西-大唐\高频数据2.zip'
+    path = r'D:\transdata\test\虹梯官风电场-山西-大唐\收资数据'
     changshang_name = '虹梯官风电场'
     # read_type = 'minute'
     read_type = 'second'
-    batch_no = 'batch_' + str(datetime.datetime.now().strftime('%Y%m%d'))
+    batch_no = 'hongtiguan_' + str(datetime.datetime.now().strftime('%Y%m%d'))
 
     df = pd.DataFrame(columns=['batch_no', 'transfer_type', 'transfer_file_addr', 'field_code', 'field_name'],
                       data=[
-                          [batch_no, read_type, path, 'WOF01000002', changshang_name]])
+                          [batch_no, read_type, path, 'A', changshang_name]])
 
     if df is None:
         trans_print("当前任务正在执行")
@@ -40,30 +40,57 @@ def init_params() -> list[WindFarms]:
                                                                                        df['field_name']):
             init_log(batch_no, field_name, transfer_type)
 
-            yaml_datas = read_yaml_file(field_name, transfer_type)
-            time_col = read_param_from_yaml_file(yaml_datas, 'time_col')
-            wind_col = read_param_from_yaml_file(yaml_datas, 'wind_col')
-            wind_name_exec = read_param_from_yaml_file(yaml_datas, 'wind_name_exec', None)
-            cols_trans_all = read_param_from_yaml_file(yaml_datas, 'trans_col')
-            wind_full_name = read_param_from_yaml_file(yaml_datas, 'wind_full_name')
-            is_vertical_table = read_param_from_yaml_file(yaml_datas, 'is_vertical_table', False)
-            vertical_cols = read_param_from_yaml_file(yaml_datas['vertical_table_conf'], 'read_cols', list())
-            vertical_key = read_param_from_yaml_file(yaml_datas['vertical_table_conf'], 'col_key')
-            vertical_value = read_param_from_yaml_file(yaml_datas['vertical_table_conf'], 'col_value')
-            index_cols = read_param_from_yaml_file(yaml_datas['vertical_table_conf'], 'index_cols')
-            merge_columns = read_param_from_yaml_file(yaml_datas, 'merge_columns', False)
-            trans_col_exec = read_param_from_yaml_file(yaml_datas, 'trans_col_exec')
-            need_valid_cols = read_param_from_yaml_file(yaml_datas, 'need_valid_cols', True)
+            conf_df = get_trans_conf(field_name, transfer_type)
+            if conf_df is None:
+                trans_print(f"未找到{field_name}的{transfer_type}配置")
+                continue
+
+            conf = conf_df.iloc[0].to_dict()
+
+            resolve_col_prefix = read_param_from_config(conf, 'resolve_col_prefix')
+            wind_name_exec = read_param_from_config(conf, 'wind_name_exec', None)
+            wind_full_name = read_param_from_config(conf, 'wind_full_name')
+            is_vertical_table = read_param_from_config(conf, 'is_vertical_table', False)
+            merge_columns = read_param_from_config(conf, 'merge_columns', False)
+
+            vertical_cols = read_param_from_config(conf, 'vertical_read_cols', '').split(',')
+            index_cols = read_param_from_config(conf, 'vertical_index_cols', '').split(',')
+            vertical_key = read_param_from_config(conf, 'vertical_col_key')
+            vertical_value = read_param_from_config(conf, 'vertical_col_value')
+            need_valid_cols = not merge_columns
+
+            cols_trans_all = dict()
+            trans_cols = ['wind_turbine_number', 'time_stamp', 'active_power', 'rotor_speed', 'generator_speed',
+                          'wind_velocity', 'pitch_angle_blade_1', 'pitch_angle_blade_2', 'pitch_angle_blade_3',
+                          'cabin_position', 'true_wind_direction', 'yaw_error1', 'set_value_of_active_power',
+                          'gearbox_oil_temperature', 'generatordrive_end_bearing_temperature',
+                          'generatornon_drive_end_bearing_temperature', 'wind_turbine_status',
+                          'wind_turbine_status2',
+                          'cabin_temperature', 'twisted_cable_angle', 'front_back_vibration_of_the_cabin',
+                          'side_to_side_vibration_of_the_cabin', 'actual_torque', 'given_torque',
+                          'clockwise_yaw_count',
+                          'counterclockwise_yaw_count', 'unusable', 'power_curve_available',
+                          'required_gearbox_speed',
+                          'inverter_speed_master_control', 'outside_cabin_temperature', 'main_bearing_temperature',
+                          'gearbox_high_speed_shaft_bearing_temperature',
+                          'gearboxmedium_speed_shaftbearing_temperature',
+                          'gearbox_low_speed_shaft_bearing_temperature', 'generator_winding1_temperature',
+                          'generator_winding2_temperature', 'generator_winding3_temperature',
+                          'turbulence_intensity', 'param1',
+                          'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', 'param10']
+
+            for col in trans_cols:
+                cols_trans_all[col] = read_param_from_config(conf, col, '')
 
             trans_subject = WindFarms(field_name, batch_no=batch_no, field_code=field_code,
                                       wind_full_name=wind_full_name)
 
             params = TranseParam(read_type=transfer_type, read_path=transfer_file_addr,
-                                 cols_tran=cols_trans_all, time_col=time_col, wind_col=wind_col,
+                                 cols_tran=cols_trans_all,
                                  wind_name_exec=wind_name_exec, is_vertical_table=is_vertical_table,
                                  vertical_cols=vertical_cols, vertical_key=vertical_key,
                                  vertical_value=vertical_value, index_cols=index_cols, merge_columns=merge_columns,
-                                 trans_col_exec=trans_col_exec, need_valid_cols=need_valid_cols)
+                                 resolve_col_prefix=resolve_col_prefix, need_valid_cols=need_valid_cols)
 
             trans_subject.set_trans_param(params)
             exec_subjects.append(trans_subject)
@@ -75,9 +102,6 @@ if __name__ == '__main__':
     for exec_subject in exec_subjects:
         try:
             exec_subject.run()
-
-            # exec_subject.delete_batch_db()
-            # exec_subject.mutiprocessing_to_save_db()
         except Exception as e:
             print(e)
             logger.exception(e)

+ 2 - 4
base/TranseParam.py

@@ -7,13 +7,11 @@ class TranseParam(object):
 
     def __init__(self, read_type=None, read_path=None, cols_tran={}, time_col=None, wind_col=None,
                  wind_name_exec=str(), is_vertical_table=False, vertical_cols=list(), vertical_key=None,
-                 vertical_value=None, index_cols=list(), merge_columns=False, trans_col_exec=None,
+                 vertical_value=None, index_cols=list(), merge_columns=False, resolve_col_prefix=None,
                  need_valid_cols=True):
         self.read_type = read_type
         self.read_path = read_path
         self.cols_tran = cols_tran
-        self.time_col = time_col
-        self.wind_col = wind_col
         self.is_vertical_table = is_vertical_table
         self.wind_name_exec = wind_name_exec
         self.vertical_cols = vertical_cols
@@ -21,5 +19,5 @@ class TranseParam(object):
         self.vertical_value = vertical_value
         self.index_cols = index_cols
         self.merge_columns = merge_columns
-        self.trans_col_exec = trans_col_exec
+        self.resolve_col_prefix = resolve_col_prefix
         self.need_valid_cols = need_valid_cols

+ 23 - 27
base/WindFarms.py

@@ -73,8 +73,6 @@ class WindFarms(object):
 
                 trans_print("包含转换字段,开始处理转换字段")
                 df.rename(columns=real_cols_trans, inplace=True)
-                if self.trans_param.wind_col in real_cols_trans.keys():
-                    self.trans_param.wind_col = real_cols_trans[self.trans_param.wind_col]
 
                 del_keys = set(df.columns) - set(cols_tran.keys())
 
@@ -99,8 +97,8 @@ class WindFarms(object):
                 else:
                     is_success, e = unzip(file, file.replace(self.trans_param.read_path, to_path).split(".")[0])
                     self.trans_param.has_zip = True
-                if not is_success:
-                    raise e
+                    if not is_success:
+                        raise e
             elif str(file).endswith("rar"):
                 is_success, e = unrar(file, file.replace(self.trans_param.read_path, to_path).split(".")[0])
                 self.trans_param.has_zip = True
@@ -147,10 +145,10 @@ class WindFarms(object):
                     df = read_file_to_df(file)
 
             # 处理列名前缀问题
-            if self.trans_param.trans_col_exec:
+            if self.trans_param.resolve_col_prefix:
                 columns_dict = dict()
                 for column in df.columns:
-                    columns_dict[column] = eval(self.trans_param.trans_col_exec)
+                    columns_dict[column] = eval(self.trans_param.resolve_col_prefix)
                 df.rename(columns=columns_dict, inplace=True)
 
             for k, v in trans_dict.items():
@@ -180,11 +178,11 @@ class WindFarms(object):
             save_path = os.path.join(self.__get_read_tmp_path(), save_name)
             create_file_path(save_path, is_file_path=True)
             if name in self.__exist_wind_names:
-                df[df[self.trans_param.wind_col] == name].to_csv(save_path, index=False, encoding='utf8', mode='a',
-                                                                 header=False)
+                df[df['wind_turbine_number'] == name].to_csv(save_path, index=False, encoding='utf8', mode='a',
+                                                             header=False)
             else:
                 self.__exist_wind_names.add(name)
-                df[df[self.trans_param.wind_col] == name].to_csv(save_path, index=False, encoding='utf8')
+                df[df['wind_turbine_number'] == name].to_csv(save_path, index=False, encoding='utf8')
 
         del df
         trans_print("保存", str(names), "到临时文件成功, 风机数量", len(names))
@@ -206,29 +204,28 @@ class WindFarms(object):
         df = df[self.trans_param.cols_tran.keys()]
 
         # 添加年月日
-        if self.trans_param.time_col:
-            trans_print("包含时间字段,开始处理时间字段,添加年月日", filename)
-            df[self.trans_param.time_col] = pd.to_datetime(df[self.trans_param.time_col])
-            df['year'] = df[self.trans_param.time_col].dt.year
-            df['month'] = df[self.trans_param.time_col].dt.month
-            df['day'] = df[self.trans_param.time_col].dt.day
-            df.sort_values(by=self.trans_param.time_col, inplace=True)
-            df[self.trans_param.time_col] = df[self.trans_param.time_col].apply(
-                lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
-            trans_print("处理时间字段结束")
+        trans_print("包含时间字段,开始处理时间字段,添加年月日", filename)
+        df['time_stamp'] = pd.to_datetime(df['time_stamp'])
+        df['year'] = df['time_stamp'].dt.year
+        df['month'] = df['time_stamp'].dt.month
+        df['day'] = df['time_stamp'].dt.day
+        df.sort_values(by='time_stamp', inplace=True)
+        df['time_stamp'] = df['time_stamp'].apply(
+            lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
+        trans_print("处理时间字段结束")
 
         # 转化风机名称
         trans_print("开始转化风机名称")
         if self.trans_param.wind_name_exec:
-            exec_str = f"df[self.trans_param.wind_col].apply(lambda wind_name: {self.trans_param.wind_name_exec} )"
-            df[self.trans_param.wind_col] = eval(exec_str)
+            exec_str = f"df['wind_turbine_number'].apply(lambda wind_name: {self.trans_param.wind_name_exec} )"
+            df['wind_turbine_number'] = eval(exec_str)
 
-        df[self.trans_param.wind_col] = df[self.trans_param.wind_col].map(
+        df['wind_turbine_number'] = df['wind_turbine_number'].map(
             self.wind_col_trans).fillna(
-            df[self.trans_param.wind_col])
+            df['wind_turbine_number'])
         trans_print("转化风机名称结束")
 
-        wind_col_name = str(df[self.trans_param.wind_col].values[0])
+        wind_col_name = str(df['wind_turbine_number'].values[0])
 
         if self.save_zip:
             save_path = os.path.join(self.__get_save_path(), str(wind_col_name) + '.csv.gz')
@@ -379,8 +376,7 @@ class WindFarms(object):
         self.delete_batch_db()
 
         self.__params_valid([self.name, self.batch_no, self.field_code, self.save_path, self.trans_param.read_type,
-                             self.trans_param.read_path,
-                             self.trans_param.time_col, self.trans_param.wind_col, self.wind_full_name])
+                             self.trans_param.read_path, 'wind_turbine_number', self.wind_full_name])
 
         # 更新运行状态到运行中
         update_trans_status(self.batch_no, self.trans_param.read_type, "running", "")
@@ -390,7 +386,7 @@ class WindFarms(object):
 
         self.mutiprocessing_to_save_file()
 
-        self.mutiprocessing_to_save_db()
+        # self.mutiprocessing_to_save_db()
 
         update_trans_status(self.batch_no, self.trans_param.read_type, "success", "",
                             wind_count=len(read_excel_files(self.__get_read_tmp_path())))

+ 0 - 0
config_files/吉山风电场-需要点检/second.yaml → config_files/吉山风电场/second.yaml


+ 105 - 0
config_files/和风元宝山/minute.yaml

@@ -0,0 +1,105 @@
+wind_full_name: 和风元宝山-河南-大唐
+#  是否是竖表
+is_vertical_table: False
+#  如果是怎配置竖表需要查询的字段
+vertical_table_conf:
+  read_cols:
+    - 数据时间
+    - 资产名称
+    - 采集点名称
+    - 数值
+  index_cols:
+    - 数据时间
+    - 资产名称
+  col_key: 采集点名称
+  col_value: 数值
+#时间字段,转化年月日 以及格式化为 yyyy-MM-dd HH:mm:ss使用
+time_col: time_stamp
+#  风机编号字段
+wind_col: wind_turbine_number
+# 表数据和数据文件的映射关系
+trans_col:
+  #风机编号
+  wind_turbine_number: 风机
+  #时间戳
+  time_stamp: 时间
+  #有功功率
+  active_power: 有功功率
+  #风轮转速
+  rotor_speed: 叶轮转速
+  #发电机转速
+  generator_speed: 发电机转速
+  #风速
+  wind_velocity: 环境风速
+  #桨距角1
+  pitch_angle_blade_1: 叶片1变桨角度
+  #桨距角2
+  pitch_angle_blade_2: 叶片2变桨角度
+  #桨距角3
+  pitch_angle_blade_3: 叶片3变桨角度
+  #机舱位置
+  cabin_position: 机舱位置
+  #绝对风向
+  true_wind_direction: 环境风向
+  #对风角度
+  yaw_error1: 对风角度
+  #有功功率设定值
+  set_value_of_active_power: 有功设定反馈值
+  #齿轮箱油温
+  gearbox_oil_temperature: 齿轮箱油温
+  #发电机驱动端轴承温度
+  generatordrive_end_bearing_temperature: 发电机驱动侧轴承温度
+  #发电机非驱动端轴承温度
+  generatornon_drive_end_bearing_temperature: 发电机非驱动侧轴承温度
+  #风机状态1
+  wind_turbine_status: null
+  #风机状态2
+  wind_turbine_status2: null
+  #机舱内温度
+  cabin_temperature: 机舱温度
+  #扭缆角度
+  twisted_cable_angle: 扭缆角度
+  #机舱前后振动
+  front_back_vibration_of_the_cabin: X方向振动幅度
+  #机舱左右振动
+  side_to_side_vibration_of_the_cabin: Y方向振动幅度
+  #实际力矩
+  actual_torque: null
+  #给定力矩
+  given_torque: null
+  #顺时针偏航次数
+  clockwise_yaw_count: null
+  #逆时针偏航次数
+  counterclockwise_yaw_count: null
+  #不可利用
+  unusable: null
+  #功率曲线可用
+  power_curve_available: null
+  #齿轮箱转速
+  required_gearbox_speed: null
+  #变频器转速(主控)
+  inverter_speed_master_control: null
+  #环境温度
+  outside_cabin_temperature: 环境温度
+  #主轴承轴承温度
+  main_bearing_temperature: 主轴前轴承温度
+  #齿轮箱高速轴轴承温度
+  gearbox_high_speed_shaft_bearing_temperature: 齿轮箱高速轴承温度
+  #齿轮箱中速轴轴承温度
+  gearboxmedium_speed_shaftbearing_temperature: 齿轮箱中速轴承温度
+  #齿轮箱低速轴轴承温度
+  gearbox_low_speed_shaft_bearing_temperature: 齿轮箱低速轴承温度
+  #发电机绕组1温度
+  generator_winding1_temperature: 发电机定子绕组温度U1
+  #发电机绕组2温度
+  generator_winding2_temperature: 发电机定子绕组温度V1
+  #发电机绕组3温度
+  generator_winding3_temperature: 发电机定子绕组温度W1
+  #湍流强度
+  turbulence_intensity: 湍流强度
+  #齿轮箱油压
+  param1: 齿轮箱油压
+# 自定义风机编号映射 必须是 wind_name
+wind_name_exec: "wind_name.replace('元宝山','').replace('号风机','')"
+
+

+ 103 - 0
config_files/密马风电场/minute.yaml

@@ -0,0 +1,103 @@
+wind_full_name: 密马风电场-山西-大唐
+#  是否是竖表
+is_vertical_table: False
+#  如果是怎配置竖表需要查询的字段
+vertical_table_conf:
+  read_cols:
+    - 数据时间
+    - 资产名称
+    - 采集点名称
+    - 数值
+  index_cols:
+    - 数据时间
+    - 资产名称
+  col_key: 采集点名称
+  col_value: 数值
+#时间字段,转化年月日 以及格式化为 yyyy-MM-dd HH:mm:ss使用
+time_col: time_stamp
+#  风机编号字段
+wind_col: wind_turbine_number
+# 表数据和数据文件的映射关系
+trans_col:
+  #风机编号
+  wind_turbine_number: 风机
+  #时间戳
+  time_stamp: 时间
+  #有功功率
+  active_power: 平均发电机功率实时值(kW)
+  #风轮转速
+  rotor_speed: 平均主轴转速
+  #发电机转速
+  generator_speed: 平均发电机转速实时值
+  #风速
+  wind_velocity: 平均风速实时值(m/s)
+  #桨距角1
+  pitch_angle_blade_1: null
+  #桨距角2
+  pitch_angle_blade_2: 平均变桨角度
+  #桨距角3
+  pitch_angle_blade_3: null
+  #机舱位置
+  cabin_position: 平均机舱方向绝对角度
+  #绝对风向
+  true_wind_direction: 平均风向1秒平均值
+  #对风角度
+  yaw_error1: null
+  #有功功率设定值
+  set_value_of_active_power: null
+  #齿轮箱油温
+  gearbox_oil_temperature: 平均齿轮油温
+  #发电机驱动端轴承温度
+  generatordrive_end_bearing_temperature: 平均发电机de端轴承温度
+  #发电机非驱动端轴承温度
+  generatornon_drive_end_bearing_temperature: 平均发电机nde端轴承温度
+  #风机状态1
+  wind_turbine_status: 平均机组运行模式
+  #风机状态2
+  wind_turbine_status2: 平均机组刹车程序
+  #机舱内温度
+  cabin_temperature: 平均机舱温度
+  #扭缆角度
+  twisted_cable_angle: null
+  #机舱前后振动
+  front_back_vibration_of_the_cabin: null
+  #机舱左右振动
+  side_to_side_vibration_of_the_cabin: null
+  #实际力矩
+  actual_torque: null
+  #给定力矩
+  given_torque: null
+  #顺时针偏航次数
+  clockwise_yaw_count: null
+  #逆时针偏航次数
+  counterclockwise_yaw_count: null
+  #不可利用
+  unusable: null
+  #功率曲线可用
+  power_curve_available: null
+  #齿轮箱转速
+  required_gearbox_speed: null
+  #变频器转速(主控)
+  inverter_speed_master_control: null
+  #环境温度
+  outside_cabin_temperature: 平均机舱外温度
+  #主轴承轴承温度
+  main_bearing_temperature: 平均转子轴承a温度
+  #齿轮箱高速轴轴承温度
+  gearbox_high_speed_shaft_bearing_temperature: 平均齿轮箱nde端轴承温度
+  #齿轮箱中速轴轴承温度
+  gearboxmedium_speed_shaftbearing_temperature: null
+  #齿轮箱低速轴轴承温度
+  gearbox_low_speed_shaft_bearing_temperature: 平均齿轮箱de端轴承温度
+  #发电机绕组1温度
+  generator_winding1_temperature: 平均发电机定子绕组u温度
+  #发电机绕组2温度
+  generator_winding2_temperature: null
+  #发电机绕组3温度
+  generator_winding3_temperature: 平均发电机定子绕组v温度
+  #湍流强度
+  turbulence_intensity: 平均发电机定子绕组w温度
+
+# 自定义风机编号映射 必须是 wind_name
+#wind_name_exec: "wind_name.replace('号风机','')"
+

+ 0 - 0
config_files/密马风电场-未给点检表/second.yaml → config_files/密马风电场/second.yaml


+ 2 - 1
config_files/招远风电场/minute.yaml

@@ -18,8 +18,9 @@ time_col: time_stamp
 #  风机编号字段
 wind_col: wind_turbine_number
 
-# 转化的类名是否需要处理 比如 重庆还装表头自带 风机名称
 trans_col_exec: column.replace('有功功率-平均','当前理论可发最大功率-平均')
+# 转化的类名是否需要处理 比如 重庆还装表头自带 风机名称
+resolve_col_prefix: column.replace('有功功率-平均','当前理论可发最大功率-平均')
 
 # 是否只读取需要的字段,默认True ,如果多文件夹列名不一致,则需要设置为False,不然验证通不过
 need_valid_cols: False

+ 1 - 1
config_files/昌平坳风场/second.yaml

@@ -106,5 +106,5 @@ trans_col:
   inverter_speed_master_control: null
 
 # 自定义风机编号映射 必须是 wind_name
-wind_name_exec: "win_name.replace('20049','')"
+#wind_name_exec: "win_name.replace('20049','')"
 

+ 199 - 0
gradio_web.py

@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+# @Time    : 2024/6/3
+# @Author  : 魏志亮
+import copy
+
+import gradio as gr
+import yaml
+
+from utils.db.trans_mysql import *
+
+
+def test_click(wind_name, wind_full_name, type, is_vertical_table, merge_columns, vertical_read_cols,
+               vertical_index_cols, vertical_col_key, vertical_col_value, resolve_col_prefix, wind_name_exec,
+               wind_turbine_number, time_stamp, active_power, rotor_speed, generator_speed, wind_velocity,
+               pitch_angle_blade_1, pitch_angle_blade_2, pitch_angle_blade_3, cabin_position, true_wind_direction,
+               yaw_error1, set_value_of_active_power, gearbox_oil_temperature, generatordrive_end_bearing_temperature,
+               generatornon_drive_end_bearing_temperature, wind_turbine_status, wind_turbine_status2, cabin_temperature,
+               twisted_cable_angle, front_back_vibration_of_the_cabin, side_to_side_vibration_of_the_cabin,
+               actual_torque, given_torque, clockwise_yaw_count, counterclockwise_yaw_count, unusable,
+               power_curve_available, required_gearbox_speed, inverter_speed_master_control, outside_cabin_temperature,
+               main_bearing_temperature, gearbox_high_speed_shaft_bearing_temperature,
+               gearboxmedium_speed_shaftbearing_temperature, gearbox_low_speed_shaft_bearing_temperature,
+               generator_winding1_temperature, generator_winding2_temperature, generator_winding3_temperature,
+               turbulence_intensity, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10
+               ):
+    params = copy.deepcopy(vars())
+
+    error_message = ""
+    if wind_name is None or wind_name.strip() == '':
+        error_message += "风机名称必选"
+        gr.Warning(error_message)
+        return error_message
+
+    if wind_full_name is None or wind_full_name.strip() == '':
+        error_message += "风机全称必选"
+        gr.Warning(error_message)
+        return error_message
+
+    save_to_trans_conf(params)
+    return yaml.dump(vars(), allow_unicode=True, sort_keys=False)
+
+
+def fill_data(wind_name, type):
+    select_cols = ['wind_full_name', 'is_vertical_table', 'merge_columns', 'vertical_read_cols',
+                   'vertical_index_cols', 'vertical_col_key', 'vertical_col_value', 'resolve_col_prefix',
+                   'wind_name_exec',
+                   'wind_turbine_number', 'time_stamp', 'active_power', 'rotor_speed', 'generator_speed',
+                   'wind_velocity', 'pitch_angle_blade_1', 'pitch_angle_blade_2', 'pitch_angle_blade_3',
+                   'cabin_position', 'true_wind_direction', 'yaw_error1', 'set_value_of_active_power',
+                   'gearbox_oil_temperature', 'generatordrive_end_bearing_temperature',
+                   'generatornon_drive_end_bearing_temperature', 'wind_turbine_status', 'wind_turbine_status2',
+                   'cabin_temperature', 'twisted_cable_angle', 'front_back_vibration_of_the_cabin',
+                   'side_to_side_vibration_of_the_cabin', 'actual_torque', 'given_torque', 'clockwise_yaw_count',
+                   'counterclockwise_yaw_count', 'unusable', 'power_curve_available', 'required_gearbox_speed',
+                   'inverter_speed_master_control', 'outside_cabin_temperature', 'main_bearing_temperature',
+                   'gearbox_high_speed_shaft_bearing_temperature', 'gearboxmedium_speed_shaftbearing_temperature',
+                   'gearbox_low_speed_shaft_bearing_temperature', 'generator_winding1_temperature',
+                   'generator_winding2_temperature', 'generator_winding3_temperature', 'turbulence_intensity', 'param1',
+                   'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', 'param10']
+    print(wind_name, type)
+    df = get_trans_conf(wind_name, type)
+    print(df)
+    if df.empty:
+        return [''] * len(select_cols)
+    result = df[select_cols].iloc[0].values
+    return result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], \
+           result[8], result[9], \
+           result[10], result[11], result[12], result[13], result[14], result[15], result[16], result[17], result[18], \
+           result[19], result[20], result[21], result[22], result[23], result[24], result[25], result[26], result[27], \
+           result[28], result[29], result[30], result[31], result[32], result[33], result[34], result[35], result[36], \
+           result[37], result[38], result[39], result[40], result[41], result[42], result[43], result[44], result[45], \
+           result[46], result[47], result[48], result[49], result[50], result[51], result[52], result[53], result[54], \
+           result[55], result[56], result[57]
+
+
+with gr.Blocks(css=".container.svelte-1sk0pyu.svelte-1sk0pyu {width: 300px}") as demo:
+    wind_name = gr.Dropdown(label="电场名称", choices=get_all_wind_company())
+
+    types = {
+        '分钟映射': 'minute', '秒映射': 'second'
+    }
+
+    for name in types.keys():
+        with gr.Tab(label=name):
+            type = gr.Text(label="映射类型", value=types[name], visible=False)
+            wind_full_name = gr.Textbox(label="完整的电场名称")
+            merge_columns = gr.Checkbox(label="是否需合并(多个excel列合并成一个才需要选择)", value=False)
+            is_vertical_table = gr.Checkbox(label="是否是竖表", value=False)
+            vertical_read_cols = gr.Textbox(label="竖表--读取的字段", placeholder="逗号分隔")
+            vertical_index_cols = gr.Textbox(label="竖表--分组的字段", placeholder="逗号分隔,一般都是时间,机组")
+            vertical_col_key = gr.Textbox(label="竖表--数据点字段")
+            vertical_col_value = gr.Textbox(label="竖表--数据点数值")
+            resolve_col_prefix = gr.Textbox(label="处理列名",
+                                            placeholder="比如重庆海装 25_#桨距角,只需要 桨距角 可以用 column[column.find('#')+1:]")
+
+            wind_name_exec = gr.Textbox(label="风机编号代码处理",
+                                        placeholder="比如 昌平001号风机,可以配置 wind_name.replace('昌平','').replace('号风机','')")
+
+            wind_turbine_number = gr.Textbox(label="风机编号(wind_turbine_number)")
+            time_stamp = gr.Textbox(label="时间戳(time_stamp)")
+            active_power = gr.Textbox(label="有功功率(active_power)")
+            rotor_speed = gr.Textbox(label="风轮转速(rotor_speed)")
+            generator_speed = gr.Textbox(label="发电机转速(generator_speed)")
+            wind_velocity = gr.Textbox(label="风速(wind_velocity)")
+            pitch_angle_blade_1 = gr.Textbox(label="桨距角1(pitch_angle_blade_1)")
+            pitch_angle_blade_2 = gr.Textbox(label="桨距角2(pitch_angle_blade_2)")
+            pitch_angle_blade_3 = gr.Textbox(label="桨距角3(pitch_angle_blade_3)")
+            cabin_position = gr.Textbox(label="机舱位置(cabin_position)")
+            true_wind_direction = gr.Textbox(label="绝对风向(true_wind_direction)")
+            yaw_error1 = gr.Textbox(label="对风角度(yaw_error1)")
+            set_value_of_active_power = gr.Textbox(label="有功功率设定值(set_value_of_active_power)")
+            gearbox_oil_temperature = gr.Textbox(label="齿轮箱油温(gearbox_oil_temperature)")
+            generatordrive_end_bearing_temperature = gr.Textbox(
+                label="发电机驱动端轴承温度(generatordrive_end_bearing_temperature)")
+            generatornon_drive_end_bearing_temperature = gr.Textbox(
+                label="发电机非驱动端轴承温度(generatornon_drive_end_bearing_temperature)")
+            wind_turbine_status = gr.Textbox(label="风机状态1(wind_turbine_status)")
+            wind_turbine_status2 = gr.Textbox(label="风机状态2(wind_turbine_status2)")
+            cabin_temperature = gr.Textbox(label="机舱内温度(cabin_temperature)")
+            twisted_cable_angle = gr.Textbox(label="扭缆角度(twisted_cable_angle)")
+            front_back_vibration_of_the_cabin = gr.Textbox(label="机舱前后振动(front_back_vibration_of_the_cabin)")
+            side_to_side_vibration_of_the_cabin = gr.Textbox(label="机舱左右振动(side_to_side_vibration_of_the_cabin)")
+            actual_torque = gr.Textbox(label="实际力矩(actual_torque)")
+            given_torque = gr.Textbox(label="给定力矩(given_torque)")
+            clockwise_yaw_count = gr.Textbox(label="顺时针偏航次数(clockwise_yaw_count)")
+            counterclockwise_yaw_count = gr.Textbox(label="逆时针偏航次数(counterclockwise_yaw_count)")
+            unusable = gr.Textbox(label="不可利用(unusable)")
+            power_curve_available = gr.Textbox(label="功率曲线可用(power_curve_available)")
+            required_gearbox_speed = gr.Textbox(label="齿轮箱转速(required_gearbox_speed)")
+            inverter_speed_master_control = gr.Textbox(label="变频器转速(主控)(inverter_speed_master_control)")
+            outside_cabin_temperature = gr.Textbox(label="环境温度(outside_cabin_temperature)")
+            main_bearing_temperature = gr.Textbox(label="主轴承轴承温度(main_bearing_temperature)")
+            gearbox_high_speed_shaft_bearing_temperature = gr.Textbox(
+                label="齿轮箱高速轴轴承温度(gearbox_high_speed_shaft_bearing_temperature)")
+            gearboxmedium_speed_shaftbearing_temperature = gr.Textbox(
+                label="齿轮箱中速轴轴承温度(gearboxmedium_speed_shaftbearing_temperature)")
+            gearbox_low_speed_shaft_bearing_temperature = gr.Textbox(
+                label="齿轮箱低速轴轴承温度(gearbox_low_speed_shaft_bearing_temperature)")
+            generator_winding1_temperature = gr.Textbox(label="发电机绕组1温度(generator_winding1_temperature)")
+            generator_winding2_temperature = gr.Textbox(label="发电机绕组2温度(generator_winding2_temperature)")
+            generator_winding3_temperature = gr.Textbox(label="发电机绕组3温度(generator_winding3_temperature)")
+            turbulence_intensity = gr.Textbox(label="湍流强度(turbulence_intensity)")
+            param1 = gr.Textbox(label="齿轮箱油压(param1)")
+            param2 = gr.Textbox(label="预留字段2(param2)")
+            param3 = gr.Textbox(label="预留字段3(param3)")
+            param4 = gr.Textbox(label="预留字段4(param4)")
+            param5 = gr.Textbox(label="预留字段5(param5)")
+            param6 = gr.Textbox(label="预留字段6(param6)")
+            param7 = gr.Textbox(label="预留字段7(param7)")
+            param8 = gr.Textbox(label="预留字段8(param8)")
+            param9 = gr.Textbox(label="预留字段9(param9)")
+            param10 = gr.Textbox(label="预留字段10(param10)")
+
+            button = gr.Button(value="提交")
+            result = gr.Textbox(label="结果")
+
+            button.click(fn=test_click,
+                         inputs=[wind_name, wind_full_name, type, is_vertical_table, merge_columns, vertical_read_cols,
+                                 vertical_index_cols, vertical_col_key, vertical_col_value, resolve_col_prefix,
+                                 wind_name_exec, wind_turbine_number, time_stamp, active_power, rotor_speed,
+                                 generator_speed, wind_velocity, pitch_angle_blade_1, pitch_angle_blade_2,
+                                 pitch_angle_blade_3, cabin_position, true_wind_direction, yaw_error1,
+                                 set_value_of_active_power, gearbox_oil_temperature,
+                                 generatordrive_end_bearing_temperature, generatornon_drive_end_bearing_temperature,
+                                 wind_turbine_status, wind_turbine_status2, cabin_temperature, twisted_cable_angle,
+                                 front_back_vibration_of_the_cabin, side_to_side_vibration_of_the_cabin, actual_torque,
+                                 given_torque, clockwise_yaw_count, counterclockwise_yaw_count, unusable,
+                                 power_curve_available, required_gearbox_speed, inverter_speed_master_control,
+                                 outside_cabin_temperature, main_bearing_temperature,
+                                 gearbox_high_speed_shaft_bearing_temperature,
+                                 gearboxmedium_speed_shaftbearing_temperature,
+                                 gearbox_low_speed_shaft_bearing_temperature, generator_winding1_temperature,
+                                 generator_winding2_temperature, generator_winding3_temperature, turbulence_intensity,
+                                 param1, param2, param3, param4, param5, param6, param7, param8, param9, param10
+                                 ], outputs=[result])
+            wind_name.change(fill_data, inputs=[wind_name, type],
+                             outputs=[wind_full_name, is_vertical_table, merge_columns, vertical_read_cols,
+                                      vertical_index_cols, vertical_col_key, vertical_col_value, resolve_col_prefix,
+                                      wind_name_exec, wind_turbine_number, time_stamp, active_power, rotor_speed,
+                                      generator_speed, wind_velocity, pitch_angle_blade_1, pitch_angle_blade_2,
+                                      pitch_angle_blade_3, cabin_position, true_wind_direction, yaw_error1,
+                                      set_value_of_active_power, gearbox_oil_temperature,
+                                      generatordrive_end_bearing_temperature,
+                                      generatornon_drive_end_bearing_temperature,
+                                      wind_turbine_status, wind_turbine_status2, cabin_temperature, twisted_cable_angle,
+                                      front_back_vibration_of_the_cabin, side_to_side_vibration_of_the_cabin,
+                                      actual_torque,
+                                      given_torque, clockwise_yaw_count, counterclockwise_yaw_count, unusable,
+                                      power_curve_available, required_gearbox_speed, inverter_speed_master_control,
+                                      outside_cabin_temperature, main_bearing_temperature,
+                                      gearbox_high_speed_shaft_bearing_temperature,
+                                      gearboxmedium_speed_shaftbearing_temperature,
+                                      gearbox_low_speed_shaft_bearing_temperature, generator_winding1_temperature,
+                                      generator_winding2_temperature, generator_winding3_temperature,
+                                      turbulence_intensity,
+                                      param1, param2, param3, param4, param5, param6, param7, param8, param9, param10])
+
+if __name__ == "__main__":
+    demo.launch(server_name='0.0.0.0', server_port=7860, auth=('znzn', "znzn123"))

+ 5 - 0
requirements.txt

@@ -0,0 +1,5 @@
+chardet==5.2.0
+PyMySQL==1.1.0
+PyYAML==6.0.1
+rarfile==4.2
+SQLAlchemy==2.0.30

+ 9 - 3
utils/conf/generate_trans_cols.py

@@ -4,8 +4,14 @@
 import numpy as np
 import pandas as pd
 
-df = pd.read_excel(r"C:\Users\Administrator\Desktop\点检表配置.xls", sheet_name="昌西一风电场-甘肃-大唐")
+df = pd.read_excel(r"C:\Users\Administrator\Downloads\点检表配置.xls", sheet_name="和风元宝山-河南-大唐")
 
-df.replace(np.nan, 'null', inplace=True)
+df.replace(np.nan, '', inplace=True)
+# print("trans_col:")
 for cn, en, sec, min in zip(df['中文名'], df['英文名'], df['秒级映射'], df['分钟级映射']):
-    print(f"\t#{cn}\n\t{en}: {min}")
+    # print(f"\t#{cn}\n\t{en}: {min}")
+    print(f'{en} = gr.Textbox(label="{cn}({en})")')
+
+
+for i in range(2,11):
+    print(f'param{i} = gr.Textbox(label="预留字段{i}(param{i})")')

+ 9 - 21
utils/conf/read_conf.py

@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 # @Time    : 2024/5/17
 # @Author  : 魏志亮
-import os.path
+import os
 
 import yaml
 
@@ -14,28 +14,16 @@ def read_yaml_file(filename, type):
         return yaml.safe_load(f)
 
 
-def read_param_from_yaml_file(yaml_file, type, default_value=None):
-    if type in yaml_file:
-        return yaml_file[type]
+def read_param_from_config(conf, type, default_value=None):
+    if type in conf:
+        return conf[type]
     else:
         return default_value
 
 
 if __name__ == '__main__':
-    data = read_yaml_file("昌西一风电场", "second")
-    trans_col = data['trans_col']
-    result_col = ['wind_turbine_number', 'time_stamp', 'active_power', 'rotor_speed', 'generator_speed',
-                  'wind_velocity', 'pitch_angle_blade_1', 'pitch_angle_blade_2', 'pitch_angle_blade_3',
-                  'cabin_position', 'true_wind_direction', 'yaw_error1', 'set_value_of_active_power',
-                  'gearbox_oil_temperature', 'generatordrive_end_bearing_temperature',
-                  'generatornon_drive_end_bearing_temperature', 'wind_turbine_status', 'wind_turbine_status2',
-                  'cabin_temperature', 'twisted_cable_angle', 'front_back_vibration_of_the_cabin',
-                  'side_to_side_vibration_of_the_cabin', 'actual_torque', 'given_torque', 'clockwise_yaw_count',
-                  'counterclockwise_yaw_count', 'unusable', 'power_curve_available', 'required_gearbox_speed',
-                  'inverter_speed_master_control', 'outside_cabin_temperature', 'main_bearing_temperature',
-                  'gearbox_high_speed_shaft_bearing_temperature', 'gearboxmedium_speed_shaftbearing_temperature',
-                  'gearbox_low_speed_shaft_bearing_temperature', 'generator_winding1_temperature',
-                  'generator_winding2_temperature', 'generator_winding3_temperature', 'turbulence_intensity']
-
-    for col in result_col:
-        print((trans_col[col] if trans_col[col] is not None else 'null'))
+    yaml_files = os.listdir("../../config_files")
+    types = ['second', 'minute']
+
+    print(yaml_files)
+

+ 37 - 5
utils/db/trans_mysql.py

@@ -39,11 +39,14 @@ trans_connect = pymysql.connect(host=trans_host,
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
 
-susscess_sql = "update data_transfer set transfer_state = 1 where batch_code = '{batch_no}' and transfer_type = '{trans_type}'";
+susscess_sql = "update data_transfer set transfer_state = 1 where batch_code = '{batch_no}' and transfer_type = '{" \
+               "trans_type}'";
 
-error_sql = "update data_transfer set transfer_state = 2 ,err_info='{message}' where batch_code = '{batch_no}'  and transfer_type = '{trans_type}'"
+error_sql = "update data_transfer set transfer_state = 2 ,err_info='{message}' where batch_code = '{batch_no}'  and " \
+            "transfer_type = '{trans_type}' "
 
-running_sql = "update data_transfer set transfer_state = 0,engine_count = {wind_count}  where batch_code = '{batch_no}'  and transfer_type = '{trans_type}'"
+running_sql = "update data_transfer set transfer_state = 0,engine_count = {wind_count}  where batch_code = '{" \
+              "batch_no}'  and transfer_type = '{trans_type}' "
 
 
 def __query(connect: pymysql.Connection, sql):
@@ -89,7 +92,7 @@ def get_exec_data():
         data_transfer t INNER JOIN wind_field a on t.field_code = a.field_code
     WHERE
         t.transfer_state = -1
-    AND t.transfer_file_addr != ''
+    AND t.transfer_addr != ''
     ORDER BY
         t.update_time
     LIMIT 1
@@ -103,7 +106,7 @@ def get_exec_data():
 
 
 def get_all_wind(field_code):
-    query_sql = f"select engine_code,engine_name from wind_engine_group where field_code = '{field_code}' and del_state = 1"
+    query_sql = f"select engine_code,engine_name from wind_engine_group where field_code = '{field_code}' and del_state = 0"
     df = __query(plt_connect, query_sql)
     dict_datas = dict()
     if df.empty:
@@ -114,6 +117,35 @@ def get_all_wind(field_code):
         return dict_datas
 
 
+def get_all_wind_company():
+    query_sql = f"SELECT t.field_name FROM wind_field t where t.del_state = 0"
+    df = __query(plt_connect, query_sql)
+    df = pd.DataFrame()
+    df['field_name'] = ['吉山风电场', '和风元宝山', '唐龙三期风电场', '密马风电场', '招远风电场', '昌平坳风场', '昌西一风电场', '虹梯官风电场', '长清风电场']
+    if df.empty:
+        return []
+    else:
+        return list(df['field_name'].values)
+
+
+def get_trans_conf(wind_name, type):
+    query_sql = f"SELECT * FROM trans_conf where wind_name = '{wind_name}' and type = '{type}'"
+    return __query(trans_connect, query_sql)
+
+
+def save_to_trans_conf(data_dict=dict()):
+    keys = data_dict.keys()
+    col_str = ",".join(keys)
+    data_s_str = ",".join(["%s"] * len(keys))
+
+    insert_sql = f"replace into trans_conf ({col_str}) values ({data_s_str})"
+    trans_connect.ping(reconnect=True)
+    with trans_connect.cursor() as cursor:
+        cursor.execute(insert_sql, tuple(data_dict.values()))
+    trans_connect.commit()
+    trans_connect.close()
+
+
 def creat_table_and_add_partition(table_name, count, read_type):
     query_table = f"SELECT t.TABLE_NAME FROM information_schema.`TABLES` t where t.TABLE_NAME = '{table_name}'"
     df = __query(trans_connect, query_table)