Преглед изворни кода

Merge branch 'project-jmga-2.2.0-2.0.1' into project-jmga-dev

dengsixing пре 2 недеља
родитељ
комит
3cef2cf3e1

+ 57 - 23
src/main/java/com/fdkankan/contro/mq/listener/UploadShootingListener.java

@@ -1,11 +1,10 @@
 package com.fdkankan.contro.mq.listener;
 
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.CommonSuccessStatus;
 import com.fdkankan.common.constant.SceneStatus;
-import com.fdkankan.contro.constant.RedisConstants;
 import com.fdkankan.contro.entity.*;
 import com.fdkankan.contro.service.*;
 import com.fdkankan.contro.util.HttpUtilExt;
@@ -22,7 +21,10 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 @Slf4j
 @Component
@@ -48,6 +50,8 @@ public class UploadShootingListener {
     private IScenePlusExtService scenePlusExtService;
     @Autowired
     private ISceneEditControlsService sceneEditControlsService;
+    @Autowired
+    private UploadShootingService uploadShootingService;
 
 
     @RabbitListener(
@@ -57,39 +61,69 @@ public class UploadShootingListener {
         String msg = new String(message.getBody(), StandardCharsets.UTF_8);
         JSONObject params = JSONObject.parseObject(msg);
         String num = params.getString("sceneCode");
-        String batchId = params.getString("batchId");
         Integer index = params.getInteger("index");
         String uuid = params.getString("uuid");
         try {
 
             //查出所有uuid相关的上传中的点位批次号
+            OrigFileUploadBatch condition = new OrigFileUploadBatch();
+            condition.setPtIndex(index);
+            condition.setUuid(uuid);
+            condition.setCallType(2);
+            condition.setStatus(0);
+            List<OrigFileUploadBatch> batches = origFileUploadBatchService.listPreviewByCondition(condition);
+
+            if(CollUtil.isEmpty(batches)){
+                return;
+            }
 
+            Set<Integer> indexs = new HashSet<>();
+            String basePath = ConstantFilePath.BUILD_MODEL_PATH + "upload_while_shooting/" + uuid + "/";
             //遍历检查点位相关文件是否齐全,如果齐全改为进入计算
+            List<OrigFileUploadBatch> updateList = new ArrayList<>();
+            for (OrigFileUploadBatch batch : batches) {
+                List<OrigFileUpload> fileUploadList = origFileUploadService.getByBatchId(batch.getBatchId());
+                String workPath = basePath;
+                if(index != -1){
+                    workPath = workPath + index + "/";
+                }
+                //下载文件
+                for (OrigFileUpload origFileUpload : fileUploadList) {
+                    HttpUtilExt.downloadFileAndCheck(origFileUpload.getFileUrl(), workPath + origFileUpload.getFileName(), 60000);
+                }
+
+                if(batch.getPtIndex() != null && batch.getPtIndex() != -1){
+                    //如果是点位上传批次,需要校验文件上传是否齐全
+                    boolean lackFille = uploadShootingService.checkLackFille(batch.getPtIndex(), fileUploadList);
+                    if(!lackFille){
+                        indexs.add(batch.getPtIndex());
+                        updateList.add(batch);
+                    }
+                }else{
+                    updateList.add(batch);
+                }
+            }
 
-            //下载文件
-
-            //调用算法
-
-            //上传文件
-
-            //写表
-
-            //处理删除点位
-
+            JSONObject playLoad = new JSONObject();
+            playLoad.put("uuid", uuid);
+            playLoad.put("path", basePath);
+            if(indexs.size() > 0){
+                playLoad.put("indexs", indexs);
+            }else if(index == -1){
+                playLoad.put("delIndex", true);
+            }else{
+                return;
+            }
+            mqProducer.sendByWorkQueue("laser-preview-scene-handler", playLoad);
 
-            List<OrigFileUpload> fileUploadList = origFileUploadService.getByBatchId(batchId);
-            String path = ConstantFilePath.BUILD_MODEL_PATH + "upload_while_shooting/" + uuid + "/" + index + "/";
-            for (OrigFileUpload origFileUpload : fileUploadList) {
-                String localPath = path + origFileUpload.getFileName();
-                HttpUtilExt.downloadFileAndCheck(origFileUpload.getFileUrl(), localPath, 300000);
+            if(CollUtil.isNotEmpty(updateList)){
+                updateList.stream().forEach(v->v.setStatus(2));
+                origFileUploadBatchService.updateBatchById(updateList);
             }
-            params.put("path", path);
-            mqProducer.sendByWorkQueue("laser-preview-scene-handler", params);
 
-            String batchKey = RedisConstants.BATCH_ID_UPLOAD_SHOOTING.replace("@uuid@", uuid).replace("@index@", String.valueOf(index));
-            redisUtil.del(batchKey);
+//            String batchKey = RedisConstants.BATCH_ID_UPLOAD_SHOOTING.replace("@uuid@", uuid).replace("@index@", String.valueOf(index));
+//            redisUtil.del(batchKey);
 
-            origFileUploadBatchService.update(new LambdaUpdateWrapper<OrigFileUploadBatch>().set(OrigFileUploadBatch::getStatus, 3).eq(OrigFileUploadBatch::getBatchId,batchId));
 
         }catch (Exception e){
             log.error("场景预览文件处理出错, num:{}", num, e);

+ 5 - 0
src/main/java/com/fdkankan/contro/service/IOrigFileUploadBatchService.java

@@ -3,6 +3,8 @@ package com.fdkankan.contro.service;
 import com.fdkankan.contro.entity.OrigFileUploadBatch;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 场景上传文件批次记录表 服务类
@@ -15,4 +17,7 @@ public interface IOrigFileUploadBatchService extends IService<OrigFileUploadBatc
 
     OrigFileUploadBatch getByCondition(OrigFileUploadBatch condition);
 
+
+    List<OrigFileUploadBatch> listPreviewByCondition(OrigFileUploadBatch condition);
+
 }

+ 2 - 0
src/main/java/com/fdkankan/contro/service/IOrigFileUploadService.java

@@ -19,5 +19,7 @@ public interface IOrigFileUploadService extends IService<OrigFileUpload> {
 
     OrigFileUpload getByBatchIdAndFileName(String batchId, String fileName);
 
+    OrigFileUpload getLastByFileName(String fileName);
+
 
 }

+ 5 - 0
src/main/java/com/fdkankan/contro/service/UploadShootingService.java

@@ -1,14 +1,19 @@
 package com.fdkankan.contro.service;
 
 import com.fdkankan.contro.bean.SendCallAlgorithmDetail;
+import com.fdkankan.contro.entity.OrigFileUpload;
 import com.fdkankan.contro.vo.SendCallAlgorithmParam;
 
+import java.util.List;
+
 public interface UploadShootingService {
 
     void uploadFile(SendCallAlgorithmParam param) throws InterruptedException;
 
     void build(SendCallAlgorithmDetail detail) throws Exception;
 
+    boolean checkLackFille(Integer index, List<OrigFileUpload> fileUploadList);
+
 
 
 

+ 16 - 0
src/main/java/com/fdkankan/contro/service/impl/OrigFileUploadBatchServiceImpl.java

@@ -8,6 +8,7 @@ import com.fdkankan.contro.mapper.IOrigFileUploadBatchMapper;
 import com.fdkankan.contro.service.IOrigFileUploadBatchService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -45,4 +46,19 @@ public class OrigFileUploadBatchServiceImpl extends ServiceImpl<IOrigFileUploadB
 
         return this.getOne(wrapper);
     }
+
+    @Override
+    public List<OrigFileUploadBatch> listPreviewByCondition(OrigFileUploadBatch condition) {
+        LambdaQueryWrapper<OrigFileUploadBatch> wrapper = new LambdaQueryWrapper();
+        wrapper.orderByDesc(OrigFileUploadBatch::getPtIndex);
+        wrapper.eq(OrigFileUploadBatch::getUuid, condition.getUuid());
+        wrapper.eq(OrigFileUploadBatch::getCallType, 2);
+        if(Objects.nonNull(condition.getStatus())){
+            wrapper.eq(OrigFileUploadBatch::getStatus, condition.getStatus());
+        }
+        if(Objects.nonNull(condition.getPtIndex())){
+            wrapper.eq(OrigFileUploadBatch::getPtIndex, condition.getPtIndex());
+        }
+        return this.list(wrapper);
+    }
 }

+ 10 - 3
src/main/java/com/fdkankan/contro/service/impl/OrigFileUploadServiceImpl.java

@@ -8,10 +8,7 @@ import com.fdkankan.contro.mapper.IOrigFileUploadMapper;
 import com.fdkankan.contro.service.IOrigFileUploadService;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * <p>
@@ -38,4 +35,14 @@ public class OrigFileUploadServiceImpl extends ServiceImpl<IOrigFileUploadMapper
         return list.get(0);
     }
 
+    @Override
+    public OrigFileUpload getLastByFileName(String fileName) {
+        OrigFileUpload origFileUpload = this.getOne(
+                new LambdaQueryWrapper<OrigFileUpload>()
+                .eq(OrigFileUpload::getFileName, fileName)
+                .orderByDesc(OrigFileUpload::getId)
+                        .last("limit 1")
+        );
+        return origFileUpload;
+    }
 }

+ 67 - 45
src/main/java/com/fdkankan/contro/service/impl/UploadShootingServiceImpl.java

@@ -1,7 +1,10 @@
 package com.fdkankan.contro.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ErrorCode;
@@ -31,9 +34,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -139,44 +141,60 @@ public class UploadShootingServiceImpl implements UploadShootingService {
         condition.setUuid(detail.getUuid());
         condition.setStatus(0);
         condition.setPtIndex(detail.getIndex());
-        condition.setCallType(2);
-        OrigFileUploadBatch origFileUploadBatch = origFileUploadBatchService.getByCondition(condition);
-
-        OrigFileUpload origFileUpload = origFileUploadService.getByBatchIdAndFileName(origFileUploadBatch.getBatchId(), "config.json");
-        String localPath = ConstantFilePath.BUILD_MODEL_PATH + "upload_while_shooting/" + detail.getUuid() + "/" + detail.getIndex() + "/" + detail.getFileName();
-        HttpUtilExt.downloadFileAndCheck(origFileUpload.getFileUrl(), localPath, 300000);
-
-        //入库相机
+        List<OrigFileUploadBatch> batches = origFileUploadBatchService.listPreviewByCondition(condition);
+        if(CollUtil.isEmpty(batches)){
+            return;
+        }
         String[] uuidArr = detail.getUuid().split("_");
         String snCode = uuidArr[0];
-        JSONObject configJson = JSONObject.parseObject(FileUtils.readUtf8String(localPath));
-        int camType = configJson.getInteger("cameraType");
-        String cameraInStoreUrl = fdServiceUrl + ApiConstant.URL_CAMERA_INSTORE;
-        Map<String, Object> cameraInStoreParams = new HashMap<>();
-        cameraInStoreParams.put("cameraType", camType);
-        cameraInStoreParams.put("snCode", snCode);
-        ResultData post = myClient.post(cameraInStoreUrl, cameraInStoreParams);
-        log.info("---------cameraInStore result:{}-----------", post);
+        Integer camType = null;
+        User user = null;
 
-        //注册用户
-        String folderName = configJson.getString("id");
-        String customUserId = configJson.getString("customUserId");
-        String customUserName = configJson.getString("customUserName");
-        String customUserPwd = configJson.getString("customUserPwd");
-        if (StrUtil.isBlank(folderName) || StrUtil.isBlank(snCode)) {
-            throw new RuntimeException("config.json 文件有误!");
-        }
-        Map<String, Object> params = new HashMap<>();
-        params.put("ryId", customUserId);
-        params.put("ryNo", customUserName);
+        OrigFileUpload dataFdageFileUpload = origFileUploadService.getLastByFileName("data.fdage");
+        String dataFdageLocalPath = ConstantFilePath.BUILD_MODEL_PATH + "upload_while_shooting/" + detail.getUuid() + "/data.fdage";
+        HttpUtilExt.downloadFileAndCheck(dataFdageFileUpload.getFileUrl(), dataFdageLocalPath, 300000);
+        JSONObject dataFdage = JSON.parseObject(FileUtil.readUtf8String(dataFdageLocalPath));
+        String title = dataFdage.getString("name");
+
+        OrigFileUploadBatch origFileUploadBatch = batches.get(0);
+        if(detail.getIndex() == null || detail.getIndex() != -1){//没有新增点位
+
+        }else{//有新增点位
+
+            OrigFileUpload origFileUpload = origFileUploadService.getByBatchIdAndFileName(origFileUploadBatch.getBatchId(), "config.json");
+            String localPath = ConstantFilePath.BUILD_MODEL_PATH + "upload_while_shooting/" + detail.getUuid() + "/" + detail.getIndex() + "/" + detail.getFileName();
+            HttpUtilExt.downloadFileAndCheck(origFileUpload.getFileUrl(), localPath, 300000);
+
+            //入库相机
+            JSONObject configJson = JSONObject.parseObject(FileUtils.readUtf8String(localPath));
+            camType = configJson.getInteger("cameraType");
+            String cameraInStoreUrl = fdServiceUrl + ApiConstant.URL_CAMERA_INSTORE;
+            Map<String, Object> cameraInStoreParams = new HashMap<>();
+            cameraInStoreParams.put("cameraType", camType);
+            cameraInStoreParams.put("snCode", snCode);
+            ResultData post = myClient.post(cameraInStoreUrl, cameraInStoreParams);
+            log.info("---------cameraInStore result:{}-----------", post);
+
+            //注册用户
+            String folderName = configJson.getString("id");
+            String customUserId = configJson.getString("customUserId");
+            String customUserName = configJson.getString("customUserName");
+            String customUserPwd = configJson.getString("customUserPwd");
+            if (StrUtil.isBlank(folderName) || StrUtil.isBlank(snCode)) {
+                throw new RuntimeException("config.json 文件有误!");
+            }
+            Map<String, Object> params = new HashMap<>();
+            params.put("ryId", customUserId);
+            params.put("ryNo", customUserName);
 //        params.put("nickName", customUserName);//去掉昵称,又燕海的接口进行判断
-        params.put("password", AesUtil.encryptCBC(customUserPwd, userPasswordKey, userPasswordIv, AesUtil.ALMODE_CBC_NOPADDING));
-        String url = fdServiceUrl.concat(ApiConstant.URL_ADD_UCENTER_USER);
-        myClient.post(url, params);
-        JyUser jyUser = jyUserService.getByRyId(customUserId);
-        User user = userService.getById(jyUser.getUserId());
-        if (Objects.isNull(jyUser)) {
-            throw new RuntimeException("注册用户失败");
+            params.put("password", AesUtil.encryptCBC(customUserPwd, userPasswordKey, userPasswordIv, AesUtil.ALMODE_CBC_NOPADDING));
+            String url = fdServiceUrl.concat(ApiConstant.URL_ADD_UCENTER_USER);
+            myClient.post(url, params);
+            JyUser jyUser = jyUserService.getByRyId(customUserId);
+            user = userService.getById(jyUser.getUserId());
+            if (Objects.isNull(jyUser)) {
+                throw new RuntimeException("注册用户失败");
+            }
         }
 
         //生成场景表
@@ -203,6 +221,7 @@ public class UploadShootingServiceImpl implements UploadShootingService {
             scenePlusExt.setDataSource(dataSource);
             scenePlus.setNum(sceneNum);
             scenePlus.setSceneSource(SceneSource.BM.code());
+            scenePlus.setPreview(CommonStatus.YES.code());
             if (camType == CameraTypeEnum.DOUBLE_EYE_TURN.getType()) {
                 scenePlus.setSceneSource(SceneSource.ZT.code());
             }
@@ -222,10 +241,10 @@ public class UploadShootingServiceImpl implements UploadShootingService {
             sceneEditInfoExt = new SceneEditInfoExt();
             sceneEditControls = new SceneEditControls();
         }
-        String title = configJson.getString("title");
-        scenePlus.setUserId(user.getId());
+        if(Objects.nonNull(user)){
+            scenePlus.setUserId(user.getId());
+        }
         scenePlus.setTitle(title);
-        scenePlus.setPreview(CommonStatus.YES.code());
         scenePlusService.saveOrUpdate(scenePlus);
 
         scenePlusExt.setPlusId(scenePlus.getId());
@@ -244,15 +263,18 @@ public class UploadShootingServiceImpl implements UploadShootingService {
         sceneEditControlsService.saveOrUpdate(sceneEditControls);
 
         JSONObject preParams = new JSONObject();
-        preParams.put("batchId", origFileUploadBatch.getBatchId());
         preParams.put("sceneCode", sceneNum);
         preParams.put("index", detail.getIndex());
         preParams.put("uuid", detail.getUuid());
         mqProducer.sendByWorkQueue("preview-scene-pre", preParams);
     }
 
-
-
-
-
+    @Override
+    public boolean checkLackFille(Integer index, List<OrigFileUpload> fileUploadList) {
+        Set<String> fileNameList = fileUploadList.stream().map(v -> v.getFileName()).collect(Collectors.toSet());
+        if(!fileNameList.contains(index + ".jpg") || !fileNameList.contains(index + ".json") || !fileNameList.contains(index + "_3d.ply")){
+            return true;
+        }
+        return false;
+    }
 }