192.168.9.165 1 месяц назад
Родитель
Сommit
6a2cfe9278

+ 1 - 1
pom.xml

@@ -11,7 +11,7 @@
     </parent>
 
     <groupId>com.fdkankan</groupId>
-    <artifactId>fdkk-v4</artifactId>
+    <artifactId>4dkk-v4</artifactId>
     <version>2.0.0-SNAPSHOT</version>
 
     <repositories>

+ 5 - 2
src/main/java/com/fdkankan/scene/AppListener.java

@@ -42,12 +42,12 @@ public class AppListener implements ApplicationRunner {
             while (true) {
                 try {
                     if (!isProcessAlive(fdkkLaserConfig.getPid())) {
-                        System.out.println("目标 PID 不存在,准备退出 SpringBoot 服务...");
+                        log.info("目标 PID 不存在,准备退出 SpringBoot 服务...");
                         shutdownApplication();
                         break;
                     }
                     if (redisUtil.hasKey("QUIT_JOB_MESH")) {
-                        System.out.println("收到推出通知,准备退出 SpringBoot 服务...");
+                        log.info("收到推出通知,准备退出 SpringBoot 服务...");
                         redisUtil.del("QUIT_JOB_MESH");
                         shutdownApplication();
                         break;
@@ -97,6 +97,9 @@ public class AppListener implements ApplicationRunner {
     private void shutdownApplication() {
         try {
             SpringApplication.exit(applicationContext, () -> 0);
+
+
+
         } finally {
             System.exit(0);
         }

+ 2 - 2
src/main/java/com/fdkankan/scene/SceneApplication.java

@@ -74,8 +74,8 @@ public class SceneApplication {
         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()));
+//        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));

+ 2 - 0
src/main/java/com/fdkankan/scene/bean/DownLoadTaskBean.java

@@ -35,4 +35,6 @@ public class DownLoadTaskBean implements Serializable {
 
     private boolean fusion;
 
+    private Long fusionId;
+
 }

+ 2 - 0
src/main/java/com/fdkankan/scene/config/RedisKeyExt.java

@@ -3,5 +3,7 @@ package com.fdkankan.scene.config;
 public class RedisKeyExt {
 
     public static final String BUILD_SCENE_OFFLINE_MESH = "BUILD:SCENE:OFFLINE:MESH";
+    public static final String OFFLINE_LOCK_KEY = "offline:lock:mesh";
+
 
 }

+ 3 - 0
src/main/java/com/fdkankan/scene/constant/BuildType.java

@@ -9,4 +9,7 @@ public class BuildType {
     public static final String BUILD_E57_SCENE = "buildE57Scene";
     public static final String BUILD_OFFLINE = "buildOffline";
     public static final String BUILD_MESH_OFFLINE = "buildMeshOffline";
+
+
+
 }

+ 4 - 0
src/main/java/com/fdkankan/scene/constant/CmdConstant.java

@@ -54,6 +54,10 @@ public class CmdConstant {
     public final static String POTREE_CONVERTER = fdkkLaserConfig.buildCallPath + File.separator + "PotreeConverter.sh @param @inPath @outPath";
     public final static String POTREE_CONVERTER_WIN = fdkkLaserConfig.buildCallPath + File.separator + "PotreeConverter.bat @param @inPath @outPath";
 
+    //生成模型的命令
+    public static final String VIPSTHUMBNAIL = fdkkLaserConfig.buildCallPath + File.separator + "vips/bin/vipsthumbnail.sh @inPath -s @size -o @thumbnailPath";
+    public static final String VIPSTHUMBNAIL_WIN = fdkkLaserConfig.buildCallPath + File.separator + "vips" + File.separator + "bin" + File.separator +  "vipsthumbnail.exe @inPath -s @size -o @thumbnailPath";
+
 //    public final static String Potree_Converter = fdkkLaserConfig.buildCallPath + "PotreeConverter.sh layout_detect @in @out";
 //    public final static String Potree_Converter_win = fdkkLaserConfig.buildCallPath + "PotreeConverter.bat layout_detect @in @out";
 //    public final static String PANO_DETECT = fdkkLaserConfig.buildCallPath + "PotreeConverter.bat pano_detect @in @out";

+ 1 - 1
src/main/java/com/fdkankan/scene/controller/SceneDownloadLogController.java

@@ -53,7 +53,7 @@ public class SceneDownloadLogController {
         log.info("downOfflineSceneDetail");
 
         Map<String, Object> stringObjectMap = sceneDownloadLogService.downOfflineSceneDetail(param);
-        log.info("statuassssss,{}",stringObjectMap);
+        log.info("num:{}, stringObjectMap:{}", param.getSceneCode(), stringObjectMap);
         return ResultData.ok(stringObjectMap);
     }
 

+ 3 - 0
src/main/java/com/fdkankan/scene/entity/SceneBuildLogEntity.java

@@ -67,4 +67,7 @@ public class SceneBuildLogEntity   {
 
     private LocalDateTime deleteFlag;
 
+    private Long fusionId;
+
+
 }

+ 2 - 3
src/main/java/com/fdkankan/scene/httpclient/LaserClient.java

@@ -15,7 +15,6 @@ import com.fdkankan.web.response.ResultData;
         interceptor = {FdkkLocInterceptor.class}
 )
 public interface LaserClient {
-    @Post("/laser/loc/addNotifications/{type}")
-    ResultData addNotifications(@Var("type") Integer type);
-
+    @Post("/laser/loc/addNotifications/{type}/f{uniId}/{bizType}")
+    ResultData addNotifications(@Var("type") Integer type,@Var("uniId") String uniId,@Var("bizType") String bizType);
 }

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

@@ -30,6 +30,6 @@ public interface ISceneDownloadLogService extends IService<SceneDownloadLog> {
 
     ResultData downloadScene(SceneDownloadParamVO param);
 
-    void setBuildSceneOffline();
+    void setBuildSceneOffline(String num);
 
 }

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

@@ -11,6 +11,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);
+    void updateTimeAndStatus(String sceneCode, int status,Date startTime, Date endTime, String buildType,Date date);
 
 }

+ 8 - 2
src/main/java/com/fdkankan/scene/service/impl/SceneDownLoadServiceImpl.java

@@ -2,12 +2,15 @@ package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.bean.CurrentDownloadNumUtil;
 import com.fdkankan.scene.bean.DownLoadTaskBean;
 import com.fdkankan.scene.constant.BuildType;
+import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.service.ISceneDownLoadService;
+import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.service.SceneFileBuildService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -37,7 +40,8 @@ public class SceneDownLoadServiceImpl implements ISceneDownLoadService {
     SceneDownloadHandlerServiceImpl handlerService;
     @Autowired
     SceneFileBuildService sceneFileBuildService;
-
+    @Autowired
+    private IScenePlusService scenePlusService;
 
     @Override
     public void process() throws Exception {
@@ -55,7 +59,9 @@ public class SceneDownLoadServiceImpl implements ISceneDownLoadService {
             if(Objects.isNull(downLoadTaskBean)){
                 continue;
             }
-            sceneFileBuildService.updateTimeAndStatus(downLoadTaskBean.getNum(),2, new Date(), null, BuildType.BUILD_MESH_OFFLINE);
+            Date date = new Date();
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>().set(ScenePlus::getLastEditTime, date).eq(ScenePlus::getNum, downLoadTaskBean.getNum()));
+            sceneFileBuildService.updateTimeAndStatus(downLoadTaskBean.getNum(),2, new Date(), null, BuildType.BUILD_MESH_OFFLINE,date);
             handlerService.download(downLoadTaskBean);
         }
 

+ 11 - 5
src/main/java/com/fdkankan/scene/service/impl/SceneDownloadHandlerServiceImpl.java

@@ -20,6 +20,7 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.scene.bean.*;
 import com.fdkankan.scene.config.FdkkLaserConfig;
+import com.fdkankan.scene.config.RedisKeyExt;
 import com.fdkankan.scene.config.ServiceConfig;
 import com.fdkankan.scene.constant.BuildType;
 import com.fdkankan.scene.entity.*;
@@ -144,6 +145,7 @@ public class SceneDownloadHandlerServiceImpl {
             log.info("场景下载开始 - num[{}] - threadName[{}]", num, Thread.currentThread().getName());
 
             long startTime = Calendar.getInstance().getTimeInMillis();
+            redisUtil.del(RedisKeyExt.OFFLINE_LOCK_KEY+num);
 
             //执行场景下载逻辑
             this.downloadHandler(downLoadTaskBean);
@@ -154,10 +156,10 @@ public class SceneDownloadHandlerServiceImpl {
             log.info("场景下载结束 - num[{}] - threadName[{}] - consumeTime[{}]", num, Thread.currentThread().getName(), consumeTime);
             //成功请求
             Date endDate = new Date();
-            sceneFileBuildService.updateTimeAndStatus(downLoadTaskBean.getNum(),4,null,  endDate, BuildType.BUILD_MESH_OFFLINE);
+            sceneFileBuildService.updateTimeAndStatus(downLoadTaskBean.getNum(),4,null,  endDate, BuildType.BUILD_MESH_OFFLINE,endDate);
 
             //离线包下载成功,更新场景最后修改时间为当前时间
-            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>().set(ScenePlus::getLastEditTime, new Date()).eq(ScenePlus::getNum, downLoadTaskBean.getNum()));
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>().set(ScenePlus::getLastEditTime, endDate).eq(ScenePlus::getNum, downLoadTaskBean.getNum()));
 
             SceneFileBuildEntity buildBySceneNum = sceneFileBuildService.findBuildBySceneNum(num, BuildType.BUILD_MESH_OFFLINE);
             if (buildBySceneNum != null&&!downLoadTaskBean.isFusion()){
@@ -166,8 +168,9 @@ public class SceneDownloadHandlerServiceImpl {
                 logEntity.setStartBuildTime(buildBySceneNum.getStartBuildTime());
                 logEntity.setEndBuildTime(endDate);
                 logEntity.setBuildType(buildBySceneNum.getBuildType());
+                logEntity.setFusionId(downLoadTaskBean.getFusionId());
                 sceneBuildLogService.save(logEntity);
-                laserClient.addNotifications(2);
+                laserClient.addNotifications(2,num,BuildType.BUILD_MESH_OFFLINE);
             }
 
         }catch (Exception e){
@@ -176,9 +179,12 @@ public class SceneDownloadHandlerServiceImpl {
                     .eq(SceneDownloadLog::getSceneNum,num)
                     .set(SceneDownloadLog::getStatus,2)
             );
+            Date date = new Date();
+            sceneFileBuildService.updateTimeAndStatus(num,-1,null,  new Date(), BuildType.BUILD_MESH_OFFLINE,date);
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>().set(ScenePlus::getLastEditTime, date).eq(ScenePlus::getNum, num));
             log.error(ExceptionUtil.stacktraceToString(e));
             if (!downLoadTaskBean.isFusion()) {
-                laserClient.addNotifications(3);
+                laserClient.addNotifications(3,num, BuildType.BUILD_MESH_OFFLINE);
             }
             //失败请求
         }finally {
@@ -188,7 +194,7 @@ public class SceneDownloadHandlerServiceImpl {
                 //删除正在下载任务
                 redisUtil.lRemove(RedisKey.SCENE_DOWNLOAD_ING, 1, num);
             }
-            sceneDownloadLogService.setBuildSceneOffline();
+            sceneDownloadLogService.setBuildSceneOffline(num);
         }
     }
 

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

@@ -17,6 +17,7 @@ import com.fdkankan.scene.bean.SceneJsonBean;
 import com.fdkankan.scene.config.FdkkLaserConfig;
 import com.fdkankan.scene.config.RedisKeyExt;
 import com.fdkankan.scene.config.ServiceConfig;
+import com.fdkankan.scene.constant.BuildType;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.ISceneDownloadLogMapper;
 import com.fdkankan.scene.oss.OssUtil;
@@ -70,7 +71,8 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
 
     @Autowired
     private  FdkkLaserConfig fdkkLaserConfig;
-
+    @Autowired
+    SceneFileBuildService sceneFileBuildService;
     public static void main(String[] args) {
         String lang = null;
         System.out.println("123123".equals(lang));
@@ -146,10 +148,10 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
             params.put("resultPath", resultPath);
             redisUtil.lRightPush(RedisKey.SCENE_DOWNLOADS_TASK_V4, JSONObject.toJSONString(params));
 
-            redisUtil.set(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH, "1");
+            redisUtil.set(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH, num);
         }
 
-        this.setBuildSceneOffline();
+        this.setBuildSceneOffline(num);
 
         return ResultData.ok(result);
     }
@@ -275,6 +277,11 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
             sceneDownloadLog.setStatus(DownloadStatus.FAILD.code());
             sceneDownloadLog.setUpdateTime(new Date());
             this.updateById(sceneDownloadLog);
+            Date date = new Date();
+            sceneFileBuildService.updateTimeAndStatus(sceneDownloadLog.getSceneNum(),-1,null,  new Date(), BuildType.BUILD_MESH_OFFLINE,date);
+            scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>().set(ScenePlus::getLastEditTime, date).eq(ScenePlus::getNum, sceneDownloadLog.getSceneNum()));
+
+
             result.put("status", DownloadStatus.SUCCESS.code());
             result.put("percent", downLoadProgressBean.getPercent());
             return result;
