Bladeren bron

第三方导入增加子项key,导出后其他类型文件不覆盖

欧阳劲驰 1 maand geleden
bovenliggende
commit
bcb1d98f2e

+ 13 - 12
src/main/java/com/shkpr/service/alambizplugin/bizservice/GisSurveyThirdExportBizService.java

@@ -36,7 +36,7 @@ public class GisSurveyThirdExportBizService {
     /**
      * 任务缓存
      */
-    private final static Map<String, ListenableFuture<CommAsyncResult<String>>> TASK_CACHE = new ConcurrentHashMap<>();
+    private final static Map<String, ListenableFuture<CommAsyncResult<Map<String, String>>>> TASK_CACHE = new ConcurrentHashMap<>();
     /**
      * 开始时间缓存
      */
@@ -73,23 +73,24 @@ public class GisSurveyThirdExportBizService {
      * @param fileType 导出文件类型
      * @return 转换结果
      */
-    public CommAsyncResult<String> thirdExport(String jobId, FileTypeEnum fileType) {
+    public CommAsyncResult<Map<String, String>> thirdExport(String jobId, FileTypeEnum fileType) {
         //获取上次结果
-        CommAsyncResult<String> lastResult = getResult(jobId);
+        CommAsyncResult<Map<String, String>> lastResult = getResult(jobId);
 
         //失败/进行中处理
         if (lastResult != null && !Objects.equals(CommAsyncStatusEnum.SUCCESS.getCode(), lastResult.getStatus()))
             return lastResult;
 
         //文件结果flag
-        final String FLAG = GisSurveyThirdExporter.RESULT_PREFIX + fileType.getName() + "-" + jobId;
+        final String FLAG = GisSurveyThirdExporter.RESULT_PREFIX + jobId;
         //获取文件结果
-        CommAsyncResult<String> fileResult = asyncResultManager.getResult(FLAG, new TypeReference<CommAsyncResult<String>>() {
+        CommAsyncResult<Map<String, String>> fileResult = asyncResultManager.getResult(FLAG, new TypeReference<CommAsyncResult<Map<String, String>>>() {
         });
         //获取数据更新时间
         LocalDateTime refreshTime = jobInfoService.findRefreshTimeByUid(jobId);
-        //判断文件结果落后时间
-        if (fileResult != null && fileResult.getRefreshTime() != null && refreshTime != null) {
+        //直接返回文件结果判断:结果\刷新时间\数据不为空,结果数据包含当前项,文件结果落后数据库
+        if (fileResult != null && fileResult.getRefreshTime() != null && refreshTime != null
+                && fileResult.getData() != null && fileResult.getData().containsKey(fileType.getName())) {
             //文件结果落后数据间隔
             Duration lags = Duration.between(fileResult.getRefreshTime(), refreshTime);
             //超出间隔,直接返回
@@ -111,15 +112,15 @@ public class GisSurveyThirdExportBizService {
      * @param jobId 任务id
      * @return 结果
      */
-    public CommAsyncResult<String> getResult(String jobId) {
+    public CommAsyncResult<Map<String, String>> getResult(String jobId) {
         //获取已存在的任务
-        ListenableFuture<CommAsyncResult<String>> previousFuture = TASK_CACHE.get(jobId);
+        ListenableFuture<CommAsyncResult<Map<String, String>>> previousFuture = TASK_CACHE.get(jobId);
 
         //判断完成
         if (previousFuture != null && previousFuture.isDone()) {
             try {
                 //获取结果
-                CommAsyncResult<String> result = previousFuture.get();
+                CommAsyncResult<Map<String, String>> result = previousFuture.get();
                 //如成功/失败,则直接返回
                 if (Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode()) ||
                         Objects.equals(result.getStatus(), GisSurveConvertStatusEnum.SUCCESS.getCode()))
@@ -149,11 +150,11 @@ public class GisSurveyThirdExportBizService {
      */
     private void startTask(String jobId, FileTypeEnum fileType) {
         //获取已存在的任务
-        ListenableFuture<CommAsyncResult<String>> previousFuture = TASK_CACHE.get(jobId);
+        ListenableFuture<CommAsyncResult<Map<String, String>>> previousFuture = TASK_CACHE.get(jobId);
         //已结束判断,删除缓存
         if (previousFuture != null && (previousFuture.isDone() || previousFuture.isCancelled())) removeCache(jobId);
         //执行异步任务
-        ListenableFuture<CommAsyncResult<String>> future = thirdExporter.thirdExportTask(jobId, fileType);
+        ListenableFuture<CommAsyncResult<Map<String, String>>> future = thirdExporter.thirdExportTask(jobId, fileType);
         //任务超时
         taskScheduler.schedule(() -> {
             if (!future.isCancelled() && !future.isDone() && stopTask(future)) {

+ 16 - 4
src/main/java/com/shkpr/service/alambizplugin/components/GisSurveyThirdExporter.java

@@ -1,5 +1,6 @@
 package com.shkpr.service.alambizplugin.components;
 
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.global.base.log.LogLevelFlag;
 import com.global.base.log.LogPrintMgr;
 import com.shkpr.service.alambizplugin.commtools.ThirdImportTemplateUtils;
@@ -31,6 +32,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -81,9 +83,9 @@ public class GisSurveyThirdExporter {
      * @return 导出结果
      */
     @Async
-    public ListenableFuture<CommAsyncResult<String>> thirdExportTask(String jobId, FileTypeEnum fileType) {
+    public ListenableFuture<CommAsyncResult<Map<String, String>>> thirdExportTask(String jobId, FileTypeEnum fileType) {
         //构建返回
-        CommAsyncResult<String> result = CommAsyncResult.fail(jobId);
+        CommAsyncResult<Map<String, String>> result = CommAsyncResult.fail(jobId);
         try {
             LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBizType, mStrClassName
                     , String.format(
@@ -107,7 +109,7 @@ public class GisSurveyThirdExporter {
             List<GisMetadataLayerTemplate> lineLayerTemplates = layerTemplateService.findByKeyIn(lineLayer);
 
             //结果flag
-            final String FLAG = RESULT_PREFIX + fileType.getName() + "-" + jobId;
+            final String FLAG = RESULT_PREFIX + jobId;
 
             //创建临时文件夹
             if (!asyncResultManager.createTempDirectory(FLAG))
@@ -127,11 +129,21 @@ public class GisSurveyThirdExporter {
                 return new AsyncResult<>(result);
             }
 
+            //获取上次结果
+            CommAsyncResult<Map<String, String>> lastResult = asyncResultManager.getResult(FLAG, new TypeReference<CommAsyncResult<Map<String, String>>>() {
+            });
+
+            //设置数据
+            Map<String, String> data = new HashMap<>();
+            if (lastResult != null && lastResult.getData() != null) data = lastResult.getData();
+            data.put(fileType.getName(), FLAG + "/" + outputPath.getFileName().toString());
+
             //导出完成
             result.setStatus(CommAsyncStatusEnum.SUCCESS.getCode());
             result.setCompleteTime(LocalDateTime.now());
-            result.setData(FLAG + "/" + outputPath.getFileName().toString());
             result.setRefreshTime(refreshTime);
+            result.setData(data);
+            result.setSubitemKeys(Collections.singletonList(fileType.getName()));
 
             //写入结果
             Path resultPath = asyncResultManager.writeJson(result, FLAG, AsyncResultManager.RESULT_FILE_NAME);

+ 4 - 3
src/main/java/com/shkpr/service/alambizplugin/controller/ApiGisSurveyController.java

@@ -46,6 +46,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -602,7 +603,7 @@ public class ApiGisSurveyController {
      * @return cad转换结果
      */
     @GetMapping(value = ApiURI.URI_XXX_THIRD_EXPORT)
-    public ResponseRes<CommAsyncResult<String>> thirdExport(HttpServletRequest request
+    public ResponseRes<CommAsyncResult<Map<String, String>>> thirdExport(HttpServletRequest request
             , @RequestHeader(value = ApiURI.HEADER_CLIENT_TYPE, required = false) String strClientType
             , @RequestHeader(value = ApiURI.HEADER_USER_AGENT, required = false) String strUserAgent
             , @RequestParam(value = "jobId", required = false) String jobId
@@ -630,7 +631,7 @@ public class ApiGisSurveyController {
                         , jobId));
 
         //构建result
-        ResponseRes<CommAsyncResult<String>> resResult = new ResponseRes<>();
+        ResponseRes<CommAsyncResult<Map<String, String>>> resResult = new ResponseRes<>();
         resResult.setRescode(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrCode());
         resResult.setResmsg(ResponseCode.RESULT_ASYNC_TASK_FAILED.toStrMsg());
 
@@ -639,7 +640,7 @@ public class ApiGisSurveyController {
         if (fileTypeEnum == null) fileTypeEnum = FileTypeEnum.EXCEL;
 
         //执行第三方导出
-        CommAsyncResult<String> result = thirdExportBizService.thirdExport(jobId, fileTypeEnum);
+        CommAsyncResult<Map<String, String>> result = thirdExportBizService.thirdExport(jobId, fileTypeEnum);
 
         //执行成功
         if (result != null && !Objects.equals(result.getStatus(), CommAsyncStatusEnum.FAIL.getCode())) {

+ 3 - 2
src/main/java/com/shkpr/service/alambizplugin/dto/CommAsyncResult.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 通用异步结果
@@ -25,9 +26,9 @@ public class CommAsyncResult<T> {
      */
     private Integer status;
     /**
-     * 请求入参
+     * 子项key
      */
-    private Object param;
+    private List<String> subitemKeys;
     /**
      * 结果数据
      */