192.168.9.165 hai 1 mes
pai
achega
23f79904cb

+ 111 - 0
src/main/java/com/fdkankan/scene/ApplicationRunner.java

@@ -0,0 +1,111 @@
+package com.fdkankan.scene;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.scene.config.FdkkLaserConfig;
+import com.fdkankan.scene.config.RedisKeyExt;
+import com.fdkankan.scene.constant.BuildType;
+import com.fdkankan.scene.entity.SceneFileBuildEntity;
+import com.fdkankan.scene.service.ISceneDownloadLogService;
+import com.fdkankan.scene.service.SceneFileBuildService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Xiewj
+ * @date 2023/12/14
+ */
+@Component
+@Slf4j
+public class ApplicationRunner implements CommandLineRunner {
+    @Autowired
+    private SceneFileBuildService sceneFileBuildService;
+    @Autowired
+    private ISceneDownloadLogService sceneDownloadLogService;
+    @Resource
+    private RedisUtil redisUtil;
+
+    private static String keyFormat = "touch:scene:download:num:%s";
+
+    @Override
+    public void run(String... args) throws Exception {
+        initServer();
+    }
+    private  void initServer() throws IOException {
+
+        FdkkLaserConfig fdkkLaserConfig = SpringUtil.getBean(FdkkLaserConfig.class);
+        String stateConfigOne = fdkkLaserConfig.getBinPath() + File.separator + ".v4state";
+        if (FileUtil.exist(stateConfigOne)) {
+            log.info("state文件存在");
+            FileWriter writer = new FileWriter(FileUtil.file(stateConfigOne));
+            writer.write("1");
+            writer.flush();
+            writer.close();
+        }
+        String setting = fdkkLaserConfig.getSettingJson();
+        String data = FileUtil.readString(setting, "UTF-8");
+        JSONObject config = JSONObject.parseObject(data);
+        Integer javaPort = config.getInteger("laserPort");
+        fdkkLaserConfig.setLaserPort(javaPort);
+
+
+        redisUtil.del(RedisKey.SCENE_DOWNLOAD_ING);
+        Set keyFormatSet = redisUtil.keys(String.format(keyFormat, "*"));
+        Set PREFIX_DOWNLOAD_PROGRESS_V4_SET = redisUtil.keys(String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, "*"));
+        for (Object o : keyFormatSet) {
+            redisUtil.del(o.toString());
+        }
+        for (Object o : PREFIX_DOWNLOAD_PROGRESS_V4_SET) {
+            redisUtil.del(o.toString());
+        }
+        redisUtil.del(RedisKey.SCENE_DOWNLOADS_TASK_V4);
+        redisUtil.del(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH);
+
+
+
+        List<SceneFileBuildEntity> offlineBuildList = sceneFileBuildService.findBuildListByStatusAndBuildType(Arrays.asList(1),Arrays.asList(BuildType.BUILD_MESH_OFFLINE));
+        for (SceneFileBuildEntity sceneFileBuildEntity : offlineBuildList) {
+            log.info("处理排队离线包{}",sceneFileBuildEntity);
+            if (!FileUtil.exist(sceneFileBuildEntity.getResultPath())){
+                //路径不存在改为失败
+                sceneFileBuildEntity.setBuildStatus(-1);
+                sceneFileBuildService.updateById(sceneFileBuildEntity);
+                if (sceneFileBuildEntity.getBuildType().equals(BuildType.BUILD_MESH_OFFLINE)){
+                    //路径不存在改为失败
+                    sceneDownloadLogService.removeBySceneNum(sceneFileBuildEntity.getSceneNum());
+                    String key = String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, sceneFileBuildEntity.getSceneNum());
+                    redisUtil.del(key);
+                    redisUtil.lRemove(RedisKey.SCENE_DOWNLOAD_ING, 1, sceneFileBuildEntity.getSceneNum());
+                }
+            }
+            switch (sceneFileBuildEntity.getBuildType()){
+                case BuildType.BUILD_MESH_OFFLINE:
+                    if (FileUtil.exist(sceneFileBuildEntity.getResultPath())){
+                        JSONObject jsonObject = JSONObject.parseObject(sceneFileBuildEntity.getExt());
+                        redisUtil.lRightPush(RedisKey.SCENE_DOWNLOADS_TASK_V4, jsonObject.toJSONString());
+                    }
+                    break;
+            }
+
+        }
+        //查询排队中的离线包,重新入队列
+        //   laser  public static final String SCENE_DOWNLOADS_TASK = "scene:downloads:task:";
+        //   mesh public static final String SCENE_DOWNLOADS_TASK_V4 = "scene:downloads:task:v4";
+
+
+    }
+}

