Переглянути джерело

20250910-理解技术交底书生成结果

lrj 3 тижнів тому
батько
коміт
576abe754b

+ 8 - 0
src/main/java/cn/cslg/pas/common/model/dify/confessionSession/ConfessionSessionDetailDTO.java

@@ -0,0 +1,8 @@
+package cn.cslg.pas.common.model.dify.confessionSession;
+
+import lombok.Data;
+
+@Data
+public class ConfessionSessionDetailDTO {
+    private Integer confessionSessionId;
+}

+ 26 - 0
src/main/java/cn/cslg/pas/common/model/dify/confessionSession/ConfessionSessionDetailVO.java

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.model.dify.confessionSession;
+
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+
+import java.util.Date;
+import java.util.List;
+
+public class ConfessionSessionDetailVO {
+
+    private Integer id;
+    private List<SystemFile> discoveryFiles;
+    private List<SystemFile> resultFiles;
+    private String conversationId;
+
+    private String conversationName;
+
+    private String inventionPoint;
+
+    private String createId;
+    private Date createTime;
+    private Integer type;
+    private String content;
+    private String discoveryResult;
+    private String dialogueConversationId;
+    private String aiUpdateConversationId;
+}

+ 43 - 0
src/main/java/cn/cslg/pas/common/model/dify/generateDiscoveryResult/DiscoryResultVO.java

@@ -0,0 +1,43 @@
+package cn.cslg.pas.common.model.dify.generateDiscoveryResult;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DiscoryResultVO {
+    private String technicalField;
+    private List<String> technicalFeature;
+    private List<TechnicalCase> technicalCase;
+    private String additionalSuggestions;
+    private List<TermsExplanation> termsExplanation;
+    private ClaimSuggestions claimSuggestions;
+    private String background;
+
+    @Data
+    public static class TechnicalCase {
+        private String technicalProblem;
+        private List<TechnicalMeans> technicalMeans;
+
+    }
+
+    @Data
+    public static class TechnicalMeans {
+        private String technicalMeansContent;
+        private String ImplementationMethod;
+        private List<String> technicalEffect;
+    }
+
+    @Data
+    public static class TermsExplanation {
+        private String terms;
+        private String explanation;
+    }
+
+    @Data
+    public static class ClaimSuggestions {
+        private String mainClaimSuggestions;
+        private String dependentClaimSuggestions;
+    }
+
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/model/dify/generateDiscoveryResult/UpdateDiscoveryResultDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.model.dify.generateDiscoveryResult;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateDiscoveryResultDTO {
+   private Integer confessionSessionId;
+   private String discoveryResult;
+
+}

+ 13 - 0
src/main/java/cn/cslg/pas/controller/common/ConfessionSessionController.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.DifyHistoryMessageDTO;
 import cn.cslg.pas.common.model.dify.confessionSession.*;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.UpdateDiscoveryResultDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.Response;
@@ -84,5 +85,17 @@ public class ConfessionSessionController {
         Integer id = confessionSessionService.addConfessionSessionFile(addConfessionSessionDTO);
         return Response.success(id);
     }
+    @RequestMapping(value = "/updateDiscoryResult", method = RequestMethod.POST)
+    @Operation(summary = "更新技术交底书理解结果")
+    public Response updateDiscoryResult(@RequestBody UpdateDiscoveryResultDTO updateDiscoveryResultDTO) throws IOException {
+        Integer id = confessionSessionService.updateDiscoveryResult(updateDiscoveryResultDTO);
+        return Response.success(id);
+    }
 
+    @RequestMapping(value = "/detail", method = RequestMethod.POST)
+    @Operation(summary = "查询会话记录详情")
+    public Response detail(@RequestBody UpdateDiscoveryResultDTO updateDiscoveryResultDTO) throws IOException {
+        Integer id = confessionSessionService.updateDiscoveryResult(updateDiscoveryResultDTO);
+        return Response.success(id);
+    }
 }

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

