dengsixing 11 ay önce
ebeveyn
işleme
cd85845551
24 değiştirilmiş dosya ile 1416 ekleme ve 858 silme
  1. 59 1
      src/main/java/com/fdkankan/redis/util/RedisClient.java
  2. 16 0
      src/main/java/com/fdkankan/scene/Interceptor/InitEditInfoAspect.java
  3. 221 245
      src/main/java/com/fdkankan/scene/controller/SceneEditController.java
  4. 2 2
      src/main/java/com/fdkankan/scene/entity/SceneEditInfoExt.java
  5. 30 0
      src/main/java/com/fdkankan/scene/service/ISceneEditService.java
  6. 15 9
      src/main/java/com/fdkankan/scene/service/SceneEditInfoExtService.java
  7. 20 19
      src/main/java/com/fdkankan/scene/service/SceneEditInfoService.java
  8. 4 0
      src/main/java/com/fdkankan/scene/service/SceneFileMappingService.java
  9. 7 3
      src/main/java/com/fdkankan/scene/service/impl/FYunFileServiceImpl.java
  10. 257 214
      src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoExtServiceImpl.java
  11. 332 365
      src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java
  12. 185 0
      src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java
  13. 10 0
      src/main/java/com/fdkankan/scene/service/impl/SceneFileMappingServiceImpl.java
  14. 2 0
      src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java
  15. 29 0
      src/main/java/com/fdkankan/scene/vo/BaseFileParamVO.java
  16. 29 0
      src/main/java/com/fdkankan/scene/vo/BaseJsonArrayParamVO.java
  17. 28 0
      src/main/java/com/fdkankan/scene/vo/DeleteMosaicParamVO.java
  18. 23 0
      src/main/java/com/fdkankan/scene/vo/DeleteSidListParamVO.java
  19. 24 0
      src/main/java/com/fdkankan/scene/vo/DeleteStylesParamVO.java
  20. 12 0
      src/main/java/com/fdkankan/scene/vo/FloorParamVO.java
  21. 27 0
      src/main/java/com/fdkankan/scene/vo/RenameCadParamVO.java
  22. 20 0
      src/main/java/com/fdkankan/scene/vo/SaveFiltersParamVO.java
  23. 61 0
      src/main/java/com/fdkankan/scene/vo/SceneAuthVO.java
  24. 3 0
      src/main/resources/application.yml

+ 59 - 1
src/main/java/com/fdkankan/redis/util/RedisClient.java

