From 6cf9e2a3fd4c321f5ec90df6ddfc4729ce0a573d Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Tue, 13 May 2025 21:03:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(dify):=20=E5=A2=9E=E5=8A=A0=E5=9F=BA?= =?UTF-8?q?=E4=BA=8E=20appType=20=E7=9A=84=E5=BA=94=E7=94=A8=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 AppEntity 中添加 AppType 枚举字段,用于区分不同类型的 app - 在 AppEntityService 中新增 getAppsByAppType 方法,根据 appType 获取应用列表 - 在 AppEntityServiceImpl 中实现 getAppsByAppType 方法,使用 LambdaQueryWrapper 进行查询 - 在 V1ServerController 中添加 getAppsByAppType 接口,提供基于 appType 的应用列表查询 - 优化 ExceptionUtil 中的异常处理,统一使用 difyException 方法处理异常- 在 V1ChatController 和V1WorkflowController 中使用新的 difyException 方法处理异常 - 移除 MybatisPlusConfig 中未使用的代码,简化配置 --- .../zsc/edu/dify/exception/ExceptionUtil.java | 10 +--------- .../mybatisplus/MybatisPlusConfig.java | 10 ---------- .../dify/controller/V1ChatController.java | 20 ++++++++++++++++--- .../dify/controller/V1ServerController.java | 11 ++++++++++ .../dify/controller/V1WorkflowController.java | 3 ++- .../dify/modules/dify/entity/AppEntity.java | 20 ++++++++++++++++++- .../dify/service/AppEntityService.java | 2 ++ .../service/Impl/AppEntityServiceImpl.java | 13 ++++++++++++ .../dify/service/system/DeptServiceTest.java | 2 +- 9 files changed, 66 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/zsc/edu/dify/exception/ExceptionUtil.java b/src/main/java/com/zsc/edu/dify/exception/ExceptionUtil.java index 8146fb6..36d468a 100644 --- a/src/main/java/com/zsc/edu/dify/exception/ExceptionUtil.java +++ b/src/main/java/com/zsc/edu/dify/exception/ExceptionUtil.java @@ -12,16 +12,8 @@ public class ExceptionUtil { return supplier.get(); } catch (RuntimeException e) { System.err.println(e.getMessage()); - throw new ApiException("服务器错误,请联系工作人员!"); + throw new ApiException("出现错误,请联系工作人员!报错信息:"+e.getMessage()); } } - public static T difyNotFoundException(Supplier supplier) throws ApiException { - try { - return supplier.get(); - } catch (RuntimeException e) { - System.err.println(e.getMessage()); - throw new ApiException("数据不存在,请检查传递参数是否错误!"); - } - } } diff --git a/src/main/java/com/zsc/edu/dify/framework/mybatisplus/MybatisPlusConfig.java b/src/main/java/com/zsc/edu/dify/framework/mybatisplus/MybatisPlusConfig.java index e04477b..d84cf07 100644 --- a/src/main/java/com/zsc/edu/dify/framework/mybatisplus/MybatisPlusConfig.java +++ b/src/main/java/com/zsc/edu/dify/framework/mybatisplus/MybatisPlusConfig.java @@ -4,20 +4,10 @@ import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import jakarta.activation.DataSource; -import jakarta.annotation.Resource; -import org.apache.ibatis.session.ExecutorType; -import org.mybatis.spring.SqlSessionFactoryBean; -import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import javax.naming.Context; -import javax.naming.InitialContext; /** * @author Yao diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java index f6c19fb..bd493c3 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ChatController.java @@ -1,11 +1,10 @@ package com.zsc.edu.dify.modules.dify.controller; +import com.zsc.edu.dify.exception.ApiException; 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.service.AppEntityService; import com.zsc.edu.dify.modules.operationLog.entity.OperationLogAnnotation; -import com.zsc.edu.dify.modules.system.service.UserService; import io.github.guoshiqiufeng.dify.chat.DifyChat; import io.github.guoshiqiufeng.dify.chat.dto.request.ChatMessageSendRequest; import io.github.guoshiqiufeng.dify.chat.dto.request.MessageConversationsRequest; @@ -21,6 +20,9 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; +import java.util.List; +import java.util.function.Supplier; + /** * @author yanghq * @version 1.0 @@ -132,5 +134,17 @@ public class V1ChatController { difyChat.deleteConversation(conversationId, apiKey,userId); } - + /** + * 获取会话建议 + * @param messageId + * @param appId + * @return + */ + @GetMapping("/messages/suggested") + @PreAuthorize("hasAuthority('dify:chat:query')") + public List messagesSuggested(String messageId,String appId){ + String apiKey = appEntityService.getApikey(appId); + String userId = SecurityUtil.getUserInfo().id.toString(); + return ExceptionUtil.difyException(()->difyChat.messagesSuggested(messageId,apiKey,userId)); + } } \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ServerController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ServerController.java index 871b84a..a6ac2de 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ServerController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1ServerController.java @@ -116,4 +116,15 @@ public class V1ServerController { return appEntityService.list(queryWrapper); } + /** + * 根据appType获取应用列表 + * @param appType + * @return + */ + @GetMapping("/apps/type") + @PreAuthorize("hasAuthority('dify:server:query')") + @DataPermission + public List getAppsByAppType(Integer appType){ + return appEntityService.getAppsByAppType(appType); + } } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java index 177268e..6835c7f 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1WorkflowController.java @@ -81,7 +81,7 @@ public class V1WorkflowController { @PreAuthorize("hasAuthority('dify:workflow:info')") public WorkflowInfoResponse info(String workflowRunId, @PathVariable String appId) { String apiKey =appEntityService.getApikey(appId); - return ExceptionUtil.difyNotFoundException(() -> difyWorkflow.info(workflowRunId, apiKey)); + return ExceptionUtil.difyException(() -> difyWorkflow.info(workflowRunId, apiKey)); } /** @@ -110,4 +110,5 @@ public class V1WorkflowController { public List list(@PathVariable String appId){ return difyWorkflowService.list(new QueryWrapper().eq("app_id",appId)); } + } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java b/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java index c98c04f..cbaedbb 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java @@ -1,10 +1,10 @@ package com.zsc.edu.dify.modules.dify.entity; import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.zsc.edu.dify.framework.json.JsonbTypeHandler; -import com.zsc.edu.dify.modules.system.vo.MenuVo; import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO; import lombok.*; @@ -52,4 +52,22 @@ public class AppEntity extends AppsResponseVO { @TableField(value = "dept_id", fill = FieldFill.INSERT) private Long deptId; + + private AppType appType; + + public enum AppType implements IEnum{ + WORD(1), + PPT(2), + SCRAPER(3); + + private final Integer value; + + AppType(int value) { + this.value=value; + } + @Override + public Integer getValue() { + return this.value; + } + } } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/service/AppEntityService.java b/src/main/java/com/zsc/edu/dify/modules/dify/service/AppEntityService.java index b0cb47d..d0891a8 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/service/AppEntityService.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/service/AppEntityService.java @@ -12,4 +12,6 @@ public interface AppEntityService extends IService { boolean enabledApp(String id); String getApikey(String appId); + + List getAppsByAppType(Integer appType); } 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 77e1623..d7b6fd1 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 @@ -1,5 +1,6 @@ package com.zsc.edu.dify.modules.dify.service.Impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsc.edu.dify.exception.ConstraintException; @@ -90,4 +91,16 @@ public class AppEntityServiceImpl extends ServiceImpl getAppsByAppType(Integer appType) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppEntity::getAppType, appType).eq(AppEntity::isEnabled, true); + return this.list(queryWrapper); + } + } diff --git a/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java b/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java index b556463..f617067 100644 --- a/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java +++ b/src/test/java/com/zsc/edu/dify/service/system/DeptServiceTest.java @@ -94,7 +94,7 @@ class DeptServiceTest { // 不能改为其他已存在的同名同代码部门 assertThrows(ConstraintException.class, () -> service.edit( - new DeptDto(dept3.getName(), "remark",null), dept2.id)); + new DeptDto(dept3.getName(), true,null, dept3.id), dept2.id)); }