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