dcs 2 hari lalu
induk
melakukan
ddcb7e4ef3

+ 70 - 9
virgo.api/src/main/java/com/bosshand/virgo/api/workark/service/DifyService.java

@@ -11,11 +11,9 @@ import com.bosshand.virgo.api.workark.util.SseEmitterUtil;
 import com.bosshand.virgo.core.model.UserContext;
 import com.bosshand.virgo.core.utils.ContextUtils;
 import com.bosshand.virgo.core.utils.StringUtil;
-import io.github.imfangs.dify.client.DifyChatClient;
-import io.github.imfangs.dify.client.DifyClientFactory;
-import io.github.imfangs.dify.client.DifyCompletionClient;
-import io.github.imfangs.dify.client.DifyWorkflowClient;
-import io.github.imfangs.dify.client.callback.ChatStreamCallback;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.github.imfangs.dify.client.*;
+import io.github.imfangs.dify.client.callback.ChatflowStreamCallback;
 import io.github.imfangs.dify.client.callback.CompletionStreamCallback;
 import io.github.imfangs.dify.client.callback.WorkflowStreamCallback;
 import io.github.imfangs.dify.client.enums.FileTransferMethod;
@@ -345,7 +343,7 @@ public class DifyService {
         difyChatDao.save(difyChat);
 
         // 创建聊天客户端
-        DifyChatClient chatClient = DifyClientFactory.createChatClient("http://203.110.233.149:9000/v1", difyType.getApiKey());
+        DifyChatflowClient chatClient = DifyClientFactory.createChatWorkflowClient("http://203.110.233.149:9000/v1", difyType.getApiKey());
 
         // 创建聊天消息
         ChatMessage message = ChatMessage.builder()
@@ -402,7 +400,7 @@ public class DifyService {
 
         // 发送流式消息
         try {
-            chatClient.sendChatMessageStream(message, new ChatStreamCallback() {
+            chatClient.sendChatMessageStream(message, new ChatflowStreamCallback() {
                 @Override
                 public void onMessage(MessageEvent event) {
                     //System.out.println("收到消息片段: " + event.getAnswer());
@@ -473,6 +471,31 @@ public class DifyService {
                     difyChatDao.update(difyChat);
                     System.err.println("异常: " + throwable.getMessage());
                 }
+
+                @Override
+                public void onWorkflowStarted(WorkflowStartedEvent event) {
+                    System.out.println("工作流开始: " + event);
+                }
+
+                @Override
+                public void onNodeStarted(NodeStartedEvent event) {
+                    System.out.println("节点开始: " + event);
+                }
+
+                @Override
+                public void onNodeFinished(NodeFinishedEvent event) {
+                    System.out.println("节点完成: " + event);
+                }
+
+                @Override
+                public void onWorkflowFinished(WorkflowFinishedEvent event) {
+                    System.out.println("工作流完成: " + event);
+                }
+
+                @Override
+                public void onPing(PingEvent event) {
+                    System.out.println("心跳: " + event);
+                }
             });
         } catch (IOException e) {
             e.printStackTrace();
@@ -505,7 +528,7 @@ public class DifyService {
         difyChatDao.save(difyChat);
 
         // 创建聊天客户端
-        DifyChatClient chatClient = DifyClientFactory.createChatClient("http://203.110.233.149:9000/v1", difyType.getApiKey());
+        DifyChatflowClient chatClient = DifyClientFactory.createChatWorkflowClient("http://203.110.233.149:9000/v1", difyType.getApiKey());
 
         // 创建聊天消息
         ChatMessage message = ChatMessage.builder()
@@ -561,7 +584,7 @@ public class DifyService {
 
         // 发送流式消息
         try {
-            chatClient.sendChatMessageStream(message, new ChatStreamCallback() {
+                chatClient.sendChatMessageStream(message, new ChatflowStreamCallback() {
                 @Override
                 public void onMessage(MessageEvent event) {
                     //System.out.println("收到消息片段: " + event.getAnswer());
@@ -637,6 +660,34 @@ public class DifyService {
                     difyChatDao.update(difyChat);
                     System.err.println("异常: " + throwable.getMessage());
                 }
+
+                @Override
+                public void onWorkflowStarted(WorkflowStartedEvent event) {
+                    System.out.println("工作流开始: " + event);
+                }
+
+                @Override
+                public void onNodeStarted(NodeStartedEvent event) {
+                    System.out.println("节点开始: " + event.getData());
+                }
+
+                @Override
+                public void onNodeFinished(NodeFinishedEvent event) {
+                    System.out.println("节点完成: " + event.getData());
+                    SseEmitterUtil.sendMessage(simpleUUID, toJson(event.getData()));
+                }
+
+                @Override
+                public void onWorkflowFinished(WorkflowFinishedEvent event) {
+                    System.out.println("工作流完成: " + event);
+                }
+
+                @Override
+                public void onPing(PingEvent event) {
+                    System.out.println("心跳: " + event);
+                    SseEmitterUtil.sendMessage(simpleUUID, event.toString());
+                }
+
             });
         } catch (IOException e) {
             e.printStackTrace();
@@ -647,6 +698,16 @@ public class DifyService {
 
     }
 
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    public static String toJson(Object obj) {
+        try {
+            return mapper.writeValueAsString(obj);
+        } catch (Exception e) {
+            throw new RuntimeException("JSON转换失败", e);
+        }
+    }
+
     public DifyChat getChat(String simpleUUID) {
         return difyChatDao.getSimpleUUID(simpleUUID);
     }