From b4d5584f9b619f6e4f2005f5c626536932056a08 Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Fri, 25 Apr 2025 19:34:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor(dify):=20=E9=87=8D=E6=9E=84=E5=AE=9E?= =?UTF-8?q?=E4=BD=93=E7=B1=BB=E5=92=8C=E6=8E=A5=E5=8F=A3=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 AppsResponse 重命名为 AppEntity- 将 AppsResponseMapper 重命名为 AppEntityMapper - 将 AppsResponseRepository 重命名为 AppEntityRepository - 更新了相关服务和控制器中的类和方法名称 - 调整了部分代码结构以适应新的命名 --- .../dify/controller/V1ChatController.java | 27 +++++----------- .../dify/controller/V1DatasetController.java | 10 +++--- .../dify/controller/V1ServerController.java | 11 +++++++ .../dify/controller/V1WorkflowController.java | 7 ++-- .../{AppsResponse.java => AppEntity.java} | 24 ++++++++++++-- ...sponseMapper.java => AppEntityMapper.java} | 4 +-- .../dify/repo/AppEntityRepository.java | 11 +++++++ .../dify/repo/AppsResponseRepository.java | 7 ---- .../dify/service/DifyServerService.java | 5 +-- .../service/Impl/DifyServerServiceImpl.java | 32 +++++++++++++------ src/main/resources/application-dev.yml | 4 +-- 11 files changed, 93 insertions(+), 49 deletions(-) rename src/main/java/com/zsc/edu/dify/modules/dify/entity/{AppsResponse.java => AppEntity.java} (56%) rename src/main/java/com/zsc/edu/dify/modules/dify/mapper/{AppsResponseMapper.java => AppEntityMapper.java} (69%) create mode 100644 src/main/java/com/zsc/edu/dify/modules/dify/repo/AppEntityRepository.java delete mode 100644 src/main/java/com/zsc/edu/dify/modules/dify/repo/AppsResponseRepository.java 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 de7f401..a150897 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,14 +1,12 @@ package com.zsc.edu.dify.modules.dify.controller; -import com.zsc.edu.dify.modules.dify.service.DifyServerService; +import com.zsc.edu.dify.modules.dify.repo.AppEntityRepository; 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; -import io.github.guoshiqiufeng.dify.chat.dto.request.MessagesRequest; import io.github.guoshiqiufeng.dify.chat.dto.response.ChatMessageSendCompletionResponse; import io.github.guoshiqiufeng.dify.chat.dto.response.MessageConversationsResponse; import io.github.guoshiqiufeng.dify.core.pojo.DifyPageResult; -import io.github.guoshiqiufeng.dify.core.pojo.response.MessagesResponseVO; import jakarta.annotation.Resource; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -25,6 +23,8 @@ public class V1ChatController { @Resource private DifyChat difyChat; + @Resource + private AppEntityRepository appEntityRepository; /** * 发送消息(流式) @@ -33,8 +33,9 @@ public class V1ChatController { * 用户 id可以改为从上下文(token)获取, * apikey 建议在数据库进行存储,前端调用时传智能体 id,从数据库查询 */ - @PostMapping(value = "/completions", produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux sendChatMessageStream(@RequestBody ChatMessageSendRequest sendRequest) { + @PostMapping(value = "/completions/{appId}", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux sendChatMessageStream(@RequestBody ChatMessageSendRequest sendRequest,@PathVariable String appId) { + sendRequest.setApiKey(appEntityRepository.selectApiKey(appId)); return difyChat.sendChatMessageStream(sendRequest); } @@ -44,7 +45,7 @@ public class V1ChatController { * @param request 请求参数 * @return 会话列表 */ - @GetMapping("/conversations") + @PostMapping("/conversations") public DifyPageResult conversations(@RequestBody MessageConversationsRequest request) { request.setApiKey("app-mM2UGTE5QVPLCwGvwifnV0g7"); return difyChat.conversations(request); @@ -56,23 +57,11 @@ public class V1ChatController { * @param taskId 任务id * @param userId 用户id */ - @GetMapping("/stopMessagesStream") + @PatchMapping("/stopMessagesStream") public void stopMessagesStream( String taskId, String userId) { difyChat.stopMessagesStream("app-mM2UGTE5QVPLCwGvwifnV0g7", taskId, userId); } - /** - * 获取消息列表 - * - * @param request 请求参数 - * @return 消息列表 - */ - @GetMapping("/messages") - public DifyPageResult messages(@RequestBody MessagesRequest request) { - request.setApiKey("app-mM2UGTE5QVPLCwGvwifnV0g7"); - return difyChat.messages(request); - } - /** * 删除会话 * diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1DatasetController.java b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1DatasetController.java index 594cf5e..8954bbc 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1DatasetController.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/controller/V1DatasetController.java @@ -19,8 +19,9 @@ public class V1DatasetController { * @param request * @return */ - @GetMapping("/page") + @PostMapping("/page") public DifyPageResult page(@RequestBody DatasetPageRequest request){ + request.setApiKey("dataset-kN5WTJ8jR877YfN1A34JceVg"); return difyDataset.page(request); } @@ -30,8 +31,8 @@ public class V1DatasetController { * @param request * @return */ - @GetMapping("/createDocumentByFile") - public DocumentCreateResponse createDocumentByFile(@RequestBody DocumentCreateByFileRequest request){ + @PostMapping("/createDocumentByFile") + public DocumentCreateResponse createDocumentByFile(DocumentCreateByFileRequest request){ return difyDataset.createDocumentByFile(request); } @@ -43,6 +44,7 @@ public class V1DatasetController { */ @GetMapping("/pageDocument") public DifyPageResult pageDocument(@RequestBody DatasetPageDocumentRequest request){ + request.setApiKey("dataset-kN5WTJ8jR877YfN1A34JceVg"); return difyDataset.pageDocument(request); } @@ -55,7 +57,7 @@ public class V1DatasetController { */ @PostMapping("/uploadFileInfo") public UploadFileInfoResponse uploadFileInfo(String datasetId, String documentId){ - return difyDataset.uploadFileInfo(datasetId, documentId,"app-mM2UGTE5QVPLCwGvwifnV0g7"); + return difyDataset.uploadFileInfo(datasetId, documentId,"dataset-kN5WTJ8jR877YfN1A34JceVg"); } /** 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 a070c5c..85ddf32 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 @@ -1,5 +1,7 @@ package com.zsc.edu.dify.modules.dify.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; import com.zsc.edu.dify.modules.dify.service.DifyServerService; import io.github.guoshiqiufeng.dify.server.DifyServer; import io.github.guoshiqiufeng.dify.server.dto.response.ApiKeyResponseVO; @@ -78,4 +80,13 @@ public class V1ServerController { public List initDatasetApiKey() { return difyServer.initDatasetApiKey(); } + + /** + * + */ + @PostMapping("/app/{id}") + public boolean enabledApp(@PathVariable("id") String id) { + return true; + } + } 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 9f15e8d..a73b3a4 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 @@ -24,6 +24,7 @@ public class V1WorkflowController { */ @PostMapping("/run") public WorkflowRunResponse runWorkflow(@RequestBody WorkflowRunRequest request) { + request.setApiKey("app-ZpkQM6yy767oUTfNSBYq65nB"); return difyWorkflow.runWorkflow(request); } @@ -35,6 +36,7 @@ public class V1WorkflowController { */ @PostMapping("/run/stream") public Flux runWorkflowStream(@RequestBody WorkflowRunRequest request) { + request.setApiKey("app-ZpkQM6yy767oUTfNSBYq65nB"); return difyWorkflow.runWorkflowStream(request); } @@ -58,7 +60,7 @@ public class V1WorkflowController { */ @GetMapping("/info") public WorkflowInfoResponse info(String workflowRunId) { - return difyWorkflow.info(workflowRunId, "app-mM2UGTE5QVPLCwGvwifnV0g7"); + return difyWorkflow.info(workflowRunId, "app-ZpkQM6yy767oUTfNSBYq65nB"); } /** @@ -67,8 +69,9 @@ public class V1WorkflowController { * @param request * @return */ - @GetMapping("/logs") + @PostMapping("/logs") public DifyPageResult logs(@RequestBody WorkflowLogsRequest request) { + request.setApiKey("app-ZpkQM6yy767oUTfNSBYq65nB"); return difyWorkflow.logs(request); } } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppsResponse.java b/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java similarity index 56% rename from src/main/java/com/zsc/edu/dify/modules/dify/entity/AppsResponse.java rename to src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java index 980902a..9324f6e 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppsResponse.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/entity/AppEntity.java @@ -3,6 +3,7 @@ package com.zsc.edu.dify.modules.dify.entity; 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.*; @@ -11,11 +12,15 @@ import java.util.Map; /** * @author zhuang + * + * */ +@EqualsAndHashCode(callSuper = true) @Getter @Setter -@TableName("apps_response") -public class AppsResponse extends AppsResponseVO { +@Data +@TableName("apps_entity") +public class AppEntity extends AppsResponseVO { @TableField(typeHandler = JsonbTypeHandler.class) private Map modelConfig; @@ -26,4 +31,19 @@ public class AppsResponse extends AppsResponseVO { @TableField(typeHandler = JsonbTypeHandler.class) private List tags; + @TableField(typeHandler = JsonbTypeHandler.class) + private Map site; + + @TableField(typeHandler = JsonbTypeHandler.class) + private List deletedTools; + + private boolean enabled; + + private String apiKey; + /** + * 子菜单 + */ + @TableField(exist = false) + private List children = null; + } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/mapper/AppsResponseMapper.java b/src/main/java/com/zsc/edu/dify/modules/dify/mapper/AppEntityMapper.java similarity index 69% rename from src/main/java/com/zsc/edu/dify/modules/dify/mapper/AppsResponseMapper.java rename to src/main/java/com/zsc/edu/dify/modules/dify/mapper/AppEntityMapper.java index 3b9b13a..5ee8024 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/mapper/AppsResponseMapper.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/mapper/AppEntityMapper.java @@ -1,11 +1,11 @@ package com.zsc.edu.dify.modules.dify.mapper; import com.zsc.edu.dify.common.mapstruct.BaseMapper; -import com.zsc.edu.dify.modules.dify.entity.AppsResponse; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO; import org.mapstruct.Mapper; import org.mapstruct.ReportingPolicy; @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) -public interface AppsResponseMapper extends BaseMapper { +public interface AppEntityMapper extends BaseMapper { } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/repo/AppEntityRepository.java b/src/main/java/com/zsc/edu/dify/modules/dify/repo/AppEntityRepository.java new file mode 100644 index 0000000..4cb1182 --- /dev/null +++ b/src/main/java/com/zsc/edu/dify/modules/dify/repo/AppEntityRepository.java @@ -0,0 +1,11 @@ +package com.zsc.edu.dify.modules.dify.repo; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; +import org.apache.ibatis.annotations.Select; + +public interface AppEntityRepository extends BaseMapper { + + @Select("select api_key from apps_entity where id = #{appId}") + String selectApiKey(String appId); +} diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/repo/AppsResponseRepository.java b/src/main/java/com/zsc/edu/dify/modules/dify/repo/AppsResponseRepository.java deleted file mode 100644 index 20c93d2..0000000 --- a/src/main/java/com/zsc/edu/dify/modules/dify/repo/AppsResponseRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.zsc.edu.dify.modules.dify.repo; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.zsc.edu.dify.modules.dify.entity.AppsResponse; - -public interface AppsResponseRepository extends BaseMapper { -} diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyServerService.java b/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyServerService.java index 7e186ec..4c06b5b 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyServerService.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/service/DifyServerService.java @@ -1,11 +1,12 @@ package com.zsc.edu.dify.modules.dify.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.zsc.edu.dify.modules.dify.entity.AppsResponse; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO; import java.util.List; -public interface DifyServerService extends IService { +public interface DifyServerService extends IService { List getApps(String mode, String name); + } diff --git a/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/DifyServerServiceImpl.java b/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/DifyServerServiceImpl.java index 44efda6..88a0367 100644 --- a/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/DifyServerServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/modules/dify/service/Impl/DifyServerServiceImpl.java @@ -3,26 +3,29 @@ 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.modules.dify.entity.AppsResponse; -import com.zsc.edu.dify.modules.dify.mapper.AppsResponseMapper; -import com.zsc.edu.dify.modules.dify.repo.AppsResponseRepository; +import com.zsc.edu.dify.common.util.TreeUtil; +import com.zsc.edu.dify.exception.ConstraintException; +import com.zsc.edu.dify.modules.dify.entity.AppEntity; +import com.zsc.edu.dify.modules.dify.mapper.AppEntityMapper; +import com.zsc.edu.dify.modules.dify.repo.AppEntityRepository; import com.zsc.edu.dify.modules.dify.service.DifyServerService; import io.github.guoshiqiufeng.dify.server.DifyServer; +import io.github.guoshiqiufeng.dify.server.dto.response.ApiKeyResponseVO; import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO; import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.*; /** * @author zhuang */ @AllArgsConstructor @Service -public class DifyServerServiceImpl extends ServiceImpl implements DifyServerService { +public class DifyServerServiceImpl extends ServiceImpl implements DifyServerService { @Resource - private AppsResponseMapper appsResponseMapper; + private AppEntityMapper appEntityMapper; @Resource private DifyServer difyServer; @@ -33,14 +36,25 @@ public class DifyServerServiceImpl extends ServiceImpl addApps(List appsResponseList) { for(AppsResponseVO appsResponse : appsResponseList){ - boolean isHave = baseMapper.exists(new QueryWrapper().eq("id", appsResponse.getId())); + boolean isHave = baseMapper.exists(new QueryWrapper().eq("id", appsResponse.getId())); if(!isHave){ - baseMapper.insert(appsResponseMapper.toEntity(appsResponse)); + AppEntity appEntity = appEntityMapper.toEntity(appsResponse); + baseMapper.insert(appEntity); + List apiKeyList =difyServer.getAppApiKey(appsResponse.getId()); + if (apiKeyList != null) { + difyServer.initAppApiKey(appsResponse.getId()); + Optional apiKeyResponseVO = apiKeyList.stream() + .filter(apiKey -> apiKey.getToken() != null) + .findFirst(); + apiKeyResponseVO.ifPresent(apiKey -> appEntity.setApiKey(apiKey.getToken())); + } + baseMapper.updateById(appEntity); }else{ - baseMapper.updateById(appsResponseMapper.toEntity(appsResponse)); + baseMapper.updateById(appEntityMapper.toEntity(appsResponse)); } } return appsResponseList; } + } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 08fbf0c..ecbe385 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -63,5 +63,5 @@ dify: server: email: 2913129173@qq.com # 请替换为实际的 Dify 服务邮箱,若不需要调用 server相关接口可不填 password: tian14384, # 请替换为实际的 Dify 服务密码,若不需要调用 server相关接口可不填 -# dataset: -# api-key: dataset-kN5WTJ8jR877YfN1A34JceVg # 请替换为实际的知识库api-key, 若不需要调用知识库可不填 \ No newline at end of file + dataset: + api-key: dataset-kN5WTJ8jR877YfN1A34JceVg # 请替换为实际的知识库api-key, 若不需要调用知识库可不填 \ No newline at end of file