소스 검색

20250922-生成专利申请文档

lrj 1 주 전
부모
커밋
18798a4b75

+ 23 - 9
src/main/java/cn/cslg/pas/common/utils/DataUtils.java

@@ -33,7 +33,6 @@ public class DataUtils {
     public static final String PASSWORD_KEY = "835a9bdc-4f9f-4614-a0cc-493a12454156";
 
 
-
     /**
      * 对称加密
      */
@@ -179,12 +178,12 @@ public class DataUtils {
     }
 
 
-    public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
+    public static String[] chars = new String[]{"a", "b", "c", "d", "e", "f",
             "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
             "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
             "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
             "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
-            "W", "X", "Y", "Z" };
+            "W", "X", "Y", "Z"};
 
     public static String generateShortUuid() {
         StringBuffer shortBuffer = new StringBuffer();
@@ -197,7 +196,7 @@ public class DataUtils {
         return shortBuffer.toString();
     }
 
-    public static <T> List<T> objToList(Object obj, Class<T> cla){
+    public static <T> List<T> objToList(Object obj, Class<T> cla) {
         List<T> list = new ArrayList<T>();
         if (obj instanceof ArrayList<?>) {
             for (Object o : (List<?>) obj) {
@@ -218,7 +217,7 @@ public class DataUtils {
             mdTemp = MessageDigest.getInstance("MD5");
             mdTemp.update(utfBytes);
             byte[] md5Bytes = mdTemp.digest();
-            byte[] by =  Base64.getEncoder().encode(md5Bytes);
+            byte[] by = Base64.getEncoder().encode(md5Bytes);
 
             encodeStr = Base64Utils.encodeToString(by);
         } catch (Exception e) {
@@ -226,6 +225,7 @@ public class DataUtils {
         }
         return encodeStr;
     }
+
     /*
      * 计算 HMAC-SHA1
      */
@@ -236,7 +236,7 @@ public class DataUtils {
             Mac mac = Mac.getInstance("HmacSHA1");
             mac.init(signingKey);
             byte[] rawHmac = mac.doFinal(data.getBytes());
-            byte[] by =Base64.getEncoder().encode(rawHmac);
+            byte[] by = Base64.getEncoder().encode(rawHmac);
             result = Base64Utils.encodeToString(by);
         } catch (Exception e) {
             throw new Error("Failed to generate HMAC : " + e.getMessage());
@@ -256,7 +256,7 @@ public class DataUtils {
         return string;
     }
 
-    public static String getMarkDownText(String markdownText){
+    public static String getMarkDownText(String markdownText) {
 
 
         // 配置解析器(支持表格等扩展)
@@ -276,10 +276,10 @@ public class DataUtils {
 //                .replaceAll("\\s+", " ")   // 合并多余空格
 //                .trim();
         // 输出普通文本
-      return  html;
+        return html;
     }
 
-    public static String getTextBeforeLastSignal(String input,String signal) {
+    public static String getTextBeforeLastSignal(String input, String signal) {
         if (input == null || input.isEmpty()) {
             return input; // 处理空字符串或null值
         }
@@ -295,6 +295,7 @@ public class DataUtils {
 
     private static final String[] units = {"", "十", "百", "千", "万", "十", "百", "千", "亿"};
     private static final String[] digits = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
+
     public static String numberToChinese(int num) {
         if (num == 0) {
             return "零";
@@ -326,4 +327,17 @@ public class DataUtils {
         }
         return result;
     }
+
+    public static String aiAnswerThinkRemove(String content) {
+        String regex = "<think>[\\s\\S]*?</think>";
+        content = content.replaceAll(regex, "");
+        content = content.replaceAll("\n{2,}", "\n");
+        content = content.trim();
+        return content;
+    }
+    public static boolean isValidFormat(String regex,String input) {
+        // 定义正则表达式:4位数字-2位数字-2位数字-"会话"
+        // 编译正则模式并匹配整个输入字符串
+        return Pattern.matches(regex, input);
+    }
 }

+ 7 - 7
src/main/java/cn/cslg/pas/controller/common/ConfessionSessionController.java

@@ -1,10 +1,12 @@
 package cn.cslg.pas.controller.common;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
 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.model.dify.generatePatentResult.ExportPatentDTO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.UpdatePatentResultDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
@@ -12,6 +14,7 @@ import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.dify.ConfessionSessionService;
 import cn.cslg.pas.service.dify.DifySessionService;
+import cn.cslg.pas.service.dify.DifyTempleExportService;
 import com.alibaba.fastjson2.JSONObject;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -42,7 +45,7 @@ public class ConfessionSessionController {
     private CacheUtils cacheUtils;
     @Autowired
     private LoginUtils loginUtils;
-
+    private final DifyTempleExportService difyTempleExportService;
     //
     @RequestMapping(value = "/addConfessionSession", method = RequestMethod.POST)
     @Operation(summary = "生成交底书会话记录")
@@ -108,12 +111,9 @@ public class ConfessionSessionController {
 
     @RequestMapping(value = "/exportPatentResult", method = RequestMethod.POST)
     @Operation(summary = "导出专利申请文档")
-    public Response exportPatentResult(@RequestBody UpdatePatentResultDTO updatePatentResultDTO) throws IOException {
-        UpdateResultDTO updateResultDTO =new UpdateResultDTO();
-        updateResultDTO.setResult(updatePatentResultDTO.getPatentResult());
-        updateResultDTO.setConfessionSessionId(updatePatentResultDTO.getConfessionSessionId());
-        Integer id = confessionSessionService.updateResult(updateResultDTO);
-        return Response.success(id);
+    public Response exportPatentResult(@RequestBody ExportPatentDTO exportPatentDTO) throws Exception {
+       SystemFile systemFile= difyTempleExportService.exportPatentFile(exportPatentDTO);
+        return Response.success(systemFile);
     }
 
 

+ 2 - 3
src/main/java/cn/cslg/pas/controller/outApi/DifyController.java

@@ -4,7 +4,6 @@ import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.model.dify.*;
 import cn.cslg.pas.common.model.dify.confessionSession.ConfessionSessionDetailDTO;
 import cn.cslg.pas.common.model.dify.confessionSession.ConfessionSessionDetailVO;
-import cn.cslg.pas.common.model.dify.generatePatentResult.ExportPatentDTO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.GeneratePatentResultDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
@@ -115,9 +114,9 @@ public class DifyController {
         return difyService.discoveryResultDialogue(chatMessageDTO);
     }
 
-    @RequestMapping(value = "/generatePatentResult", method = RequestMethod.POST)
+    @RequestMapping(value = "/generatePatentResult", method = RequestMethod.POST, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     @Operation(summary = "生成专利申请文档结果")
-    public Flux<String> generatePatentResult(@RequestBody ExportPatentDTO exportPatentDTO) throws Exception {
+    public Flux<String> generatePatentResult(@RequestBody GeneratePatentResultDTO generatePatentResultDTO) throws Exception {
         return patentResultService.aiGeneratePatentResult(generatePatentResultDTO);
     }
 }

+ 8 - 11
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateAbstructPatentResultImp.java

@@ -5,6 +5,8 @@ import cn.cslg.pas.common.model.dify.generatePatentResult.PatentFileVO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.PatentResultFactoryDTO;
 import cn.cslg.pas.common.model.enumVos.FluxMessageEventEnum;
 import cn.cslg.pas.common.model.enumVos.PatentResultEnum;
+import cn.cslg.pas.common.utils.DataUtils;
+import cn.cslg.pas.common.utils.DateUtils;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.dify.AssoConfessionConversationService;
@@ -76,7 +78,6 @@ public class GenerateAbstructPatentResultImp implements GeneratePatentResultServ
         difyChatMessageDTO.setFiles(new ArrayList<>());
         Request request = difyService.getGeneratePatentResultResultRequest(confessionSessionId, difyChatMessageDTO, apiKey);
 
-
         StringBuilder aiContentBuilder = new StringBuilder();
         client.newCall(request).enqueue(new Callback() {
             @Override
@@ -118,13 +119,6 @@ public class GenerateAbstructPatentResultImp implements GeneratePatentResultServ
                                 aiContentBuilder.append(answer);
                                     String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
                                     emitter.next(message);
-                                if (aiContentBuilder.toString().contains(targetMessageSplit)) {
-                                    String content = aiContentBuilder.toString();
-                                    Integer index = content.indexOf(targetMessageSplit);
-                                    content = content.substring(index + targetMessageSplit.length(), content.length());
-                                    aiContentBuilder.setLength(0);
-                                    aiContentBuilder.append(content);
-                                }
                             }
                         }
                     }
@@ -139,15 +133,18 @@ public class GenerateAbstructPatentResultImp implements GeneratePatentResultServ
                 if (result != null) {
                     patentFileVO = JSONObject.parseObject(result, PatentFileVO.class);
                 }
-                patentFileVO.setAbstractContent(aiContentBuilder.toString());
+                String content =aiContentBuilder.toString();
+                content= DataUtils.aiAnswerThinkRemove(content);
+                patentFileVO.setAbstractContent(content);
                 confessionSessionService.updatePatentResult(confessionSession, type, patentFileVO);
                 String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.end.toString(), "", confessionSessionId, type);
                 emitter.next(message);
                 //继续往下进行任务
                 if (types != null && types.size() > 0) {
-                    Integer type = types.remove(0);
+                    Integer temType = types.remove(0);
                     patentResultFactoryDTO.setTypes(types);
-                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(type);
+                    patentResultFactoryDTO.setType(temType);
+                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                     generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
                 } else {
                     String allEndMessage = fluxMessageService.getFluxMessage("", FluxMessageEventEnum.all_end.toString(), "", confessionSessionId, type);

+ 7 - 10
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateBackgroundPatentResultImp.java

@@ -5,6 +5,7 @@ import cn.cslg.pas.common.model.dify.generatePatentResult.PatentFileVO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.PatentResultFactoryDTO;
 import cn.cslg.pas.common.model.enumVos.FluxMessageEventEnum;
 import cn.cslg.pas.common.model.enumVos.PatentResultEnum;
+import cn.cslg.pas.common.utils.DataUtils;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.dify.AssoConfessionConversationService;
@@ -118,13 +119,6 @@ public class GenerateBackgroundPatentResultImp implements GeneratePatentResultSe
                                 aiContentBuilder.append(answer);
                                     String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
                                     emitter.next(message);
-                                if (aiContentBuilder.toString().contains(targetMessageSplit)) {
-                                    String content = aiContentBuilder.toString();
-                                    Integer index = content.indexOf(targetMessageSplit);
-                                    content = content.substring(index + targetMessageSplit.length(), content.length());
-                                    aiContentBuilder.setLength(0);
-                                    aiContentBuilder.append(content);
-                                }
                             }
                         }
                     }
@@ -139,15 +133,18 @@ public class GenerateBackgroundPatentResultImp implements GeneratePatentResultSe
                 if (result != null) {
                     patentFileVO = JSONObject.parseObject(result, PatentFileVO.class);
                 }
-                patentFileVO.setBackground(aiContentBuilder.toString());
+                String content =aiContentBuilder.toString();
+                content= DataUtils.aiAnswerThinkRemove(content);
+                patentFileVO.setBackground(content);
                 confessionSessionService.updatePatentResult(confessionSession, type, patentFileVO);
                 String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.end.toString(), "", confessionSessionId, type);
                 emitter.next(message);
                 //继续往下进行任务
                 if (types != null && types.size() > 0) {
-                    Integer type = types.remove(0);
+                    Integer temType = types.remove(0);
                     patentResultFactoryDTO.setTypes(types);
-                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(type);
+                    patentResultFactoryDTO.setType(temType);
+                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                     generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
                 } else {
                     String allEndMessage = fluxMessageService.getFluxMessage("", FluxMessageEventEnum.all_end.toString(), "", confessionSessionId, type);

+ 8 - 14
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateClaimPatentResultImp.java

@@ -6,6 +6,7 @@ import cn.cslg.pas.common.model.dify.generatePatentResult.PatentResultFactoryDTO
 
 import cn.cslg.pas.common.model.enumVos.FluxMessageEventEnum;
 import cn.cslg.pas.common.model.enumVos.PatentResultEnum;
+import cn.cslg.pas.common.utils.DataUtils;
 import cn.cslg.pas.domain.dify.AssoConfessionConversation;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.service.common.DifyService;
@@ -24,10 +25,7 @@ import reactor.core.publisher.FluxSink;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.Reader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 @Component
@@ -114,14 +112,7 @@ public class GenerateClaimPatentResultImp implements GeneratePatentResultService
                                 aiContentBuilder.append(answer);
                                     String message= fluxMessageService.getFluxMessage(PatentResultEnum.claim.toString(), FluxMessageEventEnum.message.toString(),answer,confessionSessionId,type-1);
                                     emitter.next(message);
-                                 if (aiContentBuilder.toString().contains(targetMessageSplit)) {
-                                    String content = aiContentBuilder.toString();
-                                    Integer index = content.indexOf(targetMessageSplit);
-                                    content = content.substring(index+targetMessageSplit.length(), content.length());
-                                    aiContentBuilder.setLength(0);
-                                    aiContentBuilder.append(content);
 
-                                }
                             }
                         }
                     }
@@ -136,15 +127,18 @@ public class GenerateClaimPatentResultImp implements GeneratePatentResultService
                 if (result != null) {
                     patentFileVO = JSONObject.parseObject(result, PatentFileVO.class);
                 }
-                patentFileVO.setClaim(aiContentBuilder.toString());
+                String content =aiContentBuilder.toString();
+                content= DataUtils.aiAnswerThinkRemove(content);
+                patentFileVO.setClaim(content);
                 confessionSessionService.updatePatentResult(confessionSession, type, patentFileVO);
                 String message= fluxMessageService.getFluxMessage(PatentResultEnum.claim.toString(), FluxMessageEventEnum.end.toString(),"",confessionSessionId,type);
                 emitter.next(message);
                 //继续往下进行任务
                 if (types!=null&&types.size() > 0) {
-                    Integer type = types.remove(0);
+                    Integer temType = types.remove(0);
                     patentResultFactoryDTO.setTypes(types);
-                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(type);
+                    patentResultFactoryDTO.setType(temType);
+                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                     generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
                 }
                 else {

+ 10 - 10
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateImplementationMethodImp.java

@@ -6,6 +6,7 @@ import cn.cslg.pas.common.model.dify.generatePatentResult.PatentResultFactoryDTO
 import cn.cslg.pas.common.model.enumVos.FluxMessageEventEnum;
 import cn.cslg.pas.common.model.enumVos.PatentResultEnum;
 import cn.cslg.pas.common.utils.ClaimUtils.ClaimSplitUtils;
+import cn.cslg.pas.common.utils.DataUtils;
 import cn.cslg.pas.common.vo.PatentRightParams;
 import cn.cslg.pas.common.vo.RePatentClaim;
 import cn.cslg.pas.domain.dify.ConfessionSession;
@@ -77,7 +78,7 @@ public class GenerateImplementationMethodImp implements GeneratePatentResultServ
             params.setContent(claims);
             params.setPatentNo("CN");
             List<RePatentClaim> rePatentClaims = ClaimSplitUtils.formatPatentRight(params);
-            List<String> claimList=rePatentClaims.stream().map(RePatentClaim::getContent).collect(Collectors.toList());
+            List<String> claimList = rePatentClaims.stream().map(RePatentClaim::getContent).collect(Collectors.toList());
             String claimJson = com.alibaba.fastjson2.JSON.toJSONString(claimList);
             map.put("claims", claimJson);
         }
@@ -103,7 +104,7 @@ public class GenerateImplementationMethodImp implements GeneratePatentResultServ
                     emitter.error(new IOException("Unexpected code: " + response));
                     return;
                 }
-                String filed=PatentResultEnum.implementationMethod.toString();
+                String filed = PatentResultEnum.implementationMethod.toString();
                 Boolean ifSendMessage = false;
                 String localConversationId = conversationId;
                 String startMessage = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.start.toString(), "", confessionSessionId, type - 1);
@@ -129,12 +130,11 @@ public class GenerateImplementationMethodImp implements GeneratePatentResultServ
                             if (event.equals("message")) {
                                 String answer = jsonObject.get("answer").toString();
                                 aiContentBuilder.append(answer);
-                                    String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
-                                    emitter.next(message);
+                                String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
+                                emitter.next(message);
                             }
                         }
                     }
-
                 } catch (IOException e) {
                     emitter.error(e);
                     emitter.complete();
@@ -145,18 +145,18 @@ public class GenerateImplementationMethodImp implements GeneratePatentResultServ
                 if (result != null) {
                     patentFileVO = JSONObject.parseObject(result, PatentFileVO.class);
                 }
-                String regex = "<think>.*?</think>";
-                String content=aiContentBuilder.toString();
-                content = content.replaceAll(regex, "");
+                String content = aiContentBuilder.toString();
+                content = DataUtils.aiAnswerThinkRemove(content);
                 patentFileVO.setImplementationMethod(content);
                 confessionSessionService.updatePatentResult(confessionSession, type, patentFileVO);
                 String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.end.toString(), "", confessionSessionId, type);
                 emitter.next(message);
                 //继续往下进行任务
                 if (types != null && types.size() > 0) {
-                    Integer type = types.remove(0);
+                    Integer temType = types.remove(0);
                     patentResultFactoryDTO.setTypes(types);
-                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(type);
+                    patentResultFactoryDTO.setType(temType);
+                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                     generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
                 } else {
                     String allEndMessage = fluxMessageService.getFluxMessage("", FluxMessageEventEnum.all_end.toString(), "", confessionSessionId, type);

+ 7 - 10
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateInventionContentPatentResultImp.java

@@ -5,6 +5,7 @@ import cn.cslg.pas.common.model.dify.generatePatentResult.PatentFileVO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.PatentResultFactoryDTO;
 import cn.cslg.pas.common.model.enumVos.FluxMessageEventEnum;
 import cn.cslg.pas.common.model.enumVos.PatentResultEnum;
+import cn.cslg.pas.common.utils.DataUtils;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.dify.AssoConfessionConversationService;
@@ -117,13 +118,6 @@ public class GenerateInventionContentPatentResultImp implements GeneratePatentRe
                                 aiContentBuilder.append(answer);
                                     String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
                                     emitter.next(message);
-                                if (aiContentBuilder.toString().contains(targetMessageSplit)) {
-                                    String content = aiContentBuilder.toString();
-                                    Integer index = content.indexOf(targetMessageSplit);
-                                    content = content.substring(index + targetMessageSplit.length(), content.length());
-                                    aiContentBuilder.setLength(0);
-                                    aiContentBuilder.append(content);
-                                }
                             }
                         }
                     }
@@ -138,15 +132,18 @@ public class GenerateInventionContentPatentResultImp implements GeneratePatentRe
                 if (result != null) {
                     patentFileVO = JSONObject.parseObject(result, PatentFileVO.class);
                 }
-                patentFileVO.setInventionContent(aiContentBuilder.toString());
+                String content =aiContentBuilder.toString();
+                content= DataUtils.aiAnswerThinkRemove(content);
+                patentFileVO.setInventionContent(content);
                 confessionSessionService.updatePatentResult(confessionSession, type, patentFileVO);
                 String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.end.toString(), "", confessionSessionId, type);
                 emitter.next(message);
                 //继续往下进行任务
                 if (types != null && types.size() > 0) {
-                    Integer type = types.remove(0);
+                    Integer temType = types.remove(0);
                     patentResultFactoryDTO.setTypes(types);
-                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(type);
+                    patentResultFactoryDTO.setType(temType);
+                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                     generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
                 } else {
                     String allEndMessage = fluxMessageService.getFluxMessage("", FluxMessageEventEnum.all_end.toString(), "", confessionSessionId, type);

+ 1 - 0
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateTechnicalFieldPatentResultImp.java

@@ -78,6 +78,7 @@ public class GenerateTechnicalFieldPatentResultImp implements GeneratePatentResu
             if (types!=null&&types.size() > 0) {
                 Integer temType = types.remove(0);
                 patentResultFactoryDTO.setTypes(types);
+                patentResultFactoryDTO.setType(temType);
                 GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                 generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
             }

+ 17 - 13
src/main/java/cn/cslg/pas/factorys/difyFactory/GenerateTitlePatentResultImp.java

@@ -5,6 +5,7 @@ import cn.cslg.pas.common.model.dify.generatePatentResult.PatentFileVO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.PatentResultFactoryDTO;
 import cn.cslg.pas.common.model.enumVos.FluxMessageEventEnum;
 import cn.cslg.pas.common.model.enumVos.PatentResultEnum;
+import cn.cslg.pas.common.utils.DataUtils;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.dify.AssoConfessionConversationService;
@@ -90,7 +91,7 @@ public class GenerateTitlePatentResultImp implements GeneratePatentResultService
                     emitter.error(new IOException("Unexpected code: " + response));
                     return;
                 }
