dengsixing 1 年之前
父節點
當前提交
2dfbd8232b

+ 1 - 1
src/main/java/com/fdkankan/common/constant/UploadFilePath.java

@@ -11,7 +11,7 @@ public class UploadFilePath {
     /**
     /**
      * oss.用户上传文件
      * oss.用户上传文件
      */
      */
-    public static final String USER_EDIT_PATH =  "scene_edit_data/%s/user/";
+//    public static final String USER_EDIT_PATH =  "scene_edit_data/%s/user/";
     public static final String USER_VIEW_PATH =  "scene_view_data/%s/user/";
     public static final String USER_VIEW_PATH =  "scene_view_data/%s/user/";
     /**
     /**
      * 场景数据
      * 场景数据

+ 29 - 0
src/main/java/com/fdkankan/redis/util/RedisClient.java

@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.scene.httpclient.CustomHttpClient;
 import com.fdkankan.scene.httpclient.CustomHttpClient;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -20,6 +22,10 @@ public class RedisClient {
 
 
     public final static String url_set_add = "/redis/set/add";
     public final static String url_set_add = "/redis/set/add";
 
 
+    public final static String url_set_getall = "/redis/set/getall";
+
+    public final static String url_set_srem = "/redis/set/srem";
+
     public final static String url_hash_hscan = "/redis/hash/hscan";
     public final static String url_hash_hscan = "/redis/hash/hscan";
 
 
     public final static String url_hash_add = "/redis/hash/add";
     public final static String url_hash_add = "/redis/hash/add";
@@ -73,6 +79,29 @@ public class RedisClient {
         }
         }
     }
     }
 
 
+    public Set<String> sGet(String key){
+        String url = host + url_set_getall;
+        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 set getall error");
+        }
+        List<String> data = jsonObject.getJSONArray("data").toJavaList(String.class);
+        return new HashSet<>(data);
+    }
+
+    public void setRemove(String key, Set<String> values){
+        String url = host + url_set_srem;
+        Map<String, Object> params = new HashMap<>();
+        params.put("key", this.genKey(key));
+        params.put("values", values);
+        JSONObject jsonObject = customHttpClient.postJson(url, params);
+        if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
+            throw new RuntimeException("redis set srem error");
+        }
+    }
+
     public void hmset(String key, Map<String, String> values){
     public void hmset(String key, Map<String, String> values){
         String url = host + url_hash_add;
         String url = host + url_hash_add;
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();

+ 43 - 45
src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -118,35 +118,34 @@ public class SceneEditController{
         return sceneProService.deleteTag(param);
         return sceneProService.deleteTag(param);
     }
     }
 
 
-//    /**
-//     * <p>
-//            热点列表
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param num
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @PostMapping(value = "/tag/list")
-//    public ResultData listTags(@RequestParam(value = "num") String num) throws Exception {
-//        return sceneProService.listTags(num);
-//    }
-//
-//    /**
-//     * <p>
-//     删除热点
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/2/16
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/icons/delete")
-//    public ResultData deleteIcons(@RequestBody @Validated DeleteHotIconParamVO param) throws Exception {
-//        return sceneProService.deleteIcons(param);
-//    }
-//
+    /**
+     * <p>
+            热点列表
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param num
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/tag/list")
+    public ResultData listTags(@RequestParam(value = "num") String num) throws Exception {
+        return sceneProService.listTags(num);
+    }
+
+    /**
+     * <p>
+     删除热点
+     * </p>
+     * @author dengsixing
+     * @date 2022/2/16
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/icons/delete")
+    public ResultData deleteIcons(@RequestBody @Validated DeleteHotIconParamVO param) throws Exception {
+        return sceneProService.deleteIcons(param);
+    }
+
 //    /**
 //    /**
 //     * <p>
 //     * <p>
 //     保存漫游可行
 //     保存漫游可行
@@ -156,26 +155,25 @@ public class SceneEditController{
 //     * @param param
 //     * @param param
 //     * @return com.fdkankan.web.response.ResultData
 //     * @return com.fdkankan.web.response.ResultData
 //     **/
 //     **/
-//    @CheckPermit
 //    @PostMapping(value = "/saveRoam")
 //    @PostMapping(value = "/saveRoam")
 //    public ResultData saveRoam(@RequestBody @Validated BaseDataParamVO param) throws Exception {
 //    public ResultData saveRoam(@RequestBody @Validated BaseDataParamVO param) throws Exception {
 //        return sceneProService.saveRoam(param);
 //        return sceneProService.saveRoam(param);
 //    }
 //    }
-//
-//    /**
-//     * <p>
-//     保存热点可见性的数据
-//     * </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);
-//    }
+
+    /**
+     * <p>
+     保存热点可见性的数据
+     * </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);
+    }
 //
 //
 //    /**
 //    /**
 //     * <p>
 //     * <p>

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

@@ -6,4 +6,6 @@ public interface FYunFileService {
 
 
     String getFileContent(String key) throws IOException;
     String getFileContent(String key) throws IOException;
 
 
+    void uploadFile(String num, byte[] data, String key);
+
 }
 }

+ 8 - 10
src/main/java/com/fdkankan/scene/service/ISceneProService.java

@@ -1,9 +1,7 @@
 package com.fdkankan.scene.service;
 package com.fdkankan.scene.service;
 
 
 import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.bean.ResultData;
-import com.fdkankan.scene.vo.DeleteHotParamVO;
-import com.fdkankan.scene.vo.FileNameAndDataParamVO;
-import com.fdkankan.scene.vo.SaveTagsParamVO;
+import com.fdkankan.scene.vo.*;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -18,16 +16,16 @@ public interface ISceneProService{
     ResultData saveInitialPage(FileNameAndDataParamVO param) throws Exception;
     ResultData saveInitialPage(FileNameAndDataParamVO param) throws Exception;
 
 
     ResultData addOrUpdateTag(SaveTagsParamVO param) throws Exception;
     ResultData addOrUpdateTag(SaveTagsParamVO param) throws Exception;
-//
+
     ResultData deleteTag(DeleteHotParamVO param) throws Exception;
     ResultData deleteTag(DeleteHotParamVO param) throws Exception;
-//
-//    ResultData deleteIcons(DeleteHotIconParamVO param) throws Exception;
-//
-//    ResultData listTags(String num) throws Exception;
-//
+
+    ResultData deleteIcons(DeleteHotIconParamVO param) throws Exception;
+
+    ResultData listTags(String num) throws Exception;
+
 //    ResultData saveRoam(BaseDataParamVO param) throws Exception;
 //    ResultData saveRoam(BaseDataParamVO param) throws Exception;
 //
 //
-//    ResultData saveTagsVisible(SaveTagsVisibleParamVO param) throws Exception;
+    ResultData saveTagsVisible(SaveTagsVisibleParamVO param) throws Exception;
 //
 //
 //    void updateUserIdByCameraId(Long userId, Long cameraId);
 //    void updateUserIdByCameraId(Long userId, Long cameraId);
 //
 //

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

@@ -41,7 +41,7 @@ public interface SceneEditInfoService extends IService<SceneEditInfo> {
 //
 //
 //    ResultData renameCad(RenameCadParamVO param) throws IOException;
 //    ResultData renameCad(RenameCadParamVO param) throws IOException;
 //
 //
-//    void upgradeVersionById(Long id);
+    void upgradeVersionById(Long id);
 //
 //
 //    void upgradeVersionAndImgVersionById(Long id);
 //    void upgradeVersionAndImgVersionById(Long id);
 //
 //

+ 29 - 2
src/main/java/com/fdkankan/scene/service/impl/FYunFileServiceImpl.java

@@ -1,7 +1,10 @@
 package com.fdkankan.scene.service.impl;
 package com.fdkankan.scene.service.impl;
 
 
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.lang.UUID;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.util.FdfsUtil;
 import com.fdkankan.scene.entity.SceneFileMapping;
 import com.fdkankan.scene.entity.SceneFileMapping;
 import com.fdkankan.scene.httpclient.CustomHttpClient;
 import com.fdkankan.scene.httpclient.CustomHttpClient;
 import com.fdkankan.scene.service.FYunFileService;
 import com.fdkankan.scene.service.FYunFileService;
@@ -10,9 +13,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
+import java.util.Map;
 
 
 @Service
 @Service
 public class FYunFileServiceImpl implements FYunFileService {
 public class FYunFileServiceImpl implements FYunFileService {
@@ -22,6 +25,9 @@ public class FYunFileServiceImpl implements FYunFileService {
     @Resource
     @Resource
     private CustomHttpClient customHttpClient;
     private CustomHttpClient customHttpClient;
 
 
+    @Resource
+    private FdfsUtil fdfsUtil;
+
 
 
     @Override
     @Override
     public String getFileContent(String key) throws IOException {
     public String getFileContent(String key) throws IOException {
@@ -32,4 +38,25 @@ public class FYunFileServiceImpl implements FYunFileService {
         }
         }
         return content;
         return content;
     }
     }
+
+    @Override
+    public void uploadFile(String num, byte[] data, String key) {
+        String suffix = "." + FileUtil.getSuffix(key);
+        File tempFile = FileUtil.createTempFile(UUID.fastUUID().toString(), suffix, new File("/temp"), true);
+        FileUtil.writeBytes(data, tempFile);
+        Map<String, String> mapping = fdfsUtil.uploadFile(tempFile.getAbsolutePath());
+        //添加记录
+        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);
+    }
+
+    public static void main(String[] args) {
+        String suffix = "." + FileUtil.getSuffix("/sxx/ttt/adf.json");
+        File tempFile = FileUtil.createTempFile(UUID.fastUUID().toString(), suffix, new File("D:\\test2"), true);
+        FileUtil.writeBytes("nihsd灌灌灌灌".getBytes(StandardCharsets.UTF_8), tempFile);
+    }
 }
 }

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

@@ -4,15 +4,19 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.SceneInfoReqType;
 import com.fdkankan.common.constant.SceneInfoReqType;
+import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisClient;
 import com.fdkankan.redis.util.RedisClient;
+import com.fdkankan.scene.bean.TagBean;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.SceneEditInfoMapper;
 import com.fdkankan.scene.mapper.SceneEditInfoMapper;
 import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.service.*;
@@ -367,33 +371,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //
 //
 //    }
 //    }
 //
 //
-//    private void publicHotData(String sceneNum, String bucket) throws IOException {
-//        String hotDataKey = String.format(RedisKey.SCENE_HOT_DATA, sceneNum);
-//        Map<String, String> hotMap = redisUtil.hmget(hotDataKey);
-//
-//        JSONArray tags = new JSONArray();
-//        if(CollUtil.isNotEmpty(hotMap)){
-//            List<TagBean> tagBeanList = hotMap.entrySet().stream().map(entry -> {
-//                JSONObject jsonObject = JSON.parseObject(entry.getValue());
-//                return TagBean.builder()
-//                        .createTime(jsonObject.getLong("createTime"))
-//                        .tag(jsonObject).build();
-//            }).collect(Collectors.toList());
-//            //按创建时间倒叙排序
-//            tagBeanList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
-//
-//            //移除createTime字段
-//            tagBeanList.stream().forEach(tagBean -> {
-//                tags.add(tagBean.getTag());
-//            });
-//        }
-//
-//        String hotJsonPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum) + "hot.json";
-//        fYunFileService.uploadFile(bucket, tags.toString().getBytes(), hotJsonPath);
-////        this.saveTagsToSceneEditInfo(sceneNum, sceneEditInfo);
-//
-//    }
-//
+
 //    private void publicBillboardData(String sceneNum, String bucket) throws IOException {
 //    private void publicBillboardData(String sceneNum, String bucket) throws IOException {
 //        String Key = String.format(RedisKey.SCENE_BILLBOARDS, sceneNum);
 //        String Key = String.format(RedisKey.SCENE_BILLBOARDS, sceneNum);
 //        String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum) + "billboards.json";
 //        String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum) + "billboards.json";
@@ -977,12 +955,12 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //        return targeFloorsJson;
 //        return targeFloorsJson;
 //    }
 //    }
 //
 //
-//    @Override
-//    public void upgradeVersionById(Long id) {
-//        this.update(new LambdaUpdateWrapper<SceneEditInfo>()
-//                .setSql("version=version+" + 1)
-//                .eq(SceneEditInfo::getId, id));
-//    }
+    @Override
+    public void upgradeVersionById(Long id) {
+        this.update(new LambdaUpdateWrapper<SceneEditInfo>()
+                .setSql("version=version+" + 1)
+                .eq(SceneEditInfo::getId, id));
+    }
 //
 //
 //    @Override
 //    @Override
 //    public void upgradeVersionAndImgVersionById(Long id) {
 //    public void upgradeVersionAndImgVersionById(Long id) {

+ 186 - 162
src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -6,30 +6,35 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.constant.UploadFilePath;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisClient;
 import com.fdkankan.redis.util.RedisClient;
+import com.fdkankan.scene.bean.IconBean;
 import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.bean.ResultData;
+import com.fdkankan.scene.bean.TagBean;
 import com.fdkankan.scene.entity.Scene;
 import com.fdkankan.scene.entity.Scene;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.service.FYunFileService;
 import com.fdkankan.scene.service.FYunFileService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.SceneEditInfoService;
 import com.fdkankan.scene.service.SceneEditInfoService;
 import com.fdkankan.scene.service.SceneService;
 import com.fdkankan.scene.service.SceneService;
-import com.fdkankan.scene.vo.DeleteHotParamVO;
-import com.fdkankan.scene.vo.FileNameAndDataParamVO;
-import com.fdkankan.scene.vo.HotParamVO;
-import com.fdkankan.scene.vo.SaveTagsParamVO;
+import com.fdkankan.scene.vo.*;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -128,6 +133,8 @@ public class SceneProServiceImpl implements ISceneProService {
         sceneEditInfoService.saveTagsToSceneEditInfo(param.getNum(), sceneEditInfo);
         sceneEditInfoService.saveTagsToSceneEditInfo(param.getNum(), sceneEditInfo);
         sceneEditInfoService.updateById(sceneEditInfo);
         sceneEditInfoService.updateById(sceneEditInfo);
 
 
+        this.publicHotData(param.getNum());
+
         return ResultData.ok();
         return ResultData.ok();
     }
     }
 
 
@@ -178,11 +185,13 @@ public class SceneProServiceImpl implements ISceneProService {
         sceneEditInfoService.saveTagsToSceneEditInfo(param.getNum(), sceneEditInfo);
         sceneEditInfoService.saveTagsToSceneEditInfo(param.getNum(), sceneEditInfo);
         sceneEditInfoService.updateById(sceneEditInfo);
         sceneEditInfoService.updateById(sceneEditInfo);
 
 
+        this.publicHotData(param.getNum());
+
         return ResultData.ok();
         return ResultData.ok();
     }
     }
 
 
     private void deleteHotDataFromTourJson(String num, List<String> sidList) throws IOException {
     private void deleteHotDataFromTourJson(String num, List<String> sidList) throws IOException {
-        String key = String.format(UploadFilePath.USER_EDIT_PATH, num) + "tour.json";
+        String key = String.format(UploadFilePath.USER_VIEW_PATH, num) + "tour.json";
         String tourJson = fYunFileService.getFileContent(key);
         String tourJson = fYunFileService.getFileContent(key);
         if(StrUtil.isEmpty(tourJson)){
         if(StrUtil.isEmpty(tourJson)){
             return;
             return;
@@ -202,108 +211,126 @@ public class SceneProServiceImpl implements ISceneProService {
                 }
                 }
             });
             });
         });
         });
-        fYunFileService.uploadFile(bucket, jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8), key);
+        fYunFileService.uploadFile(num, jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8), key);
     }
     }
-//
-//    @Override
-//    public ResultData deleteIcons(DeleteHotIconParamVO param) throws Exception {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if (scenePlus == null)
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
-//
-//        List<String> fileNameList = param.getFileNameList();
-//
+
+    @Override
+    public ResultData deleteIcons(DeleteHotIconParamVO param) throws Exception {
+
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+        if (scenePlus == null)
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+
+        List<String> fileNameList = param.getFileNameList();
+
 //        this.syncIconsFromFileToRedis(param.getNum());
 //        this.syncIconsFromFileToRedis(param.getNum());
-//
-//        String key = String.format(RedisKey.SCENE_HOT_ICONS, param.getNum());
-//        redisUtil.setRemove(key, fileNameList.toArray());
-//
-//        //写入本地文件,作为备份
+
+        String key = String.format(RedisKey.SCENE_HOT_ICONS, param.getNum());
+        redisClient.setRemove(key, new HashSet<>(fileNameList));
+
+        //写入本地文件,作为备份
 //        this.writeHotJson(param.getNum());
 //        this.writeHotJson(param.getNum());
-//
-//        //删除oss文件
-//        sceneUploadService.delete(
-//            DeleteFileParamVO.builder()
-//                .num(param.getNum())
-//                .fileNames(fileNameList)
-//                .bizType(FileBizType.TAG_ICON.code()).build());
-//
-//        return ResultData.ok();
-//    }
-//
-//    @Override
-//    public ResultData listTags(String num) throws Exception{
-//
-//        //保证热点数据安全性,当redis宕机导致热点数据丢失时,可以从文件中读取,恢复到redis
+
+        return ResultData.ok();
+    }
+
+    @Override
+    public ResultData listTags(String num) throws Exception{
+
+        //保证热点数据安全性,当redis宕机导致热点数据丢失时,可以从文件中读取,恢复到redis
 //        this.syncHotFromFileToRedis(num);
 //        this.syncHotFromFileToRedis(num);
-//
-//        //保证icons数据安全性,当redis宕机导致icons数据丢失时,可以从文件中读取,恢复到redis
+
+        //保证icons数据安全性,当redis宕机导致icons数据丢失时,可以从文件中读取,恢复到redis
 //        this.syncIconsFromFileToRedis(num);
 //        this.syncIconsFromFileToRedis(num);
-//
-//        JSONObject result = new JSONObject();
-//
-//        //查询缓存是否包含热点数据
-//        String key = String.format(RedisKey.SCENE_HOT_DATA, num);
-//        Map<String, String> allTagsMap = redisUtil.hmget(key);
-//        List<JSONObject> tags = Lists.newArrayList();
-//        List<TagBean> tagBeanList = new ArrayList<>();
-//        if(CollUtil.isNotEmpty(allTagsMap)){
-//            allTagsMap.entrySet().stream().forEach(entry -> {
-//                JSONObject jsonObject = JSON.parseObject(entry.getValue());
-//                tagBeanList.add(
-//                    TagBean.builder()
-//                        .createTime(jsonObject.getLong("createTime"))
-//                        .tag(jsonObject).build());
-//            });
-//            //按创建时间倒叙排序
-//            tagBeanList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
-//
-//            //移除createTime字段
-//            tags = tagBeanList.stream().map(tagBean -> {
-//                JSONObject tag = tagBean.getTag();
-//                tag.remove("createTime");
-//                return tag;
-//            }).collect(Collectors.toList());
-//        }
-//        result.put("tags", tags);
-//
-//        //查询缓存是否包含icons
-//        key = String.format(RedisKey.SCENE_HOT_ICONS, num);
-//        Set<String> icons = redisUtil.sGet(key);
-//        if(icons == null){
-//            icons = Sets.newHashSet();
-//        }
-//        List<String> iconList = this.sortIcons(tags, icons);
-//        result.put("icons", iconList);
-//
-//        return ResultData.ok(result);
-//    }
-//
-//    private List<String> sortIcons(List<JSONObject> tags, Set<String> icons){
-//
-//        //统计使用频次
-//        List<IconBean> iconBeans = Lists.newArrayList();
-//        for (String icon : icons) {
-//            int count = 0;
-//            for (JSONObject tag : tags) {
-//                String sid = tag.getString("icon");
-//                if(StrUtil.isEmpty(sid) || !icon.equals(sid)){
-//                    continue;
-//                }
-//                ++count;
-//            }
-//            iconBeans.add(IconBean.builder().icon(icon).count(count).build());
-//        }
-//
-//        //排序
-//        List<String> iconList = iconBeans.stream().sorted(Comparator.comparing(IconBean::getCount).reversed())
-//            .map(item -> {
-//                return item.getIcon();
-//            }).collect(Collectors.toList());
-//
-//        return iconList;
-//    }
+
+        JSONObject result = new JSONObject();
+
+        //查询缓存是否包含热点数据
+        String key = String.format(RedisKey.SCENE_HOT_DATA, num);
+        Map<String, String> allTagsMap = redisClient.hmget(key);
+        List<JSONObject> tags = Lists.newArrayList();
+        List<TagBean> tagBeanList = new ArrayList<>();
+        if(CollUtil.isNotEmpty(allTagsMap)){
+            allTagsMap.entrySet().stream().forEach(entry -> {
+                JSONObject jsonObject = JSON.parseObject(entry.getValue());
+                tagBeanList.add(
+                    TagBean.builder()
+                        .createTime(jsonObject.getLong("createTime"))
+                        .tag(jsonObject).build());
+            });
+            //按创建时间倒叙排序
+            tagBeanList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
+
+            //移除createTime字段
+            tags = tagBeanList.stream().map(tagBean -> {
+                JSONObject tag = tagBean.getTag();
+                tag.remove("createTime");
+                return tag;
+            }).collect(Collectors.toList());
+        }
+        result.put("tags", tags);
+
+        //查询缓存是否包含icons
+        key = String.format(RedisKey.SCENE_HOT_ICONS, num);
+        Set<String> icons = redisClient.sGet(key);
+        if(icons == null){
+            icons = Sets.newHashSet();
+        }
+        List<String> iconList = this.sortIcons(tags, icons);
+        result.put("icons", iconList);
+
+        return ResultData.ok(result);
+    }
+
+    private List<String> sortIcons(List<JSONObject> tags, Set<String> icons){
+
+        //统计使用频次
+        List<IconBean> iconBeans = Lists.newArrayList();
+        for (String icon : icons) {
+            int count = 0;
+            for (JSONObject tag : tags) {
+                String sid = tag.getString("icon");
+                if(StrUtil.isEmpty(sid) || !icon.equals(sid)){
+                    continue;
+                }
+                ++count;
+            }
+            iconBeans.add(IconBean.builder().icon(icon).count(count).build());
+        }
+
+        //排序
+        List<String> iconList = iconBeans.stream().sorted(Comparator.comparing(IconBean::getCount).reversed())
+            .map(item -> {
+                return item.getIcon();
+            }).collect(Collectors.toList());
+
+        return iconList;
+    }
+
+    private void publicHotData(String sceneNum) {
+        String hotDataKey = String.format(RedisKey.SCENE_HOT_DATA, sceneNum);
+        Map<String, String> hotMap = redisClient.hmget(hotDataKey);
+
+        JSONArray tags = new JSONArray();
+        if(CollUtil.isNotEmpty(hotMap)){
+            List<TagBean> tagBeanList = hotMap.entrySet().stream().map(entry -> {
+                JSONObject jsonObject = JSON.parseObject(entry.getValue());
+                return TagBean.builder()
+                        .createTime(jsonObject.getLong("createTime"))
+                        .tag(jsonObject).build();
+            }).collect(Collectors.toList());
+            //按创建时间倒叙排序
+            tagBeanList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
+
+            //移除createTime字段
+            tagBeanList.stream().forEach(tagBean -> {
+                tags.add(tagBean.getTag());
+            });
+        }
+
+        String hotJsonPath = String.format(UploadFilePath.USER_VIEW_PATH, sceneNum) + "hot.json";
+        fYunFileService.uploadFile(sceneNum, tags.toString().getBytes(StandardCharsets.UTF_8), hotJsonPath);
+    }
 //
 //
 //    /**
 //    /**
 //     * <p>
 //     * <p>
@@ -472,73 +499,70 @@ public class SceneProServiceImpl implements ISceneProService {
         redisClient.hdel(key, deleteSidList);
         redisClient.hdel(key, deleteSidList);
     }
     }
 
 
-//    @Override
-//    public ResultData saveTagsVisible(SaveTagsVisibleParamVO param) throws Exception {
-//
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
-//        if (scenePlus == null ) {
-//            return ResultData.error(ErrorCode.FAILURE_CODE_5005);
-//        }
-//        JSONArray visiblePanos = JSONArray.parseArray(param.getData());
-//
-//        //如果redis找不到,就从本地文件中reload
+    @Override
+    public ResultData saveTagsVisible(SaveTagsVisibleParamVO param) throws Exception {
+
+        Scene scenePlus = scenePlusService.getByNum(param.getNum());
+        if (scenePlus == null ) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+        JSONArray visiblePanos = JSONArray.parseArray(param.getData());
+
+        //如果redis找不到,就从本地文件中reload
 //        this.syncHotFromFileToRedis(param.getNum());
 //        this.syncHotFromFileToRedis(param.getNum());
-//
-//        //从缓存中获取热点数据,如果为空,抛出异常
-//        String key = String.format(RedisKey.SCENE_HOT_DATA, param.getNum());
-//        Map<String, String> map = redisUtil.hmget(key);
-//        if (CollUtil.isEmpty(map)) {
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_7005);
-//        }
-//        List<Entry<String, String>> allTags = map.entrySet().stream().filter(item -> {
-//            if (StrUtil.isBlank(item.getValue())) {
-//                return false;
-//            }
-//            return true;
-//        }).collect(Collectors.toList());
-//
-//        if (CollUtil.isEmpty(allTags)) {
-//            throw new BusinessException(ErrorCode.FAILURE_CODE_7005);
-//        }
-//
-//        allTags.stream().forEach(entry->{
-//            JSONObject hot = JSON.parseObject(entry.getValue());
-//            visiblePanos.stream().forEach(item->{
-//                if (hot.getString("sid").equals(((JSONObject) item).getString("sid"))) {
-//                    hot.put("visiblePanos", ((JSONObject) item).getJSONArray("value"));
-//                    hot.put("isHidden", ((JSONObject) item).getBoolean("isHidden"));
-//                    entry.setValue(hot.toJSONString());
-//                }
-//            });
-//        });
-//
-//        //更新版本号
-//        SceneEditInfo editInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
-//        sceneEditInfoService.upgradeVersionById(editInfo.getId());
-//
-//        //放入缓存
-//        Map<String, String> finalMap = new HashMap<>();
-//        allTags.stream().forEach(entry->{
-//            finalMap.put(entry.getKey(), entry.getValue());
-//        });
-//        redisUtil.hmset(key, finalMap);
-//
-//        //写入本地文件,作为备份,以防redis数据丢失
+
+        //从缓存中获取热点数据,如果为空,抛出异常
+        String key = String.format(RedisKey.SCENE_HOT_DATA, param.getNum());
+        Map<String, String> map = redisClient.hmget(key);
+        if (CollUtil.isEmpty(map)) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7005);
+        }
+        List<Map.Entry<String, String>> allTags = map.entrySet().stream().filter(item -> {
+            if (StrUtil.isBlank(item.getValue())) {
+                return false;
+            }
+            return true;
+        }).collect(Collectors.toList());
+
+        if (CollUtil.isEmpty(allTags)) {
+            throw new BusinessException(ErrorCode.FAILURE_CODE_7005);
+        }
+
+        allTags.stream().forEach(entry->{
+            JSONObject hot = JSON.parseObject(entry.getValue());
+            visiblePanos.stream().forEach(item->{
+                if (hot.getString("sid").equals(((JSONObject) item).getString("sid"))) {
+                    hot.put("visiblePanos", ((JSONObject) item).getJSONArray("value"));
+                    hot.put("isHidden", ((JSONObject) item).getBoolean("isHidden"));
+                    entry.setValue(hot.toJSONString());
+                }
+            });
+        });
+
+        //更新版本号
+        SceneEditInfo editInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        sceneEditInfoService.upgradeVersionById(editInfo.getId());
+
+        //放入缓存
+        Map<String, String> finalMap = new HashMap<>();
+        allTags.stream().forEach(entry->{
+            finalMap.put(entry.getKey(), entry.getValue());
+        });
+        redisClient.hmset(key, finalMap);
+
+        //写入本地文件,作为备份,以防redis数据丢失
 //        this.writeHotJson(param.getNum());
 //        this.writeHotJson(param.getNum());
-//
-//        return ResultData.ok();
-//    }
-//
+
+        return ResultData.ok();
+    }
+
 //    @Override
 //    @Override
 //    public ResultData saveRoam(BaseDataParamVO param) throws Exception {
 //    public ResultData saveRoam(BaseDataParamVO param) throws Exception {
 //
 //
-////        ScenePro scenePro = this.findBySceneNum(param.getNum());
-//        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
+//        Scene scenePlus = scenePlusService.getByNum(param.getNum());
 //        if (scenePlus == null ) {
 //        if (scenePlus == null ) {
-//            return ResultData.error(ErrorCode.FAILURE_CODE_5005);
+//            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
 //        }
 //        }
-//        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
-//        String bucket = scenePlusExt.getYunFileBucket();
 //
 //
 //        JSONArray inputData = JSONObject.parseArray(param.getData());
 //        JSONArray inputData = JSONObject.parseArray(param.getData());
 //
 //

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

@@ -0,0 +1,27 @@
+package com.fdkankan.scene.vo;
+
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * <p>
+ * 删除热点icons数据参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/8
+ **/
+@Data
+public class DeleteHotIconParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotNull(message = "fileNameList不能为空")
+    private List<String> fileNameList;
+
+
+
+}

+ 25 - 0
src/main/java/com/fdkankan/scene/vo/SaveTagsVisibleParamVO.java

@@ -0,0 +1,25 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * <p>
+ * 保存热点可视入参
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/10
+ **/
+@Data
+public class SaveTagsVisibleParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotBlank(message = "热点可视数据不能为空")
+    private String data;
+
+//    private JSONArray data;
+
+}