From ada8cb2053091aefcbb753f02574b6fdf8fc822f Mon Sep 17 00:00:00 2001 From: zhouping Date: Mon, 3 Jun 2024 14:49:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- website/consts.py | 5 +++++ website/db/alg_model/alg_model.py | 9 ++++++++ .../enterprise_busi_model_node_device.py | 22 ++++++++++++++++++- .../db/enterprise_device/enterprise_device.py | 10 ++++++--- website/handlers/enterprise_device/handler.py | 16 ++++++++++++++ website/handlers/enterprise_device/url.py | 1 - 6 files changed, 58 insertions(+), 5 deletions(-) diff --git a/website/consts.py b/website/consts.py index e155b83..a600c26 100644 --- a/website/consts.py +++ b/website/consts.py @@ -29,6 +29,11 @@ model_type_map = { } # 1000/all/默认, 1001/在线,1002/离线,1003/运行中,1004/故障 +device_status_default = 1000 +device_status_online = 1001 +device_status_offline = 1002 +device_status_ongoing = 1003 +device_status_error = 1004 device_status_map = { 1000: u"全部", 1001: u"在线", diff --git a/website/db/alg_model/alg_model.py b/website/db/alg_model/alg_model.py index b06d471..267ced4 100644 --- a/website/db/alg_model/alg_model.py +++ b/website/db/alg_model/alg_model.py @@ -63,6 +63,15 @@ class ModelRepositry(object): return model + def get_model_by_ids(self, model_ids: list) -> list: + with get_session() as session: + models = session.query(Model).filter(Model.id.in_(model_ids)).all() + if not models: + return [] + + return models + + def get_model_count(self) -> int: with get_session() as session: return session.query(Model).count() diff --git a/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py b/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py index 6bbf8bb..c1bfe19 100644 --- a/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py +++ b/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- -from typing import List import logging +from typing import List + from sqlalchemy import Column, Integer, String, DateTime, func, text from sqlalchemy.ext.declarative import declarative_base @@ -95,3 +96,22 @@ class EnterpriseBusiModelNodeDeviceRepository(object): sql, {"node_id": node_id, "busi_model_id": busi_model_id} ) return to_json_list(res) + + def get_busi_model_by_device(self, device_id: int = 0, device_suid: str = "") -> list: + with get_session() as session: + sql = """ + select d.busi_model_id, m.name, m.base_models + from enterprise_busi_model_node_device d, enterprise_busi_model m + where d.busi_model_id=m.id""" + p = {} + + if device_id: + sql += " and d.device_id=:device_id" + p.update({"device_id": device_id}) + + if device_suid: + sql += " and d.device_suid=:device_suid" + p.update({"device_suid": device_suid}) + + res = session.execute(text(sql), p) + return to_json_list(res) diff --git a/website/db/enterprise_device/enterprise_device.py b/website/db/enterprise_device/enterprise_device.py index 163ffaa..fa0eb6e 100644 --- a/website/db/enterprise_device/enterprise_device.py +++ b/website/db/enterprise_device/enterprise_device.py @@ -5,6 +5,7 @@ import logging from sqlalchemy import Column, Integer, String, DateTime, func from sqlalchemy.ext.declarative import declarative_base +from website import consts from website import errors from website.db.device_classification.device_classification import DeviceClassification from website.db.enterprise_entity.enterprise_entity import EnterpriseEntityRepository @@ -276,6 +277,7 @@ class EnterpriseDeviceRepository(object): for device in devices: device_dict = { "id": device.id, + "suid": device.suid, "name": device.name, "addr": device.addr, "device_model": device.device_model, @@ -297,6 +299,7 @@ class EnterpriseDeviceRepository(object): return 0 def list_entity_devices(self, entity_id: int, pageNo: int, pageSize: int, classification: str, status: int) -> dict: + """获取企业的设备列表""" with get_session() as session: try: session_count = ( @@ -308,7 +311,7 @@ class EnterpriseDeviceRepository(object): ) if classification: session_count.filter(EnterpriseDevice.classification == classification) - if status: + if status in consts.device_status_map and status != consts.device_status_default: session_count.filter(EnterpriseDevice.status == status) count = session_count.count() @@ -324,10 +327,11 @@ class EnterpriseDeviceRepository(object): if status: session_device.filter(EnterpriseDevice.status == status) - devices = session_device.order_by(EnterpriseDevice.id.desc()).limit(pageSize).offset((pageNo - 1) * pageSize).all() + devices = session_device.order_by(EnterpriseDevice.id.desc()).limit(pageSize).offset( + (pageNo - 1) * pageSize).all() except Exception as e: logging.error("Failed to list devices") raise e - return {"count": count, "devices": devices} \ No newline at end of file + return {"count": count, "devices": devices} diff --git a/website/handlers/enterprise_device/handler.py b/website/handlers/enterprise_device/handler.py index 309994d..0108bfd 100644 --- a/website/handlers/enterprise_device/handler.py +++ b/website/handlers/enterprise_device/handler.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import json import logging import random from sqlalchemy import text @@ -8,6 +9,7 @@ from website.db.enterprise_device import enterprise_device as DB_Device from website.db.device_classification import ( device_classification as DB_DeviceClassification, ) +from website.db.enterprise_busi_model import enterprise_busi_model_node_device as DB_BusiModelNodeDevice from website.handler import APIHandler, authenticated from website.util import shortuuid from website import consts @@ -406,6 +408,20 @@ class StatusInfoHandler(APIHandler): @authenticated def post(self): + device_id = self.get_int_argument("device_id") + if not device_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备id不能为空") + + db_device = DB_Device.EnterpriseDeviceRepository() + res = db_device.get_devices(device_ids=[device_id]) + if not res: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备不存在") + res = res[0] + db_busi_model = DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository() + busi_models = db_busi_model.get_busi_model_by_device(device_id=device_id) + for busi_model in busi_models: + base_model_ids = json.loads(busi_model["base_models"]) + self.finish() diff --git a/website/handlers/enterprise_device/url.py b/website/handlers/enterprise_device/url.py index 8ce8fbb..883feaa 100644 --- a/website/handlers/enterprise_device/url.py +++ b/website/handlers/enterprise_device/url.py @@ -2,7 +2,6 @@ from website.handlers.enterprise_device import handler - handlers = [ ("/enterprise/device/classification/add", handler.DeviceClassificationAddHandler), ("/enterprise/device/classification", handler.DeviceClassificationHandler),