From 8408ceb9c47edd22658bf63a807ce6c956d94b7b Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Wed, 30 Jul 2025 17:16:38 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AE=9E=E7=8E=B0=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=87=E6=8D=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../robot_role_pairing_controller.py | 172 ++++++++++-------- .../dao/robot_role_pairing_dao.py | 37 +++- .../entity/do/robot_role_pairing_do.py | 12 ++ .../entity/vo/robot_role_pairing_vo.py | 16 ++ .../service/robot_role_pairing_service.py | 25 ++- ruoyi-fastapi-backend/server.py | 2 + 6 files changed, 187 insertions(+), 77 deletions(-) diff --git a/ruoyi-fastapi-backend/module_admin/controller/robot_role_pairing_controller.py b/ruoyi-fastapi-backend/module_admin/controller/robot_role_pairing_controller.py index f25bb60..8305f0e 100644 --- a/ruoyi-fastapi-backend/module_admin/controller/robot_role_pairing_controller.py +++ b/ruoyi-fastapi-backend/module_admin/controller/robot_role_pairing_controller.py @@ -5,10 +5,12 @@ from config.enums import BusinessType from config.get_db import get_db from module_admin.annotation.log_annotation import Log from module_admin.aspect.interface_auth import CheckUserInterfaceAuth +from module_admin.dao.robot_role_pairing_dao import PairingDao from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.service.login_service import LoginService from module_admin.service.robot_role_pairing_service import PairingService -from module_admin.entity.vo.robot_role_pairing_vo import DeletePairingModel, PairingModel, PairingPageQueryModel +from module_admin.entity.vo.robot_role_pairing_vo import DeletePairingModel, PairingModel, PairingPageQueryModel, \ + ChangeRobotRoleModel from utils.common_util import bytes2file_response from utils.log_util import logger from utils.page_util import PageResponseModel @@ -16,88 +18,112 @@ from utils.response_util import ResponseUtil from datetime import datetime -pairingController = APIRouter(prefix='/system/pairing', dependencies=[Depends(LoginService.get_current_user)]) +pairingController = APIRouter(prefix='/system/robot_role', dependencies=[Depends(LoginService.get_current_user)]) @pairingController.get( - '/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:list'))] + '/{robot_id}', ) -async def get_system_pairing_list( +async def get_system_role_pairing_list( request: Request, -pairing_page_query: PairingPageQueryModel = Depends(PairingPageQueryModel.as_query), + robot_id: int, query_db: AsyncSession = Depends(get_db), ): # 获取分页数据 - pairing_page_query_result = await PairingService.get_pairing_list_services(query_db, pairing_page_query, is_page=True) - logger.info('获取成功') + pairing_list = await PairingService.get_role_pairing_list_services(query_db, robot_id) - return ResponseUtil.success(model_content=pairing_page_query_result) + return ResponseUtil.success(data=pairing_list) - -@pairingController.post('', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:add'))]) -@ValidateFields(validate_model='add_pairing') -@Log(title='角色-机器人-映射', business_type=BusinessType.INSERT) -async def add_system_pairing( - request: Request, - add_pairing: PairingModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), -): - add_pairing.update_time = datetime.now() - add_pairing.update_by = current_user.user.user_name - add_pairing_result = await PairingService.add_pairing_services(query_db, add_pairing) - logger.info(add_pairing_result.message) - - return ResponseUtil.success(msg=add_pairing_result.message) - - -@pairingController.put('', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:edit'))]) -@ValidateFields(validate_model='edit_pairing') -@Log(title='角色-机器人-映射', business_type=BusinessType.UPDATE) -async def edit_system_pairing( - request: Request, - edit_pairing: PairingModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), -): - edit_pairing.update_by = current_user.user.user_name - edit_pairing.update_time = datetime.now() - edit_pairing_result = await PairingService.edit_pairing_services(query_db, edit_pairing) - logger.info(edit_pairing_result.message) - - return ResponseUtil.success(msg=edit_pairing_result.message) - - -@pairingController.delete('/{pairing_ids}', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:remove'))]) -@Log(title='角色-机器人-映射', business_type=BusinessType.DELETE) -async def delete_system_pairing(request: Request, pairing_ids: str, query_db: AsyncSession = Depends(get_db)): - delete_pairing = DeletePairingModel(pairingIds=pairing_ids) - delete_pairing_result = await PairingService.delete_pairing_services(query_db, delete_pairing) - logger.info(delete_pairing_result.message) - - return ResponseUtil.success(msg=delete_pairing_result.message) - - -@pairingController.get( - '/{pairing_id}', response_model=PairingModel, dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:query'))] +@pairingController.post( + '/change', ) -async def query_detail_system_pairing(request: Request, pairing_id: int, query_db: AsyncSession = Depends(get_db)): - pairing_detail_result = await PairingService.pairing_detail_services(query_db, pairing_id) - logger.info(f'获取pairing_id为{pairing_id}的信息成功') - - return ResponseUtil.success(data=pairing_detail_result) - - -@pairingController.post('/export', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:export'))]) -@Log(title='角色-机器人-映射', business_type=BusinessType.EXPORT) -async def export_system_pairing_list( - request: Request, - pairing_page_query: PairingPageQueryModel = Form(), - query_db: AsyncSession = Depends(get_db), +async def change_robot_role( + request: Request, + change_pairing: ChangeRobotRoleModel, + query_db: AsyncSession = Depends(get_db), ): - # 获取全量数据 - pairing_query_result = await PairingService.get_pairing_list_services(query_db, pairing_page_query, is_page=False) - pairing_export_result = await PairingService.export_pairing_list_services(pairing_query_result) - logger.info('导出成功') + await PairingService.change_robot_role_services(query_db,change_pairing) + return ResponseUtil.success() - return ResponseUtil.streaming(data=bytes2file_response(pairing_export_result)) +# @pairingController.get( +# '/list', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:list'))] +# ) +# async def get_system_pairing_list( +# request: Request, +# pairing_page_query: PairingPageQueryModel = Depends(PairingPageQueryModel.as_query), +# query_db: AsyncSession = Depends(get_db), +# ): +# # 获取分页数据 +# pairing_page_query_result = await PairingService.get_pairing_list_services(query_db, pairing_page_query, is_page=True) +# logger.info('获取成功') +# +# return ResponseUtil.success(model_content=pairing_page_query_result) +# +# +# @pairingController.post('', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:add'))]) +# @ValidateFields(validate_model='add_pairing') +# @Log(title='角色-机器人-映射', business_type=BusinessType.INSERT) +# async def add_system_pairing( +# request: Request, +# add_pairing: PairingModel, +# query_db: AsyncSession = Depends(get_db), +# current_user: CurrentUserModel = Depends(LoginService.get_current_user), +# ): +# add_pairing.update_time = datetime.now() +# add_pairing.update_by = current_user.user.user_name +# add_pairing_result = await PairingService.add_pairing_services(query_db, add_pairing) +# logger.info(add_pairing_result.message) +# +# return ResponseUtil.success(msg=add_pairing_result.message) +# +# +# @pairingController.put('', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:edit'))]) +# @ValidateFields(validate_model='edit_pairing') +# @Log(title='角色-机器人-映射', business_type=BusinessType.UPDATE) +# async def edit_system_pairing( +# request: Request, +# edit_pairing: PairingModel, +# query_db: AsyncSession = Depends(get_db), +# current_user: CurrentUserModel = Depends(LoginService.get_current_user), +# ): +# edit_pairing.update_by = current_user.user.user_name +# edit_pairing.update_time = datetime.now() +# edit_pairing_result = await PairingService.edit_pairing_services(query_db, edit_pairing) +# logger.info(edit_pairing_result.message) +# +# return ResponseUtil.success(msg=edit_pairing_result.message) +# +# +# @pairingController.delete('/{pairing_ids}', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:remove'))]) +# @Log(title='角色-机器人-映射', business_type=BusinessType.DELETE) +# async def delete_system_pairing(request: Request, pairing_ids: str, query_db: AsyncSession = Depends(get_db)): +# delete_pairing = DeletePairingModel(pairingIds=pairing_ids) +# delete_pairing_result = await PairingService.delete_pairing_services(query_db, delete_pairing) +# logger.info(delete_pairing_result.message) +# +# return ResponseUtil.success(msg=delete_pairing_result.message) +# +# +# @pairingController.get( +# '/{pairing_id}', response_model=PairingModel, dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:query'))] +# ) +# async def query_detail_system_pairing(request: Request, pairing_id: int, query_db: AsyncSession = Depends(get_db)): +# pairing_detail_result = await PairingService.pairing_detail_services(query_db, pairing_id) +# logger.info(f'获取pairing_id为{pairing_id}的信息成功') +# +# return ResponseUtil.success(data=pairing_detail_result) +# +# +# @pairingController.post('/export', dependencies=[Depends(CheckUserInterfaceAuth('system:pairing:export'))]) +# @Log(title='角色-机器人-映射', business_type=BusinessType.EXPORT) +# async def export_system_pairing_list( +# request: Request, +# pairing_page_query: PairingPageQueryModel = Form(), +# query_db: AsyncSession = Depends(get_db), +# ): +# # 获取全量数据 +# pairing_query_result = await PairingService.get_pairing_list_services(query_db, pairing_page_query, is_page=False) +# pairing_export_result = await PairingService.export_pairing_list_services(pairing_query_result) +# logger.info('导出成功') +# +# return ResponseUtil.streaming(data=bytes2file_response(pairing_export_result)) diff --git a/ruoyi-fastapi-backend/module_admin/dao/robot_role_pairing_dao.py b/ruoyi-fastapi-backend/module_admin/dao/robot_role_pairing_dao.py index d0b1abb..ee7f361 100644 --- a/ruoyi-fastapi-backend/module_admin/dao/robot_role_pairing_dao.py +++ b/ruoyi-fastapi-backend/module_admin/dao/robot_role_pairing_dao.py @@ -1,7 +1,10 @@ from sqlalchemy import delete, select, update from sqlalchemy.ext.asyncio import AsyncSession -from module_admin.entity.do.pairing_do import RobotRolePairing -from module_admin.entity.vo.pairing_vo import PairingModel, PairingPageQueryModel + +from module_admin.entity.do.robot_role_do import RobotRole +from module_admin.entity.do.robot_role_pairing_do import RobotRolePairing + +from module_admin.entity.vo.robot_role_pairing_vo import PairingModel, PairingPageQueryModel from utils.page_util import PageUtil @@ -10,6 +13,36 @@ class PairingDao: 角色-机器人-映射模块数据库操作层 """ + @classmethod + async def edit_pairing_status(cls, db: AsyncSession,robot_id: int = None, pairing_id: int = None, status: str = '0'): + + condition = list() + if robot_id: + condition.append(RobotRolePairing.robot_id == robot_id) + if pairing_id: + condition.append(RobotRolePairing.pairing_id == pairing_id) + query = ( + update(RobotRolePairing) + .values(status=status) + .where( + * condition + ) + ) + await db.execute(query) + + @classmethod + async def get_role_pairing_list(cls, db: AsyncSession, robot_id: int): + + query = ( + select(RobotRolePairing.pairing_id, RobotRole.rolename, RobotRole.detail, RobotRolePairing.status) + .select_from(RobotRolePairing) + .join(RobotRole, RobotRole.robot_role_id == RobotRolePairing.robot_role_id) + .where(RobotRolePairing.robot_id == robot_id) + ) + role_pairing_list = ( + await db.execute(query) + ).mappings().all() + return role_pairing_list @classmethod async def get_pairing_detail_by_id(cls, db: AsyncSession, pairing_id: int): """ diff --git a/ruoyi-fastapi-backend/module_admin/entity/do/robot_role_pairing_do.py b/ruoyi-fastapi-backend/module_admin/entity/do/robot_role_pairing_do.py index 47d738f..ee56a05 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/do/robot_role_pairing_do.py +++ b/ruoyi-fastapi-backend/module_admin/entity/do/robot_role_pairing_do.py @@ -17,4 +17,16 @@ class RobotRolePairing(Base): update_by = Column(String(64), nullable=False, comment='修改者') +# +# class RolePairing(Base): +# """ +# 角色-机器人-映射表对应pydantic模型, 查询角色-机器人结果的返回模型 +# """ +# +# +# pairing_id = Column(BigInteger, primary_key=True, autoincrement=True, nullable=False, comment='主键ID') +# rolename = Column(String(32), nullable=False, comment='角色名称') +# detail = Column(String(512), nullable=True, comment='角色介绍') +# status = Column(String(2), nullable=False, comment='使用情况(0停用,1使用)') + diff --git a/ruoyi-fastapi-backend/module_admin/entity/vo/robot_role_pairing_vo.py b/ruoyi-fastapi-backend/module_admin/entity/vo/robot_role_pairing_vo.py index 8774d91..d5329fd 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/vo/robot_role_pairing_vo.py +++ b/ruoyi-fastapi-backend/module_admin/entity/vo/robot_role_pairing_vo.py @@ -8,6 +8,22 @@ from module_admin.annotation.pydantic_annotation import as_query +# class RolePairing(BaseModel): +# """ +# 角色-机器人-映射表对应pydantic模型, 查询角色-机器人结果的返回模型 +# """ +# model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) +# +# pairing_id: Optional[int] = Field(default=None, description='主键ID') +# rolename: Optional[str] = Field(default=None, description='角色名称') +# detail: Optional[str] = Field(default=None, description='角色介绍') +# status: Optional[str] = Field(default=None, description='使用情况(0停用,1使用)') + +class ChangeRobotRoleModel(BaseModel): + model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) + robot_id: Optional[int] = Field(default=None, description='机器人ID') + pairing_id: Optional[int] = Field(default=None, description='主键ID') + class PairingModel(BaseModel): """ 角色-机器人-映射表对应pydantic模型 diff --git a/ruoyi-fastapi-backend/module_admin/service/robot_role_pairing_service.py b/ruoyi-fastapi-backend/module_admin/service/robot_role_pairing_service.py index 3b8c2e1..e7f4ced 100644 --- a/ruoyi-fastapi-backend/module_admin/service/robot_role_pairing_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/robot_role_pairing_service.py @@ -3,8 +3,9 @@ from typing import List from config.constant import CommonConstant from exceptions.exception import ServiceException from module_admin.entity.vo.common_vo import CrudResponseModel -from module_admin.dao.pairing_dao import PairingDao -from module_admin.entity.vo.pairing_vo import DeletePairingModel, PairingModel, PairingPageQueryModel +from module_admin.dao.robot_role_pairing_dao import PairingDao +from module_admin.entity.vo.robot_role_pairing_vo import DeletePairingModel, PairingModel, PairingPageQueryModel, \ + ChangeRobotRoleModel from utils.common_util import CamelCaseUtil from utils.excel_util import ExcelUtil @@ -14,6 +15,26 @@ class PairingService: 角色-机器人-映射模块服务层 """ + @classmethod + async def change_robot_role_services(cls, query_db: AsyncSession,change_pairing: ChangeRobotRoleModel): + try: + # 现修改原本角色status为0 + print("xxxxxxxxxxxxxxx", change_pairing.robot_id) + await PairingDao.edit_pairing_status(query_db, change_pairing.robot_id, None, '0') + # 再修改新的角色status为1 + print("xxxxxxxxxxxxxxx", change_pairing.pairing_id) + await PairingDao.edit_pairing_status(query_db, None, change_pairing.pairing_id, '1') + + await query_db.commit() + + except Exception as e: + await query_db.rollback() + raise e + @classmethod + async def get_role_pairing_list_services(cls, query_db: AsyncSession, robot_id: int): + pairing_list = await PairingDao.get_role_pairing_list(query_db, robot_id) + return pairing_list + @classmethod async def get_pairing_list_services( cls, query_db: AsyncSession, query_object: PairingPageQueryModel, is_page: bool = False diff --git a/ruoyi-fastapi-backend/server.py b/ruoyi-fastapi-backend/server.py index 1cb3c67..273fb25 100644 --- a/ruoyi-fastapi-backend/server.py +++ b/ruoyi-fastapi-backend/server.py @@ -27,6 +27,7 @@ from module_admin.controller.words_controller import wordsController from module_admin.controller.info_controller import infoController from module_generator.controller.gen_controller import genController from module_admin.controller.message_controller import messageController +from module_admin.controller.robot_role_pairing_controller import pairingController from sub_applications.handle import handle_sub_applications from utils.common_util import worship @@ -88,6 +89,7 @@ controller_list = [ {'router': wordsController, 'tags': ['引导词管理']}, {'router': infoController, 'tage':['机器人信息管理']}, {'router': messageController, 'tags': ['消息管理']}, + {'router': pairingController, 'tags': ['机器人角色']}, ]