dengsixing 10 mesi fa
parent
commit
49c40e1a8a

+ 59 - 2
src/main/java/com/fdkankan/model/utils/ConvertUtils.java

@@ -1,12 +1,14 @@
 package com.fdkankan.model.utils;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.model.proto.Visionmodeldata;
 import com.fdkankan.model.proto.format.JsonFormat;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 public class ConvertUtils {
@@ -194,4 +196,59 @@ public class ConvertUtils {
             log.error(trace.toString());
         }
     }
+
+    public static String transferVisionUuidToIndex(String srcPath){
+        String visionJsonStr = readTxtFileToJson(srcPath);
+        JSONObject visionJson = JSON.parseObject(visionJsonStr);
+        JSONArray sweepLocationArr = visionJson.getJSONArray("sweepLocations");
+        Map<String, Integer> uuidIndexMap = new HashMap<>();
+        for (int i = 0; i < sweepLocationArr.size(); i++) {
+            JSONObject sweepLocationObj = (JSONObject)sweepLocationArr.get(i);
+            uuidIndexMap.put(sweepLocationObj.getString("uuid"), i);
+        }
+        for (Object o : sweepLocationArr) {
+            JSONObject sweepLocationObj = (JSONObject)o;
+            JSONArray visibles =  sweepLocationObj.getJSONArray("visibles");
+//			int[] visiblesArr = new int[visibles.size()];
+            List<Integer> visiblesList = new ArrayList<>();
+            for(int i = 0; i < visibles.size(); i++){
+                Integer index = uuidIndexMap.get(visibles.get(i));
+                if(Objects.isNull(index)){
+                    continue;
+                }
+                visiblesList.add(index);
+            }
+            sweepLocationObj.put("visibles", visiblesList);
+
+            if(sweepLocationObj.containsKey("visibles2")){
+                JSONArray visibles2 =  sweepLocationObj.getJSONArray("visibles2");
+//				int[] visiblesArr2 = new int[visibles2.size()];
+                List<Integer> visibles2List = new ArrayList<>();
+                for(int i = 0; i < visibles2.size(); i++){
+                    Integer index = uuidIndexMap.get(visibles2.get(i));
+                    if(Objects.isNull(index)){
+                        continue;
+                    }
+                    visibles2List.add(index);
+                }
+                sweepLocationObj.put("visibles2", visibles2List);
+            }
+
+            if(sweepLocationObj.containsKey("visibles3")){
+                JSONArray visibles3 =  sweepLocationObj.getJSONArray("visibles3");
+//				int[] visiblesArr3 = new int[visibles3.size()];
+                List<Integer> visibles3List = new ArrayList<>();
+                for(int i = 0; i < visibles3.size(); i++){
+                    Integer index = uuidIndexMap.get(visibles3.get(i));
+                    if(Objects.isNull(index)){
+                        continue;
+                    }
+                    visibles3List.add(index);
+                }
+                sweepLocationObj.put("visibles3", visibles3List);
+            }
+
+        }
+        return JSON.toJSONString(visionJson);
+    }
 }

+ 5 - 0
src/main/java/com/fdkankan/scene/httpclient/CustomHttpClient.java

@@ -6,6 +6,7 @@ import com.dtflys.forest.annotation.GetRequest;
 import com.dtflys.forest.annotation.JSONBody;
 import com.dtflys.forest.annotation.Post;
 import com.dtflys.forest.annotation.Var;
+import com.dtflys.forest.extensions.DownloadFile;
 
 import java.io.InputStream;
 
@@ -20,4 +21,8 @@ public interface CustomHttpClient {
     @GetRequest(url = "{url}", connectTimeout = 6000, readTimeout = 60000, maxRetryInterval = 5)
     InputStream downloadFileToInputStream(@Var("url") String url);
 
+    @GetRequest(url = "{url}", connectTimeout = 6000, readTimeout = 60000, maxRetryInterval = 5)
+    @DownloadFile(dir = "{dir}", filename = "{fileName}")
+    void downloadFile(@Var("url") String url, @Var("dir") String dir, @Var("fileName") String fileName);
+
 }

+ 2 - 0
src/main/java/com/fdkankan/scene/service/FYunFileService.java

@@ -12,4 +12,6 @@ public interface FYunFileService {
 
     void deleteFile(String num, Integer subgroup, String key);
 
+    String downloadFile(String num, Integer subgroup, String key, String dir, String fileName);
+
 }

+ 16 - 0
src/main/java/com/fdkankan/scene/service/impl/FYunFileServiceImpl.java