@@ -7,6 +7,7 @@ import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.dify.DifySessionService;
+import cn.cslg.pas.service.dify.GenerateDiscoveryResultService;
 import cn.cslg.pas.service.dify.GenerateInstructionService;
 import com.alibaba.fastjson2.JSONObject;
 import io.swagger.v3.oas.annotations.Operation;
@@ -34,6 +35,7 @@ public class DifyController {
     private final DifyService difyService;
     private final DifySessionService difySessionService;
     private final GenerateInstructionService generateInstructionService;
+    private final GenerateDiscoveryResultService generateDiscoveryResultService;
     @Autowired
     private CacheUtils cacheUtils;
     @Autowired
@@ -90,5 +92,9 @@ public class DifyController {
     public Flux<String> addConfessionSession(@RequestBody GenerateClaimDTO generateClaimDTO) throws Exception {
         return generateInstructionService.generateInstruction2(generateClaimDTO);
     }
-
+    @RequestMapping(value = "/generateDiscoryResult", method = RequestMethod.POST)
+    @Operation(summary = "生成技术交底书理解结果")
+    public Response generateDiscoryResult(@RequestBody ChatMessageDTO chatMessageDTO) throws Exception {
+        return Response.success(generateDiscoveryResultService.generateResult(chatMessageDTO));
+    }
 }

+ 1 - 0
src/main/java/cn/cslg/pas/domain/dify/ConfessionSession.java

@@ -32,5 +32,6 @@ public class ConfessionSession extends BaseEntity<ConfessionSession> {
     private Date createTime;
     private Integer type;
     private String content;
+    private String resultContent;
 
 }

+ 96 - 0
src/main/java/cn/cslg/pas/service/common/DifyService.java

@@ -784,5 +784,101 @@ public class DifyService {
 
         return res;
     }
+    public Flux<String> chatMessageReFux(DifyChatMessageDTO difyChatMessageDTO,String key) {
+        Integer projectId = chatMessageDTO.getProjectId();
+        Integer confessionSessionId = chatMessageDTO.getConfessionSessionId();
+        String conversationId = chatMessageDTO.getConversationId();
+        String userId = loginUtils.getId().toString();
+        String query = chatMessageDTO.getQuery();
+        if (conversationId == null) {
+            conversationId = difySessionService.getSessionId(projectId, userId);
+        }
+
+        String temConversationId = conversationId;
+        OkHttpClient client = new OkHttpClient.Builder()
+                .connectTimeout(600, TimeUnit.SECONDS)
+                .writeTimeout(600, TimeUnit.SECONDS)
+                .readTimeout(600, TimeUnit.SECONDS)
+                .build();
+
+        DifyChatMessageDTO difyChatMessageDTO = new DifyChatMessageDTO();
+        Map<String, Object> map = new HashMap<>();
+        String fileContent = "";
+        String inventionPoint = "";
+        if (projectId != null) {
+            fileContent = this.getConfression(projectId);
+            inventionPoint = this.getInventPoint(projectId);
+        } else if (confessionSessionId != null) {
+            ConfessionSession confessionSession = confessionSessionService.getById(confessionSessionId);
+            fileContent = fileDownloadUrl + confessionSession.getGuid();
+            inventionPoint = confessionSession.getInventionPoint();
+        }
+
+        map.put("file_path", fileContent);
+        map.put("invention_point", inventionPoint);
+        difyChatMessageDTO.setInputs(map);
+        difyChatMessageDTO.setConversationId(conversationId);
+        difyChatMessageDTO.setResponseMode("streaming");
+        difyChatMessageDTO.setUser(userId);
+        difyChatMessageDTO.setQuery(query);
+        difyChatMessageDTO.setFiles(new ArrayList<>());
+
+        String param = new Gson().toJson(difyChatMessageDTO);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        Request request = this.getChatMessageRequest(requestBody);
+        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 temConversationId2 = temConversationId;
+                        String prefixToRemove = "data: ";
+                        while ((line = bufferedReader.readLine()) != null) {
+                            if (line.isEmpty()) {
+                                continue;
+                            }
+                            if (line.startsWith(prefixToRemove)) {
+                                line = line.substring(prefixToRemove.length());
+                            }
+                            if (temConversationId2 == null || temConversationId2.isEmpty()) {
+                                try {
+                                    JSONObject jsonObject = JSON.parseObject(line);
+                                    temConversationId2 = jsonObject.get("conversation_id").toString();
+                                    if (projectId != null) {
+                                        difySessionService.addDifySession(projectId, userId, temConversationId2);
+                                    }
+                                    if (confessionSessionId != null) {
+                                        UpdateConfessionSessionDTO updateConfessionSessionDTO = new UpdateConfessionSessionDTO();
+                                        updateConfessionSessionDTO.setConfessionSessionId(confessionSessionId);
+                                        updateConfessionSessionDTO.setConversationId(temConversationId2);
+                                        confessionSessionService.updateConfessionSession(updateConfessionSessionDTO);
+                                    }
+                                } catch (Exception e) {
+                                }
+
+                            }
+                            emitter.next(line); // 将每行数据发送到 Flux
+                        }
+                    } catch (IOException e) {
+                        emitter.error(e);
+                    } finally {
+                        emitter.complete();
+                    }
+                }
+            });
+        });
+    }
 }