-                String filed=PatentResultEnum.title.toString();
+                String filed = PatentResultEnum.title.toString();
                 String localConversationId = conversationId;
                 String startMessage = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.start.toString(), "", confessionSessionId, type - 1);
                 emitter.next(startMessage);
@@ -114,15 +115,9 @@ public class GenerateTitlePatentResultImp implements GeneratePatentResultService
                             if (event.equals("message")) {
                                 String answer = jsonObject.get("answer").toString();
                                 aiContentBuilder.append(answer);
-                                    String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
-                                    emitter.next(message);
-                               if (aiContentBuilder.toString().contains(targetMessageSplit)) {
-                                    String content = aiContentBuilder.toString();
-                                    Integer index = content.indexOf(targetMessageSplit);
-                                    content = content.substring(index + targetMessageSplit.length(), content.length());
-                                    aiContentBuilder.setLength(0);
-                                    aiContentBuilder.append(content);
-                                }
+                                String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.message.toString(), answer, confessionSessionId, type - 1);
+                                emitter.next(message);
+
                             }
                         }
                     }
@@ -137,15 +132,24 @@ public class GenerateTitlePatentResultImp implements GeneratePatentResultService
                 if (result != null) {
                     patentFileVO = JSONObject.parseObject(result, PatentFileVO.class);
                 }
