|  |  |  | from sqlalchemy.ext.asyncio import AsyncSession | 
					
						
							|  |  |  | from sqlalchemy.future import select | 
					
						
							|  |  |  | from sqlalchemy import update, delete | 
					
						
							|  |  |  | from datetime import datetime, time | 
					
						
							|  |  |  | from typing import List | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from module_admin.entity.do.metadata_config_do import DatasecConfig  # ORM 类 | 
					
						
							|  |  |  | from utils.page_util import PageUtil | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DatasecConfigDao: | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     数据安全参数配置表 DAO | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_detail_by_id(cls, db: AsyncSession, onum: int): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         根据主键获取详情 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         result = await db.execute(select(DatasecConfig).where(DatasecConfig.onum == onum)) | 
					
						
							|  |  |  |         return result.scalars().first() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def get_list(cls, db: AsyncSession, query_object, is_page: bool = False): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         获取数据列表(支持分页) | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         query = select(DatasecConfig).where( | 
					
						
							|  |  |  |             DatasecConfig.metatask_name.like(f"%{query_object.metatask_name}%") if query_object.metatask_name else True, | 
					
						
							|  |  |  |             DatasecConfig.status == query_object.status if query_object.status else True, | 
					
						
							|  |  |  |             DatasecConfig.create_time.between( | 
					
						
							|  |  |  |                 datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(0, 0, 0)), | 
					
						
							|  |  |  |                 datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)), | 
					
						
							|  |  |  |             ) if query_object.begin_time and query_object.end_time else True | 
					
						
							|  |  |  |         ).order_by(DatasecConfig.onum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def add(cls, db: AsyncSession, model_obj): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         新增任务配置 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         db_obj = DatasecConfig(**model_obj.model_dump()) | 
					
						
							|  |  |  |         db.add(db_obj) | 
					
						
							|  |  |  |         await db.flush() | 
					
						
							|  |  |  |         return db_obj | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def edit(cls, db: AsyncSession, onum: int, update_dict: dict): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         编辑任务配置 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         await db.execute( | 
					
						
							|  |  |  |             update(DatasecConfig) | 
					
						
							|  |  |  |             .where(DatasecConfig.onum == onum) | 
					
						
							|  |  |  |             .values(**update_dict) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # @classmethod | 
					
						
							|  |  |  |     # async def delete(cls, db: AsyncSession, onum_list: List[int]): | 
					
						
							|  |  |  |     #     """ | 
					
						
							|  |  |  |     #     批量删除任务配置 | 
					
						
							|  |  |  |     #     """ | 
					
						
							|  |  |  |     #     await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list))) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def delete(cls, db: AsyncSession, metatask: DatasecConfig): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         删除参数配置数据库操作 | 
					
						
							|  |  |  |         :param db: orm对象 | 
					
						
							|  |  |  |         :param config: 参数配置对象 | 
					
						
							|  |  |  |         :return: | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_([metatask.onum])))         | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     async def check_name_or_param_exist(cls, db: AsyncSession, metatask_name: str, metatask_param: str, exclude_onum: int = None): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         检查是否存在相同的任务名称或参数字段,排除指定 onum(用于编辑) | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         stmt = select(DatasecConfig).where( | 
					
						
							|  |  |  |             (DatasecConfig.metatask_name == metatask_name) | (DatasecConfig.metatask_param == metatask_param) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         if exclude_onum: | 
					
						
							|  |  |  |             stmt = stmt.where(DatasecConfig.onum != exclude_onum) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         result = await db.execute(stmt) | 
					
						
							|  |  |  |         return result.scalars().first() is not None |