trans_conf_service.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2025/1/9
  3. # @Author : 魏志亮
  4. from datetime import datetime
  5. from service.common_connect import trans
  6. from utils.log.trans_log import info
  7. def update_timeout_trans_data():
  8. sql = """
  9. UPDATE data_transfer
  10. SET trans_sys_status = 2,err_info='运行超时失败',transfer_status=2
  11. WHERE
  12. TIMESTAMPDIFF(HOUR, transfer_start_time, NOW()) > 24
  13. AND trans_sys_status = 0
  14. """
  15. trans.execute(sql)
  16. def update_trans_status_running(id, save_db=True):
  17. if save_db:
  18. exec_sql = """
  19. update data_transfer set transfer_status = 0,trans_sys_status = 0 ,transfer_start_time = now(),err_info='',
  20. engine_count =0,time_granularity=0,transfer_finish_time=null,transfer_progress=0,
  21. data_min_time= null,data_max_time= null,transfer_data_count=null
  22. where id = %s
  23. """
  24. trans.execute(exec_sql, id)
  25. def update_archive_success(id, archive_path, save_db=True):
  26. if save_db:
  27. exec_sql = """
  28. update data_transfer set transfer_progress=70,archive_path = %s
  29. where id = %s
  30. """
  31. trans.execute(exec_sql, (archive_path, id))
  32. def update_trans_status_error(id, message="", save_db=True):
  33. if save_db:
  34. exec_sql = """
  35. update data_transfer set transfer_status = 2,trans_sys_status=2 ,err_info= %s,transfer_finish_time=now()
  36. where id = %s
  37. """
  38. message = message if len(message) <= 200 else message[0:200]
  39. trans.execute(exec_sql, (message, id))
  40. info("执行失败:", message)
  41. def update_trans_status_success(id, wind_count=0, time_granularity=0,
  42. min_date=datetime.now(),
  43. max_date=datetime.now(),
  44. total_count=0, save_db=True):
  45. if save_db:
  46. if min_date is not None:
  47. exec_sql = """
  48. update data_transfer set transfer_status = 1,trans_sys_status = 1,transfer_progress=100,err_info = '',
  49. engine_count =%s,time_granularity=%s,transfer_finish_time=now(),
  50. data_min_time= %s,data_max_time= %s,transfer_data_count=%s,is_high_priority=0
  51. where id = %s
  52. """
  53. trans.execute(exec_sql, (wind_count, time_granularity, min_date, max_date, total_count, id))
  54. else:
  55. exec_sql = """
  56. update data_transfer set transfer_status = 1,trans_sys_status = 1,transfer_progress = 100,err_info = '',
  57. engine_count =%s,time_granularity=%s,transfer_finish_time=now(),is_high_priority=0
  58. where id = %s
  59. """
  60. trans.execute(exec_sql, (wind_count, time_granularity, id))
  61. def update_trans_transfer_progress(id, transfer_progress=0, save_db=True):
  62. print(id, transfer_progress)
  63. if save_db:
  64. exec_sql = """
  65. update data_transfer set transfer_progress =%s where id = %s
  66. """
  67. trans.execute(exec_sql, (int(transfer_progress), id))
  68. info('当前进度:', transfer_progress)
  69. def get_now_running_count():
  70. query_running_sql = """
  71. select count(1) as count from data_transfer where trans_sys_status = 0
  72. """
  73. data = trans.execute(query_running_sql)
  74. now_count = int(data[0]['count'])
  75. return now_count
  76. # 获取执行的数据
  77. def get_batch_exec_data() -> dict:
  78. query_next_exec_sql = """
  79. SELECT
  80. *
  81. FROM
  82. data_transfer t
  83. WHERE
  84. t.trans_sys_status in (-1,1,2) and t.transfer_status = -1
  85. AND t.read_dir != ''
  86. ORDER BY
  87. t.is_high_priority desc,
  88. t.update_time
  89. LIMIT 1
  90. """
  91. data = trans.execute(query_next_exec_sql)
  92. if type(data) == tuple:
  93. return None
  94. return data[0]
  95. def create_wave_table(table_name, wind_farm_name: str = '', save_db=True):
  96. # if save_db:
  97. # exec_sql = f"""
  98. # CREATE TABLE `{table_name}` (
  99. # `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  100. # `wind_turbine_number` varchar(20) DEFAULT NULL COMMENT '风机编号',
  101. # `wind_turbine_name` varchar(20) DEFAULT NULL COMMENT '原始风机编号',
  102. # `time_stamp` datetime DEFAULT NULL COMMENT '时间',
  103. # `rotational_speed` float DEFAULT NULL COMMENT '转速',
  104. # `sampling_frequency` int DEFAULT NULL COMMENT '采样频率',
  105. # `mesure_point_name` varchar(100) DEFAULT NULL COMMENT '测点名称',
  106. # `origin_type` int(11) DEFAULT '-1' COMMENT '厂商原始的类型,默认 -1',
  107. # `type` int(11) DEFAULT '-1' COMMENT '-1:不存在 0:角度 1:速度 2:加速度 3:位移 4:包络,默认 -1',
  108. # `mesure_data` longtext COMMENT '测点数据',
  109. # PRIMARY KEY (`id`),
  110. # KEY `wind_turbine_number` (`wind_turbine_number`),
  111. # KEY `time_stamp` (`time_stamp`),
  112. # KEY `mesure_point_name` (`mesure_point_name`)
  113. # ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='{wind_farm_name}'
  114. # """
  115. # trans.execute(exec_sql)
  116. if save_db:
  117. exec_sql = f"""
  118. CREATE TABLE `{table_name}` (
  119. `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  120. `wind_turbine_number` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '风机编号',
  121. `wind_turbine_name` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '原始风机编号',
  122. `time_stamp` datetime DEFAULT NULL COMMENT '时间',
  123. `eu_spectrum` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '频谱单位',
  124. `detection_type` int DEFAULT NULL COMMENT '频谱的检测类型 0:None,1:Peak,2:Peak-to-peak,3:RMS',
  125. `window_type` int DEFAULT NULL COMMENT '窗函数类型:0:Hanning,1:Uniform,2:Flat Top',
  126. `start_frequency` int DEFAULT NULL COMMENT '频谱的起始频率(Hz)',
  127. `end_frequency` int DEFAULT NULL COMMENT '频谱的结束频率(Hz)',
  128. `samples` int DEFAULT NULL COMMENT '采样点数(时域波形)或谱线数(频谱)',
  129. `rotational_speed` float DEFAULT NULL COMMENT '转速',
  130. `sampling_frequency` int DEFAULT NULL COMMENT '采样频率',
  131. `mesure_point_name` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '测点名称',
  132. `type` int DEFAULT '-1' COMMENT '-1:不存在 0:角度 1:速度 2:加速度 3:位移 4:包络,默认 -1',
  133. `mesure_data_time` longtext CHARACTER SET utf8mb4 COMMENT '时域数据',
  134. `mesure_data_frenquency` longtext CHARACTER SET utf8mb4 COMMENT '频谱数据',
  135. `mesure_data_env` longtext CHARACTER SET utf8mb4 COMMENT '包络数据',
  136. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  137. `status_1` int DEFAULT NULL COMMENT '轴承诊断 0:正常 1:预警 2:危险',
  138. `status_2` int DEFAULT NULL COMMENT '齿轮诊断 0:正常 1:预警 2:危险',
  139. `status_3` int DEFAULT NULL COMMENT '不对中诊断 0:正常 1:预警 2:危险',
  140. `status_4` int DEFAULT NULL COMMENT '不平衡诊断 0:正常 1:预警 2:危险',
  141. `status_5` int DEFAULT NULL COMMENT '松动诊断 0:正常 1:预警 2:危险',
  142. `diag_flag` int DEFAULT NULL COMMENT '诊断标识 0:未诊断 1:已诊断',
  143. `retry_times` int(11) DEFAULT '0' COMMENT '尝试计算次数',
  144. PRIMARY KEY (`id`) USING BTREE,
  145. KEY `wind_turbine_number` (`wind_turbine_number`) USING BTREE,
  146. KEY `time_stamp` (`time_stamp`) USING BTREE,
  147. KEY `mesure_point_name` (`mesure_point_name`) USING BTREE
  148. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='{wind_farm_name}'
  149. """
  150. trans.execute(exec_sql)
  151. def get_trans_exec_code(wind_code, trans_type):
  152. exec_sql = f"select exec_code from batch_exec_code where wind_code = '{wind_code}' and type = '{trans_type}' and status = 1"
  153. data = trans.execute(exec_sql)
  154. if type(data) == tuple:
  155. return None
  156. return data[0]['exec_code']