更新代码

main
周平 1 year ago
parent ead7b8fc94
commit 46e8e308f2

@ -1,16 +1,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
import copy import copy
import json
import logging import logging
from sqlalchemy.ext.declarative import declarative_base from typing import Any, Dict, List, Optional
from sqlalchemy import Column, Integer, String, DateTime, func from sqlalchemy import Column, Integer, String, DateTime, func
from typing import Any, Dict, List, Optional, Tuple, Union from sqlalchemy.ext.declarative import declarative_base
from website.db_mysql import get_session from website.db.alg_model import alg_model as DB_alg_model
from website.util import shortuuid
from website.db.enterprise_entity.enterprise_entity import EnterpriseEntityRepository from website.db.enterprise_entity.enterprise_entity import EnterpriseEntityRepository
from website.db.enterprise_node import enterprise_node as DB_Node from website.db.enterprise_node import enterprise_node as DB_Node
from website.db.alg_model import alg_model as DB_alg_model from website.db_mysql import get_session
from website.util import shortuuid
Base = declarative_base() Base = declarative_base()
@ -66,6 +67,7 @@ class EnterpriseBusiModel(Base):
def __repr__(self): def __repr__(self):
return f"EnterpriseBusiModel(id={self.id}, suid='{self.suid}', name='{self.name}')" return f"EnterpriseBusiModel(id={self.id}, suid='{self.suid}', name='{self.name}')"
class EnterpriseBusiModelNode(Base): class EnterpriseBusiModelNode(Base):
__tablename__ = 'enterprise_busi_model_node' __tablename__ = 'enterprise_busi_model_node'
@ -77,6 +79,7 @@ class EnterpriseBusiModelNode(Base):
node_id = Column(Integer) node_id = Column(Integer)
node_suid = Column(String(10)) node_suid = Column(String(10))
create_time = Column(DateTime, default=func.current_timestamp()) create_time = Column(DateTime, default=func.current_timestamp())
def __repr__(self): def __repr__(self):
return f'<EnterpriseBusiModelNode(id={self.id}, suid={self.suid})>' return f'<EnterpriseBusiModelNode(id={self.id}, suid={self.suid})>'
@ -88,7 +91,6 @@ class EnterpriseBusiModelRepository(object):
model = session.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == id).first() model = session.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == id).first()
return model return model
def insert_busi_model(self, data: Dict): def insert_busi_model(self, data: Dict):
entity_suid = EnterpriseEntityRepository().get_entity_suid(data['entity_id']) entity_suid = EnterpriseEntityRepository().get_entity_suid(data['entity_id'])
data['suid'] = shortuuid.ShortUUID().random(10) data['suid'] = shortuuid.ShortUUID().random(10)
@ -104,7 +106,7 @@ class EnterpriseBusiModelRepository(object):
'id': base_model_id, 'id': base_model_id,
'suid': base_model_info.suid, 'suid': base_model_info.suid,
'name': base_model_info.name, 'name': base_model_info.name,
}) })
data['base_models'] = json.dumps(base_model) data['base_models'] = json.dumps(base_model)
new_data = copy.copy(data) new_data = copy.copy(data)
@ -124,7 +126,7 @@ class EnterpriseBusiModelRepository(object):
base_model.append({ base_model.append({
'id': base_model_id, 'id': base_model_id,
'suid': base_model_suid 'suid': base_model_suid
}) })
data['base_models'] = json.dumps(base_model) data['base_models'] = json.dumps(base_model)
with get_session() as session: with get_session() as session:
@ -136,13 +138,11 @@ class EnterpriseBusiModelRepository(object):
return return
def get_busi_model_by_id(self, id: int) -> Optional[EnterpriseBusiModel]: def get_busi_model_by_id(self, id: int) -> Optional[EnterpriseBusiModel]:
with get_session() as session: with get_session() as session:
model = session.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == id).first() model = session.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == id).first()
return model return model
def list_enterprise_busi_model(self, entity_id: int, page_no: int, page_size: int) -> Dict[Any, Any]: def list_enterprise_busi_model(self, entity_id: int, page_no: int, page_size: int) -> Dict[Any, Any]:
""" """
获取企业部署的业务模型列表 获取企业部署的业务模型列表
@ -156,7 +156,8 @@ class EnterpriseBusiModelRepository(object):
dict: 包含总数和数据列表的字典 dict: 包含总数和数据列表的字典
""" """
with get_session() as session: with get_session() as session:
total_count = session.query(func.count(EnterpriseBusiModel.id)).filter(EnterpriseBusiModel.entity_id == entity_id).scalar() total_count = session.query(func.count(EnterpriseBusiModel.id)).filter(
EnterpriseBusiModel.entity_id == entity_id).scalar()
models = ( models = (
session.query( session.query(
@ -182,6 +183,7 @@ class EnterpriseBusiModelRepository(object):
] ]
} }
class EnterpriseBusiModelNodeRepository(object): class EnterpriseBusiModelNodeRepository(object):
# def get_by_id(self, id: int) -> Optional[EnterpriseBusiModelNode]: # def get_by_id(self, id: int) -> Optional[EnterpriseBusiModelNode]:
# return self.db.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.id == id).first() # return self.db.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.id == id).first()
@ -206,14 +208,19 @@ class EnterpriseBusiModelNodeRepository(object):
session.commit() session.commit()
return return
def get_nodes_by_busi_model(self, busi_model_id: int) -> List[EnterpriseBusiModelNode]: def get_nodes_by_busi_model(self, busi_model_id: int) -> List[EnterpriseBusiModelNode]:
with get_session() as session: with get_session() as session:
nodes = session.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.busi_model_id == busi_model_id).all() nodes = session.query(EnterpriseBusiModelNode).filter(
EnterpriseBusiModelNode.busi_model_id == busi_model_id).all()
return nodes return nodes
def delete_by_busi_model_id(self, busi_model_id: int) -> None: def delete_by_busi_model_id(self, busi_model_id: int) -> None:
with get_session() as session: with get_session() as session:
session.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.busi_model_id == busi_model_id).delete() session.query(EnterpriseBusiModelNode).filter(
EnterpriseBusiModelNode.busi_model_id == busi_model_id).delete()
session.commit() session.commit()
def get_busi_model_by_node_id(self, node_id: int) -> Optional[EnterpriseBusiModelNode]:
with get_session() as session:
model = session.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.node_id == node_id).first()
return model

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
from typing import List
from sqlalchemy import Column, Integer, String, DateTime, func
from sqlalchemy.ext.declarative import declarative_base
from website.db_mysql import get_session
"""
CREATE TABLE `enterprise_busi_model_node_device` (
`id` int NOT NULL,
`suid` varchar(10) DEFAULT NULL,
`entity_suid` varchar(10) DEFAULT NULL,
`node_id` int DEFAULT NULL,
`node_suid` varchar(10) DEFAULT NULL,
`busi_model_id` int DEFAULT NULL,
`busi_model_suid` varchar(10) DEFAULT NULL,
`device_id` int DEFAULT NULL,
`device_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 COMMENT='节点-业务模型-设备关联表';
"""
Base = declarative_base()
class EnterpriseBusiModelNodeDevice(Base):
__tablename__ = 'enterprise_busi_model_node_device'
id = Column(Integer, primary_key=True)
suid = Column(String(10))
entity_suid = Column(String(10))
node_id = Column(Integer)
node_suid = Column(String(10))
busi_model_id = Column(Integer)
busi_model_suid = Column(String(10))
device_id = Column(Integer)
device_suid = Column(String(10))
create_time = Column(DateTime, default=func.current_timestamp(), onupdate=func.current_timestamp())
def __repr__(self):
return f"EnterpriseBusiModelNodeDevice(id={self.id}, suid='{self.suid}')"
class EnterpriseBusiModelNodeDeviceRepository(object):
def insert_record(self, records: List[EnterpriseBusiModelNodeDevice]):
with get_session() as session:
for record in records:
session.add(record)
session.commit()
def batch_insert_record(self, records: List[dict]):
with get_session() as session:
session.bulk_insert_mappings(EnterpriseBusiModelNodeDevice, records)
session.commit()

