From f0066d4c64dcf8ae18c633f12838fc01b37e2e4e Mon Sep 17 00:00:00 2001 From: vertoryao Date: Fri, 30 May 2025 14:56:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(dify):=20=E6=96=B0=E5=A2=9E=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=A7=92=E8=89=B2=E5=92=8C=E8=8F=9C=E5=8D=95=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 PPTController、Spider2Controller 和 WordController 中添加了获取应用列表的接口 -优化了 RoleServiceImpl 中的角色菜单更新逻辑 - 新增 RoleMenuRepository 中的按角色 ID 删除菜单关联的方法 - 优化了 UserServiceImpl 中的用户角色更新逻辑 - 调整了 SpringSecurityConfig 中的最大会话数限制 --- .../security/SpringSecurityConfig.java | 4 ++-- .../dify/controller/PPTController.java | 19 +++++++++++++++ .../dify/controller/Spider2Controller.java | 23 +++++++++++++++---- .../dify/controller/WordController.java | 14 +++++++++++ .../service/Impl/AppEntityServiceImpl.java | 8 +++++++ .../system/controller/UserController.java | 2 +- .../dify/modules/system/entity/UserRole.java | 1 + .../system/repo/RoleMenuRepository.java | 4 ++++ .../system/service/impl/RoleServiceImpl.java | 15 ++++-------- .../system/service/impl/UserServiceImpl.java | 10 +++----- 10 files changed, 75 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/zsc/edu/dify/framework/security/SpringSecurityConfig.java b/src/main/java/com/zsc/edu/dify/framework/security/SpringSecurityConfig.java index 2adebbe..202872e 100644 --- a/src/main/java/com/zsc/edu/dify/framework/security/SpringSecurityConfig.java +++ b/src/main/java/com/zsc/edu/dify/framework/security/SpringSecurityConfig.java @@ -18,6 +18,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl; import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; import org.springframework.security.web.context.HttpSessionSecurityContextRepository; +import org.springframework.security.web.session.HttpSessionEventPublisher; import javax.sql.DataSource; @@ -141,10 +142,9 @@ public class SpringSecurityConfig { .tokenRepository(persistentTokenRepository())) .csrf(csrf -> csrf.ignoringRequestMatchers("v1/**","/api/internal/**", "/api/rest/user/logout","/api/rest/user/register")) .sessionManagement(session -> session - .maximumSessions(3) + .maximumSessions(1) .sessionRegistry(sessionRegistry) .expiredSessionStrategy(customSessionInformationExpiredStrategy)) .build(); - } } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/PPTController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/PPTController.java index 9a8ac64..bdd7fba 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/PPTController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/PPTController.java @@ -1,7 +1,10 @@ package com.zsc.edu.dify.modules.dify.controller; import com.zsc.edu.dify.exception.ExceptionUtil; +import com.zsc.edu.dify.framework.mybatisplus.DataPermission; import com.zsc.edu.dify.framework.security.SecurityUtil; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; +import com.zsc.edu.dify.modules.dify.service.AppEntityService; import com.zsc.edu.dify.modules.dify.service.DifyWorkflowService; import com.zsc.edu.dify.modules.operationLog.entity.OperationLogAnnotation; import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowRunRequest; @@ -10,6 +13,8 @@ import jakarta.annotation.Resource; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/ppt") public class PPTController { @@ -17,6 +22,9 @@ public class PPTController { @Resource private DifyWorkflowService difyWorkflowService; + @Resource + private AppEntityService appEntityService; + /** * 运行从可研申报书生成科技项目PPT_工作流 * @@ -29,4 +37,15 @@ public class PPTController { request.setUserId(SecurityUtil.getUserInfo().id.toString()); return ExceptionUtil.difyException(() -> difyWorkflowService.run(request, "ee3889b6-50fa-463e-b956-3b93447727fc")); } + + /** + * 根据appType获取应用列表 + * @return + */ + @GetMapping("/apps") + @DataPermission + public List getAppsByAppType(){ + return appEntityService.selectByAppType(AppEntity.AppType.PPT.getValue()); + } + } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/Spider2Controller.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/Spider2Controller.java index 4ee9075..c9f6c5a 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/Spider2Controller.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/Spider2Controller.java @@ -1,17 +1,19 @@ package com.zsc.edu.dify.modules.dify.controller; import com.zsc.edu.dify.exception.ExceptionUtil; +import com.zsc.edu.dify.framework.mybatisplus.DataPermission; import com.zsc.edu.dify.framework.security.SecurityUtil; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; +import com.zsc.edu.dify.modules.dify.service.AppEntityService; import com.zsc.edu.dify.modules.dify.service.DifyWorkflowService; import com.zsc.edu.dify.modules.operationLog.entity.OperationLogAnnotation; import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowRunRequest; import io.github.guoshiqiufeng.dify.workflow.dto.response.WorkflowRunResponse; import jakarta.annotation.Resource; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequestMapping("/api/spider2") @@ -19,6 +21,9 @@ public class Spider2Controller { @Resource private DifyWorkflowService difyWorkflowService; + @Resource + private AppEntityService appEntityService; + /** * 运行广州公共资源交易中心 招标小助手 * @@ -31,4 +36,14 @@ public class Spider2Controller { request.setUserId(SecurityUtil.getUserInfo().id.toString()); return ExceptionUtil.difyException(() -> difyWorkflowService.run(request, "c736edd0-925d-4877-9223-56aab7342311")); } + + /** + * 根据appType获取应用列表 + * @return + */ + @GetMapping("/apps") + @DataPermission + public List getAppsByAppType(){ + return appEntityService.selectByAppType(AppEntity.AppType.SCRAPER.getValue()); + } } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/WordController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/WordController.java index 010b6d3..4908420 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/WordController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/WordController.java @@ -1,7 +1,9 @@ package com.zsc.edu.dify.modules.dify.controller; import com.zsc.edu.dify.exception.ExceptionUtil; +import com.zsc.edu.dify.framework.mybatisplus.DataPermission; import com.zsc.edu.dify.framework.security.SecurityUtil; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; import com.zsc.edu.dify.modules.dify.service.AppEntityService; import com.zsc.edu.dify.modules.operationLog.entity.OperationLogAnnotation; import io.github.guoshiqiufeng.dify.chat.DifyChat; @@ -11,6 +13,8 @@ import jakarta.annotation.Resource; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/word") public class WordController { @@ -34,4 +38,14 @@ public class WordController { sendRequest.setUserId(SecurityUtil.getUserInfo().id.toString()); return ExceptionUtil.difyException(()->difyChat.send(sendRequest)); } + + /** + * 根据appType获取应用列表 + * @return + */ + @GetMapping("/apps") + @DataPermission + public List getAppsByAppType(){ + return appEntityService.selectByAppType(AppEntity.AppType.WORD.getValue()); + } } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/AppEntityServiceImpl.java b/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/AppEntityServiceImpl.java index c07759a..2cdc6a2 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/AppEntityServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/AppEntityServiceImpl.java @@ -103,3 +103,11 @@ public class AppEntityServiceImpl extends ServiceImpl { @Select("select * from sys_role_menu where role_id = #{id}") List findByRoleId(@Param("id") Long id); + + @Delete("delete from sys_role_menu where role_id = #{id}") + int deleteByRoleId(@Param("id") Long id); } diff --git a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java index a6c3890..dd495e9 100644 --- a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java @@ -92,21 +92,14 @@ public class RoleServiceImpl extends ServiceImpl implement selectyRole.setRemark(dto.getRemark()); updateById(selectyRole); if (dto.getMenuIds() != null && !dto.getMenuIds().isEmpty()) { - // 查询当前角色已有的菜单权限 - List existingRoleMenus = roleMenuRepository.findByRoleId(id); - Set existingMenuIds = existingRoleMenus.stream() - .map(RoleMenu::getMenuId) - .collect(Collectors.toSet()); - - // 筛选出不存在的菜单ID组合进行插入 + // 删除已有的菜单 + roleMenuRepository.deleteByRoleId(id); List roleMenusToInsert = dto.getMenuIds().stream() - .filter(menuId -> !existingMenuIds.contains(menuId)) .map(menuId -> new RoleMenu(id, menuId)) .collect(Collectors.toList()); + // 插入新的关联菜单 + roleMenuRepository.insert(roleMenusToInsert); - if (!roleMenusToInsert.isEmpty()) { - roleMenuRepository.insert(roleMenusToInsert); - } } return selectyRole; } diff --git a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java index dfdd1df..7bddba1 100644 --- a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/UserServiceImpl.java @@ -148,7 +148,8 @@ public class UserServiceImpl extends ServiceImpl implement throw new ConstraintException("角色不存在"); } UserDetailsImpl userDetails = SecurityUtil.getUserInfo(); - boolean updated = lambdaUpdate().eq(User::getId, userDetails.getId()) + boolean updated = lambdaUpdate() + .eq(User::getId, userDetails.getId()) .set(User::getRoleId, roleId) .update(); userDetails.setRole(role); @@ -164,12 +165,7 @@ public class UserServiceImpl extends ServiceImpl implement public Boolean addUserRole(List roleIds, Long userId) { List userRoles = roleIds.stream() - .map(roleId -> { - UserRole userRole = new UserRole(); - userRole.setUserId(userId); - userRole.setRoleId(roleId); - return userRole; - }) + .map(roleId -> new UserRole(userId, roleId)) .collect(Collectors.toList()); userRolesRepository.insert(userRoles); return true;