Przeglądaj źródła

增加实时请求算法获取文本内容

guanz 1 rok temu
rodzic
commit
d3d996a52b

+ 30 - 0
src/main/java/com/pavis/backend/slim/project/system/client/AlgKgTestClient.java

@@ -0,0 +1,30 @@
+package com.pavis.backend.slim.project.system.client;
+
+import com.pavis.backend.slim.framework.config.AlgKgConfig;
+import feign.Request;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @version: java version 1.8
+ * @Author: Guan H.J.
+ * @description: 调用算法接口服务
+ * @date: 2023-10-26 9:47
+ */
+@FeignClient(value = "algKgTestClient", url = "${algorithm.test.url}", configuration = AlgKgConfig.class)
+public interface AlgKgTestClient {
+
+    /**
+     * 发送文档需转换为txt的数据给算法服务。
+     *  入参:{"files":[{"fileId":"","objectKey":"","identifier":""}]}
+     *  出参:无需关注。
+     * @param data
+     * @return
+     */
+    @PostMapping(value = "/testapi", produces = {MediaType.APPLICATION_JSON_VALUE},
+            consumes="application/json")
+    String testConvertToTxt(String data, Request.Options options);
+
+
+}

+ 5 - 2
src/main/java/com/pavis/backend/slim/project/system/controller/AnnotationController.java

@@ -15,6 +15,7 @@ import com.pavis.backend.slim.project.system.service.AnnotationListService;
 import com.pavis.backend.slim.project.system.service.EntityLablesRelationService;
 import com.pavis.backend.slim.project.system.service.EntityLablesSpanService;
 import com.pavis.backend.slim.project.system.service.GenerateGraphService;