@ -171,8 +171,8 @@ class EnterpriseDeviceRepository(object):
"total_count": total_count "total_count": total_count
} }
def get_device(self, device_id: int) -> dict:
with get_session() as session: with get_session() as session:
def get_device(self, device_id: int) -> dict:
try: try:
device = session.query(EnterpriseDevice) \ device = session.query(EnterpriseDevice) \
.filter(EnterpriseDevice.id == device_id, EnterpriseDevice.delete != 1) \ .filter(EnterpriseDevice.id == device_id, EnterpriseDevice.delete != 1) \
@ -183,6 +183,7 @@ class EnterpriseDeviceRepository(object):
device_dict = {} device_dict = {}
if device: if device:
device_dict = { device_dict = {
"suid": device.suid,
"name": device.name, "name": device.name,
"addr": device.addr, "addr": device.addr,
"device_model": device.device_model, "device_model": device.device_model,

@ -39,3 +39,5 @@ class EnterpriseEntityRepository(object):
entity = to_json(res) entity = to_json(res)
return entity["suid"] if entity else "" return entity["suid"] if entity else ""

@ -128,3 +128,11 @@ class EnterpriseNodeRepository(object):
res = session.execute(text(sql), param) res = session.execute(text(sql), param)
node = to_json(res) node = to_json(res)
return node return node
def get_entity_suid_by_node_id(self, node_id: int) -> dict | None:
with get_session() as session:
res = session.execute(text("select entity_suid from enterprise_node where id=:id"),
{"id": node_id})
entity = to_json(res)
return entity if entity else None

@ -29,11 +29,9 @@ class DeviceClassificationAddHandler(APIHandler):
cur = conn.execute( cur = conn.execute(
text("SELECT id FROM device_classification WHERE name=:name"), {"name": name} text("SELECT id FROM device_classification WHERE name=:name"), {"name": name}
) )
ex = cur.fetchone() row = cur.fetchone()
logging.info("##############################")
logging.info(ex) if row:
logging.info("##############################")
if ex:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '设备分类已存在') raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '设备分类已存在')
conn.execute( conn.execute(
@ -283,3 +281,7 @@ class DeviceInfoHandler(APIHandler):
logging.info(device) logging.info(device)
self.finish(device) self.finish(device)

@ -13,7 +13,6 @@ handlers = [
("/enterprise/entity/nodes/device/delete", handler.DeviceDeleteHandler), ("/enterprise/entity/nodes/device/delete", handler.DeviceDeleteHandler),
("/enterprise/entity/nodes/device/list", handler.DeviceListHandler), ("/enterprise/entity/nodes/device/list", handler.DeviceListHandler),
("/enterprise/entity/nodes/device/info", handler.DeviceInfoHandler), ("/enterprise/entity/nodes/device/info", handler.DeviceInfoHandler),
] ]
page_handlers = [ page_handlers = [

@ -4,6 +4,9 @@ from website import errors
from website.handler import APIHandler, authenticated from website.handler import APIHandler, authenticated
from website.db.enterprise_entity import enterprise_entity as DB_Entity from website.db.enterprise_entity import enterprise_entity as DB_Entity
from website.db.enterprise_node import enterprise_node as DB_Node from website.db.enterprise_node import enterprise_node as DB_Node
from website.db.enterprise_busi_model import enterprise_busi_model as DB_BusiModel
from website.db.enterprise_busi_model import enterprise_busi_model_node_device as DB_BusiModelNodeDevice
from website.db.enterprise_device import enterprise_device as DB_Device
from website.util import shortuuid from website.util import shortuuid
@ -196,3 +199,105 @@ class DeleteHandler(APIHandler):
db_node = DB_Node.EnterpriseNodeRepository() db_node = DB_Node.EnterpriseNodeRepository()
db_node.delete_node(node_id) db_node.delete_node(node_id)
self.finish() self.finish()
class BusimodelHandler(APIHandler):
"""
- 描述企业节点业务模型部署
- 请求方式post
- 请求参数
> - pageNo
> - pageSize
> - node_id, int, 节点id
- 返回值
```
{
"count": 123,
"data": [
{
"busi_model_id": 123, # 业务模型id
"busi_model_name": "xxx", # 业务模型name
"deployed": 0, # 是否部署
"create_time": "xxx" # 创建时间
},
...
]
}
```
"""
@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_node = DB_Node.EnterpriseNodeRepository()
busi_models = db_node.select_busi_model(node_id, pageNo, pageSize)
self.finish({
'data': busi_models,
'count': len(busi_models)
})
class BusimodelInfoHandler(APIHandler):
"""
"""
@authenticated
def post(self):
self.finish()
class BusimodelDeployHandler(APIHandler):
"""
- 描述企业节点节点信息 -> 业务模型部署 -> 业务模型配置
- 请求方式post
- 请求参数
> - node_id, int, 节点id
> - busi_model_id, int业务模型id
> - device_ids, string, 设备id, 多个id逗号分割
- 返回值
"""
@authenticated
def post(self):
node_id = self.get_int_argument('node_id')
busi_model_id = self.get_int_argument('busi_model_id')
device_ids = self.get_escaped_argument('device_ids', '')
if not node_id or not busi_model_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '参数错误')
db_node = DB_Node.EnterpriseNodeRepository()
node = db_node.get_node_by_id(node_id)
if not node:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '节点不存在')
node_suid = node["suid"]
db_busi_model = DB_BusiModel.EnterpriseBusiModelRepository()
busi_model = db_busi_model.get_busi_model_by_id(busi_model_id)
busi_model_suid = busi_model.suid
entity_suid_row = db_node.get_entity_suid_by_node_id(node_id)
if not entity_suid_row:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '企业节点不存在')
records = []
records = []
for device_id in device_ids.split(','):
device = DB_Device.EnterpriseDeviceRepository().get_device(int(device_id))
if not device:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, '设备不存在')
records.append({
"suid": shortuuid.ShortUUID.random(length=10),
"entity_suid": entity_suid_row["entity_suid"],
"node_id": node_id,
"node_suid": node_suid,
"busi_model_id": busi_model_id,
"busi_model_suid": busi_model_suid,
"device_id": int(device_id),
"device_suid": device["suid"]
})
DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository().batch_insert_record(records)
self.finish()

@ -7,6 +7,11 @@ handlers = [
('/enterprise/entity/nodes', handler.TreeHandler), ('/enterprise/entity/nodes', handler.TreeHandler),
('/enterprise/entity/nodes/info', handler.InfoHandler), ('/enterprise/entity/nodes/info', handler.InfoHandler),
('/enterprise/entity/nodes/delete', handler.DeleteHandler), ('/enterprise/entity/nodes/delete', handler.DeleteHandler),
("/enterprise/entity/nodes/busimodel", handler.BusimodelHandler),
("/enterprise/entity/nodes/busimodel/info", handler.BusimodelInfoHandler),
("/enterprise/entity/nodes/busimodel/deploy", handler.BusimodelDeployHandler),
] ]
page_handlers = [ page_handlers = [

Loading…
Cancel
Save