perf: 优化岗位管理模块service层及异常处理
This commit is contained in:
@@ -19,93 +19,63 @@ postController = APIRouter(prefix='/system/post', dependencies=[Depends(LoginSer
|
||||
|
||||
@postController.get("/list", response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('system:post:list'))])
|
||||
async def get_system_post_list(request: Request, post_page_query: PostPageQueryModel = Depends(PostPageQueryModel.as_query), query_db: AsyncSession = Depends(get_db)):
|
||||
try:
|
||||
# 获取分页数据
|
||||
post_page_query_result = await PostService.get_post_list_services(query_db, post_page_query, is_page=True)
|
||||
logger.info('获取成功')
|
||||
|
||||
return ResponseUtil.success(model_content=post_page_query_result)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return ResponseUtil.error(msg=str(e))
|
||||
|
||||
|
||||
@postController.post("", dependencies=[Depends(CheckUserInterfaceAuth('system:post:add'))])
|
||||
@ValidateFields(validate_model='add_post')
|
||||
@log_decorator(title='岗位管理', business_type=BusinessType.INSERT)
|
||||
async def add_system_post(request: Request, add_post: PostModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
|
||||
try:
|
||||
add_post.create_by = current_user.user.user_name
|
||||
add_post.create_time = datetime.now()
|
||||
add_post.update_by = current_user.user.user_name
|
||||
add_post.update_time = datetime.now()
|
||||
add_post_result = await PostService.add_post_services(query_db, add_post)
|
||||
if add_post_result.is_success:
|
||||
logger.info(add_post_result.message)
|
||||
|
||||
return ResponseUtil.success(msg=add_post_result.message)
|
||||
else:
|
||||
logger.warning(add_post_result.message)
|
||||
return ResponseUtil.failure(msg=add_post_result.message)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return ResponseUtil.error(msg=str(e))
|
||||
|
||||
|
||||
@postController.put("", dependencies=[Depends(CheckUserInterfaceAuth('system:post:edit'))])
|
||||
@ValidateFields(validate_model='edit_post')
|
||||
@log_decorator(title='岗位管理', business_type=BusinessType.UPDATE)
|
||||
async def edit_system_post(request: Request, edit_post: PostModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
|
||||
try:
|
||||
edit_post.update_by = current_user.user.user_name
|
||||
edit_post.update_time = datetime.now()
|
||||
edit_post_result = await PostService.edit_post_services(query_db, edit_post)
|
||||
if edit_post_result.is_success:
|
||||
logger.info(edit_post_result.message)
|
||||
|
||||
return ResponseUtil.success(msg=edit_post_result.message)
|
||||
else:
|
||||
logger.warning(edit_post_result.message)
|
||||
return ResponseUtil.failure(msg=edit_post_result.message)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return ResponseUtil.error(msg=str(e))
|
||||
|
||||
|
||||
@postController.delete("/{post_ids}", dependencies=[Depends(CheckUserInterfaceAuth('system:post:remove'))])
|
||||
@log_decorator(title='岗位管理', business_type=BusinessType.DELETE)
|
||||
async def delete_system_post(request: Request, post_ids: str, query_db: AsyncSession = Depends(get_db)):
|
||||
try:
|
||||
delete_post = DeletePostModel(postIds=post_ids)
|
||||
delete_post_result = await PostService.delete_post_services(query_db, delete_post)
|
||||
if delete_post_result.is_success:
|
||||
logger.info(delete_post_result.message)
|
||||
|
||||
return ResponseUtil.success(msg=delete_post_result.message)
|
||||
else:
|
||||
logger.warning(delete_post_result.message)
|
||||
return ResponseUtil.failure(msg=delete_post_result.message)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return ResponseUtil.error(msg=str(e))
|
||||
|
||||
|
||||
@postController.get("/{post_id}", response_model=PostModel, dependencies=[Depends(CheckUserInterfaceAuth('system:post:query'))])
|
||||
async def query_detail_system_post(request: Request, post_id: int, query_db: AsyncSession = Depends(get_db)):
|
||||
try:
|
||||
post_detail_result = await PostService.post_detail_services(query_db, post_id)
|
||||
logger.info(f'获取post_id为{post_id}的信息成功')
|
||||
|
||||
return ResponseUtil.success(data=post_detail_result)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return ResponseUtil.error(msg=str(e))
|
||||
|
||||
|
||||
@postController.post("/export", dependencies=[Depends(CheckUserInterfaceAuth('system:post:export'))])
|
||||
@log_decorator(title='岗位管理', business_type=BusinessType.EXPORT)
|
||||
async def export_system_post_list(request: Request, post_page_query: PostPageQueryModel = Depends(PostPageQueryModel.as_form), query_db: AsyncSession = Depends(get_db)):
|
||||
try:
|
||||
# 获取全量数据
|
||||
post_query_result = await PostService.get_post_list_services(query_db, post_page_query, is_page=False)
|
||||
post_export_result = await PostService.export_post_list_services(post_query_result)
|
||||
logger.info('导出成功')
|
||||
|
||||
return ResponseUtil.streaming(data=bytes2file_response(post_export_result))
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return ResponseUtil.error(msg=str(e))
|
||||
|
@@ -1,6 +1,7 @@
|
||||
from sqlalchemy import select, update, delete
|
||||
from sqlalchemy import select, update, delete, func
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from module_admin.entity.do.post_do import SysPost
|
||||
from module_admin.entity.do.user_do import SysUserPost
|
||||
from module_admin.entity.vo.post_vo import *
|
||||
from utils.page_util import PageUtil
|
||||
|
||||
@@ -116,3 +117,19 @@ class PostDao:
|
||||
delete(SysPost)
|
||||
.where(SysPost.post_id.in_([post.post_id]))
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def count_user_post_dao(cls, db: AsyncSession, post_id: int):
|
||||
"""
|
||||
根据岗位id查询岗位关联的用户数量
|
||||
:param db: orm对象
|
||||
:param post_id: 岗位id
|
||||
:return: 岗位关联的用户数量
|
||||
"""
|
||||
user_post_count = (await db.execute(
|
||||
select(func.count('*'))
|
||||
.select_from(SysUserPost)
|
||||
.where(SysUserPost.post_id == post_id)
|
||||
)).scalar()
|
||||
|
||||
return user_post_count
|
||||
|
@@ -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)
|
||||
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()
|
||||
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='岗位不存在')
|
||||
|
||||
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)
|
||||
if post:
|
||||
result = PostModel(**CamelCaseUtil.transform_result(post))
|
||||
else:
|
||||
result = PostModel(**dict())
|
||||
|
||||
return result
|
||||
|
||||
|
Reference in New Issue
Block a user