import pandas as pd from datetime import timedelta from app.database.database import DatabaseConnection class MainProcessService: def __init__(self): self.db = DatabaseConnection() self.timezone_offset = 8 # 默认东八区(北京时间) def _to_utc(self, dt): return dt - timedelta(hours=self.timezone_offset) def _to_local(self, df): if not df.empty and 'time' in df.columns: df['time'] = pd.to_datetime(df['time']) + timedelta(hours=self.timezone_offset) return df def get_cutting_setting_data(self, start_date, end_date): """获取流程主速度数据""" try: start_utc = self._to_utc(start_date) end_utc = self._to_utc(end_date) if not self.db.is_connected(): self.db.connect() query = """ SELECT time, process_main_speed, cutting_count FROM public.aics_main_process_cutting_setting WHERE time BETWEEN %s AND %s ORDER BY time ASC """ df = pd.read_sql(query, self.db.get_connection(), params=(start_utc, end_utc)) return self._to_local(df) except Exception as e: print(f"获取主速度数据失败: {e}") return pd.DataFrame() def get_motor_monitoring_data(self, start_date, end_date): """获取电机监控线速数据""" try: start_utc = self._to_utc(start_date) end_utc = self._to_utc(end_date) if not self.db.is_connected(): self.db.connect() query = """ SELECT time, m1_line_speed, m2_line_speed FROM public.aics_main_process_motor_monitoring WHERE time BETWEEN %s AND %s ORDER BY time ASC """ df = pd.read_sql(query, self.db.get_connection(), params=(start_utc, end_utc)) return self._to_local(df) except Exception as e: print(f"获取电机监控数据失败: {e}") return pd.DataFrame() def get_temperature_control_data(self, start_date, end_date): """获取中田挤出机温度设定与显示数据""" try: start_utc = self._to_utc(start_date) end_utc = self._to_utc(end_date) if not self.db.is_connected(): self.db.connect() query = """ SELECT time, nakata_extruder_screw_set_temp, nakata_extruder_screw_display_temp, nakata_extruder_rear_barrel_set_temp, nakata_extruder_rear_barrel_display_temp, nakata_extruder_front_barrel_set_temp, nakata_extruder_front_barrel_display_temp, nakata_extruder_head_set_temp, nakata_extruder_head_display_temp FROM public.aics_main_process_temperature_control_setting WHERE time BETWEEN %s AND %s ORDER BY time ASC """ df = pd.read_sql(query, self.db.get_connection(), params=(start_utc, end_utc)) return self._to_local(df) except Exception as e: print(f"获取温度控制数据失败: {e}") return pd.DataFrame()