""" 测试表单模板表数据访问层 """ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, update, func, desc from typing import List, Optional from module_admin.system.entity.do.test_form_do import TestForm class TestFormDao: """ 测试表单模板表数据访问层 """ @classmethod async def get_by_id(cls, db: AsyncSession, id: int) -> Optional[TestForm]: """根据ID查询""" result = await db.execute( select(TestForm).where(TestForm.id == id, TestForm.del_flag == '0') ) return result.scalar_one_or_none() @classmethod async def get_by_type(cls, db: AsyncSession, form_type: str) -> List[TestForm]: """根据类型查询""" result = await db.execute( select(TestForm).where( TestForm.form_type == form_type, TestForm.del_flag == '0', TestForm.is_active == 1 ).order_by(desc(TestForm.create_time)) ) return result.scalars().all() @classmethod async def get_list(cls, db: AsyncSession, query_obj, is_page: bool = True): """查询列表""" query = select(TestForm).where(TestForm.del_flag == '0') if query_obj.name: query = query.where(TestForm.name.like(f'%{query_obj.name}%')) if query_obj.form_type: query = query.where(TestForm.form_type == query_obj.form_type) if query_obj.is_active is not None: query = query.where(TestForm.is_active == query_obj.is_active) query = query.order_by(desc(TestForm.create_time)) if is_page: # 分页 total_result = await db.execute(select(func.count()).select_from(query.subquery())) total = total_result.scalar() query = query.offset((query_obj.page_num - 1) * query_obj.page_size).limit(query_obj.page_size) result = await db.execute(query) return result.scalars().all(), total else: result = await db.execute(query) return result.scalars().all() @classmethod async def add(cls, db: AsyncSession, obj: TestForm): """新增""" db.add(obj) await db.flush() return obj.id @classmethod async def update(cls, db: AsyncSession, obj: TestForm): """更新""" await db.merge(obj) await db.flush() @classmethod async def delete(cls, db: AsyncSession, ids: List[int]): """删除(逻辑删除)""" await db.execute( update(TestForm).where(TestForm.id.in_(ids)).values(del_flag='1') ) await db.flush()