-                patentFileVO.setTitle(aiContentBuilder.toString());
+                String content = aiContentBuilder.toString();
+                content = DataUtils.aiAnswerThinkRemove(content);
+                patentFileVO.setTitle(content);
+                String name = confessionSession.getConversationName();
+                Boolean ifValid = DataUtils.isValidFormat("^\\d{4}-\\d{2}-\\d{2}-会话$", name);
+                if (ifValid) {
+                   name= name.replaceAll("会话", content);
+                    confessionSession.setConversationName(name);
+                }
                 confessionSessionService.updatePatentResult(confessionSession, type, patentFileVO);
                 String message = fluxMessageService.getFluxMessage(filed, FluxMessageEventEnum.end.toString(), "", confessionSessionId, type);
                 emitter.next(message);
                 //继续往下进行任务
                 if (types != null && types.size() > 0) {
-                    Integer type = types.remove(0);
+                    Integer temType = types.remove(0);
                     patentResultFactoryDTO.setTypes(types);
-                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(type);
+                    patentResultFactoryDTO.setType(temType);
+                    GeneratePatentResultService generatePatentResultService = patentResultFactory.getClass(temType);
                     generatePatentResultService.generatePatentResult(patentResultFactoryDTO);
                 } else {
                     String allEndMessage = fluxMessageService.getFluxMessage("", FluxMessageEventEnum.all_end.toString(), "", confessionSessionId, type);

+ 18 - 0
src/main/java/cn/cslg/pas/service/dify/AssoConfessionSessionFileService.java

@@ -28,4 +28,22 @@ public class AssoConfessionSessionFileService extends ServiceImpl<AssoConfession
 
         return guids;
     }
