更新代码

main
周平 11 months ago
parent 9fe7ff8382
commit 7a765dd1ac

@ -68,8 +68,8 @@ class ModelRepositry(object):
with get_session() as session: with get_session() as session:
logging.info(f"model id is : {model_id}") logging.info(f"model id is : {model_id}")
model = session.query(Model).filter(Model.id == model_id).first() model = session.query(Model).filter(Model.id == model_id).first()
# if not model: if not model:
# return {} return {}
model_dict = { model_dict = {
'id': model.id, 'id': model.id,

@ -6,11 +6,12 @@ from typing import Any, Dict, List, Optional
from sqlalchemy import Column, Integer, String, DateTime, func from sqlalchemy import Column, Integer, String, DateTime, func
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import text
from website.db.alg_model import alg_model as DB_alg_model 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_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_mysql import get_session from website.db_mysql import get_session, to_json_list, to_json, Row, dict_to_obj
from website.util import shortuuid from website.util import shortuuid
Base = declarative_base() Base = declarative_base()
@ -136,7 +137,12 @@ class EnterpriseBusiModelRepository(object):
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
if model:
model_dict = model.__dict__
model_dict.pop('_sa_instance_state')
return dict_to_obj(model_dict)
return None
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]:
""" """
@ -178,6 +184,22 @@ class EnterpriseBusiModelRepository(object):
] ]
} }
def delete_by_id(self, model_id: int):
"""
删除业务模型
delete字段置为1
Args:
model_id (int): 业务模型 ID
"""
with get_session() as session:
model = session.query(EnterpriseBusiModel).filter(EnterpriseBusiModel.id == model_id).first()
if model:
model.delete = 1
session.commit()
return
class EnterpriseBusiModelNode(Base): class EnterpriseBusiModelNode(Base):
__tablename__ = 'enterprise_busi_model_node' __tablename__ = 'enterprise_busi_model_node'
@ -221,11 +243,17 @@ 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, entity_suid: str) -> Optional[List[Row]]:
with get_session() as session: with get_session() as session:
nodes = session.query(EnterpriseBusiModelNode).filter( # nodes = session.query(EnterpriseBusiModelNode, ).filter(
EnterpriseBusiModelNode.busi_model_id == busi_model_id).all() # EnterpriseBusiModelNode.busi_model_id == busi_model_id).all()
return nodes sql = ("select mn.node_id, n.name node_name from enterprise_busi_model_node mn, enterprise_node n "
"where mn.node_id=n.id "
" and mn.busi_model_id = :busi_model_id"
" and mn.entity_suid = :entity_suid")
nodes = session.execute(text(sql), {"busi_model_id": busi_model_id, "entity_suid": entity_suid})
return to_json_list(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:

@ -5,7 +5,7 @@ from typing import List, Union, Optional, Tuple
from sqlalchemy import Column, Integer, String, DateTime, func, text from sqlalchemy import Column, Integer, String, DateTime, func, text
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from website.db_mysql import get_session, to_json_list, Row from website.db_mysql import get_session, to_json, to_json_list, Row
""" """
CREATE TABLE `enterprise_busi_model_node_device` ( CREATE TABLE `enterprise_busi_model_node_device` (
@ -63,7 +63,8 @@ class EnterpriseBusiModelNodeDeviceRepository(object):
try: try:
with get_session() as session: with get_session() as session:
sql = text( sql = text(
"delete from enterprise_busi_model_node_device where node_id=:node_id and busi_model_id=:busi_model_id" "delete from enterprise_busi_model_node_device "
"where node_id=:node_id and busi_model_id=:busi_model_id"
) )
session.execute( session.execute(
sql, {"node_id": node_id, "busi_model_id": busi_model_id} sql, {"node_id": node_id, "busi_model_id": busi_model_id}
@ -87,10 +88,20 @@ class EnterpriseBusiModelNodeDeviceRepository(object):
) )
return 1 if count > 0 else 0 return 1 if count > 0 else 0
def get_one_by_busimodel(self, busi_model_id: int):
with get_session() as session:
sql = text(
"select node_id, busi_model_id from enterprise_busi_model_node_device "
"where busi_model_id=:busi_model_id limit 1"
)
res = session.execute(sql, {"busi_model_id": busi_model_id})
return to_json(res)
def get_device_ids(self, node_id: int, busi_model_id: int) -> list: def get_device_ids(self, node_id: int, busi_model_id: int) -> list:
with get_session() as session: with get_session() as session:
sql = text( sql = text(
"select device_id from enterprise_busi_model_node_device where node_id=:node_id and busi_model_id=:busi_model_id" "select device_id from enterprise_busi_model_node_device "
"where node_id=:node_id and busi_model_id=:busi_model_id"
) )
res = session.execute( res = session.execute(
sql, {"node_id": node_id, "busi_model_id": busi_model_id} sql, {"node_id": node_id, "busi_model_id": busi_model_id}
@ -104,11 +115,10 @@ class EnterpriseBusiModelNodeDeviceRepository(object):
logging.error("get_busi_model_by_device error: device_id and device_suid is null") logging.error("get_busi_model_by_device error: device_id and device_suid is null")
return [] return []
res = []
count = 0 count = 0
with get_session() as session: with get_session() as session:
sql = """ sql = """
select d.busi_model_id, m.name, m.base_models select d.busi_model_id, d.node_id, m.name, m.base_models
from enterprise_busi_model_node_device d, enterprise_busi_model m from enterprise_busi_model_node_device d, enterprise_busi_model m
where d.busi_model_id=m.id""" where d.busi_model_id=m.id"""
p = {} p = {}

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
import copy
import json
import logging
from typing import Any, Dict, List, Optional
from sqlalchemy import Column, Integer, String, DateTime, func
from sqlalchemy.ext.declarative import declarative_base
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_mysql import get_session
from website.util import shortuuid
Base = declarative_base()
class EnterpriseNodeDeviceBMCusConf(Base):
"""企业设备关联业务模型下的基础模型自定义配置"""
__tablename__ = 'enterprise_node_device_bm_cus_conf'
id = Column(Integer, primary_key=True, autoincrement=True)
entity_id = Column(Integer, nullable=True)
entity_suid = Column(String(255), nullable=True)
node_id = Column(Integer, nullable=True)
node_suid = Column(String(255), nullable=True)
device_id = Column(Integer, nullable=True)
device_suid = Column(String(255), nullable=True)
busi_model_id = Column(Integer, nullable=True)
busi_model_suid = Column(String(255), nullable=True)
base_model_id = Column(Integer, nullable=True)
base_model_suid = Column(String(255), nullable=True)
busi_conf_file = Column(String(255), nullable=True)
busi_conf_str = Column(String(255), nullable=True)
model_hub_image = Column(String(255), nullable=True)
model_conf_file = Column(String(255), nullable=True)
model_conf_str = Column(String(255), nullable=True)
create_time = Column(DateTime, server_default=func.now(), onupdate=func.now())
def __repr__(self):
return f"EnterpriseNodeDeviceBMCusConf(id={self.id}, entity_id={self.entity_id})"
class EnterpriseNodeDeviceBMCusConfRepository():
def create_busi_model_custom_config(self, data: Dict[str, Any]):
with get_session() as session:
session.add(EnterpriseNodeDeviceBMCusConf(**data))
session.commit()
return
def get_busi_model_custom_config(self, node_id: int, device_id: int, busi_model_id: int):
with get_session() as session:
data = session.query(EnterpriseNodeDeviceBMCusConf).filter(
EnterpriseNodeDeviceBMCusConf.node_id == node_id,
EnterpriseNodeDeviceBMCusConf.device_id == device_id,
EnterpriseNodeDeviceBMCusConf.busi_model_id == busi_model_id
).first()
return data

@ -4,7 +4,7 @@ from typing import List, Dict, Any, Type
from sqlalchemy import Column, Integer, String, DateTime, func, text from sqlalchemy import Column, Integer, String, DateTime, func, text
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from website.db_mysql import get_session, to_json_list, to_json from website.db_mysql import get_session, to_json_list, to_json, dict_to_obj
""" """
@ -44,11 +44,19 @@ class File(Base):
class FileRepository(object): class FileRepository(object):
def get_file_by_md5(self, md5_list: List[str]) -> List[File]: def get_file_by_md5(self, md5_list: List[str]) -> List[File]:
resp = []
with get_session() as session: with get_session() as session:
# return ( # return (
# session.query(File).filter(File.md5_str == md5_str).first() # session.query(File).filter(File.md5_str == md5_str).first()
# ) # )
files = session.query(File).filter(File.md5_str.in_(md5_list)).all()
return session.query(File).filter(File.md5_str.in_(md5_list)).all() for file in files:
obj_dict = file.__dict__
del obj_dict['_sa_instance_state']
print(obj_dict)
resp.append(dict_to_obj(obj_dict))
# return session.query(File).filter(File.md5_str.in_(md5_list)).all()
return resp

@ -23,6 +23,9 @@ class Row(dict):
raise AttributeError(name) raise AttributeError(name)
def dict_to_obj(d):
return type('GenericClass', (object,), d)()
def to_json_list(cursor: Any) -> Optional[List[Row]]: def to_json_list(cursor: Any) -> Optional[List[Row]]:
column_names = list(cursor.keys()) column_names = list(cursor.keys())
result = cursor.fetchall() result = cursor.fetchall()

@ -7,6 +7,7 @@ from website import db_mysql, errors
from website.handler import APIHandler, authenticated from website.handler import APIHandler, authenticated
from website.util import shortuuid from website.util import shortuuid
from website.db.enterprise_busi_model import enterprise_busi_model as DB_BusiModel 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.file import file as DB_File from website.db.file import file as DB_File
@ -149,18 +150,20 @@ class InfoHandler(APIHandler):
# business_conf_name = db_file.get_file_by_md5(busi_model_data.business_conf_file) # business_conf_name = db_file.get_file_by_md5(busi_model_data.business_conf_file)
# business_logic_name = db_file.get_file_by_md5(busi_model_data.business_logic) # business_logic_name = db_file.get_file_by_md5(busi_model_data.business_logic)
basemodel_list = json.loads(busi_model_data.basemodel) basemodel_list = json.loads(busi_model_data.base_models)
entity_suid = busi_model_data.entity_suid
db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository() db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository()
link_nodes = db_model_node.get_nodes_by_busi_model(busimodel_id) link_nodes = db_model_node.get_nodes_by_busi_model(busimodel_id, entity_suid)
link_node_list = [] link_node_list = []
for node in link_nodes: for node in link_nodes:
link_node_list.append({"node_id": node.node_id, "node_name": node.node_name}) link_node_list.append({"node_id": node["node_id"], "node_name": node["node_name"]})
self.finish({ self.finish({
"name": busi_model_data.name, "name": busi_model_data.name,
"comment": busi_model_data.comment, "comment": busi_model_data.comment,
"basemodel_list":basemodel_list, # 关联模型 "basemodel_list": basemodel_list, # 关联模型
"business_logic_name": business_logic_name, # 业务代码压缩包文件名 "business_logic_name": business_logic_name, # 业务代码压缩包文件名
"business_logic_md5": busi_model_data.business_logic, # 业务代码压缩包md5 "business_logic_md5": busi_model_data.business_logic, # 业务代码压缩包md5
"business_conf_name": business_conf_name, # 业务参数配置文件名 "business_conf_name": business_conf_name, # 业务参数配置文件名
@ -248,4 +251,24 @@ class EditHandler(APIHandler):
} }
db_model_node.insert_busi_model_nodes(model_node_data) db_model_node.insert_busi_model_nodes(model_node_data)
self.finish()
class DeleteHandler(APIHandler):
@authenticated
def post(self):
busimodel_id = self.get_int_argument("id")
if not busimodel_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
db_con = DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository()
one = db_con.get_one_by_busimodel(busimodel_id)
if one:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "该业务模型已关联设备,无法删除")
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
db_busimodel.delete_by_id(busimodel_id)
db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository()
db_model_node.delete_by_busi_model_id(busimodel_id)
self.finish() self.finish()

@ -8,5 +8,6 @@ handlers = [
("/enterprise/model/deployment/add", handler.AddHandler), ("/enterprise/model/deployment/add", handler.AddHandler),
("/enterprise/model/deployment/info", handler.InfoHandler), ("/enterprise/model/deployment/info", handler.InfoHandler),
("/enterprise/model/deployment/edit", handler.EditHandler), ("/enterprise/model/deployment/edit", handler.EditHandler),
("/enterprise/model/delete", handler.DeleteHandler),
] ]
page_handlers = [] page_handlers = []

@ -14,7 +14,9 @@ from website.db.device_classification import (
from website.db.enterprise_busi_model import ( from website.db.enterprise_busi_model import (
enterprise_busi_model as DB_BusiModel, 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.db.enterprise_device import enterprise_device as DB_Device
from website.db.enterprise_node import enterprise_node_base_model_conf as DB_NodeBaseModelConf
from website.handler import APIHandler, authenticated from website.handler import APIHandler, authenticated
from website.util import shortuuid from website.util import shortuuid
@ -384,17 +386,42 @@ class DeviceBasemodelListHandler(APIHandler):
busi_models, count = db_busi_model.get_busi_model_by_device(device_id=device_id, pagination=True, busi_models, count = db_busi_model.get_busi_model_by_device(device_id=device_id, pagination=True,
page_no=pageNo, page_no=pageNo,
page_size=pageSize) page_size=pageSize)
if count == 0:
self.finish({"count": count, "data": []})
return
res = []
for item in busi_models: for item in busi_models:
busi_model_id = item["busi_model_id"] busi_model_id = item["busi_model_id"]
busi_model_name = item["name"] busi_model_name = item["name"]
base_model_list = json.loads(item["base_models"]) base_model_list = json.loads(item["base_models"])
base_models = []
for base_model in base_model_list: for base_model in base_model_list:
base_model_id = base_model["id"] base_model_id = base_model["id"]
base_model_suid = base_model["suid"] base_model_suid = base_model["suid"]
base_model_name = base_model["name"] base_model_name = base_model["name"]
db_alg_model = DB_AlgModel()
self.finish() base_model = db_alg_model.get_model_dict_by_id(base_model_id)
base_model_version = base_model["default_version"]
db_conf = DB_NodeBaseModelConf.EnterpriseNodeDeviceBMCusConfRepository()
conf = db_conf.get_busi_model_custom_config(busi_model_id=busi_model_id, device_id=device_id,
node_id=item["node_id"])
base_model_hub_image = ""
if conf:
base_model_hub_image = conf.model_hub_image
base_models.append({
"model_id": base_model_id,
"model_name": base_model_name,
"model_version": base_model_version,
"model_hub_image": base_model_hub_image,
})
res.append({
"busi_model_id": busi_model_id,
"busi_model_name": busi_model_name,
"base_models": base_models
})
self.finish({"count": count, "data": res})
class DeviceBaseModelCustomConfigHandler(APIHandler): class DeviceBaseModelCustomConfigHandler(APIHandler):
@ -432,7 +459,7 @@ class DeviceBaseModelCustomConfigHandler(APIHandler):
if device["node_id"] != node_id: if device["node_id"] != node_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "device not belong to this node") raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "device not belong to this node")
db_alg_model = DB_AlgModel() db_alg_model = DB_AlgModel()
base_model = db_alg_model.get_model_by_id(base_model_id) base_model = db_alg_model.get_model_dict_by_id(base_model_id)
if not base_model: if not base_model:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "base model not exist") raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "base model not exist")
@ -444,7 +471,26 @@ class DeviceBaseModelCustomConfigHandler(APIHandler):
db_busi_model = DB_BusiModel.EnterpriseBusiModelRepository() db_busi_model = DB_BusiModel.EnterpriseBusiModelRepository()
busi_model = db_busi_model.get_busi_model_by_id(busi_model_id) busi_model = db_busi_model.get_busi_model_by_id(busi_model_id)
busi_model_suid = busi_model.suid busi_model_suid = busi_model.suid
data = dict()
data.update(
entity_id=entity_id,
entity_suid=entity_suid,
node_id=node_id,
node_suid=node_suid,
device_id=device_id,
device_suid=device_suid,
busi_model_id=busi_model_id,
busi_model_suid=busi_model_suid,
base_model_id=base_model_id,
base_model_suid=base_model["suid"],
busi_conf_file=busi_conf_file,
busi_conf_str=busi_conf_str,
model_hub_image=model_hub_image,
model_conf_file=model_conf_file,
model_conf_str=model_conf_str
)
db_conf = DB_NodeBaseModelConf.EnterpriseNodeDeviceBMCusConfRepository()
db_conf.create_busi_model_custom_config(data=data)
self.finish() self.finish()

Loading…
Cancel
Save