ETest-Vue-FastAPI/ruoyi-fastapi-backend/module_admin/system/service/contact_service.py

104 lines
4.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from datetime import datetime
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from exceptions.exception import ServiceException
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.system.dao.contact_dao import ContactDao
from module_admin.system.entity.vo.contact_vo import DeleteContactModel, ContactModel, ContactPageQueryModel
from utils.common_util import CamelCaseUtil
from utils.excel_util import ExcelUtil
class ContactService:
"""
联系人模块服务层
"""
@classmethod
async def get_contact_list_services(
cls, query_db: AsyncSession, query_object: ContactPageQueryModel, is_page: bool = False
):
contact_list_result = await ContactDao.get_contact_list(query_db, query_object, is_page)
return contact_list_result
@classmethod
async def add_contact_services(cls, query_db: AsyncSession, page_object: ContactModel):
# 校验同单位下姓名唯一性
existing = await ContactDao.get_contact_by_name_company(
query_db, page_object.name, page_object.company
)
if existing:
company_info = f'{page_object.company}' if page_object.company else ''
raise ServiceException(message=f'联系人"{page_object.name}"{company_info}已存在,请勿重复添加')
try:
await ContactDao.add_contact_dao(query_db, page_object)
await query_db.commit()
return CrudResponseModel(is_success=True, message='新增成功')
except Exception as e:
await query_db.rollback()
raise e
@classmethod
async def edit_contact_services(cls, query_db: AsyncSession, page_object: ContactModel):
edit_contact = page_object.model_dump(exclude_unset=True, exclude={})
contact_info = await cls.contact_detail_services(query_db, page_object.id)
if contact_info.id:
# 校验唯一性(排除自身)
existing = await ContactDao.get_contact_by_name_company(
query_db, page_object.name, page_object.company, exclude_id=page_object.id
)
if existing:
company_info = f'{page_object.company}' if page_object.company else ''
raise ServiceException(message=f'联系人"{page_object.name}"{company_info}已存在')
try:
edit_contact['update_time'] = datetime.now()
await ContactDao.edit_contact_dao(query_db, edit_contact)
await query_db.commit()
return CrudResponseModel(is_success=True, message='更新成功')
except Exception as e:
await query_db.rollback()
raise e
else:
raise ServiceException(message='联系人不存在')
@classmethod
async def delete_contact_services(cls, query_db: AsyncSession, page_object: DeleteContactModel):
if page_object.ids:
id_list = page_object.ids.split(',')
try:
for contact_id in id_list:
await ContactDao.delete_contact_dao(query_db, int(contact_id))
await query_db.commit()
return CrudResponseModel(is_success=True, message='删除成功')
except Exception as e:
await query_db.rollback()
raise e
else:
raise ServiceException(message='传入联系人ID为空')
@classmethod
async def contact_detail_services(cls, query_db: AsyncSession, id: int):
contact = await ContactDao.get_contact_detail_by_id(query_db, id=id)
if contact:
result = ContactModel(**CamelCaseUtil.transform_result(contact))
else:
result = ContactModel(**dict())
return result
@staticmethod
async def export_contact_list_services(contact_list: List):
mapping_dict = {
'id': '联系人ID',
'name': '姓名',
'company': '单位',
'department': '部门',
'position': '职务',
'mobile': '手机号',
'phone': '座机',
'email': '邮箱',
'address': '快递地址',
'memo': '备注',
}
binary_data = ExcelUtil.export_list2excel(contact_list, mapping_dict)
return binary_data