+import com.pavis.backend.slim.project.system.service.SysFileService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -61,6 +62,9 @@ public class AnnotationController {
     @Autowired
     private GenerateGraphService generateGraphService;
 
+    @Autowired
+    private SysFileService sysFileService;
+
     @ApiOperation("获取标注数据列表接口")
     @PostMapping("/getAnnotationLists")
     public AjaxResult getAnnotationLists(@RequestBody AnnotationListParam annotationListParam) {
@@ -276,8 +280,7 @@ public class AnnotationController {
     public AjaxResult handsToParseTxt(@RequestParam("kgId") String kgId,@RequestParam("fileId") String fileId) {
         log.info("用户手动解析txt文本内容 kgId:{},fileId:{}",kgId,fileId);
         if (null != kgId && StringUtils.isNotEmpty(kgId) && null != fileId && StringUtils.isNotEmpty(fileId)) {
-
-            return AjaxResult.success("算法通知后端更新文本内容成功");
+            return AjaxResult.success("算法通知后端更新文本内容成功",sysFileService.handsToParseTxt(kgId,fileId));
         }
         return AjaxResult.error(1001, "参数不能为空");
     }

+ 1 - 0
src/main/java/com/pavis/backend/slim/project/system/service/impl/AnnotationListServiceImpl.java

@@ -221,6 +221,7 @@ public class AnnotationListServiceImpl extends ServiceImpl<AnnotationListMapper,
                         } else {
                             if (null != algRes.getErrorCode() && "-1".equals(algRes.getErrorCode()) && false == upFlag) {
                                 for (AnnotationList hasNullText : hasNullTexts) {
+                                    hasNullText.setTextContent("");
                                     hasNullText.setParseStatus(-1);
                                     hasNullText.setCreateBy(SecurityUtils.getUsername());
                                     int saveRes = baseMapper.insert(hasNullText);

+ 56 - 20
src/main/java/com/pavis/backend/slim/project/system/service/impl/SysFileServiceImpl.java

@@ -15,6 +15,7 @@ import com.pavis.backend.slim.common.utils.FileUtils;
 import com.pavis.backend.slim.common.utils.SecurityUtils;
 import com.pavis.backend.slim.framework.minio.MinioStorage;
 import com.pavis.backend.slim.project.system.client.AlgKgClient;
+import com.pavis.backend.slim.project.system.client.AlgKgTestClient;
 import com.pavis.backend.slim.project.system.domain.AnnotationList;
 import com.pavis.backend.slim.project.system.domain.SysFile;
 import com.pavis.backend.slim.project.system.domain.annotation.ConvertAlgRes;
@@ -23,6 +24,7 @@ import com.pavis.backend.slim.project.system.domain.vo.TreeFile;
 import com.pavis.backend.slim.project.system.mapper.AnnotationListMapper;
 import com.pavis.backend.slim.project.system.mapper.SysFileMapper;
 import com.pavis.backend.slim.project.system.service.SysFileService;
+import feign.Request;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +51,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -68,6 +71,9 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
     @Resource
     private AnnotationListMapper annotationListMapper;
 
+    @Autowired
+    private AlgKgTestClient algKgTestClient;
+
     @Override
     public SysFile uploadFile(MultipartFile file) {
         SysFile sysFile = uploadFile(file, "", Constant.DIR_SEP, false);
@@ -345,7 +351,26 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
                                 int updateText = baseMapper.updateById(sysFile);
                                 log.info("更新文本内容结果updateText:{}", updateText);
                             }
-                        } else {
+                            // 更新标注数据。
+                            List<AnnotationList> annotationLists = annotationListMapper.selectList(new QueryWrapper<AnnotationList>().lambda().eq(AnnotationList::getFileId, algRes.getFileId()));
+                            if (!CollectionUtils.isEmpty(annotationLists)){
+                                for (AnnotationList annotationList : annotationLists) {
+                                    annotationList.setParseStatus(1);
+                                    annotationList.setTextContent(algRes.getText());
+                                    annotationListMapper.updateById(annotationList);
+                                }
+                            }
+                        }else if (null != algRes.getErrorCode() && "-1".equals(algRes.getErrorCode())){
+                            log.info("算法解析txt文本内容出错,无法解析。");
+                            List<AnnotationList> annotationLists = annotationListMapper.selectList(new QueryWrapper<AnnotationList>().lambda().eq(AnnotationList::getFileId, algRes.getFileId()));
+                            if (!CollectionUtils.isEmpty(annotationLists)){
+                                for (AnnotationList annotationList : annotationLists) {
+                                    annotationList.setParseStatus(-1);
+                                    annotationList.setTextContent("");
+                                    annotationListMapper.updateById(annotationList);
+                                }
+                            }
+                        }else {
                             log.info("算法文档转换txt接口 TXT未解析成功:{}", JSON.toJSONString(algRes));
                         }
                     }
@@ -405,25 +430,36 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
     @Override
     public Boolean handsToParseTxt(String kgId, String fileId) {
         List<SysFile> sysFiles = baseMapper.selectList(new QueryWrapper<SysFile>().lambda().eq(SysFile::getFileId, fileId));
-        String objectKey = "";
-        String identifier = "";
-        if (!CollectionUtils.isEmpty(sysFiles)){
-            objectKey = sysFiles.get(0).getObjectKey();
-            identifier = sysFiles.get(0).getIdentifier();
-        }
-        List<ConvertDocToTxt> convertDocToTxts = new ArrayList<>();
-        convertDocToTxts.add(ConvertDocToTxt.builder().fileId(fileId).objectKey(objectKey).identifier(identifier).isNew(false).build());
-        if (!CollectionUtils.isEmpty(convertDocToTxts)) {
-            Map<String, Object> algMap = new HashMap<>();
-            algMap.put("files", convertDocToTxts);
-            try {
-                // 调用算法,获取文档转换为txt的文本内容。
-                String convertToTxtResTmp = algKgClient.convertToTxt(JSON.toJSONString(algMap));
-                dealAlgTxtRes(convertToTxtResTmp);
-            }catch (Exception ex){
-                ex.printStackTrace();
-                log.info("手动调用算法获取txt文本内容返回结果 ex:{}",ex);
-                return false;
+        if (!CollectionUtils.isEmpty(sysFiles) && null == sysFiles.get(0).getTextContent()){
+            String objectKey = "";
+            String identifier = "";
+            if (!CollectionUtils.isEmpty(sysFiles)){
+                objectKey = sysFiles.get(0).getObjectKey();
+                identifier = sysFiles.get(0).getIdentifier();
+            }
+            List<ConvertDocToTxt> convertDocToTxts = new ArrayList<>();
+            // convertDocToTxts.add(ConvertDocToTxt.builder().fileId(fileId).objectKey(objectKey).identifier(identifier).isNew(false).build());
+            convertDocToTxts.add(ConvertDocToTxt.builder().fileId(fileId).objectKey(objectKey).identifier(identifier).isNew(true).build());
+            if (!CollectionUtils.isEmpty(convertDocToTxts)) {
+                Map<String, Object> algMap = new HashMap<>();
+                algMap.put("files", convertDocToTxts);
+                log.info("实时请求算法获取txt内容入参 convertDocToTxts:{}",JSON.toJSONString(algMap));
+                try {
+                    // 调用算法,获取文档转换为txt的文本内容。
+                    // String convertToTxtResTmp = algKgClient.convertToTxt(JSON.toJSONString(algMap));
+                    // Thread.sleep(20000);
+                    // log.info("实时请求算法获取解析结果 convertToTxtResTmp:{}",convertToTxtResTmp);
+                    // dealAlgTxtRes(convertToTxtResTmp);
+
+                    // todo 实时调用算法获取解析得txt文本内容,。
+                    String convertToTxtResTmp = algKgTestClient.testConvertToTxt(JSON.toJSONString(algMap),new Request.Options(30, TimeUnit.SECONDS, 30, TimeUnit.SECONDS, true));
+                    log.info("实时请求算法获取解析结果 convertToTxtResTmp:{}",convertToTxtResTmp);
+                    dealAlgTxtRes(convertToTxtResTmp);
+                }catch (Exception ex){
+                    ex.printStackTrace();
+                    log.info("手动调用算法获取txt文本内容返回结果 ex:{}",ex);
+                    return false;
+                }
             }
         }
         return true;

+ 1 - 1
src/main/java/com/pavis/backend/slim/project/system/service/impl/SysKgServiceImpl.java

@@ -112,7 +112,7 @@ public class SysKgServiceImpl extends ServiceImpl<SysKgMapper, SysKg> implements
 
     @Autowired
     private SysEntityAllMapper sysEntityAllMapper;
-    @Value("${algorithm.creat.url}")
+    @Value("${algorithm.create.url}")
     private String url;
 
     @Value("${pavis.profile}")

+ 5 - 1
src/main/resources/application-ghj.yml

@@ -74,10 +74,12 @@ feign:
     max-connections: 200
     # 每个路径的最大连接数
     max-connections-per-route: 50
+    ok-http:
+      read-timeout: 30000
 
 #调用算法接口
 algorithm:
-  creat:
+  create:
     # 将所需要生成图谱的文件,传给算法的接口
     url: http://192.168.1.150:8900/data_access
     # 文档转换为txt文本内容接口。
@@ -87,6 +89,8 @@ algorithm:
     # 通用图谱调用算法接口。即未创建实体和关系。
   universalGraph:
     url: http://192.168.1.127:8068
+  test:
+    url: http://192.168.1.202:19003
 #PageHelper 分页插件配置
 pagehelper:
   helperDialect: mysql

+ 2 - 2
src/main/resources/application.yml

@@ -1,7 +1,7 @@
 spring:
   profiles:
-#    active: ghj
-    active: local
+    active: ghj
+#    active: local
   # 国际化资源文件路径
   messages:
     basename: i18n/messages