Quellcode durchsuchen

v3 v4共存改造

dengsixing vor 3 Jahren
Ursprung
Commit
5784c63091

+ 11 - 2
4dkankan-center-scene/src/main/java/com/fdkankan/scene/httpclient/FdkankanMiniClient.java

@@ -3,6 +3,9 @@ package com.fdkankan.scene.httpclient;
 import com.dtflys.forest.annotation.Get;
 import com.dtflys.forest.annotation.Request;
 import com.dtflys.forest.annotation.Var;
+import com.fdkankan.platform.api.dto.Camera;
+import com.fdkankan.scene.bean.CameraBean;
+import com.fdkankan.scene.bean.UserIncrementBean;
 
 /**
  * <p>
@@ -14,7 +17,13 @@ import com.dtflys.forest.annotation.Var;
  **/
 public interface FdkankanMiniClient {
 
-    @Get("http://{url}/abc")
-    String getDataSyncType(@Var("myURL") String url);
+    @Get("{url}")
+    String getDataSyncType(@Var("url") String url);
+
+    @Get("{url}")
+    UserIncrementBean getUserIncrementByCameraId(@Var("url") String url);
+
+    @Get("{url}")
+    CameraBean getCameraByCameraId(@Var("url") String url);
 
 }

+ 59 - 59
4dkankan-center-scene/src/main/java/com/fdkankan/scene/schedule/ScheduleJob.java

@@ -35,65 +35,65 @@ public class ScheduleJob {
     @Autowired
     RabbitMqProducer rabbitMqProducer;
 
-    /**
-     * 更新浏览量
-     */
-    @Scheduled(cron = "0 0/10 * * * ? ")
-    public void updateViewCount() {
-        if("hq".equals(environment)){
-            return;
-        }
-        log.info("执行定时任务开始:更新浏览量");
-        try {
-            //更新浏览量
-            sceneService.updatePv();
-        } catch (Exception e) {
-            log.error("更新浏览量定时任务出错:", e);
-        }
-        log.info("执行定时任务结束:更新浏览量");
-    }
+//    /**
+//     * 更新浏览量
+//     */
+//    @Scheduled(cron = "0 0/10 * * * ? ")
+//    public void updateViewCount() {
+//        if("hq".equals(environment)){
+//            return;
+//        }
+//        log.info("执行定时任务开始:更新浏览量");
+//        try {
+//            //更新浏览量
+//            sceneService.updatePv();
+//        } catch (Exception e) {
+//            log.error("更新浏览量定时任务出错:", e);
+//        }
+//        log.info("执行定时任务结束:更新浏览量");
+//    }
+//
+//    /**
+//     * <p>
+//            定时生成场景码
+//            查询码池中未使用场景码数量,如果小于阈值,执行批量生成
+//     * </p>
+//     * @author dengsixing
+//     * @date 2022/3/26
+//     **/
+//    @Scheduled(cron = "0 0/1 * * * ? ")
+//    public void generateSceneCode(){
+//        log.info("执行定时任务开始:批量生成场景码");
+//        scene3dNumService.batchCreateSceneNum();
+//        log.info("执行定时任务结束:批量生成场景码");
+//    }
 
-    /**
-     * <p>
-            定时生成场景码
-            查询码池中未使用场景码数量,如果小于阈值,执行批量生成
-     * </p>
-     * @author dengsixing
-     * @date 2022/3/26
-     **/
-    @Scheduled(cron = "0 0/1 * * * ? ")
-    public void generateSceneCode(){
-        log.info("执行定时任务开始:批量生成场景码");
-        scene3dNumService.batchCreateSceneNum();
-        log.info("执行定时任务结束:批量生成场景码");
-    }
-
-    /**
-     * 开启场景计算弹性伸缩
-     */
-    @Scheduled(cron = "0 0/5 8-21 * * ? ")
-    public void startupModelingServer() {
-        if("hq".equals(environment)){
-            return;
-        }
-        boolean lock = redisLockUtil.lock(
-            RedisLockKey.LOCK_STARTUP_MODELING_SERVER, RedisKey.EXPIRE_TIME_5_MINUTE);
-        if(!lock){
-            return;
-        }
-        try {
-            //当mq排队数大于指定数量时使用弹性升缩
-            int mqNum = rabbitMqProducer.getMessageCount(queueModelingCall);
-            log.info("每5分钟查询一次排队队列,mqNum:" + mqNum);
-            if(mqNum - Integer.parseInt(modelingCallMqThreshold) > 0){
-                String responce = rubberSheetingUtil.createEcs();
-                log.info("开启弹性伸缩:{}", responce);
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }finally {
-            redisLockUtil.unlockLua(RedisLockKey.LOCK_STARTUP_MODELING_SERVER);
-        }
-    }
+//    /**
+//     * 开启场景计算弹性伸缩
+//     */
+//    @Scheduled(cron = "0 0/5 8-21 * * ? ")
+//    public void startupModelingServer() {
+//        if("hq".equals(environment)){
+//            return;
+//        }
+//        boolean lock = redisLockUtil.lock(
+//            RedisLockKey.LOCK_STARTUP_MODELING_SERVER, RedisKey.EXPIRE_TIME_5_MINUTE);
+//        if(!lock){
+//            return;
+//        }
+//        try {
+//            //当mq排队数大于指定数量时使用弹性升缩
+//            int mqNum = rabbitMqProducer.getMessageCount(queueModelingCall);
+//            log.info("每5分钟查询一次排队队列,mqNum:" + mqNum);
+//            if(mqNum - Integer.parseInt(modelingCallMqThreshold) > 0){
+//                String responce = rubberSheetingUtil.createEcs();
+//                log.info("开启弹性伸缩:{}", responce);
+//            }
+//        } catch (Exception e) {
+//            log.error(e.getMessage());
+//        }finally {
+//            redisLockUtil.unlockLua(RedisLockKey.LOCK_STARTUP_MODELING_SERVER);
+//        }
+//    }
 
 }

+ 25 - 75
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -236,7 +236,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 //        this.buildVideo(sceneEditInfo, sceneProExt.getDataSource(), sceneNum);
 
         //本地写sceneJson文件
-        String localSceneJsonPath = String.format(ConstantFilePath.SCENE_PATH_FORMAT, num);
+        String localSceneJsonPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "scene.json";
         FileUtils.writeFile(localSceneJsonPath, JSON.toJSONString(sceneJson));
         //上传sceneJson文件
         String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH+"scene.json", num);
