Browse Source

场景重算,清空三维模型

dsx 2 năm trước cách đây
mục cha
commit
b167234bb7

+ 40 - 0
src/main/java/com/fdkankan/scene/constant/UserEditDataType.java

@@ -0,0 +1,40 @@
+package com.fdkankan.scene.constant;
+
+/**
+ * 文件业务类型
+ */
+public enum UserEditDataType {
+
+    BOX_MODEL("boxModel", "boxModelHandler"),
+    FLOORPLAN("floorplan", "floorplanHandler"),
+    ;
+
+    private String code;
+    private String message;
+
+    private UserEditDataType(String code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public String code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static UserEditDataType get(Integer code){
+        UserEditDataType[] values = UserEditDataType.values();
+        String enumValue = null;
+        for(UserEditDataType eachValue : values){
+            enumValue = eachValue.code();
+            if(enumValue.equals(code)){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 4 - 0
src/main/java/com/fdkankan/scene/factory/DemoFactory.java

@@ -0,0 +1,4 @@
+package com.fdkankan.scene.factory;
+
+public interface DemoFactory {
+}

+ 78 - 0
src/main/java/com/fdkankan/scene/factory/UserEditData/BoxModelHandler.java

@@ -0,0 +1,78 @@
+package com.fdkankan.scene.factory.UserEditData;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.scene.entity.SceneEditInfo;
+import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.entity.ScenePlusExt;
+import com.fdkankan.scene.oss.OssUtil;
+import com.fdkankan.scene.service.ISceneEditInfoService;
+import com.fdkankan.scene.service.IScenePlusExtService;
+import com.fdkankan.scene.service.IScenePlusService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystemException;
+import java.util.Map;
+
+/**
+ * 初始化空间模型
+ */
+@Slf4j
+@Component("boxModelHandler")
+public class BoxModelHandler implements UserEditDataHandler {
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private OssUtil ossUtil;
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Override
+    public void init(String num, Map<String, Object> params) {
+        String modelEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num) + "boxModels";
+        String modelViewPath = String.format(UploadFilePath.USER_VIEW_PATH, num) + "boxModels";
+        String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "scene.json";
+
+        //修改数据库,将boxModels字段置为空
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        sceneEditInfoService.update(new LambdaUpdateWrapper<SceneEditInfo>().set(SceneEditInfo::getBoxModels, null).eq(SceneEditInfo::getId, sceneEditInfo.getId()));
+        String bucket = scenePlusExt.getYunFileBucket();
+
+        //更新scene.json
+        if(ossUtil.doesObjectExist(bucket, sceneJsonPath)){
+            String sceneJsonStr = ossUtil.getFileContent(bucket, sceneJsonPath);
+            JSONObject sceneJson = JSON.parseObject(sceneJsonStr);
+            sceneJson.remove("boxModels");
+            sceneJsonStr = sceneJson.toJSONString();
+            ossUtil.uploadFileBytes(bucket, sceneJsonPath, sceneJsonStr.getBytes(StandardCharsets.UTF_8));
+            //scenejson写入缓存
+            redisUtil.set(String.format(RedisKey.SCENE_JSON, num), sceneJsonStr);
+        }
+
+        try {
+            //删除oss资源
+            if(ossUtil.doesObjectExist(bucket, modelEditPath)){
+                ossUtil.deleteObject(bucket, modelEditPath);
+            }
+            if(ossUtil.doesObjectExist(bucket, modelViewPath)){
+                ossUtil.deleteObject(bucket, modelViewPath);
+            }
+        } catch (FileSystemException e) {
+            log.error("删除三维模型文件失败");
+        }
+    }
+}

+ 9 - 0
src/main/java/com/fdkankan/scene/factory/UserEditData/UserEditDataHandler.java

@@ -0,0 +1,9 @@
+package com.fdkankan.scene.factory.UserEditData;
+
+import java.util.Map;
+
+public interface UserEditDataHandler {
+
+    void init(String num, Map<String, Object> params);
+
+}

+ 9 - 0
src/main/java/com/fdkankan/scene/factory/UserEditData/UserEditDataHandlerFactory.java

@@ -0,0 +1,9 @@
+package com.fdkankan.scene.factory.UserEditData;
+
+import cn.hutool.extra.spring.SpringUtil;
+
+public class UserEditDataHandlerFactory {
+    public static UserEditDataHandler getHandler(String name){
+        return SpringUtil.getBean(name);
+    }
+}

+ 17 - 0
src/main/java/com/fdkankan/scene/service/ICommonService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.scene.service;
+
+import java.util.Map;
+import java.util.Set;
+
+public interface ICommonService {
+
+    /**
+     * 删除用户编辑数据业务方法
+     * @param num 场景码
+     * @param bizs 业务集合
+     * @param params 业务处理所需参数
+     *               key : bizType
+     *               value: Map<String ,Object> 参数map
+     */
+    public void initUserEditData(String num, Set<String> bizs, Map<String, Map<String ,Object>> params);
+}

+ 29 - 0
src/main/java/com/fdkankan/scene/service/impl/CommonServiceImpl.java

@@ -0,0 +1,29 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fdkankan.scene.factory.UserEditData.UserEditDataHandler;
+import com.fdkankan.scene.factory.UserEditData.UserEditDataHandlerFactory;
+import com.fdkankan.scene.service.ICommonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.Set;
+
+@Slf4j
+@Service
+public class CommonServiceImpl implements ICommonService {
+
+    @Override
+    public void initUserEditData(String num, Set<String> bizs, Map<String, Map<String ,Object>> params) {
+        if(StrUtil.isEmpty(num) || CollUtil.isEmpty(bizs)){
+            return;
+        }
+        for (String biz : bizs) {
+            UserEditDataHandler handler = UserEditDataHandlerFactory.getHandler(biz);
+            handler.init(num, CollUtil.isEmpty(params) ? null : params.get(biz));
+        }
+    }
+
+}

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

@@ -633,7 +633,7 @@ public class SceneDownloadHandlerServiceImpl {
         String fileName = key.substring(key.lastIndexOf("/") + 1);
 //        String url = this.resourceUrl + key.replace(fileName, URLEncoder.encode(fileName, "UTF-8")) + "?t=" + Calendar.getInstance().getTimeInMillis();
         if(key.contains("hot.json") || key.contains("link-scene.json")){
-            String content = ossUtil.getFileContent(bucket, key);
+            String content = FileUtil.readUtf8String(key);
             if(StrUtil.isEmpty(content)){
                 return;
             }
@@ -641,7 +641,8 @@ public class SceneDownloadHandlerServiceImpl {
 //                .replace(publicUrl+"v3/", "")
                 .replace("https://spc.html","spc.html")
                 .replace("https://smobile.html", "smobile.html");
-
+            log.info("热点数据:{}", content);
+            log.info("热点地址:{}", String.format(sourceLocal, num, prefix + key.replace(FdkkLaserConfig.getProfile(bucket),"")));
             FileUtil.writeUtf8String(content, String.format(sourceLocal, num, prefix + key.replace(FdkkLaserConfig.getProfile(bucket),"")));
         }else{
 //            HttpUtil.downloadFile(url, String.format(sourceLocal, num, prefix + key));

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

@@ -21,6 +21,7 @@ import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
 import com.fdkankan.model.utils.FloorPlanUserUtil;
 import com.fdkankan.scene.bean.SceneBean;
+import com.fdkankan.scene.constant.UserEditDataType;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePro;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
@@ -100,6 +101,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     private ISceneProService sceneProService;
     @Autowired
     private ISceneDelLogService sceneDelLogService;
+    @Autowired
+    private ICommonService commonService;
 
     @Override
     public ScenePlus getScenePlusByNum(String num) {
@@ -392,6 +395,10 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
             }
         }
 
+        //清除用户编辑业务数据
+        Set<String> bizs = new HashSet<>();
+        bizs.add(UserEditDataType.BOX_MODEL.message());
+        commonService.initUserEditData(num, bizs, null);
 
         redisUtil.del(String.format(RedisKey.SCENE_JSON, num));