From 0777e63bc7832a94ff3d18bf64d81ed3d4fd6137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Fri, 25 Apr 2025 15:49:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=97=E7=AC=A6=E9=9B=86?= =?UTF-8?q?=E5=87=BA=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_machine_connect/controllers/controllers.py | 17 +++--- sf_machine_connect/models/ftp_operate.py | 53 +++++++++++++++++-- 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/sf_machine_connect/controllers/controllers.py b/sf_machine_connect/controllers/controllers.py index 92dc99c7..cefa4ba8 100644 --- a/sf_machine_connect/controllers/controllers.py +++ b/sf_machine_connect/controllers/controllers.py @@ -1298,10 +1298,7 @@ class Sf_Dashboard_Connect(http.Controller): conn = psycopg2.connect(**db_config) # 获取请求的机床数据 machine_list = ast.literal_eval(kw['machine_list']) - time_threshold = datetime.now() - timedelta(days=1) - - alarm_last_24_time = 0.0 - alarm_all_time = 0.0 + time_threshold = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) def fetch_result_as_dict(cursor): """辅助函数:将查询结果转为字典""" @@ -1311,6 +1308,9 @@ class Sf_Dashboard_Connect(http.Controller): # 获取当前时间的时间戳 current_timestamp = datetime.now().timestamp() for item in machine_list: + alarm_last_24_time = 0.0 + alarm_all_time = 0.0 + euipment_obj = request.env['maintenance.equipment'].sudo().search([('code', '=', item)]) # 机床上线时间段 first_online_duration = current_timestamp - euipment_obj.first_online_time.timestamp() @@ -1327,8 +1327,8 @@ class Sf_Dashboard_Connect(http.Controller): cur.execute(""" SELECT * FROM device_data WHERE device_name = %s - AND device_state in ('待机', '警告', '运行中') AND time >= %s AND process_time IS NOT NULL - ORDER BY time ASC + AND device_state in ('待机', '警告', '运行中') AND time <= %s AND process_time IS NOT NULL + ORDER BY time DESC LIMIT 1; """, (item, time_threshold)) last_24_time = fetch_result_as_dict(cur) @@ -1348,12 +1348,13 @@ class Sf_Dashboard_Connect(http.Controller): alarm_last_24_nums = [] with conn.cursor() as cur: cur.execute(""" - SELECT DISTINCT ON (alarm_start_time) alarm_time, alarm_start_time + SELECT DISTINCT ON (alarm_start_time, alarm_time) alarm_time, alarm_start_time FROM device_data WHERE device_name = %s - AND alarm_start_time IS NOT NULL AND time >= %s; + AND alarm_start_time IS NOT NULL AND alarm_start_time::timestamp >= %s; """, (item, time_threshold)) results = cur.fetchall() + logging.info("results============:%s" % results) for result in results: alarm_last_24_nums.append(result[1]) if result[0]: diff --git a/sf_machine_connect/models/ftp_operate.py b/sf_machine_connect/models/ftp_operate.py index e8134ab2..8265b351 100644 --- a/sf_machine_connect/models/ftp_operate.py +++ b/sf_machine_connect/models/ftp_operate.py @@ -9,9 +9,13 @@ _logger = logging.getLogger(__name__) class FTP_P(FTP): """ - 重写FTP类,重写dirs方法 + 重写FTP类,重写dirs方法,增加编码处理 """ - + def __init__(self, host='', user='', passwd='', acct='', timeout=None, encoding='gbk'): + """初始化时指定编码方式""" + super().__init__(host, user, passwd, acct, timeout) + self.encoding = encoding + def dirs(self, *args): """List a directory in long form. By default list current directory to stdout. @@ -32,7 +36,50 @@ class FTP_P(FTP): tempdic['name'] = [file for file in r_files if file != "." and file != ".."] # 去除. .. return tempdic - # return [file for file in r_files if file != "." and file != ".."] + + def nlst(self, *args): + """Get a list of files in a directory.""" + files = [] + def append(line): + try: + if isinstance(line, bytes): + files.append(line.decode(self.encoding)) + else: + files.append(line) + except UnicodeDecodeError: + files.append(line.decode('utf-8', errors='replace')) + cmd = 'NLST' + if args: + cmd = cmd + ' ' + args[0] + self.retrlines(cmd, append) + return files + + def cwd(self, dirname): + """Change to a directory.""" + try: + if isinstance(dirname, bytes): + dirname = dirname.decode(self.encoding) + return super().cwd(dirname) + except UnicodeEncodeError: + return super().cwd(dirname.encode(self.encoding).decode('utf-8')) + + def storbinary(self, cmd, fp, blocksize=8192, callback=None, rest=None): + """Store a file in binary mode.""" + try: + if isinstance(cmd, bytes): + cmd = cmd.decode(self.encoding) + return super().storbinary(cmd, fp, blocksize, callback, rest) + except UnicodeEncodeError: + return super().storbinary(cmd.encode(self.encoding).decode('utf-8'), fp, blocksize, callback, rest) + + def retrbinary(self, cmd, callback, blocksize=8192, rest=None): + """Retrieve a file in binary mode.""" + try: + if isinstance(cmd, bytes): + cmd = cmd.decode(self.encoding) + return super().retrbinary(cmd, callback, blocksize, rest) + except UnicodeEncodeError: + return super().retrbinary(cmd.encode(self.encoding).decode('utf-8'), callback, blocksize, rest) # FTP接口类