dengsixing пре 2 месеци
родитељ
комит
a3e487c119

+ 3 - 0
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -197,6 +197,9 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             //下载资源到本地
             this.downLoadSource(message, message.getPath());
 
+            //校验文件是否完整
+            jmgaService.checkFileWhole(uuid, dataSource, fdageData);
+
             List<String> linkPanTargetList = linkPanService.genLinkPanPre(num);
             if(CollUtil.isNotEmpty(linkPanTargetList)){
                 Map<String, Object> ext = message.getExt();

+ 3 - 0
src/main/java/com/fdkankan/contro/service/IJmgaService.java

@@ -3,6 +3,7 @@ package com.fdkankan.contro.service;
 import com.alibaba.fastjson.JSONObject;
 
 import java.util.Map;
+import java.util.Set;
 
 public interface IJmgaService {
 
@@ -10,4 +11,6 @@ public interface IJmgaService {
 
     void sendStatus(Map<String, Object> param);
 
+    Set<String> checkLackFile(String dataSource);
+
 }

+ 60 - 4
src/main/java/com/fdkankan/contro/service/impl/JmgaServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.contro.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -13,16 +14,15 @@ import com.fdkankan.contro.service.IJmgaService;
 import com.fdkankan.contro.service.IOrigFileUploadBatchService;
 import com.fdkankan.contro.service.IOrigFileUploadService;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.utils.SceneUtil;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.io.File;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -96,4 +96,60 @@ public class JmgaServiceImpl implements IJmgaService {
     public void sendStatus(Map<String, Object> param) {
         mqProducer.sendByWorkQueue("jmga-event-notice", param);
     }
+
+    @Override
+    public Set<String> checkLackFile(String dataSource) {
+
+        String dataFdagePath = dataSource.concat(File.separator).concat("data.fdage");
+        JSONObject fdageData = JSON.parseObject(FileUtil.readUtf8String(dataFdagePath));
+
+        int camType = fdageData.getJSONObject("cam").getIntValue("type");
+
+        //从data.fdage中获取需要上传的文件列表
+        JSONArray points = fdageData.getJSONArray("points");
+        if(CollUtil.isEmpty(points)){
+            return;
+        }
+
+        List<String> fileList = new ArrayList<>();
+        for (Object point : points) {
+            JSONObject pointJson = (JSONObject) point;
+            if(camType == 5){//圆周率相机
+                String name = pointJson.getString("name");
+                fileList.add(name);
+            }else{//四维相机
+                JSONArray imgs = pointJson.getJSONArray("imgs");
+                if(CollUtil.isEmpty(imgs)){
+                    continue;
+                }
+                for (Object img : imgs) {
+                    JSONObject imgJson = (JSONObject) img;
+                    String name = imgJson.getString("name");
+                    fileList.add(name);
+                }
+            }
+        }
+
+        //查询当前待通知计算批次文件是否存在
+        List<OrigFileUploadBatch> batchList = origFileUploadBatchService.list(new LambdaQueryWrapper<OrigFileUploadBatch>().eq(OrigFileUploadBatch::getUuid, uuid));
+        if(CollUtil.isNotEmpty(batchList)){
+            Set<String> batchIds = batchList.stream().map(v -> v.getBatchId()).collect(Collectors.toSet());
+            List<OrigFileUpload> origFileList = origFileUploadService.list(new LambdaQueryWrapper<OrigFileUpload>().in(OrigFileUpload::getBatchId, batchIds));
+            //过滤出不存在的
+            fileList = fileList.stream().filter(v -> origFileList.stream().noneMatch(k -> k.getFileName().equals(v))).collect(Collectors.toList());
+        }
+
+//        //查询oss文件目录是否存在
+//        String homePath = SceneUtil.getHomePath(dataSource);
+//        List<String> ossKeyList = fileServiceInterface.listRemoteFiles(homePath);
+//        fileList = fileList.stream().filter(v->ossKeyList.stream().noneMatch(k->FileUtil.getName(k).equals(v))).collect(Collectors.toList());
+//
+        if(CollUtil.isNotEmpty(fileList)){
+            String args = JSON.toJSONString(fileList);
+            if(fileList.size() > 5){
+                args =  fileList.size() +  "个文件";
+            }
+            throw new BusinessException(ErrorCode.FAILURE_CODE_4001, args);
+        }
+    }
 }

+ 0 - 3
src/main/java/com/fdkankan/contro/service/impl/SceneFileBuildServiceImpl.java

@@ -2462,9 +2462,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 throw new RuntimeException("config.json 文件有误!");
             }
 
-            //校验文件是否完整
-            jmgaService.checkFileWhole(uuid, dataSource, fdageData);
-
             //推送开始上传状态
 
             //调注册用户接口