+ 1 - 34
src/main/java/com/fdkankan/scene/SceneApplication.java

@@ -12,6 +12,7 @@ import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import com.fdkankan.scene.config.RedisKeyExt;import com.fdkankan.scene.entity.SceneDownloadLog;
+import com.fdkankan.scene.entity.SceneFileBuildEntity;
 import com.fdkankan.scene.service.ISceneDownloadLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.mybatis.spring.annotation.MapperScan;
@@ -35,7 +36,6 @@ import java.util.*;
 @Slf4j
 @EnableScheduling
 public class SceneApplication {
-    private static String keyFormat = "touch:scene:download:num:%s";
 
     public static void main(String[] args) throws IOException {
 
@@ -45,46 +45,13 @@ public class SceneApplication {
         log.info("项目启动成功");
         System.out.println("spring容器初始化完成耗时:" + timer.intervalRestart());
 
-        FdkkLaserConfig fdkkLaserConfig = SpringUtil.getBean(FdkkLaserConfig.class);
-        String stateConfigOne = fdkkLaserConfig.getBinPath() + File.separator + ".v4state";
-        if (FileUtil.exist(stateConfigOne)) {
-            log.info("state文件存在");
-            FileWriter writer = new FileWriter(FileUtil.file(stateConfigOne));
-            writer.write("1");
-            writer.flush();
-            writer.close();
-        }
-        String setting = fdkkLaserConfig.getSettingJson();
-        String data = FileUtil.readString(setting, "UTF-8");
-        JSONObject config = JSONObject.parseObject(data);
-        Integer javaPort = config.getInteger("laserPort");
-        fdkkLaserConfig.setLaserPort(javaPort);
 
 
-        RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class);
-        redisUtil.del(RedisKey.SCENE_DOWNLOAD_ING);
-        Set keyFormatSet = redisUtil.keys(String.format(keyFormat, "*"));
-        Set PREFIX_DOWNLOAD_PROGRESS_V4_SET = redisUtil.keys(String.format(RedisKey.PREFIX_DOWNLOAD_PROGRESS_V4, "*"));
-        for (Object o : keyFormatSet) {
-            redisUtil.del(o.toString());
-        }
-        for (Object o : PREFIX_DOWNLOAD_PROGRESS_V4_SET) {
-            redisUtil.del(o.toString());
-        }
-        redisUtil.del(RedisKey.SCENE_DOWNLOADS_TASK_V4);
-        redisUtil.del(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH);
-
 //        final ISceneDownloadLogService sceneDownloadLogService = SpringUtil.getBean(ISceneDownloadLogService.class);
 //        sceneDownloadLogService.remove(new LambdaQueryWrapper<SceneDownloadLog>().eq(SceneDownloadLog::getStatus, CommonSuccessStatus.WAITING.code()));
         System.out.println("额外工作耗时:" + timer.intervalRestart());
 
         System.out.println("启动结束时间:" + DateExtUtil.format(new Date(), DateExtUtil.dateStyle));
 
-
-//        String nameSpace = SocketIoConstant.SCENE_HANDLER_SPACE.replace("/", "");
-//        Collection<String> keys = cache.keys(nameSpace + "*");
-//        for (String key : keys) {
-//            cache.deleteObject(key);
-//        }
     }
 }

+ 1 - 1
src/main/java/com/fdkankan/scene/entity/SceneFileBuildEntity.java

@@ -109,7 +109,7 @@ public class SceneFileBuildEntity   {
      * 备注
      */
     private String remark;
-
+    private String ext;
     private LocalDateTime deleteFlag;
 
 }

+ 3 - 0
src/main/java/com/fdkankan/scene/service/ISceneDownloadLogService.java

@@ -32,4 +32,7 @@ public interface ISceneDownloadLogService extends IService<SceneDownloadLog> {
 
     void setBuildSceneOffline(String num);
 
+    void removeBySceneNum(String sceneNum);
+
+    void updateStatusSceneNum(String sceneNum,Integer status);
 }