@@ -12,10 +12,13 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Component
 public class RedisClient {
 
+    public final static String url_delkey = "/redis/delkey";
+
     public final static String url_str_add = "/redis/string/add/";
 
     public final static String url_str_get = "/redis/string/get/";
@@ -34,6 +37,11 @@ public class RedisClient {
 
     public final static String url_hash_hdel = "/redis/hash/hdel";
 
+
+    public final static String url_list_get = "/redis/list/get";
+
+    public final static String url_list_rPushBatch = "/redis/list/rPushBatch";
+
     @Value("${redis.host}")
     private String host;
 
@@ -46,6 +54,20 @@ public class RedisClient {
     @Resource
     private CustomHttpClient customHttpClient;
 
+    public void del(String key){
+        String url = host + url_delkey;
+        Map<String, Object> params = new HashMap<>();
+        params.put("key", this.genKey(key));
+        JSONObject jsonObject = customHttpClient.postJson(url, params);
+        if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
+            throw new RuntimeException("redis delKey error");
+        }
+        Boolean success = jsonObject.getBoolean("data");
+        if(!success){
+            throw new RuntimeException("redis delKey failed");
+        }
+    }
+
     public void add(String key, String value){
          String url = host + url_str_add;
          Map<String, Object> params = new HashMap<>();
@@ -131,7 +153,16 @@ public class RedisClient {
         return map;
     }
 
-    public List<String> hMultiGet(String key){
+
+    public List<String> hMultiGet(String key, List<String> fields){
+        Map<String, String> map = this.hmget(key);
+        if(CollUtil.isEmpty(map)){
+            return null;
+        }
+        return map.keySet().stream().filter(v -> fields.contains(v)).map(v -> map.get(v)).collect(Collectors.toList());
+    }
+
+    public List<String> hgetValues(String key){
         String url = host + url_hash_hvals;
         Map<String, Object> params = new HashMap<>();
         params.put("key", this.genKey(key));
@@ -159,6 +190,33 @@ public class RedisClient {
         });
     }
 
+    public void lRightPushAll(String key, List<String> fields){
+        String url = host + url_list_rPushBatch;
+        Map<String, List<String>> keyValMap = new HashMap<>();
+        keyValMap.put(this.genKey(key), fields);
+        Map<String, Object> params = new HashMap<>();
+        params.put("keyValueBatch", keyValMap);
+        JSONObject jsonObject = customHttpClient.postJson(url, params);
+        if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
+            throw new RuntimeException("redis list rPushBatch error");
+        }
+    }
+
+    public List<String> lGet(String key, long start, long end){
+        String url = host + url_list_get;
+        Map<String, Object> params = new HashMap<>();
+        params.put("key", this.get(key));
+        params.put("Start", start);
+        params.put("End", end);
+        JSONObject jsonObject = customHttpClient.postJson(url, params);
+        if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
+            throw new RuntimeException("redis list get error");
+        }
+
+        return jsonObject.getJSONArray("data").toJavaList(String.class);
+    }
+
+
     private String genKey(String key){
          return sysCode + "_" + serverName + "_" + key;
     }

+ 16 - 0
src/main/java/com/fdkankan/scene/Interceptor/InitEditInfoAspect.java

@@ -5,6 +5,7 @@ import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.ThreeDESUtil;
@@ -45,6 +46,8 @@ public class InitEditInfoAspect {
 	private SceneEditInfoExtService sceneEditInfoExtService;
 	@Autowired
 	private SceneEditControlsService sceneEditControlsService;
+	@Autowired
+	private SceneFileMappingService sceneFileMappingService;
 
 	@Pointcut("@annotation(com.fdkankan.scene.annotation.InitEditInfo)")
 	public void InitEditInfo() {
@@ -107,6 +110,19 @@ public class InitEditInfoAspect {
 			sceneEditControlsService.save(sceneEditControls);
 		}
 
+		Set<String> keySet = new HashSet<>();
+		Set<Long> deleteIds = new HashSet<>();
+		List<SceneFileMapping> mappingList = sceneFileMappingService.list(new LambdaQueryWrapper<SceneFileMapping>().eq(SceneFileMapping::getNum, num).orderByDesc(SceneFileMapping::getId));
+		for (SceneFileMapping mapping : mappingList) {
+			if(keySet.contains(mapping.getKey())){
+				deleteIds.add(mapping.getId());
+			}else{
+				keySet.add(mapping.getKey());
+			}
+		}
+		if(CollUtil.isNotEmpty(deleteIds)){
+			sceneFileMappingService.removeByIds(deleteIds);
+		}
 
 		log.info("初始化数据结束");
 

+ 221 - 245
src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -2,11 +2,8 @@ package com.fdkankan.scene.controller;
 
 import com.fdkankan.common.constant.SceneInfoReqType;
 import com.fdkankan.scene.annotation.InitEditInfo;
-import com.fdkankan.scene.annotation.VrLog;
 import com.fdkankan.scene.bean.ResultData;
-import com.fdkankan.scene.service.ISceneProService;
-import com.fdkankan.scene.service.ISceneUploadService;
-import com.fdkankan.scene.service.SceneEditInfoService;
+import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.vo.*;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +11,8 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+
 /**
  * 场景编辑管理
  */
@@ -31,8 +30,8 @@ public class SceneEditController{
     private SceneEditInfoService sceneEditInfoService;
     @Autowired
     private ISceneUploadService sceneUploadService;
-//    @Autowired
-//    private ISceneEditService sceneEditService;
+    @Autowired
+    private ISceneEditService sceneEditService;
 //    @Autowired
 //    private IDownloadTourVideoService downloadTourVideoService;
 //    @Autowired
@@ -43,8 +42,8 @@ public class SceneEditController{
 //    private IScenePlusService scenePlusService;
 //    @Autowired
 //    private ISceneAsynOperLogService sceneAsynOperLogService;
-//    @Autowired
-//    private ISceneEditInfoExtService sceneEditInfoExtService;
+    @Autowired
+    private SceneEditInfoExtService sceneEditInfoExtService;
 //    @Autowired
 //    private ICutModelService cutModelService;
 
@@ -166,10 +165,8 @@ public class SceneEditController{
      * </p>
      * @author dengsixing
      * @date 2022/8/1
-     * @param param
      * @return com.fdkankan.web.response.ResultData
      **/
-    @CheckPermit
     @PostMapping(value = "/saveTagsVisible")
     public ResultData saveTagsVisible(@RequestBody @Validated SaveTagsVisibleParamVO param) throws Exception {
         return sceneProService.saveTagsVisible(param);
@@ -288,20 +285,19 @@ public class SceneEditController{
 //        return sceneEditInfoService.listLinkPan(num);
 //    }
 //
-//    /**
-//     * <p>
-//     保存户型图
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/1/20
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/cad/save")
-//    public ResultData saveCad(@RequestBody @Validated BaseDataParamVO param) throws Exception{
-//        return sceneEditInfoService.saveCad(param);
-//    }
+    /**
+     * <p>
+     保存户型图
+     * </p>
+     * @author dengsixing
+     * @date 2022/1/20
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/cad/save")
+    public ResultData saveCad(@RequestBody @Validated BaseDataParamVO param) throws Exception{
+        return sceneEditInfoService.saveCad(param);
+    }
 //
 //    /**
 //     * <p>
@@ -332,35 +328,33 @@ public class SceneEditController{
 //    public ResultData uploadDxf(@RequestParam MultipartFile file, @RequestParam String num) throws Exception{
 //        return sceneEditInfoService.uploadDxf(file, num);
 //    }
-//
-//    /**
-//     * <p>
-//     重置户型图
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/2/16
-//     * @param num
-//     * @return
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/cad/reset")
-//    public ResultData resetCad(@RequestParam(value = "num") String num) throws Exception {
-//        return sceneEditInfoService.resetCad(num);
-//    }
-//
-//    /**
-//     * <p>
-//     楼层户型重命名
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/2/16
-//     * @return
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/cad/rename")
-//    public ResultData renameCad(@RequestBody @Validated RenameCadParamVO param) throws IOException {
-//        return sceneEditInfoService.renameCad(param);
-//    }
+
+    /**
+     * <p>
+     重置户型图
+     * </p>
+     * @author dengsixing
+     * @date 2022/2/16
+     * @param num
+     * @return
+     **/
+    @PostMapping(value = "/cad/reset")
+    public ResultData resetCad(@RequestParam(value = "num") String num) throws Exception {
+        return sceneEditInfoService.resetCad(num);
+    }
+
+    /**
+     * <p>
+     楼层户型重命名
+     * </p>
+     * @author dengsixing
+     * @date 2022/2/16
+     * @return
+     **/
+    @PostMapping(value = "/cad/rename")
+    public ResultData renameCad(@RequestBody @Validated RenameCadParamVO param) throws IOException {
+        return sceneEditInfoService.renameCad(param);
+    }
 
     /**
      * <p>
@@ -571,21 +565,20 @@ public class SceneEditController{
 //        @RequestParam("files") MultipartFile[] files) throws Exception{
 //        return sceneEditInfoService.sceneSync(num, type, floorPlanJson, ajkJson, cameraJson, files);
 //    }
-//
-//    /**
-//     * <p>
-//     获取场景权限
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param num
-//     * @return com.fdkankan.scene.vo.SceneAuthVO
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/getAuth")
-//    public SceneAuthVO getAuth(@RequestParam("num") String num) throws Exception{
-//        return sceneEditService.getAuth(num, this.getSsoUser());
-//    }
+
+    /**
+     * <p>
+     获取场景权限
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param num
+     * @return com.fdkankan.scene.vo.SceneAuthVO
+     **/
+    @PostMapping(value = "/getAuth")
+    public SceneAuthVO getAuth(@RequestParam("num") String num) throws Exception{
+        return sceneEditService.getAuth(num);
+    }
 //
 //    /**
 //     * <p>
@@ -604,36 +597,33 @@ public class SceneEditController{
 //        return sceneEditService.locales(param);
 //    }
 //
-//    /**
-//     * <p>
-//     保存导览
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/tour/save")
-//    public ResultData saveTour(@RequestBody @Validated BaseDataParamVO param) throws Exception{
-//        return sceneEditService.saveTour(param);
-//    }
-//
-//    /**
-//     * <p>
-//     删除导览
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/tour/delete")
-//    public ResultData deleteTour(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
-//        return sceneEditService.deleteTour(param);
-//    }
-//
+    /**
+     * <p>
+     保存导览
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/tour/save")
+    public ResultData saveTour(@RequestBody @Validated BaseDataParamVO param) throws Exception{
+        return sceneEditService.saveTour(param);
+    }
+
+    /**
+     * <p>
+     删除导览
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/tour/delete")
+    public ResultData deleteTour(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
+        return sceneEditService.deleteTour(param);
+    }
+
 //    @PostMapping(value = "/tour/video/upload")
 //    public ResultData uploadTourVideo(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
 //        return downloadTourVideoService.uploadTourVideo(num, file);
@@ -643,105 +633,98 @@ public class SceneEditController{
 //    public ResultData downloadTourVideo(@RequestParam("num") String num) throws Exception {
 //        return downloadTourVideoService.downloadTourVideo(num);
 //    }
-//
-//    /**
-//     * <p>
-//     添加马赛克
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/mosaics/add")
-//    public ResultData addMosaics(@RequestBody @Validated BaseDataParamVO param) throws Exception{
-//        return sceneEditInfoService.addMosaics(param);
-//    }
-//
-//    /**
-//     * <p>
-//     删除马赛克
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/mosaics/delete")
-//    public ResultData deleteMosaics(@RequestBody @Validated DeleteMosaicParamVO param) throws Exception{
-//        return sceneEditInfoService.deleteMosaics(param);
-//    }
-//
-//    /**
-//     * <p>
-//     马赛克列表
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/mosaics/list")
-//    public ResultData getMosaicList(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
-//        return ResultData.ok(sceneEditInfoService.getMosaicList(param.getNum()));
-//    }
-//
-//    /**
-//     * <p>
-//     添加水印
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/waterMark/add")
-//    public ResultData addWaterMark(@RequestBody @Validated BaseFileParamVO param) throws Exception{
-//        return sceneEditInfoService.addWaterMark(param);
-//    }
-//
-//    /**
-//     * <p>
-//     删除水印
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/waterMark/delete")
-//    public ResultData deleteWaterMark(@RequestBody @Validated BaseFileParamVO param) throws Exception{
-//        return sceneEditInfoService.deleteWaterMark(param);
-//    }
-//
-//    /**
-//     * 删除水印
-//     * @param param
-//     * @return
-//     * @throws Exception
-//     */
-//    @CheckPermit
-//    @PostMapping(value = "/filter/save")
-//    public ResultData saveFilter(@RequestBody @Validated SaveFiltersParamVO param) throws Exception{
-//        return sceneEditInfoService.saveFilter(param);
-//    }
-//
-//    /**
-//     * 删除水印
-//     * @param param
-//     * @return
-//     * @throws Exception
-//     */
-//    @CheckPermit
-//    @PostMapping(value = "/filter/list")
-//    public ResultData listFilter(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
-//        return sceneEditInfoService.listFilter(param);
-//    }
+
+    /**
+     * <p>
+     添加马赛克
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/mosaics/add")
+    public ResultData addMosaics(@RequestBody @Validated BaseDataParamVO param) throws Exception{
+        return sceneEditInfoService.addMosaics(param);
+    }
+
+    /**
+     * <p>
+     删除马赛克
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/mosaics/delete")
+    public ResultData deleteMosaics(@RequestBody @Validated DeleteMosaicParamVO param) throws Exception{
+        return sceneEditInfoService.deleteMosaics(param);
+    }
+
+    /**
+     * <p>
+     马赛克列表
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/mosaics/list")
+    public ResultData getMosaicList(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
+        return ResultData.ok(sceneEditInfoService.getMosaicList(param.getNum()));
+    }
+
+    /**
+     * <p>
+     添加水印
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/waterMark/add")
+    public ResultData addWaterMark(@RequestBody @Validated BaseFileParamVO param) throws Exception{
+        return sceneEditInfoService.addWaterMark(param);
+    }
+
+    /**
+     * <p>
+     删除水印
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/waterMark/delete")
+    public ResultData deleteWaterMark(@RequestBody @Validated BaseFileParamVO param) throws Exception{
+        return sceneEditInfoService.deleteWaterMark(param);
+    }
+
+    /**
+     * 删除水印
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @PostMapping(value = "/filter/save")
+    public ResultData saveFilter(@RequestBody @Validated SaveFiltersParamVO param) throws Exception{
+        return sceneEditInfoService.saveFilter(param);
+    }
+
+    /**
+     * 删除水印
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @PostMapping(value = "/filter/list")
+    public ResultData listFilter(@RequestBody @Validated BaseSceneParamVO param) throws Exception{
+        return sceneEditInfoService.listFilter(param);
+    }
 //
 //    /**
 //     * <p>
@@ -837,54 +820,47 @@ public class SceneEditController{
 //    public ResultData getServiceUpTip(){
 //        return sceneEditService.getServiceUpTip();
 //    }
-//
-//    /**
-//     * 保存或者修改指示牌
-//     * @param param
-//     * @return
-//     * @throws Exception
-//     */
-//    @CheckPermit
-//    @PostMapping("/billboards/save")
-//    public ResultData saveBillboards(@RequestBody @Validated BaseJsonArrayParamVO param) throws Exception {
-//        return sceneEditInfoExtService.saveBillboards(param);
-//    }
-//
-//    /**
-//     * 删除指示牌
-//     * @param param
-//     * @return
-//     * @throws Exception
-//     */
-//    @CheckPermit
-//    @PostMapping("/billboards/delete")
-//    public ResultData deleteBillboards(@RequestBody @Validated DeleteSidListParamVO param) throws Exception {
-//        return sceneEditInfoExtService.deleteBillboards(param);
-//    }
-//
-//    /**
-//     * 获取指示牌列表
-//     * @param param
-//     * @return
-//     * @throws Exception
-//     */
-//    @CheckPermit
-//    @PostMapping("/billboards/list")
-//    public ResultData deleteBillboards(@RequestBody @Validated BaseSceneParamVO param) throws Exception {
-//        return ResultData.ok(sceneEditInfoExtService.listBillboards(param));
-//    }
-//
-//    /**
-//     * 获取指示牌列表
-//     * @param param
-//     * @return
-//     * @throws Exception
-//     */
-//    @CheckPermit
-//    @PostMapping("/billboards/styles/delete")
-//    public ResultData deleteBillboards(@RequestBody @Validated DeleteStylesParamVO param) throws Exception {
-//        return ResultData.ok(sceneEditInfoExtService.deleteBillboardsStyles(param));
-//    }
+
+    /**
+     * 保存或者修改指示牌
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/billboards/save")
+    public ResultData saveBillboards(@RequestBody @Validated BaseJsonArrayParamVO param) throws Exception {
+        return sceneEditInfoExtService.saveBillboards(param);
+    }
+
+    /**
+     * 删除指示牌
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/billboards/delete")
+    public ResultData deleteBillboards(@RequestBody @Validated DeleteSidListParamVO param) throws Exception {
+        return sceneEditInfoExtService.deleteBillboards(param);
+    }
+
+    /**
+     * 获取指示牌列表
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/billboards/list")
+    public ResultData deleteBillboards(@RequestBody @Validated BaseSceneParamVO param) throws Exception {
+        return ResultData.ok(sceneEditInfoExtService.listBillboards(param));
+    }
+
+    /**
+     * 获取指示牌列表
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/billboards/styles/delete")
+    public ResultData deleteBillboards(@RequestBody @Validated DeleteStylesParamVO param) throws Exception {
+        return ResultData.ok(sceneEditInfoExtService.deleteBillboardsStyles(param));
+    }
 //
 //    @CheckPermit
 //    @PostMapping(value = "/cutModel/save")

+ 2 - 2
src/main/java/com/fdkankan/scene/entity/SceneEditInfoExt.java

@@ -41,13 +41,13 @@ public class SceneEditInfoExt implements Serializable {
      * 户型角度
      */
     @TableField(value = "floor_plan_angle")
-    private String floorPlanAngle;
+    private Float floorPlanAngle;
 
     /**
      * 指南针角度
      */
     @TableField("floor_plan_compass")
-    private String floorPlanCompass;
+    private Float floorPlanCompass;
 
     /**
      * 大场景序号(随心装场景码)  原pro_edit表中的字段

+ 30 - 0
src/main/java/com/fdkankan/scene/service/ISceneEditService.java

@@ -0,0 +1,30 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.scene.bean.ResultData;
+import com.fdkankan.scene.vo.BaseDataParamVO;
+import com.fdkankan.scene.vo.BaseSceneParamVO;
+import com.fdkankan.scene.vo.SceneAuthVO;
+
+import java.io.IOException;
+
+/**
+ * <p>
+ * 场景编辑
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/11
+ **/
+public interface ISceneEditService {
+
+    SceneAuthVO getAuth(String num);
+
+//    ResultData locales(LocalesParamVO param) throws Exception;
+
+    ResultData saveTour(BaseDataParamVO param) throws IOException;
+
+    ResultData deleteTour(BaseSceneParamVO param) throws Exception;
+
+//    ResultData getServiceUpTip();
+
+}

+ 15 - 9
src/main/java/com/fdkankan/scene/service/SceneEditInfoExtService.java

@@ -1,7 +1,13 @@
 package com.fdkankan.scene.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
+import com.fdkankan.scene.vo.BaseJsonArrayParamVO;
+import com.fdkankan.scene.vo.BaseSceneParamVO;
+import com.fdkankan.scene.vo.DeleteSidListParamVO;
+import com.fdkankan.scene.vo.DeleteStylesParamVO;
 
 /**
  * <p>
@@ -16,13 +22,13 @@ public interface SceneEditInfoExtService extends IService<SceneEditInfoExt> {
 
     SceneEditInfoExt getByEditInfoId(long editInfoId);
 
-//    void updateToursByNum(String num, Integer tours);
-//
-//    ResultData saveBillboards(BaseJsonArrayParamVO param) throws Exception;
-//
-//    ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception;
-//
-//    JSONObject listBillboards(BaseSceneParamVO param) throws Exception;
-//
-//    ResultData deleteBillboardsStyles(DeleteStylesParamVO param) throws Exception;
+    void updateToursByNum(String num, Integer tours);
+
+    ResultData saveBillboards(BaseJsonArrayParamVO param) throws Exception;
+
+    ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception;
+
+    JSONObject listBillboards(BaseSceneParamVO param) throws Exception;
+
+    ResultData deleteBillboardsStyles(DeleteStylesParamVO param) throws Exception;
 }

+ 20 - 19
src/main/java/com/fdkankan/scene/service/SceneEditInfoService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.vo.*;
@@ -30,16 +31,16 @@ public interface SceneEditInfoService extends IService<SceneEditInfo> {
     SceneInfoVO getSceneInfo(SceneInfoParamVO param) throws Exception;
 //
 ////    ResultData saveUpload(SaveUploadParamVO param) throws Exception;
-//
-//    ResultData saveCad(BaseDataParamVO param) throws Exception;
+
+    ResultData saveCad(BaseDataParamVO param) throws Exception;
 //
 //    ResultData uploadDxf(MultipartFile file, String num) throws Exception;
 //
 //    ResultData downloadDxf(String num) throws Exception;
-//
-//    ResultData resetCad(String num) throws IOException;
-//
-//    ResultData renameCad(RenameCadParamVO param) throws IOException;
+
+    ResultData resetCad(String num) throws IOException;
+
+    ResultData renameCad(RenameCadParamVO param) throws IOException;
 //
     void upgradeVersionById(Long id);
 //
@@ -70,9 +71,9 @@ public interface SceneEditInfoService extends IService<SceneEditInfo> {
 //    ResultData sceneSync(String num, String type, String floorPlanJson, String ajkJson, String cameraJson, MultipartFile[] files) throws Exception;
 //
 //    ResultData checkKey(SceneCheckKeyParamVO param) throws Exception;
-//
-//    ResultData addMosaics(BaseDataParamVO param) throws Exception;
-//
+
+    ResultData addMosaics(BaseDataParamVO param) throws Exception;
+
 //    ResultData uploadLinkPan(String num, String sid, String fileName, MultipartFile file) throws Exception;
 //
 //    ResultData saveLinkPan(SaveLinkPanParamVO param) throws Exception;
@@ -82,18 +83,18 @@ public interface SceneEditInfoService extends IService<SceneEditInfo> {
 //    ResultData deleteLinkPan(DeleteLinkPanParamVO param) throws Exception;
 //
 //    ResultData deleteStyles(DeleteStylesParamVO param) throws Exception;
-//
-//    ResultData deleteMosaics(DeleteMosaicParamVO param) throws Exception;
+
+    ResultData deleteMosaics(DeleteMosaicParamVO param) throws Exception;
 
     List<JSONObject> getMosaicList(String num) throws Exception;
-//
-//    ResultData addWaterMark(BaseFileParamVO param) throws Exception;
-//
-//    ResultData deleteWaterMark(BaseFileParamVO param) throws Exception;
-//
-//    ResultData saveFilter(SaveFiltersParamVO param) throws Exception;
-//
-//    ResultData listFilter(BaseSceneParamVO param) throws Exception;
+
+    ResultData addWaterMark(BaseFileParamVO param) throws Exception;
+
+    ResultData deleteWaterMark(BaseFileParamVO param) throws Exception;
+
+    ResultData saveFilter(SaveFiltersParamVO param) throws Exception;
+
+    ResultData listFilter(BaseSceneParamVO param) throws Exception;
 
 
 }

+ 4 - 0
src/main/java/com/fdkankan/scene/service/SceneFileMappingService.java

@@ -13,4 +13,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface SceneFileMappingService extends IService<SceneFileMapping> {
 
+    SceneFileMapping getByKey(String key);
+
+    void delByNumAndKey(String num, String key);
+
 }

+ 7 - 3
src/main/java/com/fdkankan/scene/service/impl/FYunFileServiceImpl.java

@@ -16,6 +16,7 @@ import javax.annotation.Resource;
 import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.Map;
+import java.util.Objects;
 
 @Service
 public class FYunFileServiceImpl implements FYunFileService {
@@ -31,7 +32,7 @@ public class FYunFileServiceImpl implements FYunFileService {
 
     @Override
     public String getFileContent(String key) throws IOException {
-        SceneFileMapping sceneFileMapping = sceneFileMappingService.getOne(new LambdaQueryWrapper<SceneFileMapping>().eq(SceneFileMapping::getKey, key));
+        SceneFileMapping sceneFileMapping = sceneFileMappingService.getByKey(key);
         String content = null;
         try (InputStream inputStream = customHttpClient.downloadFileToInputStream(sceneFileMapping.getUrl())){
             content =  IoUtil.read(inputStream, StandardCharsets.UTF_8);
@@ -46,12 +47,15 @@ public class FYunFileServiceImpl implements FYunFileService {
         FileUtil.writeBytes(data, tempFile);
         Map<String, String> mapping = fdfsUtil.uploadFile(tempFile.getAbsolutePath());
         //添加记录
-        SceneFileMapping sceneFileMapping = new SceneFileMapping();
+        SceneFileMapping sceneFileMapping =  sceneFileMappingService.getByKey(key);
+        if(Objects.isNull(sceneFileMapping)){
+            sceneFileMapping = new SceneFileMapping();
+        }
         sceneFileMapping.setNum(num);
         sceneFileMapping.setFileid(mapping.get("file_id"));
         sceneFileMapping.setUrl(mapping.get("http_url"));
         sceneFileMapping.setKey(key);
-        sceneFileMappingService.save(sceneFileMapping);
+        sceneFileMappingService.saveOrUpdate(sceneFileMapping);
     }
 
     public static void main(String[] args) {

+ 257 - 214
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoExtServiceImpl.java

@@ -1,12 +1,38 @@
 package com.fdkankan.scene.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.UploadFilePath;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisClient;
+import com.fdkankan.scene.bean.ResultData;
+import com.fdkankan.scene.bean.TagBean;
+import com.fdkankan.scene.entity.Scene;
+import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
+import com.fdkankan.scene.entity.SceneFileMapping;
 import com.fdkankan.scene.mapper.SceneEditInfoExtMapper;
-import com.fdkankan.scene.service.SceneEditInfoExtService;
+import com.fdkankan.scene.service.*;
+import com.fdkankan.scene.vo.BaseJsonArrayParamVO;
+import com.fdkankan.scene.vo.BaseSceneParamVO;
+import com.fdkankan.scene.vo.DeleteSidListParamVO;
+import com.fdkankan.scene.vo.DeleteStylesParamVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  *  服务实现类
@@ -17,20 +43,22 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SceneEditInfoExtServiceImpl extends ServiceImpl<SceneEditInfoExtMapper, SceneEditInfoExt> implements SceneEditInfoExtService {
-//    @Autowired
-//    private IScenePlusService scenePlusService;
+    @Autowired
+    private SceneService scenePlusService;
 //    @Autowired
 //    private IScenePlusExtService scenePlusExtService;
-//    @Autowired
-//    private ISceneEditInfoService sceneEditInfoService;
-//    @Autowired
-//    private RedisUtil redisUtil;
+    @Autowired
+    private SceneEditInfoService sceneEditInfoService;
+    @Resource
+    private RedisClient redisClient;
 //    @Autowired
 //    private RedisLockUtil redisLockUtil;
-//    @Autowired
-//    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private FYunFileService fYunFileService;
 //    @Autowired
 //    private ISceneUploadService sceneUploadService;
+    @Autowired
+    private SceneFileMappingService sceneFileMappingService;
 
     @Override
     public SceneEditInfoExt getByScenePlusId(long scenePlusId) {
@@ -42,61 +70,64 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<SceneEditInfoExtMap
         return this.getOne(new LambdaQueryWrapper<SceneEditInfoExt>().eq(SceneEditInfoExt::getEditInfoId, editInfoId));
     }
 
-//    @Override
-//    public void updateToursByNum(String num, Integer tours) {
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
-//        sceneEditInfoService.upgradeVersionById(sceneEditInfo.getId());
-//        SceneEditInfoExt sceneEditInfoExt = this.getByEditInfoId(sceneEditInfo.getId());
-//        sceneEditInfoExt.setTours(tours);
+    @Override
+    public void updateToursByNum(String num, Integer tours) {
+        Scene scenePlus = scenePlusService.getByNum(num);
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        sceneEditInfoService.upgradeVersionById(sceneEditInfo.getId());
+        SceneEditInfoExt sceneEditInfoExt = this.getByEditInfoId(sceneEditInfo.getId());
+        sceneEditInfoExt.setTours(tours);
+        this.updateById(sceneEditInfoExt);
+    }
+
+    @Override
+    public ResultData saveBillboards(BaseJsonArrayParamVO param) throws Exception {
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+
+        this.addOrUpdateBillboards(param.getNum(), param.getData());
+
+        this.addOrUpdateBillboardsStyles(param.getNum(), param.getStyles());
+
+        //保存数据库
+        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
+        this.updateBillboards(param.getNum(), sceneEditInfoExt);
 //        this.updateById(sceneEditInfoExt);
-//    }
-//
-//    @Override
-//    public ResultData saveBillboards(BaseJsonArrayParamVO param) throws Exception {
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//
-//        this.addOrUpdateBillboards(param.getNum(), param.getData());
-//
-//        this.addOrUpdateBillboardsStyles(param.getNum(), param.getStyles());
-//
-//        //保存数据库
-//        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
-//        this.updateBillboards(param.getNum(), sceneEditInfoExt);
-////        this.updateById(sceneEditInfoExt);
-//
-//        sceneEditInfoService.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
-//
-//        return ResultData.ok();
-//    }
-//
-//    private void addOrUpdateBillboardsStyles(String num, List<JSONObject> styles) throws Exception{
-//
+
+        this.publicBillboardData(param.getNum());
+
+        sceneEditInfoService.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
+
+
+        return ResultData.ok();
+    }
+
+    private void addOrUpdateBillboardsStyles(String num, List<JSONObject> styles) throws Exception{
+
 //        this.syncBillboardsStylesFromFileToRedis(num);
-//
-//        if(CollUtil.isEmpty(styles)){
-//            return;
-//        }
-//
-//        long time = Calendar.getInstance().getTimeInMillis();
-//        Map<String, String> styleMap = new HashMap<>();
-//        AtomicInteger index = new AtomicInteger();
-//        styles.stream().forEach(style->{
-//            String id = style.getString("sid");
-//            style.put("createTime", time + index.getAndIncrement());
-//            styleMap.put(id, style.toJSONString());
-//        });
-//
-//        String key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num);
-//        redisUtil.hmset(key, styleMap);
-//
-//        //写入本地文件,作为备份
+
+        if(CollUtil.isEmpty(styles)){
+            return;
+        }
+
+        long time = Calendar.getInstance().getTimeInMillis();
+        Map<String, String> styleMap = new HashMap<>();
+        AtomicInteger index = new AtomicInteger();
+        styles.stream().forEach(style->{
+            String id = style.getString("sid");
+            style.put("createTime", time + index.getAndIncrement());
+            styleMap.put(id, style.toJSONString());
+        });
+
+        String key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num);
+        redisClient.hmset(key, styleMap);
+
+        //写入本地文件,作为备份
 //        this.writeBillboardStylesJson(num);
-//    }
-//
+    }
+
 //    private void syncBillboardsStylesFromFileToRedis(String num) throws Exception{
 //
 //        String key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num);
@@ -136,107 +167,106 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<SceneEditInfoExtMap
 //        }
 //
 //    }
-//
-//    @Override
-//    public ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception {
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
-//        String bucket = scenePlusExt.getYunFileBucket();
-//
-//        List<String> deleteSidList = param.getSidList();
-//
+
+    @Override
+    public ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception {
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+
+        List<String> deleteSidList = param.getSidList();
+
 //        this.syncBillboardsFromFileToRedis(param.getNum());
-//
-//        //处理删除状态数据
-//        this.deleteBillboards(param.getNum(), deleteSidList, bucket);
-//
-//        //写入本地文件,作为备份
+
+        //处理删除状态数据
+        this.deleteBillboardsHandler(param.getNum(), deleteSidList);
+
+        //写入本地文件,作为备份
 //        this.writeBillboardJson(param.getNum());
-//
-//        //保存数据库
-//        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
-//        this.updateBillboards(param.getNum(), sceneEditInfoExt);
-//        sceneEditInfoService.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
-//
-//        return ResultData.ok();
-//    }
-//
-//    @Override
-//    public JSONObject listBillboards(BaseSceneParamVO param) throws Exception {
-//
-//        JSONObject result = new JSONObject();
-//        List<JSONObject> tags = new ArrayList<>();
-//        List<JSONObject> styles = new ArrayList<>();
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
-//
+
+        this.publicBillboardData(param.getNum());
+
+        //保存数据库
+        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
+        this.updateBillboards(param.getNum(), sceneEditInfoExt);
+        sceneEditInfoService.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
+
+        return ResultData.ok();
+    }
+
+    @Override
+    public JSONObject listBillboards(BaseSceneParamVO param) throws Exception {
+
+        JSONObject result = new JSONObject();
+        List<JSONObject> tags = new ArrayList<>();
+        List<JSONObject> styles = new ArrayList<>();
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+
 //        this.syncBillboardsFromFileToRedis(param.getNum());
-//
-//        //获取指示牌数据
-//        String key = String.format(RedisKey.SCENE_BILLBOARDS, param.getNum());
-//        List<String> list = redisUtil.hgetValues(key);
-//        if(CollUtil.isNotEmpty(list)){
-//            List<TagBean> sortList = list.stream().map(str -> {
-//                JSONObject jsonObject = JSON.parseObject(str);
-//                TagBean tagBean = new TagBean();
-//                tagBean.setCreateTime(jsonObject.getLong("createTime"));
-//                jsonObject.remove("createTime");
-//                tagBean.setTag(jsonObject);
-//                return tagBean;
-//            }).collect(Collectors.toList());
-//            sortList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
-//            tags = sortList.stream().map(item -> item.getTag()).collect(Collectors.toList());
-//        }
-//        result.put("tags", tags);
-//
-//        //获取图标数据
+
+        //获取指示牌数据
+        String key = String.format(RedisKey.SCENE_BILLBOARDS, param.getNum());
+        List<String> list = redisClient.hgetValues(key);
+        if(CollUtil.isNotEmpty(list)){
+            List<TagBean> sortList = list.stream().map(str -> {
+                JSONObject jsonObject = JSON.parseObject(str);
+                TagBean tagBean = new TagBean();
+                tagBean.setCreateTime(jsonObject.getLong("createTime"));
+                jsonObject.remove("createTime");
+                tagBean.setTag(jsonObject);
+                return tagBean;
+            }).collect(Collectors.toList());
+            sortList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
+            tags = sortList.stream().map(item -> item.getTag()).collect(Collectors.toList());
+        }
+        result.put("tags", tags);
+
+        //获取图标数据
 //        this.syncBillboardsStylesFromFileToRedis(param.getNum());
-//        key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, param.getNum());
-//        List<String> sytlelist = redisUtil.hgetValues(key);
-//        if(CollUtil.isNotEmpty(sytlelist)){
-//            List<TagBean> stileSortList = sytlelist.stream().map(str -> {
-//                JSONObject jsonObject = JSON.parseObject(str);
-//                TagBean tagBean = new TagBean();
-//                tagBean.setCreateTime(jsonObject.getLong("createTime"));
-//                jsonObject.remove("createTime");
-//                tagBean.setTag(jsonObject);
-//                return tagBean;
-//            }).collect(Collectors.toList());
-//            stileSortList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
-//            styles = stileSortList.stream().map(item -> item.getTag()).collect(Collectors.toList());
-//        }
-//        result.put("styles", styles);
-//
-//        return result;
-//    }
-//
-//    private void deleteBillboards(String num, List<String> deleteSidList, String bucket) throws Exception {
-//        if(CollUtil.isEmpty(deleteSidList)){
-//            return;
-//        }
-//
-//        //从redis中加载热点数据
-//        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
-//        List<String> deletDataList = redisUtil.hMultiGet(key, deleteSidList);
-//        if(CollUtil.isEmpty(deletDataList))
-//            return;
-//        //从redis中移除热点数据
-//        redisUtil.hdel(key, deleteSidList.toArray());
-//    }
-//
-//    private void addOrUpdateBillboards(String num, List<JSONObject> data) throws Exception{
-//        Map<String, String> addOrUpdateMap = new HashMap<>();
-//        int i = 0;
-//        for (JSONObject jsonObject : data) {
-//            jsonObject.put("createTime", Calendar.getInstance().getTimeInMillis() + i++);
-//            addOrUpdateMap.put(jsonObject.getString("sid"), JSON.toJSONString(jsonObject));
-//        }
-//
+        key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, param.getNum());
+        List<String> sytlelist = redisClient.hgetValues(key);
+        if(CollUtil.isNotEmpty(sytlelist)){
+            List<TagBean> stileSortList = sytlelist.stream().map(str -> {
+                JSONObject jsonObject = JSON.parseObject(str);
+                TagBean tagBean = new TagBean();
+                tagBean.setCreateTime(jsonObject.getLong("createTime"));
+                jsonObject.remove("createTime");
+                tagBean.setTag(jsonObject);
+                return tagBean;
+            }).collect(Collectors.toList());
+            stileSortList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
+            styles = stileSortList.stream().map(item -> item.getTag()).collect(Collectors.toList());
+        }
+        result.put("styles", styles);
+
+        return result;
+    }
+
+    private void deleteBillboardsHandler(String num, List<String> deleteSidList) throws Exception {
+        if(CollUtil.isEmpty(deleteSidList)){
+            return;
+        }
+
+        //从redis中加载热点数据
+        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
+        List<String> deletDataList = redisClient.hMultiGet(key, deleteSidList);
+        if(CollUtil.isEmpty(deletDataList))
+            return;
+        //从redis中移除热点数据
+        redisClient.hdel(key, deleteSidList);
+    }
+
+    private void addOrUpdateBillboards(String num, List<JSONObject> data) throws Exception{
+        Map<String, String> addOrUpdateMap = new HashMap<>();
+        int i = 0;
+        for (JSONObject jsonObject : data) {
+            jsonObject.put("createTime", Calendar.getInstance().getTimeInMillis() + i++);
+            addOrUpdateMap.put(jsonObject.getString("sid"), JSON.toJSONString(jsonObject));
+        }
+
 //        this.syncBillboardsFromFileToRedis(num);
-//
-//        //处理新增和修改数据
-//        this.addOrUpdateBillboardsHandler(num, addOrUpdateMap);
-//    }
+
+        //处理新增和修改数据
+        this.addOrUpdateBillboardsHandler(num, addOrUpdateMap);
+    }
 //
 //    /**
 //     * <p>
@@ -283,17 +313,17 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<SceneEditInfoExtMap
 //        }
 //    }
 //
-//    private void addOrUpdateBillboardsHandler(String num, Map<String, String> addOrUpdateMap){
-//        if(CollUtil.isEmpty(addOrUpdateMap))
-//            return;
-//
-//        //批量写入缓存
-//        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
-//        redisUtil.hmset(key, addOrUpdateMap);
-//
-//        //写入本地文件,作为备份
+    private void addOrUpdateBillboardsHandler(String num, Map<String, String> addOrUpdateMap){
+        if(CollUtil.isEmpty(addOrUpdateMap))
+            return;
+
+        //批量写入缓存
+        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
+        redisClient.hmset(key, addOrUpdateMap);
+
+        //写入本地文件,作为备份
 //        this.writeBillboardJson(num);
-//    }
+    }
 //
 //    /**
 //     * <p>
@@ -347,53 +377,66 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<SceneEditInfoExtMap
 //            redisLockUtil.unlockLua(lockKey, lockVal);
 //        }
 //    }
-//
-//    private void updateBillboards(String num, SceneEditInfoExt sceneEditInfoExt){
-//        //查询缓存是否包含热点数据
-//        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
-//        Map<String, String> billboardsMap = redisUtil.hmget(key);
-//        boolean hashBillboards= false;
-//        for (Map.Entry<String, String> tagMap : billboardsMap.entrySet()) {
-//            if(StrUtil.isEmpty(tagMap.getValue())){
-//                continue;
-//            }
-//            hashBillboards = true;
-//            break;
-//        }
-//
-//        //更改热点状态
-//        sceneEditInfoExt.setBillboards(hashBillboards ? CommonStatus.YES.code().intValue() : CommonStatus.NO.code().intValue());
-//        this.updateById(sceneEditInfoExt);
-//    }
-//
-//    @Override
-//    public ResultData deleteBillboardsStyles(DeleteStylesParamVO param) throws Exception {
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if (scenePlus == null)
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//
-//        List<String> sidList = param.getSidList();
-//
+
+    private void updateBillboards(String num, SceneEditInfoExt sceneEditInfoExt){
+        //查询缓存是否包含热点数据
+        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
+        Map<String, String> billboardsMap = redisClient.hmget(key);
+        boolean hashBillboards= false;
+        for (Map.Entry<String, String> tagMap : billboardsMap.entrySet()) {
+            if(StrUtil.isEmpty(tagMap.getValue())){
+                continue;
+            }
+            hashBillboards = true;
+            break;
+        }
+
+        //更改热点状态
+        sceneEditInfoExt.setBillboards(hashBillboards ? CommonStatus.YES.code().intValue() : CommonStatus.NO.code().intValue());
+        this.updateById(sceneEditInfoExt);
+    }
+
+    private void publicBillboardData(String sceneNum) throws IOException {
+        String Key = String.format(RedisKey.SCENE_BILLBOARDS, sceneNum);
+        String userEditPath = String.format(UploadFilePath.USER_VIEW_PATH, sceneNum) + "billboards.json";
+        List<String> list = redisClient.hgetValues(Key);
+        if(CollUtil.isEmpty(list)){
+            sceneFileMappingService.delByNumAndKey(sceneNum, userEditPath);
+            return;
+        }
+        List<JSONObject> collect = list.stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
+        fYunFileService.uploadFile(sceneNum, JSON.toJSONString(collect).getBytes(), userEditPath);
+    }
+
+
+    @Override
+    public ResultData deleteBillboardsStyles(DeleteStylesParamVO param) throws Exception {
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+        if (scenePlus == null)
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+
+        List<String> sidList = param.getSidList();
+
 //        this.syncBillboardsStylesFromFileToRedis(param.getNum());
-//
-//        String key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, param.getNum());
-//        List<String> deleteList = redisUtil.hMultiGet(key, sidList);
-//        redisUtil.hdel(key, sidList.toArray());
-//
-//        //写入本地文件,作为备份
+
+        String key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, param.getNum());
+        List<String> deleteList = redisClient.hMultiGet(key, sidList);
+        redisClient.hdel(key, sidList);
+
+        //写入本地文件,作为备份
 //        this.writeBillboardStylesJson(param.getNum());
-//
-//        //删除oss文件
-//        List<String> deleteFileList = deleteList.stream().map(str -> {
-//            JSONObject parse = JSON.parseObject(str);
-//            return parse.getString("url");
-//        }).collect(Collectors.toList());
-//        sceneUploadService.delete(
-//                DeleteFileParamVO.builder()
-//                        .num(param.getNum())
-//                        .fileNames(deleteFileList)
-//                        .bizType(FileBizType.BILLBOARD_ICON.code()).build());
-//
-//        return ResultData.ok();
-//    }
+
+        //删除oss文件
+        List<String> deleteFileList = deleteList.stream().map(str -> {
+            JSONObject parse = JSON.parseObject(str);
+            return parse.getString("url");
+        }).collect(Collectors.toList());
+
+        deleteFileList.stream().forEach(v->{
+            String fileKey = String.format(UploadFilePath.USER_VIEW_PATH, param.getNum()) + v;
+            sceneFileMappingService.delByNumAndKey(param.getNum(), fileKey);
+        });
+
+        return ResultData.ok();
+    }
 }

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

@@ -2,6 +2,7 @@ package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -9,13 +10,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.common.constant.CommonStatus;
-import com.fdkankan.common.constant.ErrorCode;
-import com.fdkankan.common.constant.SceneInfoReqType;
-import com.fdkankan.common.constant.UploadFilePath;
+import com.fdkankan.common.constant.*;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisClient;
+import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.bean.TagBean;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.SceneEditInfoMapper;
@@ -26,6 +25,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -52,8 +53,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
     private SceneEditControlsService sceneEditControlsService;
 //    @Autowired
 //    private ISceneProService sceneProService;
-//    @Resource
-//    private FYunFileServiceInterface fYunFileService;
+    @Resource
+    private FYunFileService fYunFileService;
     @Resource
     private RedisClient redisClient;
 //    @Autowired
@@ -88,7 +89,6 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //    private ISceneDrawService sceneDrawService;
 //    @Autowired
 //    private ISceneDynamicPanelService sceneDynamicPanelService;
-
     @Transactional
     @Override
     public SceneEditInfoVO saveScene(SceneEditInfoParamVO param) {
@@ -311,20 +311,21 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //        List<SurveillanceVO> surveillanceList = surveillanceService.listSurveillance(num);
 //        fYunFileService.uploadFile(bucket, JSON.toJSONString(surveillanceList).getBytes(StandardCharsets.UTF_8), surveillanceJsonPath);
 //    }
-//
-//    private void publicFilterData(String num, int filters, String bucket) throws IOException {
-//
-//        String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
-//        if(filters == CommonStatus.NO.code()){
-//            fYunFileService.deleteFile(bucket, userEditPath + "filter.json");
-//            return;
-//        }
-//        String key = String.format(RedisKey.SCENE_filter_DATA, num);
-//        List<String> list = redisUtil.lGet(key, 0, -1);
-//        JSONArray jsonArray = new JSONArray();
-//        list.stream().forEach(str->jsonArray.add(JSON.parseObject(str)));
-//        fYunFileService.uploadFile(bucket, JSON.toJSONBytes(jsonArray), userEditPath + "filter.json");
-//    }
+
+    private void publicFilterData(String num, int filters) throws IOException {
+
+        String userEditPath = String.format(UploadFilePath.USER_VIEW_PATH, num);
+        String fileKey = userEditPath + "filter.json";
+        if(filters == CommonStatus.NO.code()){
+            sceneFileMappingService.delByNumAndKey(num, fileKey);
+            return;
+        }
+        String key = String.format(RedisKey.SCENE_filter_DATA, num);
+        List<String> list = redisClient.lGet(key, 0, -1);
+        JSONArray jsonArray = new JSONArray();
+        list.stream().forEach(str->jsonArray.add(JSON.parseObject(str)));
+        fYunFileService.uploadFile(num, JSON.toJSONBytes(jsonArray), userEditPath + "filter.json");
+    }
 //
 //    public void publicLinkSceneData(String num, String bucket) throws IOException {
 //
@@ -467,6 +468,9 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
         }
         sceneInfoVO.setMapping(keyMap);
 
+        //马赛克列表
+        sceneInfoVO.setMosaicList(this.getMosaicList(num));
+
         return sceneInfoVO;
     }
 
@@ -585,79 +589,70 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //
 //        return sceneInfoVO;
 //    }
-//
-//    @Override
-//    public ResultData saveCad(BaseDataParamVO param) throws Exception {
-//
-//        String num = param.getNum();
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-//        if(Objects.isNull(scenePlus))
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
-//
-//        String bucket = scenePlusExt.getYunFileBucket();
-//        String editUserPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
-//        String localDataPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
-//
-//        JSONObject fileInfoJson = JSON.parseObject(param.getData());
-//        Float angel = null;
-//        Float compass = null;
-//        String floorJsonData = fileInfoJson.getString("floorJsonData");
-//        if(StrUtil.isNotBlank(floorJsonData)){
-//            JSONObject jsonObject = JSON.parseObject(floorJsonData);
-//            angel = jsonObject.getFloat("angle");
-//            compass = jsonObject.getFloat("compass");
-//        }
-//
-//        //处理户型图数据
-//        //上传floorplan_user.json文件
-//        FileUtils.writeFile(localDataPath + "floorplan_user.json", floorJsonData);
-//        fYunFileService.uploadFile(bucket, localDataPath + "floorplan_user.json", editUserPath + "floorplan.json");
-//
-//        //写入数据库
-//        Byte floorPlanUser = null;
-//        if(StrUtil.isNotEmpty(floorJsonData)){
-//            JSONObject houseTypeJson = CreateHouseJsonUtil
-//                    .createHouseTypeJsonByUser(localDataPath + "floorplan_user.json");
-//            if(Objects.nonNull(houseTypeJson)) {
-//                fYunFileService.uploadFile(bucket, houseTypeJson.toJSONString().getBytes(), editUserPath + "houseType.json");
-//            }
-//
-//            floorPlanUser = CommonStatus.YES.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(floorPlanUser != null){
-//                updateWrapper.set(SceneEditInfo::getFloorPlanUser, floorPlanUser);
-//            }
-//            this.update(updateWrapper);
-//        }else{
-//            sceneEditInfoDb = new SceneEditInfo();
-//            sceneEditInfoDb.setScenePlusId(scenePlus.getId());
-//            sceneEditInfoDb.setFloorPlanUser(floorPlanUser);
-//            this.save(sceneEditInfoDb);
-//        }
-//
-//        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoDb.getId());
-//        if(Objects.isNull(sceneEditInfoExt)){
-//            sceneEditInfoExt = new SceneEditInfoExt();
-//            sceneEditInfoExt.setEditInfoId(sceneEditInfoDb.getId());
-//        }
-//        if(Objects.nonNull(angel)){
-//            sceneEditInfoExt.setFloorPlanAngle(angel);
-//        }
-//        if(Objects.nonNull(compass)){
-//            sceneEditInfoExt.setFloorPlanCompass(compass);
-//        }
-//        sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
-//
-//
-//        return ResultData.ok();
-//
-//    }
+
+    @Override
+    public ResultData saveCad(BaseDataParamVO param) throws Exception {
+
+        String num = param.getNum();
+        Scene scenePlus = sceneService.getByNum(num);
+        if(Objects.isNull(scenePlus))
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+
+        String editUserPath = String.format(UploadFilePath.USER_VIEW_PATH, num);
+        String localDataPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
+
+        JSONObject fileInfoJson = JSON.parseObject(param.getData());
+        Float angel = null;
+        Float compass = null;
+        String floorJsonData = fileInfoJson.getString("floorJsonData");
+        if(StrUtil.isNotBlank(floorJsonData)){
+            JSONObject jsonObject = JSON.parseObject(floorJsonData);
+            angel = jsonObject.getFloat("angle");
+            compass = jsonObject.getFloat("compass");
+        }
+
+        //处理户型图数据
+        //上传floorplan_user.json文件
+        fYunFileService.uploadFile(num, floorJsonData.getBytes(StandardCharsets.UTF_8), editUserPath + "floorplan.json");
+
+        //写入数据库
+        Integer floorPlanUser = null;
+        if(StrUtil.isNotEmpty(floorJsonData)){
+            floorPlanUser = CommonStatus.YES.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(floorPlanUser != null){
+                updateWrapper.set(SceneEditInfo::getFloorPlanUser, floorPlanUser);
+            }
+            this.update(updateWrapper);
+        }else{
+            sceneEditInfoDb = new SceneEditInfo();
+            sceneEditInfoDb.setScenePlusId(scenePlus.getId());
+            sceneEditInfoDb.setFloorPlanUser(floorPlanUser);
+            this.save(sceneEditInfoDb);
+        }
+
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoDb.getId());
+        if(Objects.isNull(sceneEditInfoExt)){
+            sceneEditInfoExt = new SceneEditInfoExt();
+            sceneEditInfoExt.setEditInfoId(sceneEditInfoDb.getId());
+        }
+        if(Objects.nonNull(angel)){
+            sceneEditInfoExt.setFloorPlanAngle(angel);
+        }
+        if(Objects.nonNull(compass)){
+            sceneEditInfoExt.setFloorPlanCompass(compass);
+        }
+        sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
+
+
+        return ResultData.ok();
+
+    }
 //
 //    @Override
 //    public ResultData uploadDxf(MultipartFile file, String num) throws Exception {
@@ -724,67 +719,43 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //
 //        return ResultData.ok(url);
 //    }
-//
-//    @Override
-//    public ResultData resetCad(String num) throws IOException {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-//        if(Objects.isNull(scenePlus))
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        ScenePlusExt scenePlusExt = scenePlusExtService
-//                .getScenePlusExtByPlusId(scenePlus.getId());
-//        String bucket = scenePlusExt.getYunFileBucket();
-//        String path = scenePlusExt.getDataSource();
-//
-//        //户型图上传 恢复默认并发布同时点击刷新查看页面,平面图会变形,所以这里先注释掉 bug-36281 2023-05-04
-////        String ossResultPath = String.format(UploadFilePath.scene_result_data_path, num);
-////        String floorplanCadPath = ossResultPath + "floorplan_cad/";
-////        fYunFileService.copyFileBetweenBucket(bucket, floorplanCadPath, bucket, String.format(UploadFilePath.USER_EDIT_PATH, num));
-//
-////        String  userEditPath = UploadFilePath.USER_EDIT_PATH + "floor-cad-%s.%s";
-////        String floorCadPath = path + "/results/floorplan_cad";
-////        List<String> floorCadList = FileUtils.getFileList(floorCadPath);
-////        if(CollUtil.isNotEmpty(floorCadList)){
-////            floorCadList.stream().forEach(str->{
-////                String substring = str.substring(str.lastIndexOf(File.separator) + 1);
-////                String[] arr = substring.split("floor");
-////                String[] arr2 = arr[1].split("\\.");
-////                fYunFileService.uploadFile(bucket, str, String.format(userEditPath, num, arr2[0], arr2[1]));
-////            });
-////        }
-//
-//        //根据floorplan_cad.json生成houseType.json
-//        this.uploadHouseTypeJson(num, bucket);
-//
-//        SceneEditInfo sceneEditInfoDb = this.getByScenePlusId(scenePlus.getId());
-//        SceneEditInfoExt sceneEditInfoExt = null;
-//        if(Objects.nonNull(sceneEditInfoDb)){
-//            LambdaUpdateWrapper<SceneEditInfo> updateWrapper = new LambdaUpdateWrapper<SceneEditInfo>()
-//                    .setSql("version=version+" + 1)
-//                    .set(SceneEditInfo::getFloorPlanUser, CommonStatus.NO.code())
-//                    .eq(SceneEditInfo::getId, sceneEditInfoDb.getId());
-//            this.update(updateWrapper);
-//
-//            sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoDb.getId());
-//        }else{
-//            sceneEditInfoDb = new SceneEditInfo();
-//            sceneEditInfoDb.setScenePlusId(scenePlus.getId());
-//            sceneEditInfoDb.setFloorPlanUser(CommonStatus.NO.code());
-//            this.save(sceneEditInfoDb);
-//        }
-//        if(Objects.isNull(sceneEditInfoExt)){
-//            sceneEditInfoExt = new SceneEditInfoExt();
-//            sceneEditInfoDb.setScenePlusId(scenePlus.getId());
-//            sceneEditInfoExt.setEditInfoId(sceneEditInfoDb.getId());
-//        }
-//        sceneEditInfoExt.setFloorPlanAngle(0f);
-//        sceneEditInfoExt.setFloorPlanCompass(0f);
-//        sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
-//
-//        return ResultData.ok();
-//
-//    }
-//
+
+    @Override
+    public ResultData resetCad(String num) throws IOException {
+
+        Scene scenePlus = sceneService.getByNum(num);
+        if(Objects.isNull(scenePlus))
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+
+        SceneEditInfo sceneEditInfoDb = this.getByScenePlusId(scenePlus.getId());
+        SceneEditInfoExt sceneEditInfoExt = null;
+        if(Objects.nonNull(sceneEditInfoDb)){
+            LambdaUpdateWrapper<SceneEditInfo> updateWrapper = new LambdaUpdateWrapper<SceneEditInfo>()
+                    .setSql("version=version+" + 1)
+                    .set(SceneEditInfo::getFloorPlanUser, CommonStatus.NO.code())
+                    .eq(SceneEditInfo::getId, sceneEditInfoDb.getId());
+            this.update(updateWrapper);
+
+            sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfoDb.getId());
+        }else{
+            sceneEditInfoDb = new SceneEditInfo();
+            sceneEditInfoDb.setScenePlusId(scenePlus.getId());
+            sceneEditInfoDb.setFloorPlanUser(CommonStatus.NO.code());
+            this.save(sceneEditInfoDb);
+        }
+        if(Objects.isNull(sceneEditInfoExt)){
+            sceneEditInfoExt = new SceneEditInfoExt();
+            sceneEditInfoDb.setScenePlusId(scenePlus.getId());
+            sceneEditInfoExt.setEditInfoId(sceneEditInfoDb.getId());
+        }
+        sceneEditInfoExt.setFloorPlanAngle(0f);
+        sceneEditInfoExt.setFloorPlanCompass(0f);
+        sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
+
+        return ResultData.ok();
+
+    }
+
 //    private void uploadHouseTypeJson(String num, String bucket) throws IOException {
 //
 //        JSONObject result = new JSONObject();
@@ -894,47 +865,45 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //        return result;
 //
 //    }
-//
-//    @Override
-//    public ResultData renameCad(RenameCadParamVO param) throws IOException {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
-//        String bucket = scenePlusExt.getYunFileBucket();
-//
-//        String key = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "floorplan.json";
-//        String floorplanJson = fYunFileService.getFileContent(bucket, key);
-//        if(StrUtil.isEmpty(floorplanJson)){
-//            return ResultData.ok();
-//        }
-//        Map<Integer, String> renameMap = new HashMap<>();
-//        param.getFloors().stream().forEach(floor->{
-//            renameMap.put(floor.getSubgroup(), floor.getName());
-//        });
-//        JSONObject jsonObject = JSON.parseObject(floorplanJson);
-//        if(Objects.isNull(jsonObject)){
-//            return ResultData.ok();
-//        }
-//        JSONArray floorArr = jsonObject.getJSONArray("floors");
-//        if(CollUtil.isEmpty(floorArr)){
-//            return ResultData.ok();
-//        }
-//        for (Object o : floorArr) {
-//            JSONObject item = (JSONObject)o;
-//            int subgroup = item.getIntValue("subgroup");
-//            String name = renameMap.get(subgroup);
-//            if(StrUtil.isEmpty(name)){
-//                continue;
-//            }
-//            item.put("name", name);
-//        }
-//        fYunFileService.uploadFile(bucket, jsonObject.toJSONString().getBytes(), key);
-//        return ResultData.ok();
-//    }
-//
+
+    @Override
+    public ResultData renameCad(RenameCadParamVO param) throws IOException {
+
+        Scene scenePlus = sceneService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        String key = String.format(UploadFilePath.USER_VIEW_PATH, param.getNum()) + "floorplan.json";
+        String floorplanJson = fYunFileService.getFileContent(key);
+        if(StrUtil.isEmpty(floorplanJson)){
+            return ResultData.ok();
+        }
+        Map<Integer, String> renameMap = new HashMap<>();
+        param.getFloors().stream().forEach(floor->{
+            renameMap.put(floor.getSubgroup(), floor.getName());
+        });
+        JSONObject jsonObject = JSON.parseObject(floorplanJson);
+        if(Objects.isNull(jsonObject)){
+            return ResultData.ok();
+        }
+        JSONArray floorArr = jsonObject.getJSONArray("floors");
+        if(CollUtil.isEmpty(floorArr)){
+            return ResultData.ok();
+        }
+        for (Object o : floorArr) {
+            JSONObject item = (JSONObject)o;
+            int subgroup = item.getIntValue("subgroup");
+            String name = renameMap.get(subgroup);
+            if(StrUtil.isEmpty(name)){
+                continue;
+            }
+            item.put("name", name);
+        }
+        fYunFileService.uploadFile(param.getNum(), jsonObject.toJSONString().getBytes(), key);
+        return ResultData.ok();
+    }
+
 //    private JSONObject updateFloorName(String sourceFloors, String targeFloors){
 //        JSONArray sourceFloorsJson = JSON.parseArray(sourceFloors);
 //        JSONObject targeFloorsJson = JSONObject.parseObject(targeFloors);
@@ -1831,58 +1800,58 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //
 //        return ResultData.ok();
 //    }
-//
-//    @Override
-//    public ResultData addMosaics(BaseDataParamVO param) throws Exception {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        SceneEditInfo sceneEditInfo = this.getByScenePlusId(scenePlus.getId());
-//
-//        //如果redis数据丢失,从本地文件中同步马赛克数据到redis
+
+    @Override
+    public ResultData addMosaics(BaseDataParamVO param) throws Exception {
+
+        Scene scenePlus = sceneService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        SceneEditInfo sceneEditInfo = this.getByScenePlusId(scenePlus.getId());
+
+        //如果redis数据丢失,从本地文件中同步马赛克数据到redis
 //        this.syncMosaicFromFileToRedis(param.getNum());
-//
-//        Map<String, String> map = new HashMap<>();
-//        JSONArray jsonArray = JSON.parseArray(param.getData());
-//        for (Object o : jsonArray) {
-//            JSONObject mosaic = (JSONObject) o;
-//            String panoId = mosaic.getString("panoId");
-//            if(StrUtil.isEmpty(panoId)){
-//                throw  new BusinessException(ErrorCode.FAILURE_CODE_5012);
-//            }
-//            map.put(panoId, JSON.toJSONString(mosaic));
-//        }
-//        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, param.getNum());
-//        redisUtil.hmset(key, map);
-//
-//        //写入本地文件,作为备份
+
+        Map<String, String> map = new HashMap<>();
+        JSONArray jsonArray = JSON.parseArray(param.getData());
+        for (Object o : jsonArray) {
+            JSONObject mosaic = (JSONObject) o;
+            String panoId = mosaic.getString("panoId");
+            if(StrUtil.isEmpty(panoId)){
+                throw  new BusinessException(ErrorCode.FAILURE_CODE_5012);
+            }
+            map.put(panoId, JSON.toJSONString(mosaic));
+        }
+        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, param.getNum());
+        redisClient.hmset(key, map);
+
+        //写入本地文件,作为备份
 //        this.writeMosaic(param.getNum());
-//
-//        //更新数据库
-//        this.updateMosaicFlag(param.getNum());
-//
-//        //更新版本号
-//        this.upgradeVersionById(sceneEditInfo.getId());
-//
-//        return ResultData.ok();
-//    }
-//
-//    private void updateMosaicFlag(String num){
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
-//        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
-//
-//        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, num);
-//        boolean flag = redisUtil.hasKey(key);
-//        if(flag){
-//            sceneEditInfoExt.setMosaic(Integer.valueOf(CommonStatus.YES.code()));
-//        }else{
-//            sceneEditInfoExt.setMosaic(Integer.valueOf(CommonStatus.NO.code()));
-//        }
-//        sceneEditInfoExtService.updateById(sceneEditInfoExt);
-//    }
-//
+
+        //更新数据库
+        this.updateMosaicFlag(param.getNum());
+
+        //更新版本号
+        this.upgradeVersionById(sceneEditInfo.getId());
+
+        return ResultData.ok();
+    }
+
+    private void updateMosaicFlag(String num){
+        Scene scenePlus = sceneService.getByNum(num);
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
+
+        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, num);
+        Map<String, String> hmget = redisClient.hmget(key);
+        if(CollUtil.isNotEmpty(hmget)){
+            sceneEditInfoExt.setMosaic(CommonStatus.YES.code());
+        }else{
+            sceneEditInfoExt.setMosaic(CommonStatus.NO.code());
+        }
+        sceneEditInfoExtService.updateById(sceneEditInfoExt);
+    }
+
 //    /**
 //     * <p>
 //     保证马赛克数据安全性,当redis宕机导致热点数据丢失时,可以从文件中读取,恢复到redis
@@ -2681,121 +2650,119 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //
 //        return result;
 //    }
-//
-//    @Override
-//    public ResultData deleteMosaics(DeleteMosaicParamVO param) throws Exception {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        SceneEditInfo sceneEditInfo = this.getByScenePlusId(scenePlus.getId());
-//
-//        //如果redis数据丢失,从本地文件中同步马赛克数据到redis
+
+    @Override
+    public ResultData deleteMosaics(DeleteMosaicParamVO param) throws Exception {
+
+        Scene scenePlus = sceneService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        SceneEditInfo sceneEditInfo = this.getByScenePlusId(scenePlus.getId());
+
+        //如果redis数据丢失,从本地文件中同步马赛克数据到redis
 //        this.syncMosaicFromFileToRedis(param.getNum());
-//
-//        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, param.getNum());
-//        redisUtil.hdel(key, param.getPanoIdList().toArray());
-//
-//        //写入本地文件,作为备份
+
+        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, param.getNum());
+        redisClient.hdel(key, param.getPanoIdList());
+
+        //写入本地文件,作为备份
 //        this.writeMosaic(param.getNum());
-//
-//        //更新数据库
-//        this.updateMosaicFlag(param.getNum());
-//
-//        //更新版本号
-//        this.upgradeVersionById(sceneEditInfo.getId());
-//
-//        return ResultData.ok();
-//    }
-//
+
+        //更新数据库
+        this.updateMosaicFlag(param.getNum());
+
+        //更新版本号
+        this.upgradeVersionById(sceneEditInfo.getId());
+
+        return ResultData.ok();
+    }
+
     @Override
     public List<JSONObject> getMosaicList(String num) throws Exception {
 
-//        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, num);
-//        Map<String, String> map = redisUtil.hmget(key);
-//        if(CollUtil.isEmpty(map)){
-//            ResultData.ok(new String[0]);
-//        }
-//        return map.values().stream()
-//                .map(mosaic-> JSON.parseObject(mosaic))
-//                .collect(Collectors.toList());
-        return null;
+        String key = String.format(RedisKey.SCENE_MOSAIC_DATA, num);
+        Map<String, String> map = redisClient.hmget(key);
+        if(CollUtil.isEmpty(map)){
+            ResultData.ok(new String[0]);
+        }
+        return map.values().stream()
+                .map(mosaic-> JSON.parseObject(mosaic))
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public ResultData addWaterMark(BaseFileParamVO param) throws Exception {
+        Scene scenePlus = sceneService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService
+                .getByScenePlusId(scenePlus.getId());
+        sceneEditInfoExt.setWaterMark(param.getFileName());
+        sceneEditInfoExtService.updateById(sceneEditInfoExt);
+        return ResultData.ok();
+    }
+
+    @Override
+    public ResultData deleteWaterMark(BaseFileParamVO param) throws Exception {
+        Scene scenePlus = sceneService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        String key = String.format(UploadFilePath.USER_VIEW_PATH, param.getNum()) + param.getFileName();
+        sceneFileMappingService.delByNumAndKey(param.getNum(), key);
 
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
+        sceneEditInfoExt.setWaterMark("");
+        sceneEditInfoExtService.updateById(sceneEditInfoExt);
+
+        return ResultData.ok();
     }
 
-//    @Override
-//    public ResultData addWaterMark(BaseFileParamVO param) throws Exception {
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService
-//                .getByScenePlusId(scenePlus.getId());
-//        sceneEditInfoExt.setWaterMark(param.getFileName());
-//        sceneEditInfoExtService.updateById(sceneEditInfoExt);
-//        return ResultData.ok();
-//    }
-//
-//    @Override
-//    public ResultData deleteWaterMark(BaseFileParamVO param) throws Exception {
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        sceneUploadService.delete(
-//                DeleteFileParamVO.builder()
-//                        .num(param.getNum())
-//                        .fileNames(Lists.newArrayList(param.getFileName()))
-//                        .bizType(FileBizType.WATERMARK.code()).build());
-//
-//        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
-//        sceneEditInfoExt.setWaterMark("");
-//        sceneEditInfoExtService.updateById(sceneEditInfoExt);
-//
-//        return ResultData.ok();
-//    }
-//
-//    @Override
-//    public ResultData saveFilter(SaveFiltersParamVO param) throws Exception {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if(Objects.isNull(scenePlus)){
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//        }
-//
-//        String key = String.format(RedisKey.SCENE_filter_DATA, param.getNum());
-//        redisUtil.del(key);//前端将全量数据传过来,所以这里先清空历史数据,然后保存前端数据即可
-//        JSONArray filterArr = JSON.parseArray(param.getData());
-//        int filters = CommonStatus.YES.code();
-//        //如果页面选择恢复默认,filters字段值为否
-//        if(Objects.nonNull(param.getReset()) && param.getReset() == CommonStatus.YES.code().intValue()){
-//            filters = CommonStatus.NO.code();
-//        }else{
-//            if(CollUtil.isNotEmpty(filterArr)){
-//                List<String> filterList = filterArr.stream().map(item->JSON.toJSONString(item)).collect(Collectors.toList());
-//                redisUtil.lRightPushAll(key, filterList);
-//            }else{
-//                filters = CommonStatus.NO.code();
-//            }
-//        }
-//
-//        //写本地文件,作为备份
+    @Override
+    public ResultData saveFilter(SaveFiltersParamVO param) throws Exception {
+
+        Scene scenePlus = sceneService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        String key = String.format(RedisKey.SCENE_filter_DATA, param.getNum());
+        redisClient.del(key);//前端将全量数据传过来,所以这里先清空历史数据,然后保存前端数据即可
+        JSONArray filterArr = JSON.parseArray(param.getData());
+        int filters = CommonStatus.YES.code();
+        //如果页面选择恢复默认,filters字段值为否
+        if(Objects.nonNull(param.getReset()) && param.getReset() == CommonStatus.YES.code().intValue()){
+            filters = CommonStatus.NO.code();
+        }else{
+            if(CollUtil.isNotEmpty(filterArr)){
+                List<String> filterList = filterArr.stream().map(item->JSON.toJSONString(item)).collect(Collectors.toList());
+                redisClient.lRightPushAll(key, filterList);
+            }else{
+                filters = CommonStatus.NO.code();
+            }
+        }
+
+        //写本地文件,作为备份
 //        this.writeFilter(param.getNum());
-//
-//
-//        //更新数据库
-//        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
-//        sceneEditInfoExt.setFilters(filters);
-//        sceneEditInfoExtService.updateById(sceneEditInfoExt);
-//
-//        //更新版本号
-//        this.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
-//
-//        return ResultData.ok();
-//
-//    }
-//
+
+
+        //更新数据库
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
+        sceneEditInfoExt.setFilters(filters);
+        sceneEditInfoExtService.updateById(sceneEditInfoExt);
+
+        //更新版本号
+        this.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
+
+        this.publicFilterData(param.getNum(), filters);
+
+        return ResultData.ok();
+
+    }
+
 //    private void writeFilter(String num) throws Exception{
 //
 //        String filterPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "filter.json";
@@ -2852,18 +2819,18 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //            redisLockUtil.unlockLua(lockKey, lockVal);
 //        }
 //    }
-//
-//    @Override
-//    public ResultData listFilter(BaseSceneParamVO param) throws Exception {
-//
-//        //同步数据
+
+    @Override
+    public ResultData listFilter(BaseSceneParamVO param) throws Exception {
+
+        //同步数据
 //        this.syncFiltersFromFileToRedis(param.getNum());
-//
-//        //查询redis
-//        String key = String.format(RedisKey.SCENE_filter_DATA, param.getNum());
-//        List<String> list = redisUtil.lGet(key, 0, -1);
-//        List<JSONObject> collect =
-//                list.stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
-//        return ResultData.ok(collect);
-//    }
+
+        //查询redis
+        String key = String.format(RedisKey.SCENE_filter_DATA, param.getNum());
+        List<String> list = redisClient.lGet(key, 0, -1);
+        List<JSONObject> collect =
+                list.stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
+        return ResultData.ok(collect);
+    }
 }

+ 185 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneEditServiceImpl.java

@@ -0,0 +1,185 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.UploadFilePath;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.scene.bean.ResultData;
+import com.fdkankan.scene.entity.Scene;
+import com.fdkankan.scene.service.*;
+import com.fdkankan.scene.vo.BaseDataParamVO;
+import com.fdkankan.scene.vo.BaseSceneParamVO;
+import com.fdkankan.scene.vo.SceneAuthVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/11
+ **/
+@Slf4j
+@Service
+@RefreshScope
+public class SceneEditServiceImpl implements ISceneEditService {
+
+//    @Value("${4dkk.manageService.basePath}")
+//    private String manageServiceUrl;
+//
+//    @Value("${4dkk.manageService.api.getServiceUpTip}")
+//    private String getServiceUpTipApi;
+//
+//    @Autowired
+//    ISceneProService sceneProService;
+    @Autowired
+    private SceneService scenePlusService;
+    @Autowired
+    private FYunFileService fYunFileService;
+//    @Autowired
+//    private ISceneUploadService sceneUploadService;
+    @Autowired
+    private SceneEditInfoExtService sceneEditInfoExtService;
+//    @Autowired
+//    private ICameraDetailService cameraDetailService;
+//    @Autowired
+//    private ICameraService cameraService;
+//    @Autowired
+//    private IUserIncrementService userIncrementService;
+//    @Value("${expected.time}")
+//    private String expectedTime;
+//    @Autowired
+//    private IUserService userService;
+//    @Autowired
+//    private ISceneCooperationService sceneCooperationService;
+//    @Autowired
+//    private ISceneResourceService sceneResourceService;
+//    @Autowired
+//    private IScenePlusExtService scenePlusExtService;
+//
+//    @Value("${scene.expired.month:#{null}}")
+//    private Integer expiredMonth;
+//
+//    @Autowired
+//    private MyClient myClient;
+
+    @Autowired
+    private SceneFileMappingService sceneFileMappingService;
+
+    @Override
+    public SceneAuthVO getAuth(String num){
+        Scene scenePlus = scenePlusService.getByNum(num);
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        SceneAuthVO sceneAuthVO = new SceneAuthVO();
+        sceneAuthVO.setExclude(new ArrayList<>());
+        sceneAuthVO.setInclude(new ArrayList<>());
+        sceneAuthVO.setCompany(null);
+        sceneAuthVO.setIsExpired(false);
+        sceneAuthVO.setIsVip(true);
+
+        return sceneAuthVO;
+    }
+
+//    @Override
+//    public ResultData locales(LocalesParamVO param) throws Exception {
+//        String key = "v4/www/locales/" + param.getFile();
+//        fYunFileService.uploadFile(JSON.toJSONBytes(param.getData()), key);
+//        return ResultData.ok();
+//    }
+
+    @Override
+    public ResultData saveTour(BaseDataParamVO param) throws IOException {
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        String key = String.format(UploadFilePath.USER_VIEW_PATH, param.getNum()) + "tour.json";
+        fYunFileService.uploadFile(param.getNum(), param.getData().getBytes(StandardCharsets.UTF_8), key);
+
+        sceneEditInfoExtService.updateToursByNum(param.getNum(), CommonStatus.YES.code());
+
+        return ResultData.ok();
+    }
+
+    @Override
+    public ResultData deleteTour(BaseSceneParamVO param) throws Exception {
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        String userEditPath = String.format(UploadFilePath.USER_VIEW_PATH, param.getNum());
+        String tourJsonPath = userEditPath + "tour.json";
+        String tourJson = fYunFileService.getFileContent(tourJsonPath);
+        JSONArray tours = JSON.parseArray(tourJson);
+        if(CollUtil.isNotEmpty(tours)){
+            List<String> fileNames = new ArrayList<>();
+            for (Object o : tours) {
+                JSONObject tour = (JSONObject)o;
+
+                JSONObject enter = tour.getJSONObject("enter");
+                if(Objects.nonNull(enter)){
+                    String enterOver = enter.getString("cover");
+                    if(StrUtil.isNotEmpty(enterOver)){
+                        fileNames.add(enterOver);
+                    }
+                }
+
+                JSONObject exit = tour.getJSONObject("exit");
+                if(Objects.nonNull(exit)){
+                    String exitOver = exit.getString("cover");
+                    if(StrUtil.isNotEmpty(exitOver)){
+                        fileNames.add(exitOver);
+                    }
+                }
+
+                String music = tour.getString("music");
+                if(StrUtil.isNotEmpty(music)){
+                    fileNames.add( music);
+                }
+            }
+
+            //批量删除资源文件
+//            if(CollUtil.isNotEmpty(fileNames)){
+//                sceneUploadService.delete(
+//                    DeleteFileParamVO.builder()
+//                        .num(param.getNum()).bizType("tour").fileNames(fileNames)
+//                        .build());
+//            }
+        }
+        //删除tour.json文件
+        sceneFileMappingService.delByNumAndKey(param.getNum(), tourJsonPath);
+
+        sceneEditInfoExtService.updateToursByNum(param.getNum(), CommonStatus.NO.code());
+
+        return ResultData.ok();
+    }
+
+//    @Override
+//    public ResultData getServiceUpTip() {
+//        try {
+//            String url = this.manageServiceUrl.concat(this.getServiceUpTipApi);
+//            String params = "type=" + 0;
+//            ResultData resultData = myClient.get(url, params);
+//            return ResultData.ok(resultData.getData());
+//        }catch (Exception e){
+//            return ResultData.ok();
+//        }
+//    }
+}

+ 10 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneFileMappingServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.scene.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.scene.entity.SceneFileMapping;
 import com.fdkankan.scene.mapper.SceneFileMappingMapper;
 import com.fdkankan.scene.service.SceneFileMappingService;
@@ -17,4 +18,13 @@ import org.springframework.stereotype.Service;
 @Service
 public class SceneFileMappingServiceImpl extends ServiceImpl<SceneFileMappingMapper, SceneFileMapping> implements SceneFileMappingService {
 
+    @Override
+    public void delByNumAndKey(String num, String key) {
+        this.remove(new LambdaQueryWrapper<SceneFileMapping>().eq(SceneFileMapping::getNum, num).eq(SceneFileMapping::getKey, key));
+    }
+
+    @Override
+    public SceneFileMapping getByKey(String key) {
+        return this.getOne(new LambdaQueryWrapper<SceneFileMapping>().eq(SceneFileMapping::getKey, key));
+    }
 }

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

@@ -553,6 +553,8 @@ public class SceneProServiceImpl implements ISceneProService {
         //写入本地文件,作为备份,以防redis数据丢失
 //        this.writeHotJson(param.getNum());
 
+        this.publicHotData(param.getNum());
+
         return ResultData.ok();
     }
 

+ 29 - 0
src/main/java/com/fdkankan/scene/vo/BaseFileParamVO.java

@@ -0,0 +1,29 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/22
+ **/
+@Data
+public class BaseFileParamVO {
+
+    /**
+     * 场景码
+     */
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    /**
+     * 文件名
+     */
+    @NotBlank(message = "文件名不能为空")
+    private String fileName;
+
+}

+ 29 - 0
src/main/java/com/fdkankan/scene/vo/BaseJsonArrayParamVO.java

@@ -0,0 +1,29 @@
+package com.fdkankan.scene.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * <p>
+ * 通用data类型参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/10
+ **/
+@Data
+public class BaseJsonArrayParamVO extends BaseSceneParamVO{
+
+    @NotNull(message = "data不能为空")
+//    private List<LinkPanParamVO> linkPans;
+    private List<JSONObject> data;
+
+    private List<JSONObject> styles;
+
+}

+ 28 - 0
src/main/java/com/fdkankan/scene/vo/DeleteMosaicParamVO.java

@@ -0,0 +1,28 @@
+package com.fdkankan.scene.vo;
+
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * <p>
+        删除马赛克入参
+ * </p>
+ * @author dengsixing
+ * @date 2022/7/12
+ * @param null
+ * @return null
+ **/
+@Data
+public class DeleteMosaicParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotNull(message = "panoIdList不能为空")
+    private List<String> panoIdList;
+
+
+
+}

+ 23 - 0
src/main/java/com/fdkankan/scene/vo/DeleteSidListParamVO.java

@@ -0,0 +1,23 @@
+package com.fdkankan.scene.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/18
+ **/
+@Data
+public class DeleteSidListParamVO extends BaseSceneParamVO{
+
+    @NotEmpty(message = "sid不能为空")
+    private List<String> sidList;
+
+}

+ 24 - 0
src/main/java/com/fdkankan/scene/vo/DeleteStylesParamVO.java

@@ -0,0 +1,24 @@
+package com.fdkankan.scene.vo;
+
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * <p>
+ * 删除场景关联图标参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/8
+ **/
+@Data
+public class DeleteStylesParamVO extends BaseSceneParamVO{
+
+    @NotNull(message = "sidList不能为空")
+    private List<String> sidList;
+
+
+
+}

+ 12 - 0
src/main/java/com/fdkankan/scene/vo/FloorParamVO.java

@@ -0,0 +1,12 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class FloorParamVO {
+    @NotNull(message = "subgroup不能为空")
+    private Integer subgroup;
+    @NotNull(message = "name不能为空")
+    private String name;
+}

+ 27 - 0
src/main/java/com/fdkankan/scene/vo/RenameCadParamVO.java

@@ -0,0 +1,27 @@
+package com.fdkankan.scene.vo;
+
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/27
+ **/
+@Data
+public class RenameCadParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @Valid
+    @NotEmpty(message = "floors不能为空")
+    private List<FloorParamVO> floors;
+
+}

+ 20 - 0
src/main/java/com/fdkankan/scene/vo/SaveFiltersParamVO.java

@@ -0,0 +1,20 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * <p>
+ * 通用data类型参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/10
+ **/
+@Data
+public class SaveFiltersParamVO extends BaseDataParamVO{
+
+    //是否恢复默认(0-否,1-是)
+    private Integer reset;
+
+}

+ 61 - 0
src/main/java/com/fdkankan/scene/vo/SceneAuthVO.java

@@ -0,0 +1,61 @@
+package com.fdkankan.scene.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/11
+ **/
+//@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Setter
+public class SceneAuthVO {
+
+    /**
+     * 是否过期
+     */
+    private boolean isExpired;
+
+    /**
+     * 是否会员
+     */
+    private boolean isVip;
+
+    /**
+     * 本地资源是否失效
+     */
+    private boolean sourceExpired;
+
+    private Long company;
+
+    private Object exclude;
+
+    private Object include;
+
+    public void setIsExpired(boolean isExpired){
+        this.isExpired = isExpired;
+    }
+    public boolean getIsExpired(){
+        return isExpired;
+    }
+
+    public void setIsVip(boolean isVip){
+        this.isVip = isVip;
+    }
+    public boolean getIsVip(){
+        return isVip;
+    }
+
+
+}

+ 3 - 0
src/main/resources/application.yml

@@ -1,2 +1,5 @@
 server:
   port: 10082
+spring:
+  main:
+    allow-circular-references: true