+
+    public AssoConfessionSessionFile addOnlyFiles(Integer confessionSessionId, Integer type, String guid) {
+        LambdaQueryWrapper<AssoConfessionSessionFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoConfessionSessionFile::getConfessionSessionId, confessionSessionId)
+                .eq(AssoConfessionSessionFile::getType, type);
+        AssoConfessionSessionFile assoConfessionSessionFile = this.getOne(queryWrapper, false);
+        if (assoConfessionSessionFile == null) {
+            assoConfessionSessionFile = new AssoConfessionSessionFile();
+            assoConfessionSessionFile.setConfessionSessionId(confessionSessionId);
+            assoConfessionSessionFile.setType(type);
+            assoConfessionSessionFile.setGuid(guid);
+            assoConfessionSessionFile.insert();
+        } else {
+            assoConfessionSessionFile.setGuid(guid);
+            assoConfessionSessionFile.updateById();
+        }
+        return assoConfessionSessionFile;
+    }
 }

+ 3 - 4
src/main/java/cn/cslg/pas/service/dify/ConfessionSessionService.java

@@ -4,10 +4,7 @@ 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.model.dify.generatePatentResult.PatentFileVO;
-import cn.cslg.pas.common.utils.CacheUtils;
-import cn.cslg.pas.common.utils.DataUtils;
-import cn.cslg.pas.common.utils.FormatUtil;
-import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.domain.dify.AssoConfessionConversation;
 import cn.cslg.pas.domain.dify.AssoConfessionSessionFile;
 import cn.cslg.pas.exception.ExceptionEnum;
