From 6b10daf0fef5993ec8375f64b920b037151745b3 Mon Sep 17 00:00:00 2001 From: zhouping Date: Tue, 21 May 2024 17:51:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enterprise_busi_model.py | 62 +++++++++++++------ .../enterprise_busi_model_node_device.py | 13 ++++ website/handlers/enterprise_node/handler.py | 44 ++++++++++--- 3 files changed, 92 insertions(+), 27 deletions(-) diff --git a/website/db/enterprise_busi_model/enterprise_busi_model.py b/website/db/enterprise_busi_model/enterprise_busi_model.py index a9497d9..0d76c65 100644 --- a/website/db/enterprise_busi_model/enterprise_busi_model.py +++ b/website/db/enterprise_busi_model/enterprise_busi_model.py @@ -68,21 +68,6 @@ class EnterpriseBusiModel(Base): return f"EnterpriseBusiModel(id={self.id}, suid='{self.suid}', name='{self.name}')" -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'' - class EnterpriseBusiModelRepository(object): @@ -184,6 +169,22 @@ class EnterpriseBusiModelRepository(object): } +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'' + + class EnterpriseBusiModelNodeRepository(object): # def get_by_id(self, id: int) -> Optional[EnterpriseBusiModelNode]: # return self.db.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.id == id).first() @@ -220,7 +221,32 @@ class EnterpriseBusiModelNodeRepository(object): EnterpriseBusiModelNode.busi_model_id == busi_model_id).delete() session.commit() - def get_busi_model_by_node_id(self, node_id: int) -> Optional[EnterpriseBusiModelNode]: + def get_busi_model_by_node_id(self, node_id: int, page_no: int = 1, page_size: int = 10) -> Dict[Any, Any]: with get_session() as session: - model = session.query(EnterpriseBusiModelNode).filter(EnterpriseBusiModelNode.node_id == node_id).first() - return model + models = ( + session.query( + EnterpriseBusiModel.id.label("busi_model_id"), + EnterpriseBusiModel.name.label("busi_model_name"), + EnterpriseBusiModel.create_time + ) + .outerjoin(EnterpriseBusiModelNode, EnterpriseBusiModel.id == EnterpriseBusiModelNode.busi_model_id) + .filter(EnterpriseBusiModelNode.node_id == node_id) + .offset((page_no - 1) * page_size) + .limit(page_size) + .all() + ) + + + total_count = session.query(func.count(EnterpriseBusiModelNode.id)).filter( + EnterpriseBusiModelNode.node_id == node_id).scalar() + + return { + "count": total_count, + "data": [ + { + "busi_model_id": model.busi_model_id, + "busi_model_name": model.busi_model_name, + "create_time": model.create_time.strftime("%Y-%m-%d %H:%M:%S"), + } for model in models + ] + } diff --git a/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py b/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py index 14f8216..7e36229 100644 --- a/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py +++ b/website/db/enterprise_busi_model/enterprise_busi_model_node_device.py @@ -55,3 +55,16 @@ class EnterpriseBusiModelNodeDeviceRepository(object): with get_session() as session: session.bulk_insert_mappings(EnterpriseBusiModelNodeDevice, records) session.commit() + + + def check_deployed(self, node_id: int, busi_model_id: int) -> int: + with get_session() as session: + count = ( + session.query(EnterpriseBusiModelNodeDevice) + .filter( + EnterpriseBusiModelNodeDevice.node_id==node_id, + EnterpriseBusiModelNodeDevice.busi_model_id==busi_model_id + ) + .count() + ) + return 1 if count > 0 else 0 \ No newline at end of file diff --git a/website/handlers/enterprise_node/handler.py b/website/handlers/enterprise_node/handler.py index 1a67844..194fe8a 100644 --- a/website/handlers/enterprise_node/handler.py +++ b/website/handlers/enterprise_node/handler.py @@ -232,16 +232,45 @@ class BusimodelHandler(APIHandler): 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) - }) + + db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository() + + busi_models = db_model_node.get_busi_model_by_node_id(node_id, pageNo, pageSize) + + count = busi_models["count"] + models = busi_models["data"] + + db_mode_node_device = DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository() + for busi_model in models: + deployed = db_mode_node_device.check_deployed(node_id, busi_model["busi_model_id"]) + busi_model["deployed"] = deployed + + self.finish({"count": count, "data": models}) + class BusimodelInfoHandler(APIHandler): """ + - 描述:企业节点,业务模型部署 -> 业务模型信息 + - 请求方式:post + - 请求参数: + > - node_id, int, 节点id + > - busi_model_id, int,业务模型id + - 返回值: + ``` + { + "busi_model_name": "xx", # 业务模型名称 + "busi_model_comment": "xxx", # 简介 + "base_models": "xxx,xx,xx,xx" # 关联基础模型 + "devices": [ + { + "device_id": 123, + "device_name": "xxx" + }, + ... + ] + } + ``` """ @authenticated def post(self): @@ -279,9 +308,6 @@ class BusimodelDeployHandler(APIHandler): 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))