更新代码

main
周平 11 months ago
parent ead7b8fc94
commit 46e8e308f2

@ -1,16 +1,17 @@
# -*- coding: utf-8 -*-
import json
import copy
import json
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 typing import Any, Dict, List, Optional, Tuple, Union
from sqlalchemy.ext.declarative import declarative_base
from website.db_mysql import get_session
from website.util import shortuuid
from website.db.alg_model import alg_model as DB_alg_model
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
from website.db_mysql import get_session
from website.util import shortuuid
Base = declarative_base()
@ -66,6 +67,7 @@ class EnterpriseBusiModel(Base):
def __repr__(self):
return f"EnterpriseBusiModel(id={self.id}, suid='{self.suid}', name='{self.name}')"
class EnterpriseBusiModelNode(Base):
__tablename__ = 'enterprise_busi_model_node'
@ -77,6 +79,7 @@ class EnterpriseBusiModelNode(Base):
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})>'
@ -84,11 +87,10 @@ class EnterpriseBusiModelNode(Base):
class EnterpriseBusiModelRepository(object):
def get_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()
return model
def insert_busi_model(self, data: Dict):
entity_suid = EnterpriseEntityRepository().get_entity_suid(data['entity_id'])
data['suid'] = shortuuid.ShortUUID().random(10)
@ -104,7 +106,7 @@ class EnterpriseBusiModelRepository(object):
'id': base_model_id,
'suid': base_model_info.suid,
'name': base_model_info.name,
})
})
data['base_models'] = json.dumps(base_model)
new_data = copy.copy(data)
@ -114,7 +116,7 @@ class EnterpriseBusiModelRepository(object):
session.commit()
return model.id, model.suid
def edit_busi_model(self, data: Dict):
base_model_ids = [int(model_id) for model_id in data['basemodel_ids'].split(',')]
base_model_db = DB_alg_model.ModelRepositry()
@ -124,8 +126,8 @@ class EnterpriseBusiModelRepository(object):
base_model.append({
'id': base_model_id,
'suid': base_model_suid
})
})
data['base_models'] = json.dumps(base_model)
with get_session() as session:
try:
@ -136,13 +138,11 @@ class EnterpriseBusiModelRepository(object):
return
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
def list_enterprise_busi_model(self, entity_id: int, page_no: int, page_size: int) -> Dict[Any, Any]:
"""
获取企业部署的业务模型列表
@ -155,9 +155,10 @@ class EnterpriseBusiModelRepository(object):
Returns:
dict: 包含总数和数据列表的字典
"""
with get_session() as session:
total_count = session.query(func.count(EnterpriseBusiModel.id)).filter(EnterpriseBusiModel.entity_id == entity_id).scalar()
with get_session() as session:
total_count = session.query(func.count(EnterpriseBusiModel.id)).filter(
EnterpriseBusiModel.entity_id == entity_id).scalar()
models = (
session.query(
EnterpriseBusiModel.id.label("model_id"),
@ -169,7 +170,7 @@ class EnterpriseBusiModelRepository(object):
.limit(page_size)
.all()
)
return {
"count": total_count,
"data": [
@ -182,10 +183,11 @@ class EnterpriseBusiModelRepository(object):
]
}
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(',')]
@ -204,16 +206,21 @@ class EnterpriseBusiModelNodeRepository(object):
)
session.add(model_node)
session.commit()
return
return
def get_nodes_by_busi_model(self, busi_model_id: int) -> List[EnterpriseBusiModelNode]:
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
def delete_by_busi_model_id(self, busi_model_id: int) -> None:
with get_session() as session:
session.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.busi_model_id == busi_model_id).delete()
session.commit()
session.query(EnterpriseBusiModelNode).filter(
EnterpriseBusiModelNode.busi_model_id == busi_model_id).delete()
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
}
def get_device(self, device_id: int) -> dict:
with get_session() as session:
def get_device(self, device_id: int) -> dict:
try:
device = session.query(EnterpriseDevice) \
.filter(EnterpriseDevice.id == device_id, EnterpriseDevice.delete != 1) \
@ -183,6 +183,7 @@ class EnterpriseDeviceRepository(object):
device_dict = {}
if device:
device_dict = {
"suid": device.suid,
"name": device.name,
"addr": device.addr,
"device_model": device.device_model,

@ -38,4 +38,6 @@ class EnterpriseEntityRepository(object):
{"id": entity_id})
entity = to_json(res)
return entity["suid"] if entity else ""
return entity["suid"] if entity else ""

@ -127,4 +127,12 @@ class EnterpriseNodeRepository(object):
param = {"id": node_id}
res = session.execute(text(sql), param)
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

@ -136,7 +136,7 @@ class InfoHandler(APIHandler):
if not busimodel_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
busi_model_data = db_busimodel.get_busi_model_by_id(busimodel_id)
if not busi_model_data:

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

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

@ -4,6 +4,9 @@ from website import errors
from website.handler import APIHandler, authenticated
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_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
@ -196,3 +199,105 @@ class DeleteHandler(APIHandler):
db_node = DB_Node.EnterpriseNodeRepository()
db_node.delete_node(node_id)
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/info', handler.InfoHandler),
('/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 = [

Loading…
Cancel
Save