+ 1 - 0
src/main/java/com/fdkankan/scene/service/SceneFileBuildService.java

@@ -12,5 +12,6 @@ import java.util.List;
 public interface SceneFileBuildService extends IService<SceneFileBuildEntity> {
     SceneFileBuildEntity findBuildBySceneNum(String sceneNum, String buildType);
     void updateTimeAndStatus(String sceneCode, int status,Date startTime, Date endTime, String buildType,Date date);
+    List<SceneFileBuildEntity> findBuildListByStatusAndBuildType(List<Integer> status, List<String> buildType);
 
 }

+ 1 - 0
src/main/java/com/fdkankan/scene/service/impl/CheckProgressRunnerImpl.java

@@ -86,6 +86,7 @@ public class CheckProgressRunnerImpl implements CommandLineRunner {
 
         //从新入队
         redisUtil.lLeftPushAll(RedisKey.DOWNLOAD_TASK, taskList);
+
     }
 
 

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

@@ -181,6 +181,7 @@ public class SceneDownloadHandlerServiceImpl {
             );
             Date date = new Date();
             sceneFileBuildService.updateTimeAndStatus(num,-1,null,  new Date(), BuildType.BUILD_MESH_OFFLINE,date);
+            log.info("场景下载失败 - num[{}] - threadName[{}]", num, Thread.currentThread().getName());
             scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>().set(ScenePlus::getLastEditTime, date).eq(ScenePlus::getNum, num));
             log.error(ExceptionUtil.stacktraceToString(e));
             if (!downLoadTaskBean.isFusion()) {
@@ -418,6 +419,7 @@ public class SceneDownloadHandlerServiceImpl {
             }catch (Exception e){
                 throw e;
             }
+//            Thread.sleep(500);
             //更新进度
             this.updateProgress(
                 new BigDecimal(count.incrementAndGet()).divide(new BigDecimal(total), 6, BigDecimal.ROUND_HALF_UP),

+ 16 - 6
src/main/java/com/fdkankan/scene/service/impl/SceneDownloadLogServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
@@ -379,13 +380,22 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
         }else{
             redisUtil.del(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH);
         }
+    }
 
+    @Override
+    public void removeBySceneNum(String sceneNum) {
+        if (StrUtil.isNotEmpty(sceneNum)){
+            LambdaUpdateWrapper<SceneDownloadLog> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(SceneDownloadLog::getSceneNum, sceneNum);
+            remove(wrapper);
+        }
+    }
 
-
-
-
-
-
-
+    @Override
+    public void updateStatusSceneNum(String sceneNum,Integer status) {
+        LambdaUpdateWrapper<SceneDownloadLog> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(SceneDownloadLog::getSceneNum, sceneNum);
+        wrapper.set(SceneDownloadLog::getStatus, status);
+        update(wrapper);
     }
 }

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

@@ -1396,7 +1396,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //标记是否是异步操作,默认是同步操作
         //如果入参文件名不为空,则是单个文件下载,不需要打包
         String dataSource = sceneService.getDataSource(num, scenePlus.getSceneSource(), scenePlusExt.getDataSource());
-        String ossResultPath = dataSource + "caches/images/";
+        String ossResultPath = dataSource + "panoImgs"+File.separator;
         if(StrUtil.isNotEmpty(fileName)){
             //如果是单张图片,直接提供oss url
 //            if(!fYunFileService.fileExist(bucket, ossResultPath + fileName)){

+ 8 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneFileBuildServiceImpl.java

@@ -73,4 +73,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<SceneFileBuildMapper,
             log.info("更新记录数: {}, sceneCode: {}, buildType: {}", rows, sceneCode, buildType);
         }
     }
+    @Override
+    public List<SceneFileBuildEntity> findBuildListByStatusAndBuildType(List<Integer> status, List<String> buildType) {
+        LambdaQueryWrapper<SceneFileBuildEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.in(SceneFileBuildEntity::getBuildStatus, status);
+        wrapper.in(SceneFileBuildEntity::getBuildType, buildType);
+        wrapper.orderByAsc(SceneFileBuildEntity::getSort);
+        return list(wrapper);
+    }
 }