perf: 优化岗位管理模块service层及异常处理

This commit is contained in:
insistence
2024-07-09 21:17:50 +08:00
parent da54a7e5f5
commit e3efca9648
3 changed files with 111 additions and 92 deletions

View File

@@ -1,5 +1,7 @@
from module_admin.dao.post_dao import *
from module_admin.entity.vo.common_vo import CrudResponseModel
from config.constant import CommonConstant
from exceptions.exception import ServiceException
from utils.common_util import export_list2excel, CamelCaseUtil
@@ -20,6 +22,34 @@ class PostService:
return post_list_result
@classmethod
async def check_post_name_unique_services(cls, query_db: AsyncSession, page_object: PostModel):
"""
检查岗位名称是否唯一service
:param query_db: orm对象
:param page_object: 岗位对象
:return: 校验结果
"""
post_id = -1 if page_object.post_id is None else page_object.post_id
post = await PostDao.get_post_detail_by_info(query_db, PostModel(postName=page_object.post_name))
if post and post.post_id != post_id:
return CommonConstant.NOT_UNIQUE
return CommonConstant.UNIQUE
@classmethod
async def check_post_code_unique_services(cls, query_db: AsyncSession, page_object: PostModel):
"""
检查岗位编码是否唯一service
:param query_db: orm对象
:param page_object: 岗位对象
:return: 校验结果
"""
post_id = -1 if page_object.post_id is None else page_object.post_id
post = await PostDao.get_post_detail_by_info(query_db, PostModel(postCode=page_object.post_code))
if post and post.post_id != post_id:
return CommonConstant.NOT_UNIQUE
return CommonConstant.UNIQUE
@classmethod
async def add_post_services(cls, query_db: AsyncSession, page_object: PostModel):
"""
@@ -28,20 +58,19 @@ class PostService:
:param page_object: 新增岗位对象
:return: 新增岗位校验结果
"""
post = await PostDao.get_post_detail_by_info(query_db, PostModel(postName=page_object.post_name))
if post:
result = dict(is_success=False, message='岗位名称已存在')
if not await cls.check_post_name_unique_services(query_db, page_object):
raise ServiceException(message=f'新增岗位{page_object.post_name}失败,岗位名称已存在')
elif not await cls.check_post_code_unique_services(query_db, page_object):
raise ServiceException(message=f'新增岗位{page_object.post_name}失败,岗位编码已存在')
else:
try:
await PostDao.add_post_dao(query_db, page_object)
await query_db.commit()
result = dict(is_success=True, message='新增成功')
return CrudResponseModel(is_success=True, message='新增成功')
except Exception as e:
await query_db.rollback()
raise e
return CrudResponseModel(**result)
@classmethod
async def edit_post_services(cls, query_db: AsyncSession, page_object: PostModel):
"""
@@ -51,24 +80,22 @@ class PostService:
:return: 编辑岗位校验结果
"""
edit_post = page_object.model_dump(exclude_unset=True)
post_info = await cls.post_detail_services(query_db, edit_post.get('post_id'))
if post_info:
if post_info.post_name != page_object.post_name:
post = await PostDao.get_post_detail_by_info(query_db, PostModel(postName=page_object.post_name))
if post:
result = dict(is_success=False, message='岗位名称已存在')
return CrudResponseModel(**result)
try:
await PostDao.edit_post_dao(query_db, edit_post)
await query_db.commit()
result = dict(is_success=True, message='更新成功')
except Exception as e:
await query_db.rollback()
raise e
post_info = await cls.post_detail_services(query_db, page_object.post_id)
if post_info.post_id:
if not await cls.check_post_name_unique_services(query_db, page_object):
raise ServiceException(message=f'修改岗位{page_object.post_name}失败,岗位名称已存在')
elif not await cls.check_post_code_unique_services(query_db, page_object):
raise ServiceException(message=f'修改岗位{page_object.post_name}失败,岗位编码已存在')
else:
try:
await PostDao.edit_post_dao(query_db, edit_post)
await query_db.commit()
return CrudResponseModel(is_success=True, message='更新成功')
except Exception as e:
await query_db.rollback()
raise e
else:
result = dict(is_success=False, message='岗位不存在')
return CrudResponseModel(**result)
raise ServiceException(message='岗位不存在')
@classmethod
async def delete_post_services(cls, query_db: AsyncSession, page_object: DeletePostModel):
@@ -82,15 +109,17 @@ class PostService:
post_id_list = page_object.post_ids.split(',')
try:
for post_id in post_id_list:
post = await cls.post_detail_services(query_db, int(post_id))
if (await PostDao.count_user_post_dao(query_db, int(post_id))) > 0:
raise ServiceException(message=f'{post.post_name}已分配,不能删除')
await PostDao.delete_post_dao(query_db, PostModel(postId=post_id))
await query_db.commit()
result = dict(is_success=True, message='删除成功')
return CrudResponseModel(is_success=True, message='删除成功')
except Exception as e:
await query_db.rollback()
raise e
else:
result = dict(is_success=False, message='传入岗位id为空')
return CrudResponseModel(**result)
raise ServiceException(message='传入岗位id为空')
@classmethod
async def post_detail_services(cls, query_db: AsyncSession, post_id: int):
@@ -101,7 +130,10 @@ class PostService:
:return: 岗位id对应的信息
"""
post = await PostDao.get_post_detail_by_id(query_db, post_id=post_id)
result = PostModel(**CamelCaseUtil.transform_result(post))
if post:
result = PostModel(**CamelCaseUtil.transform_result(post))
else:
result = PostModel(**dict())
return result