From da54a7e5f58177b074a240d003ec8d2ae303dc64 Mon Sep 17 00:00:00 2001 From: insistence <3055204202@qq.com> Date: Tue, 9 Jul 2024 21:03:05 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=85=AC=E5=91=8A=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97service?= =?UTF-8?q?=E5=B1=82=E5=8F=8A=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/notice_controller.py | 83 +++++++------------ .../module_admin/dao/notice_dao.py | 6 +- .../module_admin/service/notice_service.py | 65 +++++++++------ 3 files changed, 69 insertions(+), 85 deletions(-) diff --git a/ruoyi-fastapi-backend/module_admin/controller/notice_controller.py b/ruoyi-fastapi-backend/module_admin/controller/notice_controller.py index 9395bca..7e75306 100644 --- a/ruoyi-fastapi-backend/module_admin/controller/notice_controller.py +++ b/ruoyi-fastapi-backend/module_admin/controller/notice_controller.py @@ -17,79 +17,52 @@ noticeController = APIRouter(prefix='/system/notice', dependencies=[Depends(Logi @noticeController.get("/list", response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('system:notice:list'))]) async def get_system_notice_list(request: Request, notice_page_query: NoticePageQueryModel = Depends(NoticePageQueryModel.as_query), query_db: AsyncSession = Depends(get_db)): - try: - # 获取分页数据 - notice_page_query_result = await NoticeService.get_notice_list_services(query_db, notice_page_query, is_page=True) - logger.info('获取成功') - return ResponseUtil.success(model_content=notice_page_query_result) - except Exception as e: - logger.exception(e) - return ResponseUtil.error(msg=str(e)) + # 获取分页数据 + notice_page_query_result = await NoticeService.get_notice_list_services(query_db, notice_page_query, is_page=True) + logger.info('获取成功') + + return ResponseUtil.success(model_content=notice_page_query_result) @noticeController.post("", dependencies=[Depends(CheckUserInterfaceAuth('system:notice:add'))]) @ValidateFields(validate_model='add_notice') @log_decorator(title='通知公告管理', business_type=BusinessType.INSERT) async def add_system_notice(request: Request, add_notice: NoticeModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user)): - try: - add_notice.create_by = current_user.user.user_name - add_notice.create_time = datetime.now() - add_notice.update_by = current_user.user.user_name - add_notice.update_time = datetime.now() - add_notice_result = await NoticeService.add_notice_services(query_db, add_notice) - if add_notice_result.is_success: - logger.info(add_notice_result.message) - return ResponseUtil.success(msg=add_notice_result.message) - else: - logger.warning(add_notice_result.message) - return ResponseUtil.failure(msg=add_notice_result.message) - except Exception as e: - logger.exception(e) - return ResponseUtil.error(msg=str(e)) + add_notice.create_by = current_user.user.user_name + add_notice.create_time = datetime.now() + add_notice.update_by = current_user.user.user_name + add_notice.update_time = datetime.now() + add_notice_result = await NoticeService.add_notice_services(query_db, add_notice) + logger.info(add_notice_result.message) + + return ResponseUtil.success(msg=add_notice_result.message) @noticeController.put("", dependencies=[Depends(CheckUserInterfaceAuth('system:notice:edit'))]) @ValidateFields(validate_model='edit_notice') @log_decorator(title='通知公告管理', business_type=BusinessType.UPDATE) async def edit_system_notice(request: Request, edit_notice: NoticeModel, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user)): - try: - edit_notice.update_by = current_user.user.user_name - edit_notice.update_time = datetime.now() - edit_notice_result = await NoticeService.edit_notice_services(query_db, edit_notice) - if edit_notice_result.is_success: - logger.info(edit_notice_result.message) - return ResponseUtil.success(msg=edit_notice_result.message) - else: - logger.warning(edit_notice_result.message) - return ResponseUtil.failure(msg=edit_notice_result.message) - except Exception as e: - logger.exception(e) - return ResponseUtil.error(msg=str(e)) + edit_notice.update_by = current_user.user.user_name + edit_notice.update_time = datetime.now() + edit_notice_result = await NoticeService.edit_notice_services(query_db, edit_notice) + logger.info(edit_notice_result.message) + + return ResponseUtil.success(msg=edit_notice_result.message) @noticeController.delete("/{notice_ids}", dependencies=[Depends(CheckUserInterfaceAuth('system:notice:remove'))]) @log_decorator(title='通知公告管理', business_type=BusinessType.DELETE) async def delete_system_notice(request: Request, notice_ids: str, query_db: AsyncSession = Depends(get_db)): - try: - delete_notice = DeleteNoticeModel(noticeIds=notice_ids) - delete_notice_result = await NoticeService.delete_notice_services(query_db, delete_notice) - if delete_notice_result.is_success: - logger.info(delete_notice_result.message) - return ResponseUtil.success(msg=delete_notice_result.message) - else: - logger.warning(delete_notice_result.message) - return ResponseUtil.failure(msg=delete_notice_result.message) - except Exception as e: - logger.exception(e) - return ResponseUtil.error(msg=str(e)) + delete_notice = DeleteNoticeModel(noticeIds=notice_ids) + delete_notice_result = await NoticeService.delete_notice_services(query_db, delete_notice) + logger.info(delete_notice_result.message) + + return ResponseUtil.success(msg=delete_notice_result.message) @noticeController.get("/{notice_id}", response_model=NoticeModel, dependencies=[Depends(CheckUserInterfaceAuth('system:notice:query'))]) async def query_detail_system_post(request: Request, notice_id: int, query_db: AsyncSession = Depends(get_db)): - try: - notice_detail_result = await NoticeService.notice_detail_services(query_db, notice_id) - logger.info(f'获取notice_id为{notice_id}的信息成功') - return ResponseUtil.success(data=notice_detail_result) - except Exception as e: - logger.exception(e) - return ResponseUtil.error(msg=str(e)) + notice_detail_result = await NoticeService.notice_detail_services(query_db, notice_id) + logger.info(f'获取notice_id为{notice_id}的信息成功') + + return ResponseUtil.success(data=notice_detail_result) diff --git a/ruoyi-fastapi-backend/module_admin/dao/notice_dao.py b/ruoyi-fastapi-backend/module_admin/dao/notice_dao.py index fd1846f..d680aa7 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/notice_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/notice_dao.py @@ -36,9 +36,9 @@ class NoticeDao: """ notice_info = (await db.execute( select(SysNotice) - .where(SysNotice.notice_title == notice.notice_title if notice.notice_title else True, - SysNotice.notice_type == notice.notice_type if notice.notice_type else True, - SysNotice.notice_content == notice.notice_content if notice.notice_content else True) + .where(SysNotice.notice_title == notice.notice_title, + SysNotice.notice_type == notice.notice_type, + SysNotice.notice_content == notice.notice_content) )).scalars().first() return notice_info diff --git a/ruoyi-fastapi-backend/module_admin/service/notice_service.py b/ruoyi-fastapi-backend/module_admin/service/notice_service.py index 573fc39..1926ed7 100644 --- a/ruoyi-fastapi-backend/module_admin/service/notice_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/notice_service.py @@ -1,5 +1,7 @@ from module_admin.dao.notice_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 @@ -21,6 +23,20 @@ class NoticeService: return notice_list_result + @classmethod + async def check_notice_unique_services(cls, query_db: AsyncSession, page_object: NoticeModel): + """ + 校验通知公告是否存在service + :param query_db: orm对象 + :param page_object: 通知公告对象 + :return: 校验结果 + """ + notice_id = -1 if page_object.notice_id is None else page_object.notice_id + notice = await NoticeDao.get_notice_detail_by_info(query_db, page_object) + if notice and notice.notice_id != notice_id: + return CommonConstant.NOT_UNIQUE + return CommonConstant.UNIQUE + @classmethod async def add_notice_services(cls, query_db: AsyncSession, page_object: NoticeModel): """ @@ -29,20 +45,17 @@ class NoticeService: :param page_object: 新增通知公告对象 :return: 新增通知公告校验结果 """ - notice = await NoticeDao.get_notice_detail_by_info(query_db, page_object) - if notice: - result = dict(is_success=False, message='通知公告已存在') + if not await cls.check_notice_unique_services(query_db, page_object): + raise ServiceException(message=f'新增通知公告{page_object.notice_title}失败,通知公告已存在') else: try: await NoticeDao.add_notice_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_notice_services(cls, query_db: AsyncSession, page_object: NoticeModel): """ @@ -52,24 +65,20 @@ class NoticeService: :return: 编辑通知公告校验结果 """ edit_notice = page_object.model_dump(exclude_unset=True) - notice_info = await cls.notice_detail_services(query_db, edit_notice.get('notice_id')) - if notice_info: - if notice_info.notice_title != page_object.notice_title or notice_info.notice_type != page_object.notice_type or notice_info.notice_content != page_object.notice_content: - notice = await NoticeDao.get_notice_detail_by_info(query_db, page_object) - if notice: - result = dict(is_success=False, message='通知公告已存在') - return CrudResponseModel(**result) - try: - await NoticeDao.edit_notice_dao(query_db, edit_notice) - await query_db.commit() - result = dict(is_success=True, message='更新成功') - except Exception as e: - await query_db.rollback() - raise e + notice_info = await cls.notice_detail_services(query_db, page_object.notice_id) + if notice_info.notice_id: + if not await cls.check_notice_unique_services(query_db, page_object): + raise ServiceException(message=f'修改通知公告{page_object.notice_title}失败,通知公告已存在') + else: + try: + await NoticeDao.edit_notice_dao(query_db, edit_notice) + 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_notice_services(cls, query_db: AsyncSession, page_object: DeleteNoticeModel): @@ -85,13 +94,12 @@ class NoticeService: for notice_id in notice_id_list: await NoticeDao.delete_notice_dao(query_db, NoticeModel(noticeId=notice_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 notice_detail_services(cls, query_db: AsyncSession, notice_id: int): @@ -102,6 +110,9 @@ class NoticeService: :return: 通知公告id对应的信息 """ notice = await NoticeDao.get_notice_detail_by_id(query_db, notice_id=notice_id) - result = NoticeModel(**CamelCaseUtil.transform_result(notice)) + if notice: + result = NoticeModel(**CamelCaseUtil.transform_result(notice)) + else: + result = NoticeModel(**dict()) return result