ETest-Vue-FastAPI/ruoyi-fastapi-backend/module_admin/system/dao/contact_dao.py

90 lines
3.2 KiB
Python
Raw Normal View History

2026-04-15 19:06:01 +08:00
from sqlalchemy import delete, select, update, func
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.system.entity.do.contact_do import Contact
from module_admin.system.entity.vo.contact_vo import ContactModel, ContactPageQueryModel
from utils.page_util import PageUtil
class ContactDao:
"""
联系人模块数据库操作层
"""
@classmethod
async def get_contact_detail_by_id(cls, db: AsyncSession, id: int):
"""
根据联系人ID获取详细信息
"""
result = (
await db.execute(
select(Contact).where(Contact.id == id, Contact.del_flag == '0')
)
).scalars().first()
return result
@classmethod
async def get_contact_by_name_company(cls, db: AsyncSession, name: str, company: str = None, exclude_id: int = None):
"""
根据姓名+单位查询联系人用于唯一性校验
"""
query = select(Contact).where(Contact.name == name, Contact.del_flag == '0')
if company:
query = query.where(Contact.company == company)
else:
query = query.where(Contact.company.is_(None) | (Contact.company == ''))
if exclude_id is not None:
query = query.where(Contact.id != exclude_id)
return (await db.execute(query)).scalars().first()
@classmethod
async def get_contact_list(cls, db: AsyncSession, query_object: ContactPageQueryModel, is_page: bool = False):
"""
获取联系人列表
"""
query = (
select(Contact)
.where(
Contact.del_flag == '0',
Contact.name.like(f'%{query_object.name}%') if query_object.name else True,
Contact.company.like(f'%{query_object.company}%') if query_object.company else True,
Contact.department.like(f'%{query_object.department}%') if query_object.department else True,
Contact.mobile.like(f'%{query_object.mobile}%') if query_object.mobile else True,
)
.order_by(Contact.company, Contact.name)
.distinct()
)
contact_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
return contact_list
@classmethod
async def add_contact_dao(cls, db: AsyncSession, contact: ContactModel):
"""
新增联系人
"""
db_contact = Contact(**contact.model_dump(
exclude={'create_time', 'update_time', 'del_flag'},
exclude_unset=True
))
from datetime import datetime
db_contact.create_time = datetime.now()
db_contact.del_flag = '0'
db.add(db_contact)
await db.flush()
return db_contact
@classmethod
async def edit_contact_dao(cls, db: AsyncSession, contact: dict):
"""
编辑联系人
"""
await db.execute(update(Contact), [contact])
@classmethod
async def delete_contact_dao(cls, db: AsyncSession, contact_id: int):
"""
软删除联系人
"""
await db.execute(
update(Contact).where(Contact.id == contact_id).values(del_flag='1')
)