From 80b1745ddc0132b8cb85e81917bc380363034c78 Mon Sep 17 00:00:00 2001 From: wenjinbo <599483010@qq.com> Date: Wed, 3 Sep 2025 15:10:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E9=87=8D=E6=9E=84=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E5=85=BC=E5=AE=B9=E4=B8=80=E4=BA=8B=E4=B8=80?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=95=B0=E6=8D=AE=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bjtds/brichat/entity/chat/ChatTypeVo.java | 7 ++- .../brichat/service/WorkFlowService.java | 9 +++ .../dify/impl/DifyDatasetApiServiceImpl.java | 18 ++++++ .../service/impl/WorkFlowServiceImpl.java | 57 +++++++++++++++++++ .../java/com/bjtds/brichat/RetrievalTest.java | 33 ----------- 5 files changed, 89 insertions(+), 35 deletions(-) create mode 100644 chat-server/src/main/java/com/bjtds/brichat/service/WorkFlowService.java create mode 100644 chat-server/src/main/java/com/bjtds/brichat/service/impl/WorkFlowServiceImpl.java delete mode 100644 chat-server/src/test/java/com/bjtds/brichat/RetrievalTest.java diff --git a/chat-server/src/main/java/com/bjtds/brichat/entity/chat/ChatTypeVo.java b/chat-server/src/main/java/com/bjtds/brichat/entity/chat/ChatTypeVo.java index 2daaee1..150b896 100644 --- a/chat-server/src/main/java/com/bjtds/brichat/entity/chat/ChatTypeVo.java +++ b/chat-server/src/main/java/com/bjtds/brichat/entity/chat/ChatTypeVo.java @@ -22,8 +22,11 @@ public enum ChatTypeVo { emerg(4,"emerg","应急助手问答"), /**诊断代码查询**/ - codeQuery(5,"codeQuery","诊断代码查询"); - ; + codeQuery(5,"codeQuery","诊断代码查询"), + /** + * 一事一流程数据处理 + */ + ysylcDataProc(6,"ysylcDataProc","一事一流程数据处理"); private final int code; private final String name; diff --git a/chat-server/src/main/java/com/bjtds/brichat/service/WorkFlowService.java b/chat-server/src/main/java/com/bjtds/brichat/service/WorkFlowService.java new file mode 100644 index 0000000..8844b17 --- /dev/null +++ b/chat-server/src/main/java/com/bjtds/brichat/service/WorkFlowService.java @@ -0,0 +1,9 @@ +package com.bjtds.brichat.service; + +import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowRunRequest; +import org.springframework.web.multipart.MultipartFile; + +public interface WorkFlowService { + + String runWorkflowByFile(String userId, String apiKey, MultipartFile file); +} diff --git a/chat-server/src/main/java/com/bjtds/brichat/service/dify/impl/DifyDatasetApiServiceImpl.java b/chat-server/src/main/java/com/bjtds/brichat/service/dify/impl/DifyDatasetApiServiceImpl.java index e64fb09..d47e18a 100644 --- a/chat-server/src/main/java/com/bjtds/brichat/service/dify/impl/DifyDatasetApiServiceImpl.java +++ b/chat-server/src/main/java/com/bjtds/brichat/service/dify/impl/DifyDatasetApiServiceImpl.java @@ -12,6 +12,8 @@ import com.bjtds.brichat.mapper.postgresql.DifyDatasetsMapper; import com.bjtds.brichat.mapper.postgresql.DifyUploadFileMapper; import com.bjtds.brichat.service.DatasetsDocService; import com.bjtds.brichat.service.DocAnalysisStrategyService; +import com.bjtds.brichat.service.TApiKeyService; +import com.bjtds.brichat.service.WorkFlowService; import com.bjtds.brichat.service.dify.DifyDatasetApiService; import com.bjtds.brichat.util.Constants; import com.fasterxml.jackson.core.JsonProcessingException; @@ -22,6 +24,8 @@ import io.github.guoshiqiufeng.dify.dataset.dto.request.document.SubChunkSegment import io.github.guoshiqiufeng.dify.dataset.dto.response.DatasetInfoResponse; import io.github.guoshiqiufeng.dify.dataset.dto.response.UploadFileInfoResponse; import io.github.guoshiqiufeng.dify.dataset.enums.document.ParentModeEnum; +import io.github.guoshiqiufeng.dify.workflow.client.DifyWorkflowClient; +import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowRunRequest; import org.apache.commons.io.IOUtils; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.extractor.WordExtractor; @@ -52,6 +56,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.*; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -68,6 +73,13 @@ public class DifyDatasetApiServiceImpl implements DifyDatasetApiService { @Qualifier("redisTemplate") private RedisTemplate redisTemplate; + @Resource + private WorkFlowService workFlowService; + + + @Resource + private TApiKeyService tApiKeyService; + //开源组件 @Resource private DifyDataset difyDatasetService; @@ -548,6 +560,12 @@ public class DifyDatasetApiServiceImpl implements DifyDatasetApiService { List docMetadatas = res.getDocMetadatas(); for (DifyMetadata metadata : docMetadatas) { if (metadata.getName().equals("ysylc_json_url")) { + //异步执行 + CompletableFuture.runAsync(() -> { + String apiKey = tApiKeyService.getApiKeyFromCache("ysylcDataProc"); + workFlowService.runWorkflowByFile(documentId,apiKey,file); + }); + DifyMetadata newMetadata = new DifyMetadata(); newMetadata.setId(metadata.getId()); newMetadata.setType(metadata.getType()); diff --git a/chat-server/src/main/java/com/bjtds/brichat/service/impl/WorkFlowServiceImpl.java b/chat-server/src/main/java/com/bjtds/brichat/service/impl/WorkFlowServiceImpl.java new file mode 100644 index 0000000..506c0e5 --- /dev/null +++ b/chat-server/src/main/java/com/bjtds/brichat/service/impl/WorkFlowServiceImpl.java @@ -0,0 +1,57 @@ +package com.bjtds.brichat.service.impl; + +import com.bjtds.brichat.service.WorkFlowService; +import io.github.guoshiqiufeng.dify.chat.DifyChat; +import io.github.guoshiqiufeng.dify.chat.dto.request.FileUploadRequest; +import io.github.guoshiqiufeng.dify.chat.dto.response.FileUploadResponse; +import io.github.guoshiqiufeng.dify.workflow.DifyWorkflow; +import io.github.guoshiqiufeng.dify.workflow.dto.request.WorkflowRunRequest; +import io.github.guoshiqiufeng.dify.workflow.dto.response.WorkflowRunResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +public class WorkFlowServiceImpl implements WorkFlowService { + + + @Resource + private DifyChat difyChatService; + + @Resource + private DifyWorkflow workflow; + + @Override + public String runWorkflowByFile(String userId, String apiKey, MultipartFile file) { + //1.上传文件 + FileUploadRequest fileUploadRequest = new FileUploadRequest(); + fileUploadRequest.setFile(file); + fileUploadRequest.setUserId(userId); + fileUploadRequest.setApiKey(apiKey); + + FileUploadResponse fileUploadResponse = difyChatService.fileUpload(fileUploadRequest); + log.info("文件上传成功,文件id:{}",fileUploadResponse.getName()); + + //2.运行工作流 + WorkflowRunRequest workflowRunRequest = new WorkflowRunRequest(); + workflowRunRequest.setUserId(userId); + workflowRunRequest.setApiKey(apiKey); + Map filesMap = new HashMap<>(); + filesMap.put("type","document"); + filesMap.put("upload_file_id",fileUploadResponse.getId()); + filesMap.put("transfer_method","local_file"); + filesMap.put("url",""); + Map inputMap = new HashMap<>(); + inputMap.put("files",filesMap); + workflowRunRequest.setInputs(inputMap); + + WorkflowRunResponse workflowRunResponse = workflow.runWorkflow(workflowRunRequest); + log.info("一事一流程工作流运行成功,工作流id:{}",workflowRunResponse.getData()); + + return ""; + } +} diff --git a/chat-server/src/test/java/com/bjtds/brichat/RetrievalTest.java b/chat-server/src/test/java/com/bjtds/brichat/RetrievalTest.java deleted file mode 100644 index d39bde7..0000000 --- a/chat-server/src/test/java/com/bjtds/brichat/RetrievalTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.bjtds.brichat; - -import com.bjtds.brichat.entity.dto.KnowledgeBaseDto; -import com.bjtds.brichat.entity.dto.RecordDto; -import com.bjtds.brichat.util.Constants; -import com.bjtds.brichat.util.RetrievalUtil; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.List; - -@SpringBootTest -public class RetrievalTest { - - RetrievalUtil retrievalUtil; - - - private String difyUrl = "http://192.168.8.253:16780"; - - - private static String apiKey = "dataset-0Hij9IwoWYbJe1vvwVh8y7DS"; - - @Test - public void testRetrieval() throws Exception { - String datasetPath = difyUrl + Constants.DATABASE_API; - KnowledgeBaseDto knowledgeBaseDto = new KnowledgeBaseDto(); - knowledgeBaseDto.setQuery("控制器手柄故障"); - knowledgeBaseDto.setSearchMethod("hybrid_search"); - List recordDtos = retrievalUtil.getRetrieval(datasetPath,apiKey,"bbcce315-d7cb-4b40-85eb-4805070bea4d",knowledgeBaseDto); - System.out.println(recordDtos); - } -}