@@ -70,6 +67,8 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
         }
         if (name != null && !name.isEmpty()) {
             name = DataUtils.getTextBeforeLastSignal(name, ".");
+        } else {
+            name = DateUtils.dateTimeToStr(new Date(), "yyyy-MM-dd") + "-会话";
         }
         ConfessionSession confessionSession = new ConfessionSession();
         confessionSession.setGuid(guid);

+ 79 - 10
src/main/java/cn/cslg/pas/service/dify/DifyTempleExportService.java

@@ -1,21 +1,28 @@
 package cn.cslg.pas.service.dify;
 
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.model.dify.generatePatentResult.ExportPatentDTO;
+import cn.cslg.pas.common.model.dify.generatePatentResult.PatentFileVO;
+import cn.cslg.pas.common.utils.DataUtils;
 import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.domain.business.ReportTemple;
+import cn.cslg.pas.domain.dify.ConfessionSession;
+import cn.cslg.pas.domain.dify.ImplementationMessage;
 import cn.cslg.pas.exception.ExceptionEnum;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.ReportTempleService;
 import cn.cslg.pas.service.common.FileManagerService;
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class DifyTempleExportService {
@@ -25,20 +32,82 @@ public class DifyTempleExportService {
     private FileManagerService fileManagerService;
     @Autowired
     private ReportTempleService reportTempleService;
+    @Autowired
+    private AssoConfessionSessionFileService assoConfessionSessionFileService;
+    @Autowired
+    private ConfessionSessionService confessionSessionService;
+
     /**
      * 导出专利申请文档
      */
-    public void exportPatentFile() throws Exception{
-           Integer confessionSessionId=0;
-           Integer templateId =19;
-           Map<String,Object> map =new HashMap<>();
+    public SystemFile exportPatentFile(ExportPatentDTO exportPatentDTO) throws Exception {
+        SystemFile systemFile = new SystemFile();
+        Integer confessionSessionId = exportPatentDTO.getConfessionSessionId();
+        Integer templateId = 21;
+        Map<String, Object> map = new HashMap<>();
+        ConfessionSession confessionSession = confessionSessionService.getById(confessionSessionId);
+        String result = confessionSession.getResultContent();
+        if (result == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "无结果可导出");
+        }
+        PatentFileVO patentFileVO = JSON.parseObject(result, PatentFileVO.class);
+        map = BeanUtil.beanToMap(patentFileVO);
+        String claim = patentFileVO.getClaim();
+        if (claim != null) {
+            String[] claimStrs = claim.split("\n");
+            List<String> claims = Arrays.asList(claimStrs);
+            map.put("claims", claims);
+        }
+        String inventionContent = patentFileVO.getInventionContent();
+        if (inventionContent != null) {
+            String[] inventionContentStrs = inventionContent.split("\n");
+            List<String> inventionContents = Arrays.asList(inventionContentStrs);
+            map.put("inventionContents", inventionContents);
+        }
+        String implementationMethod = patentFileVO.getImplementationMethod();
+        if (implementationMethod != null) {
+            String[] implementationMethodStrs = implementationMethod.split("\n");
+            List<String> implementationMethods = Arrays.asList(implementationMethodStrs);
+            List<ImplementationMessage> implementationMessages = new ArrayList<>();
+            int i = 1;
+            for (String item : implementationMethods) {
+                if (i % 3 == 0) {
+                    ImplementationMessage implementationMessage = implementationMessages.get(implementationMessages.size() - 1);
+                    implementationMessage.setEffect(item);
+                }
+                else if (i % 2 == 0) {
+                    ImplementationMessage implementationMessage = implementationMessages.get(implementationMessages.size() - 1);
+                    implementationMessage.setExplain(item);
+                }
+                else if (i % 1 == 0) {
+                    ImplementationMessage implementationMessage = new ImplementationMessage();
+                    implementationMessage.setClaimStr(item);
+                    implementationMessages.add(implementationMessage);
+                }
+                i++;
+            }
+            map.put("implementation", implementationMessages);
+        }
         ReportTemple reportTemplate = reportTempleService.getById(templateId);
         String templateFilePath = fileUtils.getPath(reportTemplate.getTemplatePath());
-        this.generateFile(map,templateFilePath,"");
-
+        String ids = this.generateFile(map, templateFilePath, confessionSession.getConversationName()+"-申请文档");
 
+        try {
+            String res = fileManagerService.getSystemFileFromFMS(Arrays.asList(ids));
+            List<SystemFile> systemFiles = JSONObject.parseArray(res, SystemFile.class);
+            if (systemFiles != null && systemFiles.size() > 0) {
+                systemFile = systemFiles.get(0);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (ids != null) {
+            assoConfessionSessionFileService.addOnlyFiles(confessionSessionId, 1, ids);
+        }
+        return systemFile;
 
     }
+
     public String generateFile(Map<String, Object> map, String templateFilePath, String name) throws Exception {
         XWPFTemplate xwpfTemplate = this.getTemplate(map, templateFilePath);
         String fileName = name + ".docx";

BIN
src/main/resources/file/reportTemple/patentApplyFile.docx