@@ -408,7 +408,10 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         sceneInfoVO.setSceneFrom(scenePlusExt.getSceneFrom());
         sceneInfoVO.setVideos(scenePlusExt.getVideos());
 
-        this.setExtData(sceneInfoVO, scenePlus.getCameraId());
+        // TODO: 2022/4/24 v3版本停机要切换---------------------------start
+//        this.setExtData(sceneInfoVO, scenePlus.getCameraId());
+        this.setExtDataFromV3(sceneInfoVO, scenePlus.getCameraId());
+        // TODO: 2022/4/24 v3版本停机要切换---------------------------end
 
         return sceneInfoVO;
     }
@@ -421,7 +424,11 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
      * @date 2022/3/9
      **/
     private void setExtDataFromV3(SceneInfoVO sceneInfoVO, Long cameraId) throws Exception{
-        sceneInfoVO.setDataSync(fdkankanMiniClient.getDataSyncType(mainUrl));
+        if(Objects.isNull(cameraId)){
+            return;
+        }
+        String url = mainUrl + "/api/user/camera/getDataSyncByCameraId?cameraId=" + cameraId;
+        sceneInfoVO.setDataSync(fdkankanMiniClient.getDataSyncType(url));
     }
 
     /**
@@ -475,7 +482,10 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //先查询redis
         if(StrUtil.isNotEmpty(sceneJson)) {
             sceneInfoVO = JSON.parseObject(sceneJson, SceneInfoVO.class);
-            this.setExtData(sceneInfoVO, scenePlus.getCameraId());
+            // TODO: 2022/4/24 v3版本停机要切换---------------------------start
+//        this.setExtData(sceneInfoVO, scenePlus.getCameraId());
+            this.setExtDataFromV3(sceneInfoVO, scenePlus.getCameraId());
+            // TODO: 2022/4/24 v3版本停机要切换---------------------------end
             sceneInfoVO.setScenePassword(null);
             if(Objects.isNull(sceneInfoVO.getFloorPlanAngle())){
                 sceneInfoVO.setFloorPlanAngle(0f);
@@ -492,7 +502,10 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         if(StrUtil.isEmpty(objectContent))
             return null;
         sceneInfoVO = JSON.parseObject(objectContent, SceneInfoVO.class);
-        this.setExtData(sceneInfoVO, scenePlus.getCameraId());
+        // TODO: 2022/4/24 v3版本停机要切换---------------------------start
+//        this.setExtData(sceneInfoVO, scenePlus.getCameraId());
+        this.setExtDataFromV3(sceneInfoVO, scenePlus.getCameraId());
+        // TODO: 2022/4/24 v3版本停机要切换---------------------------end
         sceneInfoVO.setScenePassword(null);
         if(Objects.isNull(sceneInfoVO.getFloorPlanAngle())){
             sceneInfoVO.setFloorPlanAngle(0f);
@@ -537,98 +550,34 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         if(Objects.isNull(scenePlus))
             throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
 
-        String editDataPath = String.format(UploadFilePath.DATA_EDIT_PATH, num);
         String editUserPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
-        String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, num);
-        String floorCadUrl = ossUrlPrefix + editDataPath + "floorplan_cad.json?t=" + System.currentTimeMillis();
-        String floorUserUrl = ossUrlPrefix + editUserPath + "floorplan_user.json?t=" + System.currentTimeMillis();
+        String localDataPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
 
         JSONObject fileInfoJson = JSON.parseObject(param.getData());
-        String filePathStr = null;
-
-        String floors = fileInfoJson.getString("floors");
-        String cadInfo = null;
         Float angel = null;
         Float compass = null;
         String floorJsonData = fileInfoJson.getString("floorJsonData");
         if(StrUtil.isNotBlank(floorJsonData)){
             JSONObject jsonObject = JSON.parseObject(floorJsonData);
-            cadInfo = jsonObject.getString("cadInfo");
             angel = jsonObject.getFloat("angle");
             compass = jsonObject.getFloat("compass");
         }
-//        String filePaths = fileInfoJson.getString("filePaths");
-//        Byte reSet = fileInfoJson.getByte("reset");
-
-        //户型图文件路径
-//        if(StrUtil.isNotEmpty(filePaths)){
-//            cn.hutool.json.JSONArray filePathsArrs = JSONUtil.parseArray(filePaths);
-//            List<String> filePathsList = filePathsArrs.toList(String.class);
-//            StringBuilder filePathBuilder = new StringBuilder();
-//            filePathsList.parallelStream().forEach(path -> {
-//                filePathBuilder.append(",").append(path);
-//            });
-//            filePathStr = filePathBuilder.substring(1);
-//        }
 
         //处理户型图数据
-        JSONObject floorUserJson = null;
-        if(StrUtil.isNotEmpty(floors)) {
-            //如果入参是空,则加载服务器的
-            if(StrUtil.isEmpty(floorJsonData)){
-
-                if (!StorageType.LOCAL.code().equals(this.type)) {// TODO: 2022/2/15 这里有可能有问题,可能还需要考虑本地部署的情况
-                    FileUtils.downLoadFromUrl(floorUserUrl, "floorplan_user.json", localDataPath);
-                }
-                floorJsonData = FileUtils.readFile(localDataPath + "floorplan_user.json");
-            }
-
-            //如果floors不为空,需要根据对应楼层id修改楼层名称
-            if (StrUtil.isNotEmpty(floorJsonData)) {
-                floorUserJson = this.updateFloorName(floors, floorJsonData);
-                floorJsonData = floorUserJson.toJSONString();
-            }
-        }
         //上传floorplan_user.json文件
         FileUtils.writeFile(localDataPath + "floorplan_user.json", floorJsonData);
         uploadToOssUtil.upload(localDataPath + "floorplan_user.json", editUserPath + "floorplan_user.json");
 
-        //如果floors不为空,需要根据对应楼层id修改楼层名称
-        if(StrUtil.isNotEmpty(floors)) {
-
-            if (!StorageType.LOCAL.code().equals(this.type)) {// TODO: 2022/2/15 这里有可能有问题,可能还需要考虑本地部署的情况
-                FileUtils.downLoadFromUrl(floorCadUrl, "floorplan_cad.json", localDataPath);
-            }
-
-            String floorCadStr = FileUtils.readFile(localDataPath + "floorplan_cad.json");
-            if (StrUtil.isNotEmpty(floorCadStr)) {
-                JSONObject floorCadJson = this.updateFloorName(floors, floorCadStr);
-                FileUtils.writeFile(localDataPath + "floorplan_cad.json", floorCadJson.toString());
-                uploadToOssUtil.upload(localDataPath + "floorplan_cad.json",editDataPath + "floorplan_cad.json");
-            }
-
-        }
-
-
         //写入数据库
         Byte floorPlanUser = null;
         if(StrUtil.isNotEmpty(floorJsonData)){
             floorPlanUser = CommonStatus.YES.code();
         }
-//        if(CommonStatus.YES.code().equals(reSet)){
-//            floorPlanUser = CommonStatus.NO.code();
-//        }
         SceneEditInfo sceneEditInfoDb = this.getByScenePlusId(scenePlus.getId());
         if(Objects.nonNull(sceneEditInfoDb)){
             LambdaUpdateWrapper<SceneEditInfo> updateWrapper = new LambdaUpdateWrapper<SceneEditInfo>()
                 .setSql("version=version+" + 1)
                 .eq(SceneEditInfo::getId, sceneEditInfoDb.getId());
-//            if(StrUtil.isNotEmpty(filePathStr)){
-//                updateWrapper.set(SceneEditInfo::getFloorPlanPath, filePathStr);
-//            }
-//            if(StrUtil.isNotEmpty(cadInfo)){
-//                updateWrapper.set(SceneEditInfo::getCadInfo, cadInfo);
-//            }
             if(floorPlanUser != null){
                 updateWrapper.set(SceneEditInfo::getFloorPlanUser, floorPlanUser);
             }
@@ -636,8 +585,6 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }else{
             sceneEditInfoDb = new SceneEditInfo();
             sceneEditInfoDb.setScenePlusId(scenePlus.getId());
-//            sceneEditInfoDb.setFloorPlanPath(filePathStr);
-//            sceneEditInfoDb.setCadInfo(cadInfo);
             sceneEditInfoDb.setFloorPlanUser(floorPlanUser);
             this.save(sceneEditInfoDb);
         }
@@ -1413,9 +1360,12 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
     @Override
     public ResultData checkKey(SceneCheckKeyParamVO param) throws Exception {
-
+        SceneJsonBean sceneJsonBean = null;
         String sceneJson = redisUtil.get(String.format(RedisKey.SCENE_JSON, param.getNum()));
-        SceneJsonBean sceneJsonBean = JSON.parseObject(sceneJson, SceneJsonBean.class);
+        if(StrUtil.isEmpty(sceneJson)){
+            sceneJson = uploadToOssUtil.getObjectContent(bucket, String.format(UploadFilePath.DATA_VIEW_PATH + "scene.json"));
+        }
+        sceneJsonBean = JSON.parseObject(sceneJson, SceneJsonBean.class);
 
         if(!param.getPassword().equals(sceneJsonBean.getScenePassword())){
             throw new BusinessException(ErrorCode.FAILURE_CODE_5021);
@@ -1549,7 +1499,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     private void transferToFlv(String num, String fileName) throws Exception {
 
         String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
-        String localImagesPath = String.format(ConstantFilePath.IMAGESBUFFER_FORMAT, num);
+        String localImagesPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
         String localFilePath = localImagesPath + fileName;
 
         File targetFile = new File(localImagesPath);

+ 58 - 28
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java

@@ -21,9 +21,12 @@ import com.fdkankan.platform.api.feign.PlatformGoodsClient;
 import com.fdkankan.platform.api.feign.PlatformUserClient;
 import com.fdkankan.platform.api.dto.Camera;
 import com.fdkankan.platform.api.dto.UserIncrement;
+import com.fdkankan.scene.bean.CameraBean;
+import com.fdkankan.scene.bean.UserIncrementBean;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.httpclient.FdkankanMiniClient;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
 import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.ISceneEditService;
@@ -58,6 +61,8 @@ public class SceneEditServiceImpl implements ISceneEditService {
 
     @Value("${oss.bucket:4dkankan}")
     private String bucket;
+    @Value("${http.host.4dkankanMini}")
+    private String fkankanMiniHost;
     @Autowired
     ISceneProService sceneProService;
     @Autowired
@@ -74,6 +79,8 @@ public class SceneEditServiceImpl implements ISceneEditService {
     private ISceneEditInfoService sceneEditInfoService;
     @Autowired
     private ISceneEditInfoExtService sceneEditInfoExtService;
+    @Autowired
+    private FdkankanMiniClient fdkankanMiniClient;
 
     @Override
     public SceneAuthVO getAuth(BaseSceneParamVO param) throws Exception{
@@ -89,39 +96,62 @@ public class SceneEditServiceImpl implements ISceneEditService {
         boolean isVip = false;
         //获取该相机是否有权益
         boolean isExpired  = false;
-        ResultData<Camera> cameraResultData = platformGoodsClient.getCameraById(scenePlus.getCameraId());
-        if(!cameraResultData.getSuccess()){
-            throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
-        }
-        Camera camera = cameraResultData.getData();
-        if(camera != null){
-            ResultData<UserIncrement> incrementResultData = platformUserClient
-                .getUserIncrementByCameraId(camera.getId());
-            if(!incrementResultData.getSuccess()){
-                throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
+//        ResultData<Camera> cameraResultData = platformGoodsClient.getCameraById(scenePlus.getCameraId());
+//        if(!cameraResultData.getSuccess()){
+//            throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
+//        }
+//        Camera camera = cameraResultData.getData();
+//        if(camera != null){
+//            ResultData<UserIncrement> incrementResultData = platformUserClient
+//                .getUserIncrementByCameraId(camera.getId());
+//            if(!incrementResultData.getSuccess()){
+//                throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
+//            }
+//            UserIncrement userIncrement = incrementResultData.getData();
+//            if(userIncrement != null){
+//                if( userIncrement.getIsExpired().intValue() == 0){
+//                    isVip = true;
+//                }
+//                if(userIncrement.getIsExpired().intValue() == 1){
+//                    isExpired  = true;
+//                }
+//            }else{
+//                Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
+//
+//                //非07批次的放开
+//                String pc = camera.getSnCode().substring(0,2);
+//                if(!pc.equals("07") ){
+//                    if(camera.getCreateTime()!=null && date.after(camera.getCreateTime())){
+//                        isVip = true;
+//                        isExpired  = false;
+//                    }
+//                }
+//            }
+//        }
+        // TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------start
+        String url = fkankanMiniHost + "/api/user/increment/findByCameraId?cameraId=" + scenePlus.getCameraId();
+        UserIncrementBean userIncrement = fdkankanMiniClient.getUserIncrementByCameraId(url);
+        if(userIncrement != null){
+            if(userIncrement.getIsExpired() == 0){
+                isVip = true;
             }
-            UserIncrement userIncrement = incrementResultData.getData();
-            if(userIncrement != null){
-                if( userIncrement.getIsExpired().intValue() == 0){
+            if(userIncrement.getIsExpired() == 1){
+                isExpired  = true;
+            }
+        }else{
+            url = fkankanMiniHost + "/api/user/camera/getCameraByCameraId?cameraId=" + scenePlus.getCameraId();
+            CameraBean camera = fdkankanMiniClient.getCameraByCameraId(url);
+            Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
+            //非07批次的放开
+            String pc = camera.getSnCode().substring(0,2);
+            if(!pc.equals("07") ){
+                if(camera.getCreateTime()!=null && date.after(camera.getCreateTime())){
                     isVip = true;
-                }
-                if(userIncrement.getIsExpired().intValue() == 1){
-                    isExpired  = true;
-                }
-            }else{
-                Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
-
-                //非07批次的放开
-                String pc = camera.getSnCode().substring(0,2);
-                if(!pc.equals("07") ){
-                    if(camera.getCreateTime()!=null && date.after(camera.getCreateTime())){
-                        isVip = true;
-                        isExpired  = false;
-                    }
+                    isExpired  = false;
                 }
             }
         }
-
+        // TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------end
 
         return SceneAuthVO.builder().isExpired(isExpired).isVip(isVip).build();
     }

+ 13 - 13
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -865,7 +865,6 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     @Override
     public ResultData saveInitialPage(FileNameAndDataParamVO param) throws Exception{
 
-        ScenePro scenePro = this.findBySceneNum(param.getNum());
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
         if(scenePlus == null){
             throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
@@ -877,9 +876,6 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         scenePlusExt.setThumb(thumbUrl);
         scenePlusExtService.updateById(scenePlusExt);
 
-        scenePro.setThumb(thumbUrl);
-        sceneProService.updateById(scenePro);
-
         SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
         if(sceneEditInfo == null){
             sceneEditInfo = new SceneEditInfo();
@@ -2426,7 +2422,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             if(exist){
                 return;
             }
-            String tagsFilePath = String.format(ConstantFilePath.DATABUFFER_FORMAT, num);
+            String tagsFilePath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
             String tagsData = FileUtils.readFile(tagsFilePath + "hot.json");
             if(StrUtil.isEmpty(tagsData)){
                 return;
@@ -2471,7 +2467,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             if(exist){
                 return;
             }
-            String tagsFilePath = String.format(ConstantFilePath.DATABUFFER_FORMAT, num);
+            String tagsFilePath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
             String tagsData = FileUtils.readFile(tagsFilePath + "hot.json");
             if(StrUtil.isEmpty(tagsData)){
                 return;
@@ -2519,7 +2515,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         Set<String> iconList = redisUtil.sGet(iconsKey);
         jsonObject.put("icons", iconList);
 
-        String hotJsonPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, num) + "hot.json";
+        String hotJsonPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "hot.json";
         String lockKey = String.format(RedisLockKey.LOCK_HOT_JSON, num);
         boolean lock = redisLockUtil.lock(lockKey, RedisKey.EXPIRE_TIME_1_MINUTE);
         if(!lock){
@@ -2942,18 +2938,21 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 //    @SystemServiceLog(description = "保存热点可见性的数据")
     public ResultData saveTagsVisible(SaveTagsVisibleParamVO param) throws Exception {
 
-//        ScenePro scenePro = findBySceneNum(param.getNum());
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
         if (scenePlus == null ) {
             return ResultData.error(ErrorCode.FAILURE_CODE_5005);
         }
         JSONArray visiblePanos = JSONArray.parseArray(param.getData());
-//        JSONArray visiblePanos = param.getData();
-//        JSONObject jsonObject = JSONArray.parseObject(param.getData());
+
+        //如果redis找不到,就从本地文件中reload
+        this.syncHotFromFileToRedis(param.getNum());
 
         //从缓存中获取热点数据,如果为空,抛出异常
         String key = String.format(RedisKey.SCENE_HOT_DATA, param.getNum());
         Map<String, String> map = redisUtil.hmget(key);
+        if (CollUtil.isEmpty(map)) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7005);
+        }
         List<Entry<String, String>> allTags = map.entrySet().stream().filter(item -> {
             if (StrUtil.isBlank(item.getValue())) {
                 return false;
@@ -2985,10 +2984,11 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         allTags.stream().forEach(entry->{
             finalMap.put(entry.getKey(), entry.getValue());
         });
-
-        //从新放入缓存
         redisUtil.hmset(key, finalMap);
 
+        //写入本地文件,作为备份,以防redis数据丢失
+        this.writeHotJson(param.getNum());
+
         return ResultData.ok();
     }
 
@@ -3004,7 +3004,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
         JSONArray inputData = JSONObject.parseArray(param.getData());
 
-        String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, param.getNum());
+        String localDataPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, param.getNum());
         File directory = new File(localDataPath);
         if (!directory.exists()) {
             directory.mkdirs();

+ 35 - 4
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneUpgradeToV4Service.java

@@ -3,6 +3,7 @@ package com.fdkankan.scene.service.impl;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
@@ -11,11 +12,21 @@ import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.bean.SceneUpgradeProgressBean;
+import com.fdkankan.scene.entity.ScenePlusExt;
+import com.fdkankan.scene.entity.SceneProEdit;
+import com.fdkankan.scene.entity.SceneProEditExt;
 import com.fdkankan.scene.entity.SceneProEditV3;
+import com.fdkankan.scene.entity.SceneProExt;
 import com.fdkankan.scene.entity.SceneProV3;
 import com.fdkankan.scene.entity.SceneRepairLog;
 import com.fdkankan.scene.mapper.ISceneUpgradeMapper;
+import com.fdkankan.scene.service.IScenePlusExtService;
+import com.fdkankan.scene.service.IScenePlusService;
+import com.fdkankan.scene.service.ISceneProEditExtService;
+import com.fdkankan.scene.service.ISceneProEditService;
 import com.fdkankan.scene.service.ISceneProEditV3Service;
+import com.fdkankan.scene.service.ISceneProExtService;
+import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneProV3Service;
 import com.fdkankan.scene.service.ISceneRepairLogService;
 import com.fdkankan.scene.service.ISceneUpgradeToV4Service;
@@ -57,6 +68,19 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
     private RabbitMqProducer rabbitMqProducer;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private ISceneProService sceneProService;
+    @Autowired
+    private ISceneProExtService sceneProExtService;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private ISceneProEditService sceneProEditService;
+    @Autowired
+    private ISceneProEditExtService sceneProEditExtService;
+
 
 
     @Override
@@ -90,16 +114,25 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
             //写入sceneProEditV3
             sceneProEditV3Service.saveOrUpdate(sceneProEditV3);
 
-            //写入写入sceneProEdit、写入sceneProEditExt
+            //写入sceneProEdit、写入sceneProEditExt
+            sceneProEditService.removeById(sceneProEditV3.getId());
             sceneUpgradeMapper.transferSceneProEdit(sceneProEditV3.getId());
+            sceneProEditExtService.remove(new LambdaQueryWrapper<SceneProEditExt>()
+                .eq(SceneProEditExt::getProEditId, sceneProEditV3.getId()));
             sceneUpgradeMapper.transferSceneProEditExt(sceneProEditV3.getId());
 
             //同步到scenePro、sceneProExt
+            sceneProService.removeById(sceneProV3.getId());
             sceneUpgradeMapper.transferScenePro(sceneProV3.getId());
+            sceneProExtService.remove(new LambdaQueryWrapper<SceneProExt>()
+                .eq(SceneProExt::getSceneProId, sceneProV3.getId()));
             sceneUpgradeMapper.transferSceneProExt(sceneProV3.getId());
 
             //同步到scenePlus、scenePlus
+            scenePlusService.removeById(sceneProV3.getId());
             sceneUpgradeMapper.transferScenePlus(sceneProV3.getId());
+            scenePlusExtService.remove(new LambdaQueryWrapper<ScenePlusExt>()
+                .eq(ScenePlusExt::getPlusId, sceneProV3.getId()));
             sceneUpgradeMapper.transferScenePlusExt(sceneProV3.getId());
 
             //发送mq
@@ -112,10 +145,8 @@ public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
             redisUtil.set(RedisKey.scene_upgrade_progress_num, JSON.toJSONString(progress));
 
         }catch (Exception e){
+            log.error("场景升级失败", e);
             return ResultData.error(ErrorCode.FAILURE_CODE_7021);
-        }finally {
-            //解锁
-            redisLockUtil.unlockLua(lockKey);
         }
 
         return ResultData.ok();

+ 1 - 1
4dkankan-center-scene/src/main/resources/mapper/scene/SceneUpgradeMapper.xml

@@ -80,6 +80,6 @@
     `cad_info`,`pano_visi`,`m2d_visi`,`m3d_visi`,`measure_visi`,`link_scene`,`overlay`,`show_logo_bottom`,
     `images_version`,`bg_music_name`,`jump_scene`,`floor_plan_angle`,`download_num`,`videos_user`,`vr_num`,
     `create_time`,`update_time`,CASE WHEN rec_status = 'A' THEN 0 ELSE 1 END AS tb_status
-    FROM `t_scene_pro_edit_v3` where t.id = #{sceneProEditId}
+    FROM `t_scene_pro_edit_v3` where id = #{sceneProEditId}
   </insert>
 </mapper>