@@ -351,13 +358,13 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
         params.put("fusion", param.isFusion());
         redisUtil.lRightPush(RedisKey.SCENE_DOWNLOADS_TASK_V4, JSONObject.toJSONString(params));
 
-        this.setBuildSceneOffline();
+        this.setBuildSceneOffline(num);
 
         return ResultData.ok(result);
     }
 
     @Override
-    public synchronized void setBuildSceneOffline() {
+    public synchronized void setBuildSceneOffline(String num) {
 
         //查询队列中是否有排队
         long taskCount = redisUtil.lGetSize(RedisKey.SCENE_DOWNLOADS_TASK_V4);
@@ -368,7 +375,7 @@ public class SceneDownloadLogServiceImpl extends ServiceImpl<ISceneDownloadLogMa
         log.info("mesh离线包下载中个数:{}", downloadCount);
 
         if(taskCount > 0 || downloadCount > 0){
-            redisUtil.set(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH, "1");
+            redisUtil.set(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH, num);
         }else{
             redisUtil.del(RedisKeyExt.BUILD_SCENE_OFFLINE_MESH);
         }

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

@@ -55,7 +55,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<SceneFileBuildMapper,
     }
 
     @Override
-    public void updateTimeAndStatus(String sceneCode, int status, Date startTime, Date endTime, String buildType) {
+    public void updateTimeAndStatus(String sceneCode, int status, Date startTime, Date endTime, String buildType,Date date) {
         LambdaUpdateWrapper<SceneFileBuildEntity> wrapper = Wrappers.lambdaUpdate();
         wrapper.eq(SceneFileBuildEntity::getSceneNum, sceneCode);
         wrapper.eq(SceneFileBuildEntity::getBuildType, buildType);
@@ -66,6 +66,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<SceneFileBuildMapper,
         if (endTime != null) {
             wrapper.set(SceneFileBuildEntity::getEndBuildTime, endTime);
         }
+        wrapper.set(SceneFileBuildEntity::getUpdateTime, date);
         wrapper.isNull(SceneFileBuildEntity::getDeleteFlag);
         if (ObjUtil.isNotEmpty(sceneCode)){
             boolean rows = update(wrapper); // 检查返回的影响行数

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

@@ -315,7 +315,7 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         scenePlus.setSceneType(SceneType.OTHER.code());
         scenePlus.setTitle(title);
 //        scenePlus.setDescription("<p>" + fdageData.getString("info") + "</p>");
-//        scenePlus.setLastEditTime(new Date());
+        scenePlus.setLastEditTime(new Date());
         scenePlus.setUpdateTime(new Date());
         this.saveOrUpdate(scenePlus);
 

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

@@ -25,6 +25,7 @@ import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.scene.bean.SceneBean;
 import com.fdkankan.scene.config.FdkkLaserConfig;
+import com.fdkankan.scene.constant.CmdConstant;
 import com.fdkankan.scene.util.CmdBuildUtil;
 import com.fdkankan.scene.util.SystemUtil;
 import com.fdkankan.web.response.ResultData;
@@ -235,7 +236,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             Integer maxSize = height > width ? height : width;
             if(maxSize > size){
                 String thumbnailPath =  workPath + "/" + thumbnailName;
-                String scaleCmd = "vipsthumbnail " + origFilePath  + " -s " + size + " -o " + thumbnailPath;
+                String scaleCmd = CmdConstant.VIPSTHUMBNAIL_WIN.replace("@inPath", origFilePath).replace("@size",String.valueOf(size)).replace("@thumbnailPath", thumbnailPath);
                 CmdUtils.callLine(scaleCmd);
                 if(!ComputerUtil.checkComputeCompleted(thumbnailPath, 5, 200)){
                     throw new BusinessException(ErrorCode.FAILURE_CODE_5052);