zero 4 月之前
父節點
當前提交
bc7130da60

+ 19 - 0
src/main/java/cn/cslg/pas/common/model/dify/OAMessageDTO.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.common.model.dify;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class OAMessageDTO {
+    @SerializedName("response_mode")
+    private String responseMode;
+    @JsonProperty("user")
+    private String user;
+
+    private Map<String,Object> inputs;
+    private List<DifyFile> files;
+}

+ 7 - 0
src/main/java/cn/cslg/pas/controller/outApi/DifyController.java

@@ -4,6 +4,7 @@ import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.model.dify.ChatMessageDTO;
 import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
 import cn.cslg.pas.common.model.dify.DifyHistoryMessageDTO;
+import cn.cslg.pas.common.model.dify.OAMessageDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.Response;
@@ -86,4 +87,10 @@ public class DifyController {
     public Response generateInventionPoint(@RequestBody ChatMessageDTO chatMessageDTO) throws IOException {
         return Response.success(difyService.generateInventionPoint(chatMessageDTO));
     }
+
+    @RequestMapping(value = "/sendOADefense", method = RequestMethod.POST, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+    @Operation(summary = "OA答辩")
+    public Flux<String> sendOADefense(@RequestBody String guid) throws IOException {
+        return difyService.successGetOAHttp(guid);
+    }
 }

+ 93 - 3
src/main/java/cn/cslg/pas/service/common/DifyService.java

@@ -1,9 +1,7 @@
 package cn.cslg.pas.service.common;
 
 
-import cn.cslg.pas.common.model.dify.ChatMessageDTO;
-import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
-import cn.cslg.pas.common.model.dify.DifyHistoryMessageDTO;
+import cn.cslg.pas.common.model.dify.*;
 
 import cn.cslg.pas.common.model.dify.confessionSession.UpdateConfessionSessionDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
@@ -18,6 +16,7 @@ import cn.cslg.pas.service.dify.DifySessionService;
 import cn.cslg.pas.service.report.AssoProjectConfessionService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
@@ -25,13 +24,16 @@ import com.google.gson.GsonBuilder;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.w3c.dom.DocumentType;
 import reactor.core.publisher.Flux;
 
+import javax.swing.text.Document;
 import java.io.*;
 
 
@@ -54,6 +56,8 @@ import java.util.concurrent.TimeUnit;
 public class DifyService {
     @Value("${DIFY.apiKey}")
     private String apiKey;
+    @Value("${DIFY.OAApiKey}")
+    private String OAApiKey;
     @Value("${DIFY.url}")
     private String url;
     @Value("${FileDownloadUrl}")
@@ -314,4 +318,90 @@ public class DifyService {
         map1.put("confessionSessionId",confessionSessionId);
         return map1;
     }
+
+
+    public Flux<String> successGetOAHttp(String guid) {
+        String fileUrl = fileDownloadUrl + guid;
+        String userId = loginUtils.getId().toString();
+
+        OkHttpClient client = new OkHttpClient.Builder()
+                .connectTimeout(600, TimeUnit.SECONDS)
+                .writeTimeout(600, TimeUnit.SECONDS)
+                .readTimeout(600, TimeUnit.SECONDS)
+                .build();
+
+        Map<String, Object> map = new HashMap<>();
+        DifyFile difyFile = new DifyFile();
+        difyFile.setTransferMethod("remote_url");
+        difyFile.setType("document");
+        difyFile.setUrl(fileUrl);
+        map.put("file", difyFile);
+
+        OAMessageDTO oaMessageDTO = new OAMessageDTO();
+        oaMessageDTO.setInputs(map);
+        oaMessageDTO.setResponseMode("streaming");
+        oaMessageDTO.setUser(userId);
+        oaMessageDTO.setFiles(new ArrayList<>());
+
+        String param = new Gson().toJson(oaMessageDTO);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        Request request = new Request.Builder()
+                .url(url + "workflows/run")
+                .addHeader("Authorization", "Bearer " + OAApiKey)
+                .addHeader(HttpHeaders.CONTENT_TYPE, "application/json")
+                .post(requestBody)
+                .build();
+        return Flux.create(emitter -> {
+            client.newCall(request).enqueue(new Callback() {
+                @Override
+                public void onFailure(Call call, IOException e) {
+                    emitter.error(e);
+                }
+
+                @Override
+                public void onResponse(Call call, Response response) throws IOException {
+
+                    if (!response.isSuccessful()) {
+                        emitter.error(new IOException("Unexpected code: " + response));
+                        return;
+                    }
+
+                    try (Reader reader = response.body().charStream()) {
+                        BufferedReader bufferedReader = new BufferedReader(reader);
+                        String line;
+                        String prefixToRemove = "data: ";
+                        while ((line = bufferedReader.readLine()) != null) {
+                            if (line.isEmpty()) {
+                                continue;
+                            }
+                            if (line.startsWith(prefixToRemove)) {
+                                line = line.substring(prefixToRemove.length());
+                            }
+                            try {
+                                JSONObject jsonObject = JSON.parseObject(line);
+                                String workflowRunId = jsonObject.get("workflow_run_id").toString();
+                                if (workflowRunId != null) {
+                                    ConfessionSession session = confessionSessionService.getOne(new LambdaQueryWrapper<ConfessionSession>()
+                                            .eq(ConfessionSession::getConversationId, workflowRunId));
+                                    if (ObjectUtils.isEmpty(session)) {
+                                        ConfessionSession confessionSession = new ConfessionSession();
+                                        confessionSession.setConversationId(workflowRunId);
+                                        confessionSession.setCreateId(userId);
+                                        confessionSession.setGuid(guid);
+                                        confessionSession.insert();
+                                    }
+                                }
+                            } catch (Exception e) {
+                            }
+                            emitter.next(line); // 将每行数据发送到 Flux
+                        }
+                    } catch (IOException e) {
+                        emitter.error(e);
+                    } finally {
+                        emitter.complete();
+                    }
+                }
+            });
+        });
+    }
 }

+ 1 - 0
src/main/resources/application-dev.yml

@@ -87,4 +87,5 @@ management:
       show-details: always
 DIFY:
   apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
+  OAApiKey: app-mmfvVywt7wdS8HofrYpFy4RL
   url: http://192.168.2.24/v1/

+ 1 - 0
src/main/resources/application-prodNetOut.yml

@@ -44,4 +44,5 @@ WDSYS:
   password: Lqftiu807005
 DIFY:
   apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
+  OAApiKey: app-mmfvVywt7wdS8HofrYpFy4RL
   url: http://192.168.2.24/v1/

+ 1 - 0
src/main/resources/application-testNetIn.yml

@@ -79,4 +79,5 @@ WDSYS:
   password: Lqftiu807005
 DIFY:
   apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
+  OAApiKey: app-mmfvVywt7wdS8HofrYpFy4RL
   url: https://xsip.cn/api/fileManager/downloadFile?fileId=