From 85daf8c320da30e7ce1d79b19a4662d6a699248f Mon Sep 17 00:00:00 2001 From: zhouping <zhouping@supervision.ltd> Date: Fri, 17 May 2024 18:01:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=80=BB=E8=BE=91=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- website/db/alg_model/__init__.py | 0 website/db/alg_model/alg_model.py | 55 +++++++ website/db/device_classification/__init__.py | 0 .../device_classification.py | 0 website/db/enterprise_busi_model.py | 144 +++++++++++++++++ website/db/enterprise_device/__init__.py | 0 .../enterprise_device.py | 91 ++++++----- website/db/enterprise_entity.py | 18 --- website/db/enterprise_entity/__init__.py | 0 .../db/enterprise_entity/enterprise_entity.py | 41 +++++ website/db/enterprise_node/__init__.py | 0 .../{ => enterprise_node}/enterprise_node.py | 10 +- website/db_mysql.py | 8 +- .../enterprise_busi_model/__init__.py | 0 .../handlers/enterprise_busi_model/handler.py | 149 ++++++++++++++++++ website/handlers/enterprise_busi_model/url.py | 15 ++ website/handlers/enterprise_device/handler.py | 12 +- website/handlers/enterprise_node/handler.py | 16 +- website/settings.py | 4 + 19 files changed, 485 insertions(+), 78 deletions(-) create mode 100644 website/db/alg_model/__init__.py create mode 100644 website/db/alg_model/alg_model.py create mode 100644 website/db/device_classification/__init__.py rename website/db/{ => device_classification}/device_classification.py (100%) create mode 100644 website/db/enterprise_busi_model.py create mode 100644 website/db/enterprise_device/__init__.py rename website/db/{ => enterprise_device}/enterprise_device.py (66%) delete mode 100644 website/db/enterprise_entity.py create mode 100644 website/db/enterprise_entity/__init__.py create mode 100644 website/db/enterprise_entity/enterprise_entity.py create mode 100644 website/db/enterprise_node/__init__.py rename website/db/{ => enterprise_node}/enterprise_node.py (95%) create mode 100644 website/handlers/enterprise_busi_model/__init__.py create mode 100644 website/handlers/enterprise_busi_model/handler.py create mode 100644 website/handlers/enterprise_busi_model/url.py diff --git a/website/db/alg_model/__init__.py b/website/db/alg_model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/db/alg_model/alg_model.py b/website/db/alg_model/alg_model.py new file mode 100644 index 0000000..e363111 --- /dev/null +++ b/website/db/alg_model/alg_model.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, Integer, String, DateTime, func +from typing import Any, Dict, List, Optional, Tuple, Union + +from website.db_mysql import get_session +from website.util import shortuuid + +Base = declarative_base() + +""" +CREATE TABLE `model` ( + `id` int NOT NULL AUTO_INCREMENT, + `suid` varchar(10) DEFAULT NULL COMMENT 'short uuid', + `name` varchar(255) NOT NULL DEFAULT '', + `model_type` int DEFAULT '1002' COMMENT '模型类型,1001/经典算法,1002/深度学习', + `classification` int DEFAULT '0' COMMENT '模型分类的id', + `comment` varchar(255) DEFAULT '' COMMENT '备注', + `default_version` varchar(100) DEFAULT '', + `del` tinyint(1) DEFAULT '0' COMMENT '删除状态,1/删除,0/正常', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='模型表'; +""" + +class Model(Base): + __tablename__ = 'model' + + id = Column(Integer, primary_key=True, autoincrement=True) + suid = Column(String(10), comment='short uuid') + name = Column(String(255), nullable=False, default='') + model_type = Column(Integer, default=1002, comment='模型类型,1001/经典算法,1002/深度学习') + classification = Column(Integer, default=0, comment='模型分类的id') + comment = Column(String(255), default='', comment='备注') + default_version = Column(String(100), default='') + delete = Column(Integer, default=0, info={'alias': 'del'}, comment='删除状态,1/删除,0/正常') + create_time = Column(DateTime, default=func.now()) + update_time = Column(DateTime, onupdate=func.now()) + + def __repr__(self): + return f"Model(id={self.id}, name='{self.name}', model_type={self.model_type})" + + +class ModelRepositry(object): + + def get_suid(self, model_id: int) -> str: + session = get_session() + with get_session() as session: + model = session.query(Model).filter(Model.id == model_id).first() + if not model or not model.suid: + return "" + + return model.suid \ No newline at end of file diff --git a/website/db/device_classification/__init__.py b/website/db/device_classification/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/db/device_classification.py b/website/db/device_classification/device_classification.py similarity index 100% rename from website/db/device_classification.py rename to website/db/device_classification/device_classification.py diff --git a/website/db/enterprise_busi_model.py b/website/db/enterprise_busi_model.py new file mode 100644 index 0000000..9c92868 --- /dev/null +++ b/website/db/enterprise_busi_model.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +import json +import copy +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, Integer, String, DateTime, func +from typing import Any, Dict, List, Optional, Tuple, Union + +from website.db_mysql import get_session +from website.util import shortuuid +from website.db.enterprise_entity.enterprise_entity import EnterpriseEntityRepository +from website.db.enterprise_node import enterprise_node as DB_Node +from website.db.alg_model import alg_model as DB_alg_model + +Base = declarative_base() + +""" +CREATE TABLE `enterprise_busi_model` ( + `id` int NOT NULL AUTO_INCREMENT, + `suid` varchar(10) NOT NULL DEFAULT '' COMMENT 'short uuid', + `entity_id` int NOT NULL COMMENT '企业id', + `entity_suid` varchar(10) NOT NULL COMMENT '企业uuid', + `name` varchar(255) NOT NULL, + `comment` varchar(255) DEFAULT '', + `basemodel_ids` varchar(255) NOT NULL COMMENT '关联模型,json list, [{"id":123,"suid":"xxx"},...]', + `business_logic` varchar(32) DEFAULT NULL COMMENT '业务代码压缩包的md5', + `business_conf_file` varchar(32) DEFAULT NULL COMMENT '业务配置参数压缩包的文件md5', + `business_conf_param` varchar(255) DEFAULT NULL COMMENT '业务配置的参数,json字符串,eg: ''{"a":1, "b":2}''', + `delete` tinyint(1) DEFAULT '0', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='企业业务模型表'; + +CREATE TABLE `enterprise_busi_model_node` ( + `id` int NOT NULL AUTO_INCREMENT, + `suid` varchar(10) NOT NULL, + `entity_suid` varchar(10) DEFAULT NULL COMMENT '企业suid', + `busi_model_id` int DEFAULT NULL, + `busi_model_suid` varchar(10) DEFAULT NULL, + `node_id` int DEFAULT NULL, + `node_suid` varchar(10) DEFAULT NULL, + `create_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +""" + + +class EnterpriseBusiModel(Base): + __tablename__ = 'enterprise_busi_model' + + id = Column(Integer, primary_key=True) + suid = Column(String(10), nullable=False, default='') + entity_id = Column(Integer, nullable=False) + entity_suid = Column(String(10), nullable=False) + name = Column(String(255), nullable=False) + comment = Column(String(255)) + basemodel_ids = Column(String(255), nullable=False) + business_logic = Column(String(32)) + business_conf_file = Column(String(32)) + business_conf_param = Column(String(255)) + delete = Column(Integer, default=0) + create_time = Column(DateTime, default=func.current_timestamp()) + update_time = Column(DateTime, default=func.current_timestamp(), onupdate=func.current_timestamp()) + + def __repr__(self): + return f'<EnterpriseBusiModel(id={self.id}, suid={self.suid})>' + +class EnterpriseBusiModelNode(Base): + __tablename__ = 'enterprise_busi_model_node' + + id = Column(Integer, primary_key=True) + suid = Column(String(10), nullable=False, default='') + entity_suid = Column(String(10)) + busi_model_id = Column(Integer) + busi_model_suid = Column(String(10)) + node_id = Column(Integer) + node_suid = Column(String(10)) + create_time = Column(DateTime, default=func.current_timestamp()) + def __repr__(self): + return f'<EnterpriseBusiModelNode(id={self.id}, suid={self.suid})>' + + +class EnterpriseBusiModelRepository(object): + + def get_by_id(self, id: int) -> Optional[EnterpriseBusiModel]: + return self.db.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == id).first() + + def insert_busi_model(self, data: Dict): + entity_suid = EnterpriseEntityRepository().get_entity_suid(data['entity_id']) + data['suid'] = shortuuid.ShortUUID().random(10) + data['entity_suid'] = entity_suid + + base_model_ids = [int(model_id) for model_id in data['basemodel_ids'].split(',')] + base_model_db = DB_alg_model.ModelRepositry() + base_model = [] + for base_model_id in base_model_ids: + base_model_suid = base_model_db.get_suid(base_model_id) + base_model.append({ + 'id': base_model_id, + 'suid': base_model_suid + }) + data['basemodel_ids'] = json.dumps(base_model) + new_data = copy.copy(data) + + with get_session() as session: + model = EnterpriseBusiModel(**new_data) + session.add(model) + session.commit() + + return model.id, model.suid + + + def get_busi_model_by_id(self, id: int) -> Optional[EnterpriseBusiModel]: + with get_session() as session: + model = session.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == id).first() + return model + + + +class EnterpriseBusiModelNodeRepository(object): + # def get_by_id(self, id: int) -> Optional[EnterpriseBusiModelNode]: + # return self.db.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.id == id).first() + + def insert_busi_model_nodes(self, data: Dict): + data['suid'] = shortuuid.ShortUUID().random(10) + link_node_ids = [int(node_id) for node_id in data['node_ids'].split(',')] + with get_session() as session: + for node_id in link_node_ids: + node_db = DB_Node.EnterpriseNodeRepository() + node = node_db.get_node_by_id(node_id) + node_suid = node["suid"] + model_node = EnterpriseBusiModelNode( + suid=shortuuid.ShortUUID().random(10), + entity_suid=data['entity_suid'], + busi_model_id=data['busi_model_id'], + busi_model_suid=data['busi_model_suid'], + node_id=node_id, + node_suid=node_suid, + ) + session.add(model_node) + session.commit() + return + + diff --git a/website/db/enterprise_device/__init__.py b/website/db/enterprise_device/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/db/enterprise_device.py b/website/db/enterprise_device/enterprise_device.py similarity index 66% rename from website/db/enterprise_device.py rename to website/db/enterprise_device/enterprise_device.py index 6334df1..ceecac6 100644 --- a/website/db/enterprise_device.py +++ b/website/db/enterprise_device/enterprise_device.py @@ -6,25 +6,45 @@ from sqlalchemy import Column, Integer, String, DateTime, func from sqlalchemy.ext.declarative import declarative_base from website import errors +from website.db.device_classification.device_classification import DeviceClassification +from website.db.enterprise_entity.enterprise_entity import EnterpriseEntityRepository +from website.db.enterprise_node.enterprise_node import EnterpriseNodeRepository from website.db_mysql import get_session from website.util import shortuuid -from website.db.enterprise_entity import EnterpriseEntityDB -from website.db.enterprise_node import EnterpriseNodeDB -from website.db.device_classification import DeviceClassification + def row2dict(row): - d = {} - for column in row.__table__.columns: - d[column.name] = str(getattr(row, column.name)) + d = {} + for column in row.__table__.columns: + d[column.name] = str(getattr(row, column.name)) - return d + return d Base = declarative_base() """ -企业设备表 +CREATE TABLE `enterprise_device` ( + `id` int NOT NULL AUTO_INCREMENT, + `suid` varchar(10) DEFAULT NULL COMMENT '设备suid', + `entity_id` int NOT NULL COMMENT '企业id', + `entity_suid` varchar(10) NOT NULL COMMENT '企业suid', + `node_id` int NOT NULL COMMENT '节点id', + `node_suid` varchar(10) NOT NULL COMMENT '节点suid', + `classification` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '分类suid', + `name` varchar(255) NOT NULL, + `addr` varchar(255) DEFAULT '', + `device_model` varchar(255) DEFAULT '' COMMENT '设备型号', + `param` varchar(255) DEFAULT '', + `comment` varchar(255) DEFAULT '', + `del` int DEFAULT '0', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + `update_time` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='企业设备表'; """ + + class EnterpriseDevice(Base): __tablename__ = 'enterprise_device' @@ -45,19 +65,20 @@ class EnterpriseDevice(Base): update_time = Column(DateTime, default=func.now()) -class EnterpriseDeviceDB(object): +class EnterpriseDeviceRepository(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) + entity_suid = EnterpriseEntityRepository().get_entity_suid(entity_id) + node = EnterpriseNodeRepository().get_node_by_id(node_id) + node_suid = node["suid"] device["entity_suid"] = entity_suid device["node_suid"] = node_suid device["suid"] = shortuuid.ShortUUID().random(10) name = device["name"] - + with get_session() as session: existing_device = session.query(EnterpriseDevice) \ .filter_by(node_id=node_id, name=name, delete=0) \ @@ -103,8 +124,6 @@ class EnterpriseDeviceDB(object): return - - def list_devices(self, node_id: int, pageNo: int, pageSize: int) -> dict: with get_session() as session: try: @@ -112,7 +131,7 @@ class EnterpriseDeviceDB(object): .filter(EnterpriseDevice.node_id == node_id, EnterpriseDevice.delete != 1) \ .count() devices = session.query(EnterpriseDevice, - DeviceClassification.name.label("classification_name")) \ + DeviceClassification.name.label("classification_name")) \ .join(DeviceClassification, EnterpriseDevice.classification == DeviceClassification.suid) \ .filter(EnterpriseDevice.node_id == node_id, EnterpriseDevice.delete != 1) \ .order_by(EnterpriseDevice.id.desc()) \ @@ -122,27 +141,27 @@ class EnterpriseDeviceDB(object): except Exception as e: logging.error("Failed to list devices") raise e - + device_dicts = [] for device, classification_name in devices: - device_dict = { - "id": device.id, - "suid": device.suid, - "entity_id": device.entity_id, - "entity_suid": device.entity_suid, - "node_id": device.node_id, - "node_suid": device.node_suid, - "classification": classification_name, - "name": device.name, - "addr": device.addr, - "device_model": device.device_model, - "param": device.param, - "comment": device.comment, - "delete": device.delete, - "create_time": device.create_time.strftime('%Y-%m-%d %H:%M:%S'), - "update_time": str(device.update_time) - } - device_dicts.append(device_dict) + device_dict = { + "id": device.id, + "suid": device.suid, + "entity_id": device.entity_id, + "entity_suid": device.entity_suid, + "node_id": device.node_id, + "node_suid": device.node_suid, + "classification": classification_name, + "name": device.name, + "addr": device.addr, + "device_model": device.device_model, + "param": device.param, + "comment": device.comment, + "delete": device.delete, + "create_time": device.create_time.strftime('%Y-%m-%d %H:%M:%S'), + "update_time": str(device.update_time) + } + device_dicts.append(device_dict) # for row in devices: # logging.info(row.name) logging.info(device_dicts) @@ -152,8 +171,7 @@ class EnterpriseDeviceDB(object): "total_count": total_count } - - def get_device(self, device_id: int) -> dict: + def get_device(self, device_id: int) -> dict: with get_session() as session: try: device = session.query(EnterpriseDevice) \ @@ -174,4 +192,3 @@ class EnterpriseDeviceDB(object): } return device_dict - \ No newline at end of file diff --git a/website/db/enterprise_entity.py b/website/db/enterprise_entity.py deleted file mode 100644 index c0c2658..0000000 --- a/website/db/enterprise_entity.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -from website.db_mysql import get_session, to_json -from sqlalchemy import text - -class EnterpriseEntityDB(object): - def __init__(self): - pass - - - 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}) - entity = to_json(res) - - return entity["suid"] if entity else "" \ No newline at end of file diff --git a/website/db/enterprise_entity/__init__.py b/website/db/enterprise_entity/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/db/enterprise_entity/enterprise_entity.py b/website/db/enterprise_entity/enterprise_entity.py new file mode 100644 index 0000000..09d3b89 --- /dev/null +++ b/website/db/enterprise_entity/enterprise_entity.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +import logging +from website.db_mysql import get_session, to_json +from sqlalchemy import text + +""" +CREATE TABLE `enterprise` ( + `id` int NOT NULL AUTO_INCREMENT, + `suid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '', + `name` varchar(255) NOT NULL, + `province` varchar(50) NOT NULL, + `city` varchar(50) NOT NULL, + `addr` varchar(255) NOT NULL, + `industry` int NOT NULL, + `contact` varchar(100) NOT NULL, + `phone` varchar(50) NOT NULL, + `summary` varchar(255) DEFAULT NULL, + `logo` text, + `account` varchar(20) DEFAULT NULL, + `pwd` varchar(100) DEFAULT NULL, + `del` int DEFAULT '0', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `idx_suid` (`suid`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='企业信息表'; +""" + + +class EnterpriseEntityRepository(object): + def __init__(self): + pass + + + 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}) + entity = to_json(res) + + return entity["suid"] if entity else "" \ No newline at end of file diff --git a/website/db/enterprise_node/__init__.py b/website/db/enterprise_node/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/db/enterprise_node.py b/website/db/enterprise_node/enterprise_node.py similarity index 95% rename from website/db/enterprise_node.py rename to website/db/enterprise_node/enterprise_node.py index 4032250..dbab69e 100644 --- a/website/db/enterprise_node.py +++ b/website/db/enterprise_node/enterprise_node.py @@ -24,7 +24,7 @@ CREATE TABLE `enterprise_node` ( """ -class EnterpriseNodeDB(object): +class EnterpriseNodeRepository(object): def insert_node(self, node: dict) -> int: with get_session() as session: @@ -121,10 +121,10 @@ class EnterpriseNodeDB(object): session.execute(text(sql), param) return 0 - def get_node_uid(self, node_id: int) -> str: + def get_node_by_id(self, node_id: int) -> dict: with get_session() as session: - sql = ("select suid from enterprise_node where id=:id") + sql = ("select suid, name 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 + node = to_json(res) + return node \ No newline at end of file diff --git a/website/db_mysql.py b/website/db_mysql.py index a685e4b..74ccdcc 100644 --- a/website/db_mysql.py +++ b/website/db_mysql.py @@ -48,10 +48,10 @@ app_engine = create_engine( settings.mysql_app['database'] ), # SQLAlchemy 数据库连接串,格式见下面 echo=bool(settings.SQLALCHEMY_ECHO), # 是不是要把所执行的SQL打印出来,一般用于调试 - # pool_pre_ping=True, - # pool_size=int(settings.SQLALCHEMY_POOL_SIZE), # 连接池大小 - # max_overflow=int(settings.SQLALCHEMY_POOL_MAX_SIZE), # 连接池最大的大小 - # pool_recycle=int(settings.SQLALCHEMY_POOL_RECYCLE), # 多久时间回收连接 + pool_pre_ping=True, + pool_size=int(settings.SQLALCHEMY_POOL_SIZE), # 连接池大小 + max_overflow=int(settings.SQLALCHEMY_POOL_MAX_SIZE), # 连接池最大的大小 + pool_recycle=int(settings.SQLALCHEMY_POOL_RECYCLE), # 多久时间回收连接 ) Session = sessionmaker(bind=app_engine) diff --git a/website/handlers/enterprise_busi_model/__init__.py b/website/handlers/enterprise_busi_model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/handlers/enterprise_busi_model/handler.py b/website/handlers/enterprise_busi_model/handler.py new file mode 100644 index 0000000..21adc21 --- /dev/null +++ b/website/handlers/enterprise_busi_model/handler.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- + +import logging +from sqlalchemy import text + +from website import db_mysql, errors +from website.handler import APIHandler, authenticated +from website.util import shortuuid +from website.db import enterprise_busi_model as DB_BusiModel + + +class ListHandler(APIHandler): + """ + + """ + @authenticated + def post(self): + + self.finish() + + +class AddHandler(APIHandler): + """ + - 描述:添加企业部署的业务模型 + - 请求方式:post + - 请求参数: + > - entity_id, int, 企业id + > - name, string, 业务模型名称 + > - comment, string, 简介 + > - basemodel_ids, string, 基础模型id, 多个使用逗号分割 + > - business_logic, string, 业务代码压缩包的md5 + > - business_conf_file, string, 业务配置压缩包的文件md5 + > - business_conf_param, string, 业务配置的参数,json字符串,eg: '{"a":1, "b":2}' + > - link_node_ids, string, 关联节点id, 多个节点逗号分割 + - 返回值:无 + """ + @authenticated + def post(self): + entity_id = self.get_argument("entity_id") + name = self.get_escaped_argument("name", "") + comment = self.get_escaped_argument("comment", "") + basemodel_ids = self.get_escaped_argument("basemodel_ids", "") + business_logic = self.get_escaped_argument("business_logic", "") + business_conf_file = self.get_escaped_argument("business_conf_file", "") + business_conf_param = self.get_escaped_argument("business_conf_param", "") + link_node_ids = self.get_escaped_argument("link_node_ids", "") + + if not entity_id or not name or not basemodel_ids: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") + + if not business_logic: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务代码参数错误") + + if not business_conf_file and not business_conf_param: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务配置参数错误") + + if not link_node_ids: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "关联节点参数错误") + + model_data = { + "entity_id": entity_id, + "name": name, + "comment": comment, + "basemodel_ids": basemodel_ids, + "business_logic": business_logic, + "business_conf_file": business_conf_file, + "business_conf_param": business_conf_param, + "link_node_ids": link_node_ids, + } + + db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository() + busimodel_id, busimodel_suid = db_busimodel.insert_busi_model(model_data) + + model_node_data = { + "entity_id": entity_id, + "busimodel_id": busimodel_id, + "busimodel_suid": busimodel_suid, + "node_ids": link_node_ids + } + db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository() + db_model_node.insert_busi_model_nodes(model_node_data) + + self.finish() + + +class InfoHandler(APIHandler): + """ + - 描述:企业部署的业务模型详情 + - 请求方式:post + - 请求参数: + > - id, int, 业务模型id + - 返回值: + ``` + { + "name": "xxx", + "comment": "xxx", + "basemodel_list": "xxx,xx,xx", + "business_logic": "xxx", + "business_conf_file": "xxx", + "business_conf_param": "xxx", + "link_node_list": "xxx,xx,xx" + } + ``` + """ + @authenticated + def post(self): + busimodel_id = self.get_argument("id") + + if not busimodel_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") + + db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository() + busi_model_data = db_busimodel.get_busi_model_by_id(busimodel_id) + + if not busi_model_data: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务模型不存在") + + + + model_data = { + "name": busi_model_data.name, + "comment": busi_model_data.comment, + "basemodel_ids": ",".join([str(x) for x in busi_model_data.basemodel_list]), + "business_logic": busi_model_data.business_logic, + "business_conf_file": busi_model_data.business_conf_file, + "business_conf_param": busi_model_data.business_conf + } + + + self.finish({ + "name": model_data["name"], + "comment": model_data["comment"], + "basemodel_list": model_data["basemodel_ids"], + "business_logic": model_data["business_logic"], + "business_conf_file": model_data["business_conf_file"], + "business_conf_param": model_data["business_conf_param"], + "link_node_list": model_data["link_node_ids"] + }) + + + +class EditHandler(APIHandler): + """ + + """ + @authenticated + def post(self): + + self.finish() \ No newline at end of file diff --git a/website/handlers/enterprise_busi_model/url.py b/website/handlers/enterprise_busi_model/url.py new file mode 100644 index 0000000..94f4521 --- /dev/null +++ b/website/handlers/enterprise_busi_model/url.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from website.handlers.enterprise_busi_model import handler + + +handlers = [ + ("/enterprise/model/deployment/list", handler.ListHandler), + ("/enterprise/model/deployment/add", handler.AddHandler), + ("/enterprise/model/deployment/info", handler.InfoHandler), + ("/enterprise/model/deployment/edit", handler.EditHandler), + +] +page_handlers = [ + +] \ No newline at end of file diff --git a/website/handlers/enterprise_device/handler.py b/website/handlers/enterprise_device/handler.py index 5ff75d9..d259441 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 db_mysql, errors from website.handler import APIHandler, authenticated from website.util import shortuuid -from website.db import enterprise_device as DB_Device +from website.db.enterprise_device import enterprise_device as DB_Device class DeviceClassificationAddHandler(APIHandler): """ @@ -143,7 +143,7 @@ class DeviceAddHandler(APIHandler): "comment": comment } - db_device = DB_Device.EnterpriseDeviceDB() + db_device = DB_Device.EnterpriseDeviceRepository() db_device.add_device(device_data) self.finish() @@ -188,7 +188,7 @@ class DeviceEditHandler(APIHandler): "comment": comment } - db_device = DB_Device.EnterpriseDeviceDB() + db_device = DB_Device.EnterpriseDeviceRepository() db_device.edit_device(device_data) self.finish() @@ -211,7 +211,7 @@ class DeviceDeleteHandler(APIHandler): device_id = self.get_int_argument('device_id') if not device_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点或设备不能为空') - db_device = DB_Device.EnterpriseDeviceDB() + db_device = DB_Device.EnterpriseDeviceRepository() db_device.delete_device(device_id) self.finish() @@ -248,7 +248,7 @@ class DeviceListHandler(APIHandler): pageSize = self.get_int_argument('pageSize', 20) if not node_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点不能为空') - db_device = DB_Device.EnterpriseDeviceDB() + db_device = DB_Device.EnterpriseDeviceRepository() devices = db_device.list_devices(node_id=node_id, pageNo=pageNo, pageSize=pageSize) logging.info(devices) @@ -278,7 +278,7 @@ class DeviceInfoHandler(APIHandler): device_id = self.get_int_argument('device_id') if not device_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点或设备不能为空') - db_device = DB_Device.EnterpriseDeviceDB() + db_device = DB_Device.EnterpriseDeviceRepository() device = db_device.get_device(device_id=device_id) logging.info(device) self.finish(device) diff --git a/website/handlers/enterprise_node/handler.py b/website/handlers/enterprise_node/handler.py index 604796f..6508481 100644 --- a/website/handlers/enterprise_node/handler.py +++ b/website/handlers/enterprise_node/handler.py @@ -2,8 +2,8 @@ from website import errors from website.handler import APIHandler, authenticated -from website.db import enterprise_entity as DB_Entity -from website.db import enterprise_node as DB_Node +from website.db.enterprise_entity import enterprise_entity as DB_Entity +from website.db.enterprise_node import enterprise_node as DB_Node from website.util import shortuuid @@ -38,10 +38,10 @@ class AddHandler(APIHandler): if not entity_id or not name: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") - db_entity = DB_Entity.EnterpriseEntityDB() + db_entity = DB_Entity.EnterpriseEntityRepository() entity_suid = db_entity.get_entity_suid(entity_id) - db_node = DB_Node.EnterpriseNodeDB() + db_node = DB_Node.EnterpriseNodeRepository() db_node.insert_node({ "suid": shortuuid.ShortUUID().random(length=10), "entity_id": entity_id, @@ -88,7 +88,7 @@ class EditHandler(APIHandler): if not node_id or not name: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") - db_node = DB_Node.EnterpriseNodeDB() + db_node = DB_Node.EnterpriseNodeRepository() db_node.update_node({ "node_id": node_id, "name": name, @@ -146,7 +146,7 @@ class TreeHandler(APIHandler): if not entity_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") - db_node = DB_Node.EnterpriseNodeDB() + db_node = DB_Node.EnterpriseNodeRepository() nodes = db_node.select_tree(entity_id, name) self.finish({ "data": nodes @@ -180,7 +180,7 @@ class InfoHandler(APIHandler): if not node_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") - db_node = DB_Node.EnterpriseNodeDB() + db_node = DB_Node.EnterpriseNodeRepository() node = db_node.select_node(node_id) node = node and node or {} self.finish(node) @@ -193,6 +193,6 @@ class DeleteHandler(APIHandler): node_id = self.get_int_argument("node_id") if not node_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") - db_node = DB_Node.EnterpriseNodeDB() + db_node = DB_Node.EnterpriseNodeRepository() db_node.delete_node(node_id) self.finish() diff --git a/website/settings.py b/website/settings.py index 02ce788..27f9eae 100644 --- a/website/settings.py +++ b/website/settings.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os # sqlalchemy SQLALCHEMY_ECHO = 0 @@ -12,6 +13,9 @@ mysql_app = { "time_zone": "+8:00" } +SQLALCHEMY_POOL_SIZE = 10 * os.cpu_count() # 连接池的大小 +SQLALCHEMY_POOL_MAX_SIZE = 2 * SQLALCHEMY_POOL_SIZE # 连接池的最大大小 +SQLALCHEMY_POOL_RECYCLE = 3600 # 连接池的回收时间 redis_app = ("127.0.0.1", 6382, 0, "")