diff --git a/website/handlers/model/__init__.py b/website/handlers/alg_model/__init__.py similarity index 100% rename from website/handlers/model/__init__.py rename to website/handlers/alg_model/__init__.py diff --git a/website/handlers/model/handler.py b/website/handlers/alg_model/handler.py similarity index 100% rename from website/handlers/model/handler.py rename to website/handlers/alg_model/handler.py diff --git a/website/handlers/model/url.py b/website/handlers/alg_model/url.py similarity index 94% rename from website/handlers/model/url.py rename to website/handlers/alg_model/url.py index 5b7899f..dbf9d31 100644 --- a/website/handlers/model/url.py +++ b/website/handlers/alg_model/url.py @@ -1,4 +1,4 @@ -from website.handlers.model import handler +from website.handlers.alg_model import handler handlers = [ # ("/", handler.Handler), diff --git a/website/handlers/model_hub/__init__.py b/website/handlers/alg_model_hub/__init__.py similarity index 100% rename from website/handlers/model_hub/__init__.py rename to website/handlers/alg_model_hub/__init__.py diff --git a/website/handlers/model_hub/handler.py b/website/handlers/alg_model_hub/handler.py similarity index 100% rename from website/handlers/model_hub/handler.py rename to website/handlers/alg_model_hub/handler.py diff --git a/website/handlers/model_hub/url.py b/website/handlers/alg_model_hub/url.py similarity index 87% rename from website/handlers/model_hub/url.py rename to website/handlers/alg_model_hub/url.py index 72a60c5..b7a083e 100644 --- a/website/handlers/model_hub/url.py +++ b/website/handlers/alg_model_hub/url.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from website.handlers.model_hub import handler +from website.handlers.alg_model_hub import handler handlers = [ # ("/", handler.Handler), diff --git a/website/handlers/enterprise_device/db.py b/website/handlers/enterprise_device/db.py index 7c68785..cb85d35 100644 --- a/website/handlers/enterprise_device/db.py +++ b/website/handlers/enterprise_device/db.py @@ -1 +1,93 @@ -# -*- coding: utf-8 -*- \ No newline at end of file +# -*- coding: utf-8 -*- + +import logging + +from sqlalchemy import Column, Integer, String, DateTime +from sqlalchemy.ext.declarative import declarative_base + +from website.db import get_session +from website.handlers.enterprise_entity.db import EnterpriseEntityDB +from website.handlers.enterprise_node.db import EnterpriseNodeDB + +Base = declarative_base() + + +class EnterpriseDevice(Base): + __tablename__ = 'enterprise_device' + + id = Column(Integer, primary_key=True) + suid = Column(String, len=10, default="") + entity_id = Column(Integer) + entity_suid = Column(String) + node_id = Column(Integer) + node_suid = Column(String) + classification = Column(String) + name = Column(String) + addr = Column(String) + device_model = Column(String) + param = Column(String) + comment = Column(String) + delete = Column("del", Integer, default=0) + create_time = Column(DateTime) + update_time = Column(DateTime) + + +class EnterpriseDeviceDB(object): + + def add_device(self, device): + entity_id = device["entity_id"] + node_id = device["node_id"] + entity_suid = EnterpriseEntityDB().get_entity_suid(entity_id) + node_suid = EnterpriseNodeDB().get_node_uid(node_id) + + device["entity_suid"] = entity_suid + device["node_suid"] = node_suid + + new_device = EnterpriseDevice(**device) + with get_session() as session: + try: + # session.execute( + # text( + # """INSERT INTO enterprise_device + # (suid, entity_id, entity_suid, node_id, node_suid, classification, name, addr, device_model, param, comment) + # values (:suid, :entity_id, :entity_suid, :node_id, :node_suid, :classification, :name, :addr, :device_model, :param, :comment)""" + # ), + # device) + session.add(new_device) + except Exception as e: + logging.error("Failed to add device") + raise e + + return + + def edit_device(self, device): + device_id = device["id"] + with get_session() as session: + try: + session.query(EnterpriseDevice).filter(EnterpriseDevice.id == device_id).update(device) + except Exception as e: + logging.error("Failed to edit device") + raise e + + return + + def delete_device(self, device_id): + with get_session() as session: + try: + session.query(EnterpriseDevice).filter(EnterpriseDevice.id == device_id).update({"delete": 1}) + except Exception as e: + logging.error("Failed to delete device") + raise e + + return + + def list_devices(self, node_id, pageNo, pageSize): + with get_session() as session: + try: + devices = session.query(EnterpriseDevice) \ + .filter(EnterpriseDevice.node_id == node_id, EnterpriseDevice.delete != 1) \ + .order_by(EnterpriseDevice.create_time.desc()).limit(pageSize).offset((pageNo - 1) * pageSize).all() + except Exception as e: + logging.error("Failed to list devices") + raise e + return devices diff --git a/website/handlers/enterprise_device/handler.py b/website/handlers/enterprise_device/handler.py index aa1b70d..a1623be 100644 --- a/website/handlers/enterprise_device/handler.py +++ b/website/handlers/enterprise_device/handler.py @@ -5,7 +5,7 @@ from sqlalchemy import text from website import errors, db from website.handler import APIHandler, authenticated from website.util import shortuuid - +from website.handlers.enterprise_device import db as DB_Device class DeviceClassificationAddHandler(APIHandler): """ @@ -94,39 +94,155 @@ class DeviceClassificationDeleteHandler(APIHandler): class DeviceAddHandler(APIHandler): """ - + - 描述:企业节点,添加设备 + - 请求方式:post + - 请求参数: + >- entity_id, int, 企业id + >- node_id, int + >- name, string, 设备名称 + >- addr, string, 设备位置 + >- classification, string, 设备分类 + >- device_model, string, 设备型号 + >- param, string, 设备参数 + >- comment, string, 备注 + - 返回值: + ``` + 无 + ``` """ @authenticated def post(self): + entity_id = self.get_int_argument('entity_id') + node_id = self.get_int_argument('node_id') + name = self.get_escaped_argument('name', '') + addr = self.get_escaped_argument('addr', '') + classification = self.get_escaped_argument('classification', '') + device_model = self.get_escaped_argument('device_model', '') + param = self.get_escaped_argument('param', '') + comment = self.get_escaped_argument('comment', '') + + if not name: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '设备名称不能为空') + if not entity_id or not node_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点不能为空') + + device_data = { + "entity_id": entity_id, + "node_id": node_id, + "name": name, + "addr": addr, + "classification": classification, + "device_model": device_model, + "param": param, + "comment": comment + } + + db_device = DB_Device.EnterpriseDeviceDB() + db_device.add_device(device_data) + self.finish() class DeviceEditHandler(APIHandler): """ - + - 描述:企业节点,编辑设备 + - 请求方式:post + - 请求参数: + >- device_id, int, 设备id + >- name, string, 设备名称 + >- addr, string, 设备位置 + >- classification, string, 设备分类的short uuid + >- device_model, string, 设备型号 + >- param, string, 设备参数 + >- comment, string, 备注 + - 返回值:无 """ @authenticated def post(self): + device_id = self.get_int_argument('device_id') + name = self.get_escaped_argument('name', '') + addr = self.get_escaped_argument('addr', '') + classification = self.get_escaped_argument('classification', '') + device_model = self.get_escaped_argument('device_model', '') + param = self.get_escaped_argument('param', '') + comment = self.get_escaped_argument('comment', '') + if not device_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '设备id不能为空') + if not name: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '设备名称不能为空') + + device_data = { + "id": device_id, + "name": name, + "addr": addr, + "classification": classification, + "device_model": device_model, + "param": param, + "comment": comment + } + + db_device = DB_Device.EnterpriseDeviceDB() + db_device.edit_device(device_data) self.finish() class DeviceDeleteHandler(APIHandler): """ + ### /enterprise/entity/nodes/device/delete + - 描述:企业节点,删除设备 + - 请求方式:post + - 请求参数: + >- node_id, int + >- device_id, int, 设备id + - 返回值:无 """ @authenticated def post(self): + node_id = self.get_int_argument('node_id') + device_id = self.get_int_argument('device_id') + if not node_id or not device_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点或设备不能为空') + db_device = DB_Device.EnterpriseDeviceDB() + db_device.delete_device(device_id) self.finish() class DeviceListHandler(APIHandler): """ - + - 描述:企业节点,设备列表 + - 请求方式:post + - 请求参数: + > - pageNo + > - pageSize + > - node_id, int, 节点id + - 返回值: + ``` + { + "count": 123, + "data": [ + { + "device_id": 123, + "device_name": "xxx", + "device_class": "xxx", 设备类型 + "deployed": 0, # 是否部署, 0/未部署, 1/已部署 + }, + ... + ] + } + ``` """ @authenticated def post(self): + node_id = self.get_int_argument('node_id') + pageNo = self.get_int_argument('pageNo', 1) + pageSize = self.get_int_argument('pageSize', 20) + if not node_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点不能为空') + db_device = DB_Device.EnterpriseDeviceDB() + data = db_device.list_devices(node_id=node_id, pageNo=pageNo, pageSize=pageSize) self.finish() diff --git a/website/handlers/enterprise_entity/db.py b/website/handlers/enterprise_entity/db.py index 6da9824..bcc0682 100644 --- a/website/handlers/enterprise_entity/db.py +++ b/website/handlers/enterprise_entity/db.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import logging -from website.db import get_session +from website.db import get_session, to_json from sqlalchemy import text class EnterpriseEntityDB(object): @@ -9,8 +9,10 @@ class EnterpriseEntityDB(object): pass - def select_entity_suid(self, entity_id: int) -> str: + def get_entity_suid(self, entity_id: int) -> str: with get_session() as session: res = session.execute(text("select suid from enterprise where id=:id"), {"id": entity_id}) - return res.fetchone()["suid"] \ No newline at end of file + entity = to_json(res) + + return entity["suid"] if entity else "" \ No newline at end of file diff --git a/website/handlers/enterprise_node/db.py b/website/handlers/enterprise_node/db.py index 76061a3..59ca8f6 100644 --- a/website/handlers/enterprise_node/db.py +++ b/website/handlers/enterprise_node/db.py @@ -4,7 +4,7 @@ from typing import List, Dict, Any from sqlalchemy import text -from website.db import get_session, to_json_list +from website.db import get_session, to_json_list, to_json """ CREATE TABLE `enterprise_node` ( @@ -119,4 +119,12 @@ class EnterpriseNodeDB(object): sql = ("update enterprise_node set del=1 where id=:id") param = {"id": node_id} session.execute(text(sql), param) - return 0 \ No newline at end of file + return 0 + + def get_node_uid(self, node_id: int) -> str: + with get_session() as session: + sql = ("select suid from enterprise_node where id=:id") + param = {"id": node_id} + res = session.execute(text(sql), param) + node_list = to_json(res) + return node_list["suid"] if node_list else "" \ No newline at end of file diff --git a/website/handlers/enterprise_node/handler.py b/website/handlers/enterprise_node/handler.py index e76fbd7..6dd9e27 100644 --- a/website/handlers/enterprise_node/handler.py +++ b/website/handlers/enterprise_node/handler.py @@ -39,7 +39,7 @@ class AddHandler(APIHandler): raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") db_entity = DB_Entity.EnterpriseEntityDB() - entity_suid = db_entity.select_entity_suid(entity_id) + entity_suid = db_entity.get_entity_suid(entity_id) db_node = DB_Node.EnterpriseNodeDB() db_node.insert_node({