You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.5 KiB

from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
2 weeks ago
from sqlalchemy import update, delete,desc
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
2 weeks ago
) .order_by(desc(DatasecConfig.create_time))
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
1 month ago
async def check_name_or_param_exist(cls, db: AsyncSession, metatask_name: str = None, metatask_param: str = None, exclude_onum: int = None):
"""
1 month ago
检查是否存在指定任务名称和参数字段同时匹配非空的字段排除指定 onum用于编辑
"""
1 month ago
conditions = []
if metatask_name: # 不为空才加条件
conditions.append(DatasecConfig.metatask_name == metatask_name)
if not conditions: # 两个都为空,直接返回 False
return False
stmt = select(DatasecConfig).where(*conditions)
if exclude_onum:
stmt = stmt.where(DatasecConfig.onum != exclude_onum)
result = await db.execute(stmt)
return result.scalars().first() is not None
1 month ago