+ 16 - 1
src/main/java/cn/cslg/pas/service/dify/ConfessionSessionService.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.service.dify;
 
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.model.dify.confessionSession.*;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.UpdateDiscoveryResultDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.LoginUtils;
@@ -13,6 +14,7 @@ import cn.cslg.pas.service.common.FileManagerService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.pas.domain.dify.ConfessionSession;
@@ -207,7 +209,20 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
         confessionSession.insert();
         return confessionSession;
     }
-
+    public Integer updateDiscoveryResult(UpdateDiscoveryResultDTO updateDiscoveryResultDTO){
+        String discoveryResult =updateDiscoveryResultDTO.getDiscoveryResult();
+        Integer confessionSessionId =updateDiscoveryResultDTO.getConfessionSessionId();
+        LambdaUpdateWrapper<ConfessionSession> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ConfessionSession::getResultContent, discoveryResult).eq(ConfessionSession::getId, confessionSessionId);
+        this.update(updateWrapper);
+        return confessionSessionId;
+    }
+    public ConfessionSessionDetailVO getConfessionSessionDetail(ConfessionSessionDetailDTO confessionSessionDetailDTO){
+        ConfessionSessionDetailVO confessionSessionDetailVO =new ConfessionSessionDetailVO();
+        Integer confessionSessionId =confessionSessionDetailDTO.getConfessionSessionId();
+        ConfessionSession confessionSession =this.getById(confessionSessionId);
+        return confessionSessionDetailVO;
+    }
 }
 
 

+ 74 - 0
src/main/java/cn/cslg/pas/service/dify/GenerateDiscoveryResultService.java

