mysql_data.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import time, threading
  2. from utils.logger import Logger
  3. from dbutils.pooled_db import PooledDB
  4. from utils.statepoint import Statepoint
  5. class MysqlData:
  6. def __init__(self, mysql_pool: PooledDB, logger: Logger):
  7. self.mysql_pool = mysql_pool
  8. self.logger = logger
  9. self.datas = {"5#到站信息": (), "6#到站信息": ()}
  10. self.points = {}
  11. self.thread_flag = True
  12. self.thread = threading.Thread(target=self.update_forever)
  13. self.thread.start()
  14. def get_value(self, ccm_no, default=()):
  15. sql = "SELECT heat_no, into_cc_time from nuo_cc_load_info where cc_no = %s order by into_cc_time desc limit 1;"
  16. try:
  17. with self.mysql_pool.connection() as conn:
  18. with conn.cursor() as cursor:
  19. cursor.execute(sql, (ccm_no,))
  20. result = cursor.fetchall()
  21. if len(result) == 0:
  22. raise ValueError("Read no data from mysql.")
  23. return result[0]
  24. except Exception as e:
  25. self.logger.error(f"[mysql]:{e}")
  26. return default
  27. def update_forever(self, fru=500):
  28. while self.thread_flag:
  29. for i in self.datas.keys():
  30. self.datas[i] = self.get_value(i[0])
  31. if i in self.points.keys():
  32. for j in self.points[i]:
  33. j.inject(self.datas[i])
  34. time.sleep(fru/1000)
  35. def make_point(self, name, point_t=Statepoint):
  36. if name not in self.datas.keys():
  37. raise NameError(f"Name {name} is not defined.")
  38. if name not in self.points.keys():
  39. self.points[name] = []
  40. tmp_point = point_t(self.datas[name], False)
  41. self.points[name].append(tmp_point)
  42. return tmp_point
  43. class MysqlDataSizing(MysqlData):
  44. def __init__(self, mysql_pool, logger):
  45. super().__init__(mysql_pool, logger)
  46. self.datas = {f"{i}流定尺": 0 for i in range(1, 9)}
  47. def get_value(self, strand_no, default=0):
  48. sql = "SELECT length FROM autocutwrite WHERE stream = %s ORDER BY cuttime DESC LIMIT 1;"
  49. try:
  50. with self.mysql_pool.connection() as conn:
  51. with conn.cursor() as cursor:
  52. cursor.execute(sql, (strand_no,))
  53. result = cursor.fetchall()
  54. if len(result) == 0:
  55. raise ValueError("Read no data from mysql.")
  56. return result[0][0]
  57. except Exception as e:
  58. self.logger.error(f"[mysql]:{e}")
  59. return default