from sqlalchemy.ext.asyncio import AsyncSession from module_admin.dao.metadata_config_dao import MetadataConfigDao from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.entity.vo.metadata_config_vo import MetadataClasModel,SecuBizConfigAddModel,SecuBizConfigRelaModel,\ SecuBizPermiConfigBatchModel,MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel,SecuBizConfigModel ,SecuBizConfigQueryModel,SecuBizPermiConfigModel, SecuBizPermiConfigQueryModel from utils.common_util import CamelCaseUtil from module_admin.entity.do.metadata_config_do import SecuBizConfigRela # ORM 类 from exceptions.exception import ServiceException import uuid from typing import List from datetime import datetime class MetadataConfigService: """ 元数据分类管理 Service """ @classmethod async def get_metadata_clas_list_services( cls, query_db: AsyncSession, query_object: MetadataClasPageQueryModel, is_page: bool = False ): """ 查询元数据分类列表 """ result = await MetadataConfigDao.get_metadata_clas_list(query_db, query_object, is_page) return result @classmethod async def add_metadata_clas_services( cls, query_db: AsyncSession, page_object: MetadataClasModel ): """ 新增元数据分类 """ try: await MetadataConfigDao.add_metadata_clas_dao(query_db, page_object) await query_db.commit() return CrudResponseModel(is_success=True, message="新增成功") except Exception as e: await query_db.rollback() raise e @classmethod async def edit_metadata_clas_services( cls, query_db: AsyncSession, page_object: MetadataClasModel ): """ 编辑元数据分类 """ edit_data = page_object.model_dump(exclude_unset=True) info = await cls.get_metadata_clas_detail_services(query_db, page_object.clas_onum) if info.clas_onum: try: await MetadataConfigDao.edit_metadata_clas_dao(query_db, page_object.clas_onum, edit_data) await query_db.commit() return CrudResponseModel(is_success=True, message="更新成功") except Exception as e: await query_db.rollback() raise e else: raise ServiceException(message="元数据标签不存在") @classmethod async def delete_metadata_clas_services( cls, query_db: AsyncSession, clas_ids: str ): """ 删除元数据分类(支持多个ID用逗号分隔) """ if not clas_ids: raise ServiceException(message="传入的分类ID为空") id_list = [int(id_str) for id_str in clas_ids.split(",") if id_str.isdigit()] if not id_list: raise ServiceException(message="无效的分类ID列表") try: await MetadataConfigDao.delete_metadata_clas_dao(query_db, id_list) await query_db.commit() return CrudResponseModel(is_success=True, message="删除成功") except Exception as e: await query_db.rollback() raise e @classmethod async def get_metadata_clas_detail_services(cls, query_db: AsyncSession, clas_id: int): """ 查询元数据分类详情 """ result = await MetadataConfigDao.get_clas_detail_by_id(query_db, clas_id) if result: return MetadataClasModel(**CamelCaseUtil.transform_result(result)) else: return MetadataClasModel(**dict()) @classmethod async def get_metadata_sec_list_services( cls, query_db: AsyncSession, query_object: MetadataSecPageQueryModel, is_page: bool = False ): """ 查询数据安全配置列表 """ result = await MetadataConfigDao.get_metadata_sec_list(query_db, query_object, is_page) return result @classmethod async def add_metadata_sec_services(cls, query_db: AsyncSession, page_object: MetadataSecModel): """ 新增数据安全配置 """ try: page_object.onum=str(uuid.uuid4()) await MetadataConfigDao.add_metadata_sec_dao(query_db, page_object) await query_db.commit() return CrudResponseModel(is_success=True, message="新增成功") except Exception as e: await query_db.rollback() raise e @classmethod async def edit_metadata_sec_services(cls, query_db: AsyncSession, page_object: MetadataSecModel): """ 编辑数据安全配置 """ edit_data = page_object.model_dump(exclude_unset=True) info = await cls.get_metadata_sec_detail_services(query_db, page_object.onum) if info.onum: try: await MetadataConfigDao.edit_metadata_sec_dao(query_db, page_object.onum, edit_data) await query_db.commit() return CrudResponseModel(is_success=True, message="更新成功") except Exception as e: await query_db.rollback() raise e else: raise ServiceException(message="数据安全配置不存在") @classmethod async def delete_metadata_sec_services(cls, query_db: AsyncSession, onum_list: str): """ 删除数据安全配置(支持多个编号用逗号分隔) """ if not onum_list: raise ServiceException(message="传入的编号为空") id_list = [onum.strip() for onum in onum_list.split(",") if onum.strip()] if not id_list: raise ServiceException(message="无效的编号列表") try: await MetadataConfigDao.delete_metadata_sec_dao(query_db, id_list) await query_db.commit() return CrudResponseModel(is_success=True, message="删除成功") except Exception as e: await query_db.rollback() raise e @classmethod async def get_metadata_sec_detail_services(cls, query_db: AsyncSession, onum: str): """ 查询数据安全配置详情 """ result = await MetadataConfigDao.get_sec_detail_by_id(query_db, onum) if result: return MetadataSecModel(**CamelCaseUtil.transform_result(result)) else: return MetadataSecModel(**dict()) # ----------- t_secu_biz_config 服务方法 ----------- @classmethod async def get_biz_config_list_services( cls, db: AsyncSession, query_object: SecuBizConfigQueryModel, is_page: bool = False ): result = await MetadataConfigDao.get_biz_config_list(db, query_object, is_page) return result @classmethod async def add_biz_config_services(cls, db: AsyncSession, page_object: SecuBizConfigAddModel): try: configMode = SecuBizConfigModel() configMode.onum=page_object.onum configMode.biz_name=page_object.biz_name configMode.risk_lvl=page_object.risk_lvl configMode.isStop=page_object.isStop configMode.create_by=page_object.create_by configMode.update_by=page_object.update_by configMode.update_time=page_object.update_time configMode.create_time=page_object.create_time obj=await MetadataConfigDao.add_biz_config(db, configMode) records: List[SecuBizConfigRela] = [] for tab_onum in page_object.tab_onum_list: record = SecuBizConfigRela() record.biz_onum = obj.onum record.tab_onum = tab_onum record.create_by = obj.create_by record.create_time = obj.create_time records.append(record) await MetadataConfigDao.add_batch_biz_rela_dao(db,records) await db.commit() return CrudResponseModel(is_success=True, message="新增成功") except Exception as e: await db.rollback() raise e @classmethod async def edit_biz_config_services(cls, db: AsyncSession, page_object: SecuBizConfigAddModel): configMode = SecuBizConfigModel() configMode.onum=page_object.onum configMode.biz_name=page_object.biz_name configMode.risk_lvl=page_object.risk_lvl configMode.isStop=page_object.isStop configMode.create_by=page_object.create_by configMode.update_by=page_object.update_by configMode.update_time=page_object.update_time configMode.create_time=page_object.create_time edit_data = configMode.model_dump(exclude_unset=True) info = await cls.get_biz_config_detail_services(db, page_object.onum) if info.onum: try: await MetadataConfigDao.edit_biz_config(db, page_object.onum, edit_data) await MetadataConfigDao.delete_biz_rela_dao(db, page_object.onum) records: List[SecuBizConfigRela] = [] for tab_onum in page_object.tab_onum_list: record = SecuBizConfigRela() record.biz_onum = page_object.onum record.tab_onum = tab_onum record.create_by = page_object.update_by record.create_time = page_object.update_time records.append(record) await MetadataConfigDao.add_batch_biz_rela_dao(db,records) await db.commit() return CrudResponseModel(is_success=True, message="更新成功") except Exception as e: await db.rollback() raise e else: raise ServiceException(message="业务配置不存在") @classmethod async def delete_biz_config_services(cls, db: AsyncSession, onum_list: str): if not onum_list: raise ServiceException(message="传入的编号为空") id_list = [onum.strip() for onum in onum_list.split(",") if onum.strip()] if not id_list: raise ServiceException(message="无效的编号列表") try: await MetadataConfigDao.delete_biz_config(db, id_list) await db.commit() return CrudResponseModel(is_success=True, message="删除成功") except Exception as e: await db.rollback() raise e @classmethod async def get_biz_config_detail_services(cls, db: AsyncSession, onum: str): result = await MetadataConfigDao.get_biz_config_detail_by_id(db, onum) if result: return SecuBizConfigModel(**CamelCaseUtil.transform_result(result)) else: return SecuBizConfigModel(**dict()) # ----------- t_secu_biz_permi_config 服务方法 ----------- @classmethod async def get_biz_permi_config_list_services( cls, db: AsyncSession, query_object: SecuBizPermiConfigQueryModel, is_page: bool = False ): result = await MetadataConfigDao.get_biz_permi_config_list(db, query_object, is_page) return result @classmethod async def add_biz_permi_config_services( cls, db: AsyncSession, batch_model: SecuBizPermiConfigBatchModel, create_by: str, create_time: datetime ) -> CrudResponseModel: try: records: List[SecuBizPermiConfigModel] = [] for biz_onum in batch_model.biz_onum_list: record = SecuBizPermiConfigModel() record.biz_onum = biz_onum record.obj_type = batch_model.obj_type record.obj_value = batch_model.obj_value record.obj_name = batch_model.obj_name record.isStop = batch_model.isStop record.create_by = create_by record.create_time = create_time records.append(record) await MetadataConfigDao.add_biz_permi_config_batch(db, records) await db.commit() return CrudResponseModel(is_success=True, message="新增成功") except Exception as e: await db.rollback() raise e @classmethod async def edit_biz_permi_config_services(cls, db: AsyncSession, page_object: SecuBizPermiConfigModel): edit_data = page_object.model_dump(exclude_unset=True) info = await cls.get_biz_permi_config_detail_services(db, page_object.onum) if info.onum: try: await MetadataConfigDao.edit_biz_permi_config(db, page_object.onum, edit_data) await db.commit() return CrudResponseModel(is_success=True, message="更新成功") except Exception as e: await db.rollback() raise e else: raise ServiceException(message="权限配置不存在") @classmethod async def delete_biz_permi_config_services(cls, db: AsyncSession, onum_list: str): if not onum_list: raise ServiceException(message="传入的编号为空") id_list = [onum.strip() for onum in onum_list.split(",") if onum.strip()] if not id_list: raise ServiceException(message="无效的编号列表") try: await MetadataConfigDao.delete_biz_permi_config(db, id_list) await db.commit() return CrudResponseModel(is_success=True, message="删除成功") except Exception as e: await db.rollback() raise e @classmethod async def get_biz_permi_config_detail_services(cls, db: AsyncSession, onum: str): result = await MetadataConfigDao.get_biz_permi_config_detail_by_id(db, onum) if result: return SecuBizPermiConfigModel(**CamelCaseUtil.transform_result(result)) else: return SecuBizPermiConfigModel(**dict()) @classmethod async def get_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int, ): ai_session_list = await MetadataConfigDao.get_biz_rela_by_biz_id(result_db, biz_onum) # 查询最新的20条 return CamelCaseUtil.transform_result(ai_session_list)