@@ -0,0 +1,74 @@
+package cn.cslg.pas.service.dify;
+
+import cn.cslg.pas.common.model.dify.ChatMessageDTO;
+import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.DiscoryResultVO;
+import cn.cslg.pas.domain.dify.ConfessionSession;
+import cn.cslg.pas.service.common.DifyService;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class GenerateDiscoveryResultService {
+    @Autowired
+    private DifyService difyService;
+    @Value("${FileDownloadUrl}")
+    private String fileDownloadUrl;
+    @Autowired
+    private ConfessionSessionService confessionSessionService;
+
+    public DiscoryResultVO generateResult(ChatMessageDTO chatMessageDTO) throws Exception {
+        DiscoryResultVO discoryResultVO = null;
+        Integer confessionSessionId = chatMessageDTO.getConfessionSessionId();
+        String conversionId = chatMessageDTO.getConversationId();
+        ConfessionSession confessionSession = confessionSessionService.getById(confessionSessionId);
+        String fileId = confessionSession.getGuid();
+        String path = fileDownloadUrl + fileId;
+        String gInstructionKey = "app-ekzGTtvRnSq2aSqwZqKG5EH3";
+        Integer userId = 1;
+        DifyChatMessageDTO difyChatMessageDTO = new DifyChatMessageDTO();
+        difyChatMessageDTO.setUser(userId.toString());
+        difyChatMessageDTO.setResponseMode("blocking");
+        difyChatMessageDTO.setQuery("内容结束");
+//        difyChatMessageDTO.setConversationId();
+        Map<String, Object> map = new HashMap<>();
+        map.put("ask_type", "jiaodi");
+        map.put("file_path", path);
+        difyChatMessageDTO.setInputs(map);
+        Integer cycle = 0;
+        Boolean flag = false;
+        String re = "";
+        String answer = "";
+        while (cycle < 5 && flag == false) {
+            re = difyService.chatMessage(difyChatMessageDTO, gInstructionKey);
+            JSONObject jsonObject = JSONObject.parseObject(re);
+            Object status = jsonObject.get("status");
+            if (status != null) {
+                cycle++;
+            } else {
+                try {
+                    answer = jsonObject.get("answer").toString();
+                    conversionId = jsonObject.get("conversation_id").toString();
+                    discoryResultVO = JSONObject.parseObject(answer, DiscoryResultVO.class);
+                } catch (Exception e) {
+                    cycle++;
+                }
+
+                System.out.println(answer);
+                flag = true;
+            }
+
+        }
+        LambdaUpdateWrapper<ConfessionSession> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ConfessionSession::getResultContent, answer).eq(ConfessionSession::getId, confessionSessionId);
+        confessionSessionService.update(updateWrapper);
+        return discoryResultVO;
+
+    }
+}

+ 5 - 1
src/test/java/cn/cslg/pas/DifyTest.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas;
 
+import cn.cslg.pas.common.model.dify.ChatMessageDTO;
 import cn.cslg.pas.common.model.dify.ClaimExplainVO;
 import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
 import cn.cslg.pas.common.model.dify.GenerateInstructAnswerVO;
@@ -11,6 +12,7 @@ import cn.cslg.pas.common.vo.PatentRightParams;
 import cn.cslg.pas.common.vo.RePatentClaim;
 import cn.cslg.pas.domain.dify.GetInstructAnswerDTO;
 import cn.cslg.pas.service.common.DifyService;
+import cn.cslg.pas.service.dify.GenerateDiscoveryResultService;
 import cn.cslg.pas.service.dify.GenerateInstructionService;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
@@ -39,7 +41,8 @@ public class DifyTest {
     private GenerateInstructionService generateInstructionService;
     @Autowired
     private DifyService difyService;
-
+ @Autowired
+ private GenerateDiscoveryResultService generateDiscoveryResultService;
     @Test
     public void checkFile() throws Exception {
 //        String path = "E:\\temfile\\poi\\test1.docx";
@@ -275,4 +278,5 @@ public class DifyTest {
 
       System.out.println(cleanText);
     }
+
 }

+ 9 - 3
src/test/java/cn/cslg/pas/service/dify/GenerateInstructionServiceTests.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service.dify;
 
 import cn.cslg.pas.common.dto.DomainFieldDTO;
+import cn.cslg.pas.common.model.dify.ChatMessageDTO;
 import cn.cslg.pas.common.model.dify.GenerateClaimDTO;
 import cn.cslg.pas.common.model.dify.GenerateInstructAnswerVO;
 import cn.cslg.pas.common.model.dify.GenerateTechnicalVO;
@@ -22,7 +23,8 @@ import java.util.*;
 public class GenerateInstructionServiceTests {
     @Autowired
     private GenerateInstructionService generateInstructionService;
-
+@Autowired
+private GenerateDiscoveryResultService generateDiscoveryResultService;
 
     @Test
     public void getClaimContent() throws Exception {
@@ -66,7 +68,11 @@ public class GenerateInstructionServiceTests {
         map.put("implementation", strings);
         generateInstructionService.generateFile(map, "D:\\PAS\\target\\file\\patent.docx", "test");
         String a = "";
-
-
+    }
+    @Test
+    public  void generateResult123() throws Exception{
+        ChatMessageDTO chatMessageDTO=new ChatMessageDTO();
+        chatMessageDTO.setConfessionSessionId(426);
+        generateDiscoveryResultService.generateResult(chatMessageDTO);
     }
 }