From 469b04438c2a05eb76915c776a2cafb1b2e9e643 Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 22 May 2024 14:06:19 +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_node_device.py | 20 +++++++++++++++++-- website/handlers/enterprise_node/handler.py | 15 ++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) 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 56bd315..731fbc8 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 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from typing import List - +import logging from sqlalchemy import Column, Integer, String, DateTime, func, text from sqlalchemy.ext.declarative import declarative_base @@ -58,6 +58,22 @@ class EnterpriseBusiModelNodeDeviceRepository(object): session.bulk_insert_mappings(EnterpriseBusiModelNodeDevice, records) session.commit() + def delete_by_busi_model_and_node(self, node_id: int, busi_model_id: int) -> bool: + try: + with get_session() as session: + sql = text( + "delete from enterprise_busi_model_node_device where node_id=:node_id and busi_model_id=:busi_model_id" + ) + session.execute( + sql, {"node_id": node_id, "busi_model_id": busi_model_id} + ) + session.commit() + except Exception as e: + logging.info("delete_by_busi_model_and_node error: %s", e) + return False + + return True + def check_deployed(self, node_id: int, busi_model_id: int) -> int: with get_session() as session: count = ( @@ -70,7 +86,7 @@ class EnterpriseBusiModelNodeDeviceRepository(object): ) return 1 if count > 0 else 0 - def get_device_id(self, node_id: int, busi_model_id: int) -> int | None: + def get_device_ids(self, node_id: int, busi_model_id: int) -> int | None: with get_session() as session: sql = text( "select device_id from enterprise_busi_model_node_device where node_id=:node_id and busi_model_id=:busi_model_id" diff --git a/website/handlers/enterprise_node/handler.py b/website/handlers/enterprise_node/handler.py index bd0be16..f8d358b 100644 --- a/website/handlers/enterprise_node/handler.py +++ b/website/handlers/enterprise_node/handler.py @@ -299,7 +299,7 @@ class BusimodelInfoHandler(APIHandler): db_mode_node_device = ( DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository() ) - device_ids = db_mode_node_device.get_device_id(node_id, busi_model_id) + device_ids = db_mode_node_device.get_device_ids(node_id, busi_model_id) device_ids = list(set([item["device_id"] for item in device_ids])) db_device = DB_Device.EnterpriseDeviceRepository() devices = db_device.get_devices(device_ids) @@ -336,6 +336,8 @@ class BusimodelDeployHandler(APIHandler): device_ids = self.get_escaped_argument("device_ids", "") if not node_id or not busi_model_id: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") + if not device_ids: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备不能为空") db_node = DB_Node.EnterpriseNodeRepository() node = db_node.get_node_by_id(node_id) if not node: @@ -350,9 +352,11 @@ class BusimodelDeployHandler(APIHandler): if not entity_suid_row: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "企业节点不存在") + db_device = DB_Device.EnterpriseDeviceRepository() + records = [] for device_id in device_ids.split(","): - device = DB_Device.EnterpriseDeviceRepository().get_device(int(device_id)) + device = db_device.get_device(int(device_id)) if not device: raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备不存在") @@ -368,8 +372,11 @@ class BusimodelDeployHandler(APIHandler): "device_suid": device["suid"], } ) - DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository().batch_insert_record( - records + + db_busi_model_node_device = ( + DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository() ) + db_busi_model_node_device.delete_by_busi_model_and_node(node_id, busi_model_id) + db_busi_model_node_device.batch_insert_record(records) self.finish()