trans_service.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2024/6/7
  3. # @Author : 魏志亮
  4. import os
  5. import traceback
  6. import pandas as pd
  7. from utils.db.ConnectMysql import ConnectMysql
  8. from utils.log.trans_log import trans_print
  9. trans = ConnectMysql("trans")
  10. def get_trans_conf(field_code, wind_name, trans_type) -> dict:
  11. query_sql = "SELECT * FROM trans_conf where wind_code = %s and type = %s"
  12. res = trans.execute(query_sql, (field_code, trans_type))
  13. print(res)
  14. if type(res) == tuple:
  15. return None
  16. return res[0]
  17. def save_to_trans_conf(data_dict=dict()):
  18. trans.save_dict(data_dict)
  19. zhishu_list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
  20. def creat_table_and_add_partition(table_name, win_names, read_type):
  21. create_sql = f"""
  22. CREATE TABLE
  23. IF NOT EXISTS `{table_name}` (
  24. `wind_turbine_number` VARCHAR (20) DEFAULT NULL COMMENT '风机编号',
  25. `wind_turbine_name` VARCHAR(20) DEFAULT NULL COMMENT '风机原始名称',
  26. `time_stamp` datetime NOT NULL COMMENT '时间戳',
  27. `active_power` DOUBLE DEFAULT NULL COMMENT '有功功率',
  28. `rotor_speed` DOUBLE DEFAULT NULL COMMENT '风轮转速',
  29. `generator_speed` DOUBLE DEFAULT NULL COMMENT '发电机转速',
  30. `wind_velocity` DOUBLE DEFAULT NULL COMMENT '风速',
  31. `pitch_angle_blade_1` DOUBLE DEFAULT NULL COMMENT '桨距角1',
  32. `pitch_angle_blade_2` DOUBLE DEFAULT NULL COMMENT '桨距角2',
  33. `pitch_angle_blade_3` DOUBLE DEFAULT NULL COMMENT '桨距角3',
  34. `cabin_position` DOUBLE DEFAULT NULL COMMENT '机舱位置',
  35. `true_wind_direction` DOUBLE DEFAULT NULL COMMENT '绝对风向',
  36. `yaw_error1` DOUBLE DEFAULT NULL COMMENT '对风角度',
  37. `set_value_of_active_power` DOUBLE DEFAULT NULL COMMENT '有功功率设定值',
  38. `gearbox_oil_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱油温',
  39. `generatordrive_end_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '发电机驱动端轴承温度',
  40. `generatornon_drive_end_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '发电机非驱动端轴承温度',
  41. `cabin_temperature` DOUBLE DEFAULT NULL COMMENT '机舱内温度',
  42. `twisted_cable_angle` DOUBLE DEFAULT NULL COMMENT '扭缆角度',
  43. `front_back_vibration_of_the_cabin` DOUBLE DEFAULT NULL COMMENT '机舱前后振动',
  44. `side_to_side_vibration_of_the_cabin` DOUBLE DEFAULT NULL COMMENT '机舱左右振动',
  45. `actual_torque` DOUBLE DEFAULT NULL COMMENT '实际力矩',
  46. `given_torque` DOUBLE DEFAULT NULL COMMENT '给定力矩',
  47. `clockwise_yaw_count` DOUBLE DEFAULT NULL COMMENT '顺时针偏航次数',
  48. `counterclockwise_yaw_count` DOUBLE DEFAULT NULL COMMENT '逆时针偏航次数',
  49. `unusable` DOUBLE DEFAULT NULL COMMENT '不可利用',
  50. `power_curve_available` DOUBLE DEFAULT NULL COMMENT '功率曲线可用',
  51. `required_gearbox_speed` DOUBLE DEFAULT NULL COMMENT '齿轮箱转速',
  52. `inverter_speed_master_control` DOUBLE DEFAULT NULL COMMENT '变频器转速(主控)',
  53. `outside_cabin_temperature` DOUBLE DEFAULT NULL COMMENT '环境温度',
  54. `main_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '主轴承轴承温度',
  55. `gearbox_high_speed_shaft_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱高速轴轴承温度',
  56. `gearboxmedium_speed_shaftbearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱中速轴轴承温度',
  57. `gearbox_low_speed_shaft_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱低速轴轴承温度',
  58. `generator_winding1_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组1温度',
  59. `generator_winding2_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组2温度',
  60. `generator_winding3_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组3温度',
  61. `wind_turbine_status` DOUBLE DEFAULT NULL COMMENT '风机状态1',
  62. `wind_turbine_status2` DOUBLE DEFAULT NULL COMMENT '风机状态2',
  63. `turbulence_intensity` DOUBLE DEFAULT NULL COMMENT '湍流强度',
  64. `lab` int DEFAULT NULL COMMENT '-1:停机 0:好点 1:欠发功率点;2:超发功率点;3:额定风速以上的超发功率点 4: 限电',
  65. `year` INT (4) DEFAULT NULL COMMENT '年',
  66. `month` INT (2) DEFAULT NULL COMMENT '月',
  67. `day` INT (2) DEFAULT NULL COMMENT '日',
  68. `param1` DOUBLE DEFAULT NULL COMMENT '预留1',
  69. `param2` DOUBLE DEFAULT NULL COMMENT '预留2',
  70. `param3` DOUBLE DEFAULT NULL COMMENT '预留3',
  71. `param4` DOUBLE DEFAULT NULL COMMENT '预留4',
  72. `param5` DOUBLE DEFAULT NULL COMMENT '预留5',
  73. `param6` VARCHAR (20) DEFAULT NULL COMMENT '预留6',
  74. `param7` VARCHAR (20) DEFAULT NULL COMMENT '预留7',
  75. `param8` VARCHAR (20) DEFAULT NULL COMMENT '预留8',
  76. `param9` VARCHAR (20) DEFAULT NULL COMMENT '预留9',
  77. `param10` VARCHAR (20) DEFAULT NULL COMMENT '预留10',
  78. KEY `time_stamp` (`time_stamp`),
  79. KEY `wind_turbine_number` (`wind_turbine_number`)
  80. ) ENGINE = myisam DEFAULT CHARSET = utf8mb4
  81. """
  82. if read_type == 'second' and len(win_names) > 1:
  83. create_sql = create_sql + f" PARTITION BY LIST COLUMNS(`wind_turbine_number`) ("
  84. partition_strs = list()
  85. for wind_name in win_names:
  86. partition_strs.append(f" PARTITION p{wind_name} VALUES IN('{wind_name}')")
  87. create_sql = create_sql + ",".join(partition_strs) + ")"
  88. trans.execute(create_sql)
  89. def rename_table(table_name, renamed_table_name, save_db=True):
  90. if save_db:
  91. rename_sql = f"RENAME TABLE {table_name} TO {renamed_table_name}"
  92. try:
  93. trans.execute(rename_sql)
  94. except:
  95. trans_print(traceback.format_exc())
  96. def drop_table(table_name, save_db=True):
  97. if save_db:
  98. rename_sql = f"drop TABLE `{table_name}`"
  99. try:
  100. trans.execute(rename_sql)
  101. except:
  102. trans_print(traceback.format_exc())
  103. def save_file_to_db(table_name: str, file: str, batch_count=100000):
  104. base_name = os.path.basename(file)
  105. try:
  106. for i, df in enumerate(pd.read_csv(file, chunksize=batch_count)):
  107. # df.to_sql(table_name, engine, if_exists='append', index=False)
  108. trans.execute_df_save(df, table_name)
  109. count = (i + 1) * batch_count
  110. trans_print(base_name, f"Chunk {count} written to MySQL.")
  111. except Exception as e:
  112. trans_print(traceback.format_exc())
  113. message = base_name + str(e)
  114. raise Exception(message)
  115. def batch_statistics(table_name):
  116. query_sql = f"select count(1) as total_count ,min(t.time_stamp) as min_date ,max(t.time_stamp) as max_date from `{table_name}` t "
  117. try:
  118. res = trans.execute(query_sql)
  119. return res[0]
  120. except:
  121. trans_print(traceback.format_exc())
  122. return None
  123. if __name__ == '__main__':
  124. # path_prix = r"/data/download/collection_data/2完成/招远风电场-山东-大唐/清理数据/WOF063100040-WOB00013/second"
  125. # files = ["WOG00030.csv", "WOG00034.csv"]
  126. # for path in files:
  127. # save_file_to_db("WOF063100040-WOB00013_second", path_prix + os.sep + path, batch_count=100000)
  128. table_name = "test"
  129. read_type = "second"
  130. wind_names = ['WOG00030', 'WOG00034']
  131. create_sql = f"""
  132. CREATE TABLE
  133. IF NOT EXISTS `{table_name}` (
  134. `wind_turbine_number` VARCHAR (20) DEFAULT NULL COMMENT '风机编号',
  135. `wind_turbine_name` VARCHAR(20) DEFAULT NULL COMMENT '风机原始名称',
  136. `time_stamp` datetime NOT NULL COMMENT '时间戳',
  137. `active_power` DOUBLE DEFAULT NULL COMMENT '有功功率',
  138. `rotor_speed` DOUBLE DEFAULT NULL COMMENT '风轮转速',
  139. `generator_speed` DOUBLE DEFAULT NULL COMMENT '发电机转速',
  140. `wind_velocity` DOUBLE DEFAULT NULL COMMENT '风速',
  141. `pitch_angle_blade_1` DOUBLE DEFAULT NULL COMMENT '桨距角1',
  142. `pitch_angle_blade_2` DOUBLE DEFAULT NULL COMMENT '桨距角2',
  143. `pitch_angle_blade_3` DOUBLE DEFAULT NULL COMMENT '桨距角3',
  144. `cabin_position` DOUBLE DEFAULT NULL COMMENT '机舱位置',
  145. `true_wind_direction` DOUBLE DEFAULT NULL COMMENT '绝对风向',
  146. `yaw_error1` DOUBLE DEFAULT NULL COMMENT '对风角度',
  147. `set_value_of_active_power` DOUBLE DEFAULT NULL COMMENT '有功功率设定值',
  148. `gearbox_oil_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱油温',
  149. `generatordrive_end_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '发电机驱动端轴承温度',
  150. `generatornon_drive_end_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '发电机非驱动端轴承温度',
  151. `cabin_temperature` DOUBLE DEFAULT NULL COMMENT '机舱内温度',
  152. `twisted_cable_angle` DOUBLE DEFAULT NULL COMMENT '扭缆角度',
  153. `front_back_vibration_of_the_cabin` DOUBLE DEFAULT NULL COMMENT '机舱前后振动',
  154. `side_to_side_vibration_of_the_cabin` DOUBLE DEFAULT NULL COMMENT '机舱左右振动',
  155. `actual_torque` DOUBLE DEFAULT NULL COMMENT '实际力矩',
  156. `given_torque` DOUBLE DEFAULT NULL COMMENT '给定力矩',
  157. `clockwise_yaw_count` DOUBLE DEFAULT NULL COMMENT '顺时针偏航次数',
  158. `counterclockwise_yaw_count` DOUBLE DEFAULT NULL COMMENT '逆时针偏航次数',
  159. `unusable` DOUBLE DEFAULT NULL COMMENT '不可利用',
  160. `power_curve_available` DOUBLE DEFAULT NULL COMMENT '功率曲线可用',
  161. `required_gearbox_speed` DOUBLE DEFAULT NULL COMMENT '齿轮箱转速',
  162. `inverter_speed_master_control` DOUBLE DEFAULT NULL COMMENT '变频器转速(主控)',
  163. `outside_cabin_temperature` DOUBLE DEFAULT NULL COMMENT '环境温度',
  164. `main_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '主轴承轴承温度',
  165. `gearbox_high_speed_shaft_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱高速轴轴承温度',
  166. `gearboxmedium_speed_shaftbearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱中速轴轴承温度',
  167. `gearbox_low_speed_shaft_bearing_temperature` DOUBLE DEFAULT NULL COMMENT '齿轮箱低速轴轴承温度',
  168. `generator_winding1_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组1温度',
  169. `generator_winding2_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组2温度',
  170. `generator_winding3_temperature` DOUBLE DEFAULT NULL COMMENT '发电机绕组3温度',
  171. `wind_turbine_status` DOUBLE DEFAULT NULL COMMENT '风机状态1',
  172. `wind_turbine_status2` DOUBLE DEFAULT NULL COMMENT '风机状态2',
  173. `turbulence_intensity` DOUBLE DEFAULT NULL COMMENT '湍流强度',
  174. `lab` int DEFAULT NULL COMMENT '-1:停机 0:好点 1:欠发功率点;2:超发功率点;3:额定风速以上的超发功率点 4: 限电',
  175. `year` INT (4) DEFAULT NULL COMMENT '年',
  176. `month` INT (2) DEFAULT NULL COMMENT '月',
  177. `day` INT (2) DEFAULT NULL COMMENT '日',
  178. `param1` DOUBLE DEFAULT NULL COMMENT '预留1',
  179. `param2` DOUBLE DEFAULT NULL COMMENT '预留2',
  180. `param3` DOUBLE DEFAULT NULL COMMENT '预留3',
  181. `param4` DOUBLE DEFAULT NULL COMMENT '预留4',
  182. `param5` DOUBLE DEFAULT NULL COMMENT '预留5',
  183. `param6` VARCHAR (20) DEFAULT NULL COMMENT '预留6',
  184. `param7` VARCHAR (20) DEFAULT NULL COMMENT '预留7',
  185. `param8` VARCHAR (20) DEFAULT NULL COMMENT '预留8',
  186. `param9` VARCHAR (20) DEFAULT NULL COMMENT '预留9',
  187. `param10` VARCHAR (20) DEFAULT NULL COMMENT '预留10',
  188. KEY `time_stamp` (`time_stamp`),
  189. KEY `wind_turbine_number` (`wind_turbine_number`)
  190. ) ENGINE = myisam DEFAULT CHARSET = utf8mb4
  191. """
  192. if read_type == 'second' and len(wind_names) > 1:
  193. create_sql = create_sql + f" PARTITION BY LIST COLUMNS(`wind_turbine_number`) ("
  194. partition_strs = list()
  195. for wind_name in wind_names:
  196. partition_strs.append(f" PARTITION p{wind_name} VALUES IN('{wind_name}')")
  197. create_sql = create_sql + ",".join(partition_strs) + ")"
  198. print(create_sql)