@@ -33,6 +33,9 @@ public class FYunFileServiceImpl implements FYunFileService {
     @Override
     public String getFileContent(String key, Integer subgroup) throws IOException {
         SceneFileMapping sceneFileMapping = sceneFileMappingService.getByKey(key, subgroup);
+        if(Objects.isNull(sceneFileMapping)){
+            return null;
+        }
         String content = null;
         try (InputStream inputStream = customHttpClient.downloadFileToInputStream(sceneFileMapping.getUrl())){
             content =  IoUtil.read(inputStream, StandardCharsets.UTF_8);
@@ -85,4 +88,17 @@ public class FYunFileServiceImpl implements FYunFileService {
         File tempFile = FileUtil.createTempFile(UUID.fastUUID().toString(), suffix, new File("D:\\test2"), true);
         FileUtil.writeBytes("nihsd灌灌灌灌".getBytes(StandardCharsets.UTF_8), tempFile);
     }
+
+    @Override
+    public String downloadFile(String num, Integer subgroup, String key, String dir, String fileName) {
+        SceneFileMapping sceneFileMapping = sceneFileMappingService.getByKey(key, subgroup);
+        if(Objects.isNull(sceneFileMapping)){
+            return null;
+        }
+        customHttpClient.downloadFile(sceneFileMapping.getUrl(), dir, fileName);
+        if(dir.endsWith("/")){
+            dir += "/";
+        }
+         return dir + fileName;
+    }
 }

+ 15 - 1
src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -560,6 +560,12 @@ public class SceneProServiceImpl implements ISceneProService {
         return ResultData.ok();
     }
 
+    public static void main(String[] args) {
+
+        String tmpDirPath = FileUtil.getTmpDirPath();
+        System.out.println(tmpDirPath);
+    }
+
     @Override
     public ResultData saveRoam(BaseDataParamVO param) throws Exception {
 
@@ -597,7 +603,15 @@ public class SceneProServiceImpl implements ISceneProService {
 
 //        String str = FileUtils.readFile(localDataPath + "vision.json");
 
-        String str = fYunFileService.getFileContent(viewImagesPath + "vision.txt", param.getSubgroup());
+        String modeldataKey = viewImagesPath + "vision.modeldata";
+        String tempPath = FileUtil.getTmpDirPath() + UUID.randomUUID() + "/";
+        String localModeldataPath = fYunFileService.downloadFile(param.getNum(), param.getSubgroup(), modeldataKey, tempPath, "vision.modeldata");
+        String localVisionTxtPath = tempPath + "vision.txt";
+        ConvertUtils.convertVisionmodeldataToTxt(localModeldataPath, localVisionTxtPath);
+//        String str = ConvertUtils.transferVisionUuidToIndex(localVisionTxtPath);
+
+        String str = FileUtil.readUtf8String(localVisionTxtPath);
+//        String str = fYunFileService.getFileContent(viewImagesPath + "vision.txt", param.getSubgroup());
         JSONObject json = JSONObject.parseObject(str);
         JSONArray panos = json.getJSONArray("sweepLocations");
         for (int i = 0; i < panos.size(); ++i) {

+ 17 - 16
src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -109,23 +109,24 @@ public class SceneServiceImpl extends ServiceImpl<SceneMapper, Scene> implements
     public void outFileByKey2(String key, Integer subgroup, HttpServletResponse response) throws IOException {
         SceneFileMapping one = sceneFileMappingService.getOne(new LambdaQueryWrapper<SceneFileMapping>().eq(SceneFileMapping::getKey, key).eq(SceneFileMapping::getSubgroup, subgroup));
         if(Objects.isNull(one)){
-            response.setStatus(404);
-        }
-        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
-        response.setHeader("Content-Disposition", "attachment; filename=\"" + FileUtil.getName(key) + "\"");
-        try(
-                InputStream inputStream = customHttpClient.downloadFileToInputStream(one.getUrl());
-                ServletOutputStream outputStream = response.getOutputStream())
-        {
-            byte[] buffer = new byte[1024];
-            int len;
-            while ((len = inputStream.read(buffer)) != -1) {
-                outputStream.write(buffer, 0, len);
+            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+        }else{
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            response.setHeader("Content-Disposition", "attachment; filename=\"" + FileUtil.getName(key) + "\"");
+            try(
+                    InputStream inputStream = customHttpClient.downloadFileToInputStream(one.getUrl());
+                    ServletOutputStream outputStream = response.getOutputStream())
+            {
+                byte[] buffer = new byte[1024];
+                int len;
+                while ((len = inputStream.read(buffer)) != -1) {
+                    outputStream.write(buffer, 0, len);
+                }
+                outputStream.flush();
+            }catch (Exception e){
+                log.info("读取文件失败:key:{},url:{}", one.getKey(), one.getUrl());
+                throw new RuntimeException(e);
             }
-            outputStream.flush();
-        }catch (Exception e){
-            log.info("读取文件失败:key:{},url:{}", one.getKey(), one.getUrl());
-            throw new RuntimeException(e);
         }
     }