dengsixing 1 jaar geleden
bovenliggende
commit
4bdf5d7a4f
21 gewijzigde bestanden met toevoegingen van 1757 en 116 verwijderingen
  1. 5 5
      src/main/java/com/fdkankan/common/constant/CommonStatus.java
  2. 83 5
      src/main/java/com/fdkankan/redis/util/RedisClient.java
  3. 115 0
      src/main/java/com/fdkankan/scene/Interceptor/InitEditInfoAspect.java
  4. 1 0
      src/main/java/com/fdkankan/scene/Interceptor/ViewLogAspect.java
  5. 10 0
      src/main/java/com/fdkankan/scene/annotation/InitEditInfo.java
  6. 6 1
      src/main/java/com/fdkankan/scene/controller/SceneController.java
  7. 67 67
      src/main/java/com/fdkankan/scene/controller/SceneEditController.java
  8. 1 1
      src/main/java/com/fdkankan/scene/entity/SceneFileMapping.java
  9. 9 0
      src/main/java/com/fdkankan/scene/service/FYunFileService.java
  10. 48 0
      src/main/java/com/fdkankan/scene/service/ISceneProService.java
  11. 2 2
      src/main/java/com/fdkankan/scene/service/SceneEditInfoService.java
  12. 3 0
      src/main/java/com/fdkankan/scene/service/SceneService.java
  13. 35 0
      src/main/java/com/fdkankan/scene/service/impl/FYunFileServiceImpl.java
  14. 56 35
      src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java
  15. 1176 0
      src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java
  16. 5 0
      src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java
  17. 23 0
      src/main/java/com/fdkankan/scene/vo/BaseDataParamVO.java
  18. 27 0
      src/main/java/com/fdkankan/scene/vo/DeleteHotParamVO.java
  19. 24 0
      src/main/java/com/fdkankan/scene/vo/FileNameAndDataParamVO.java
  20. 27 0
      src/main/java/com/fdkankan/scene/vo/HotParamVO.java
  21. 34 0
      src/main/java/com/fdkankan/scene/vo/SaveTagsParamVO.java

+ 5 - 5
src/main/java/com/fdkankan/common/constant/CommonStatus.java

@@ -9,18 +9,18 @@ package com.fdkankan.common.constant;
  **/
 public enum CommonStatus {
 
-    NO((byte)0, "否"),
-    YES((byte)1, "是");
+    NO(0, "否"),
+    YES(1, "是");
 
-    private Byte code;
+    private Integer code;
     private String message;
 
-    private CommonStatus(Byte code, String message) {
+    private CommonStatus(Integer code, String message) {
         this.code = code;
         this.message = message;
     }
 
-    public Byte code() {
+    public Integer code() {
         return code;
     }
 

+ 83 - 5
src/main/java/com/fdkankan/redis/util/RedisClient.java

@@ -1,5 +1,7 @@
 package com.fdkankan.redis.util;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.scene.httpclient.CustomHttpClient;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -7,9 +9,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 @Component
 public class RedisClient {
@@ -18,6 +18,16 @@ public class RedisClient {
 
     public final static String url_str_get = "/redis/string/get/";
 
+    public final static String url_set_add = "/redis/set/add";
+
+    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_hvals = "/redis/hash/hvals";
+
+    public final static String url_hash_hdel = "/redis/hash/hdel";
+
     @Value("${redis.host}")
     private String host;
 
@@ -30,7 +40,7 @@ public class RedisClient {
     @Resource
     private CustomHttpClient customHttpClient;
 
-     public void add(String key, String value){
+    public void add(String key, String value){
          String url = host + url_str_add;
          Map<String, Object> params = new HashMap<>();
          params.put("key", this.genKey(key));
@@ -39,7 +49,7 @@ public class RedisClient {
          if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
              throw new RuntimeException("redis add string error");
          }
-     }
+    }
 
     public String get(String key){
         String url = host + url_str_get;
@@ -52,6 +62,74 @@ public class RedisClient {
         return jsonObject.getString("data");
     }
 
+    public void sSet(String key, Set<String> values){
+        String url = host + url_set_add;
+        Map<String, Object> params = new HashMap<>();
+        params.put("key", this.genKey(key));
+        params.put("values", JSON.toJSONString(values));
+        JSONObject jsonObject = customHttpClient.postJson(url, params);
+        if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
+            throw new RuntimeException("redis add set error");
+        }
+    }
+
+    public void hmset(String key, Map<String, String> values){
+        String url = host + url_hash_add;
+        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 hash add error");
+        }
+    }
+
+
+    public Map<String, String> hmget(String key){
+        String url = host + url_hash_hscan;
+        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 hash hscan error");
+        }
+        JSONObject data = jsonObject.getJSONObject("data");
+        // 转换为Map<String, String>
+        Map<String, String> map = new HashMap<>();
+        for (String k : data.keySet()) {
+            map.put(key, jsonObject.getString(key));
+        }
+        return map;
+    }
+
+    public List<String> hMultiGet(String key){
+        String url = host + url_hash_hvals;
+        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 hash get hvals error");
+        }
+        List<String> data = jsonObject.getJSONArray("data").toJavaList(String.class);
+        return data;
+    }
+
+    public void hdel(String key, List<String> fields){
+        if(CollUtil.isEmpty(fields)){
+            return;
+        }
+        fields.stream().forEach(field->{
+            Map<String, Object> params = new HashMap<>();
+            params.put("key", this.genKey(key));
+            params.put("field", field);
+            String url = host + url_hash_hdel;
+            JSONObject jsonObject = customHttpClient.postJson(url, params);
+            if(Objects.isNull(jsonObject) || !"0".equals(jsonObject.getString("status"))){
+                throw new RuntimeException("redis hash hdel error");
+            }
+        });
+    }
+
     private String genKey(String key){
          return sysCode + "_" + serverName + "_" + key;
     }

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

@@ -0,0 +1,115 @@
+package com.fdkankan.scene.Interceptor;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.ThreeDESUtil;
+import com.fdkankan.common.util.UserAgentUtils;
+import com.fdkankan.common.util.WebUtil;
+import com.fdkankan.feign.TietaFeignClient;
+import com.fdkankan.feign.WS4AServiceClient;
+import com.fdkankan.scene.entity.*;
+import com.fdkankan.scene.service.*;
+import lombok.extern.log4j.Log4j2;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.*;
+
+@Log4j2
+@Aspect
+@Component
+@Order(102)
+public class InitEditInfoAspect {
+
+	@Autowired
+	private SceneService sceneService;
+	@Autowired
+	private SceneEditInfoService sceneEditInfoService;
+	@Autowired
+	private SceneEditInfoExtService sceneEditInfoExtService;
+	@Autowired
+	private SceneEditControlsService sceneEditControlsService;
+
+	@Pointcut("@annotation(com.fdkankan.scene.annotation.InitEditInfo)")
+	public void InitEditInfo() {
+	}
+
+	/**
+	 * 前置通知 用于判断用户协作场景是否有协作权限
+	 *
+	 * @param joinPoint
+	 *            切点
+	 * @throws IOException
+	 */
+	@Before("InitEditInfo()")
+	public void doBefore(JoinPoint joinPoint) throws Exception {
+		log.info("初始化数据开始");
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+
+		//请求4a接口获取用户信息
+		Map<String, Object> parameter = WebUtil.getParameter(joinPoint, request);
+		String num = (String) parameter.get("num");
+
+		List<Scene> scenes = sceneService.listByNum(num);
+		if(CollUtil.isEmpty(scenes)){
+			throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+		}
+		Scene scene = null;
+		if(scenes.size() > 1){
+			scene = scenes.stream().max((a,b) -> {
+				if(a.getId() > b.getId()){
+					return 1;
+				}
+				return -1;
+			}).get();
+
+			for (Scene item : scenes) {
+				if(item.getId().equals(scene.getId())){
+					continue;
+				}
+				sceneService.removeById(item.getId());
+			}
+		}else{
+			scene = scenes.get(0);
+		}
+
+		SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scene.getId());
+		if(Objects.isNull(sceneEditInfo)){
+			sceneEditInfo = new SceneEditInfo();
+			sceneEditInfo.setScenePlusId(scene.getId());
+			sceneEditInfo.setTitle(scene.getTitle());
+			sceneEditInfo.setDescription(scene.getDescription());
+			sceneEditInfoService.save(sceneEditInfo);
+
+			SceneEditInfoExt sceneEditInfoExt = new SceneEditInfoExt();
+			sceneEditInfoExt.setScenePlusId(scene.getId());
+			sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
+			sceneEditInfoExtService.save(sceneEditInfoExt);
+
+			SceneEditControls sceneEditControls = new SceneEditControls();
+			sceneEditControls.setEditInfoId(sceneEditInfo.getId());
+			sceneEditControlsService.save(sceneEditControls);
+		}
+
+
+		log.info("初始化数据结束");
+
+	}
+
+}

+ 1 - 0
src/main/java/com/fdkankan/scene/Interceptor/ViewLogAspect.java

@@ -66,6 +66,7 @@ public class ViewLogAspect {
 	 */
 	@Before("checkCooperationPermit()")
 	public void doBefore(JoinPoint joinPoint) throws Exception {
+		log.info("记录日志开始");
 		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 		boolean mobileDevice = UserAgentUtils.isMobileDevice(request);
 		String userAgent = "pc";

+ 10 - 0
src/main/java/com/fdkankan/scene/annotation/InitEditInfo.java

@@ -0,0 +1,10 @@
+package com.fdkankan.scene.annotation;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface InitEditInfo {
+    String description() default "";
+}

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

@@ -4,9 +4,11 @@ package com.fdkankan.scene.controller;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
 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.httpclient.CustomHttpClient;
+import com.fdkankan.scene.service.SceneEditInfoService;
 import com.fdkankan.scene.service.SceneFileMappingService;
 import com.fdkankan.scene.service.SceneService;
 import com.fdkankan.scene.vo.SceneInfoParamVO;
@@ -36,6 +38,8 @@ public class SceneController {
 
     @Autowired
     private SceneService sceneService;
+    @Autowired
+    private SceneEditInfoService sceneEditInfoService;
     /**
      * <p>
      获取场景详情
@@ -45,11 +49,12 @@ public class SceneController {
      * @param param
      * @return com.fdkankan.scene.vo.SceneInfoVO
      **/
+    @InitEditInfo
 //    @VrLog
     @GetMapping(value = "/getInfo")
     public ResultData getInfo(@Validated SceneInfoParamVO param) throws Exception{
         param.setReqType(SceneInfoReqType.VIEW.code());
-        return sceneService.getSceneInfo(param);
+        return ResultData.ok(sceneEditInfoService.getSceneInfo(param));
     }
 
 //    @GetMapping("/file")

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

@@ -1,9 +1,13 @@
 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.vo.SceneEditInfoParamVO;
-import com.fdkankan.scene.vo.SceneEditInfoVO;
+import com.fdkankan.scene.vo.*;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -21,8 +25,8 @@ public class SceneEditController{
 //    @Value("${spring.profiles.active}")
 //    private String env;
 //
-//    @Autowired
-//    private ISceneProService sceneProService;
+    @Autowired
+    private ISceneProService sceneProService;
     @Autowired
     private SceneEditInfoService sceneEditInfoService;
     @Autowired
@@ -55,8 +59,8 @@ public class SceneEditController{
      **/
 //    @CheckPermit
     @PostMapping(value = "/base/save")
-    public SceneEditInfoVO saveScene(@RequestBody @Validated SceneEditInfoParamVO param){
-        return sceneEditInfoService.saveScene(param);
+    public ResultData saveScene(@RequestBody @Validated SceneEditInfoParamVO param){
+        return ResultData.ok(sceneEditInfoService.saveScene(param));
     }
 //
 //    /**
@@ -73,52 +77,47 @@ public class SceneEditController{
 //    public ResultData publicScene(@RequestBody @Validated SceneEditInfoParamVO param) throws Exception {
 //        return sceneEditInfoService.publicScene(param);
 //    }
-//
-//    /**
-//     * <p>
-//     保存初始页面
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/1/12
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/saveInitialPage")
-//    public ResultData saveInitialPage(@RequestBody @Validated FileNameAndDataParamVO param) throws Exception {
-//        return sceneProService.saveInitialPage(param);
-//    }
-//
-//    /**
-//     * <p>
-//        新增或修改场景热点
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/1/12
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/tag/save")
-//    public ResultData saveTag(@RequestBody @Validated SaveTagsParamVO param) throws Exception {
-//        return sceneProService.addOrUpdateTag(param);
-//    }
-//
-//    /**
-//     * <p>
-//            删除热点
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/2/16
-//     * @param param
-//     * @return com.fdkankan.web.response.ResultData
-//     **/
-//    @CheckPermit
-//    @PostMapping(value = "/tag/delete")
-//    public ResultData deleteTag(@RequestBody @Validated DeleteHotParamVO param) throws Exception {
-//        return sceneProService.deleteTag(param);
-//    }
-//
+
+    /**
+     * <p>
+     保存初始页面
+     * </p>
+     * @author dengsixing
+     * @date 2022/1/12
+     * @param param
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/saveInitialPage")
+    public ResultData saveInitialPage(@RequestBody @Validated FileNameAndDataParamVO param) throws Exception {
+        return sceneProService.saveInitialPage(param);
+    }
+
+    /**
+     * <p>
+        新增或修改场景热点
+     * </p>
+     * @author dengsixing
+     * @date 2022/1/12
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/tag/save")
+    public ResultData saveTag(@RequestBody @Validated SaveTagsParamVO param) throws Exception {
+        return sceneProService.addOrUpdateTag(param);
+    }
+
+    /**
+     * <p>
+            删除热点
+     * </p>
+     * @author dengsixing
+     * @date 2022/2/16
+     * @return com.fdkankan.web.response.ResultData
+     **/
+    @PostMapping(value = "/tag/delete")
+    public ResultData deleteTag(@RequestBody @Validated DeleteHotParamVO param) throws Exception {
+        return sceneProService.deleteTag(param);
+    }
+
 //    /**
 //     * <p>
 //            热点列表
@@ -364,21 +363,22 @@ public class SceneEditController{
 //    public ResultData renameCad(@RequestBody @Validated RenameCadParamVO param) throws IOException {
 //        return sceneEditInfoService.renameCad(param);
 //    }
-//
-//    /**
-//     * <p>
-//     获取场景详情
-//     * </p>
-//     * @author dengsixing
-//     * @date 2022/8/1
-//     * @param param
-//     * @return com.fdkankan.scene.vo.SceneInfoVO
-//     **/
-//    @GetMapping(value = "/getInfo")
-//    public SceneInfoVO getInfo(@Validated SceneInfoParamVO param) throws Exception{
-//        param.setReqType(SceneInfoReqType.EDIT.code());
-//        return sceneEditInfoService.getSceneInfo(param);
-//    }
+
+    /**
+     * <p>
+     获取场景详情
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/1
+     * @param param
+     * @return com.fdkankan.scene.vo.SceneInfoVO
+     **/
+    @InitEditInfo
+    @GetMapping(value = "/getInfo")
+    public SceneInfoVO getInfo(@Validated SceneInfoParamVO param) throws Exception{
+        param.setReqType(SceneInfoReqType.EDIT.code());
+        return sceneEditInfoService.getSceneInfo(param);
+    }
 //
 //    /**
 //     * <p>

+ 1 - 1
src/main/java/com/fdkankan/scene/entity/SceneFileMapping.java

@@ -27,7 +27,7 @@ public class SceneFileMapping extends Model<SceneFileMapping> {
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "ID", type = IdType.AUTO)
-    private String id;
+    private Long id;
 
     @TableField("NUM")
     private String num;

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

@@ -0,0 +1,9 @@
+package com.fdkankan.scene.service;
+
+import java.io.IOException;
+
+public interface FYunFileService {
+
+    String getFileContent(String key) throws IOException;
+
+}

+ 48 - 0
src/main/java/com/fdkankan/scene/service/ISceneProService.java

@@ -0,0 +1,48 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.scene.bean.ResultData;
+import com.fdkankan.scene.vo.DeleteHotParamVO;
+import com.fdkankan.scene.vo.FileNameAndDataParamVO;
+import com.fdkankan.scene.vo.SaveTagsParamVO;
+
+/**
+ * <p>
+ * pro场景表 服务类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2021-12-23
+ */
+public interface ISceneProService{
+
+    ResultData saveInitialPage(FileNameAndDataParamVO param) throws Exception;
+
+    ResultData addOrUpdateTag(SaveTagsParamVO param) throws Exception;
+//
+    ResultData deleteTag(DeleteHotParamVO param) throws Exception;
+//
+//    ResultData deleteIcons(DeleteHotIconParamVO param) throws Exception;
+//
+//    ResultData listTags(String num) throws Exception;
+//
+//    ResultData saveRoam(BaseDataParamVO param) throws Exception;
+//
+//    ResultData saveTagsVisible(SaveTagsVisibleParamVO param) throws Exception;
+//
+//    void updateUserIdByCameraId(Long userId, Long cameraId);
+//
+//    ResultData uploadModel(String num, MultipartFile file) throws Exception;
+//
+//    ResultData downloadModel(String num) throws Exception;
+//
+//    ScenePro getByNum(String num);
+//
+//    List<SceneBean> listCleanOrigScene(int cleanOrigMonth);
+//
+//    List<SceneBean> listCleanOss4DeletedScene(int month);
+//
+//    List<SceneBean> listCleanOss4TestCamera(Set<Long> cameraIds, int month);
+//
+//    List<SceneBean> listColdStorageScene(int month);
+
+}

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

@@ -50,8 +50,8 @@ public interface SceneEditInfoService extends IService<SceneEditInfo> {
 //    ResultData uploadPanorama(String num, MultipartFile file) throws Exception;
 //
 //    ResultData downloadPanorama(FileParamVO param) throws Exception;
-//
-//    void saveTagsToSceneEditInfo(String num, SceneEditInfo sceneEditInfo);
+
+    void saveTagsToSceneEditInfo(String num, SceneEditInfo sceneEditInfo);
 //
 //    ResultData saveVideoBox(FileNameAndDataParamVO param) throws Exception;
 //

+ 3 - 0
src/main/java/com/fdkankan/scene/service/SceneService.java

@@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.websocket.server.PathParam;
 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.util.List;
 
 /**
  * <p>
@@ -31,4 +32,6 @@ public interface SceneService extends IService<Scene> {
 
     Scene getByNum(String num);
 
+    List<Scene> listByNum(String num);
+
 }

+ 35 - 0
src/main/java/com/fdkankan/scene/service/impl/FYunFileServiceImpl.java

@@ -0,0 +1,35 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.io.IoUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.scene.entity.SceneFileMapping;
+import com.fdkankan.scene.httpclient.CustomHttpClient;
+import com.fdkankan.scene.service.FYunFileService;
+import com.fdkankan.scene.service.SceneFileMappingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+@Service
+public class FYunFileServiceImpl implements FYunFileService {
+
+    @Autowired
+    private SceneFileMappingService sceneFileMappingService;
+    @Resource
+    private CustomHttpClient customHttpClient;
+
+
+    @Override
+    public String getFileContent(String key) throws IOException {
+        SceneFileMapping sceneFileMapping = sceneFileMappingService.getOne(new LambdaQueryWrapper<SceneFileMapping>().eq(SceneFileMapping::getKey, key));
+        String content = null;
+        try (InputStream inputStream = customHttpClient.downloadFileToInputStream(sceneFileMapping.getUrl())){
+            content =  IoUtil.read(inputStream, StandardCharsets.UTF_8);
+        }
+        return content;
+    }
+}

+ 56 - 35
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -10,22 +11,18 @@ import com.fdkankan.common.constant.CommonStatus;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.SceneInfoReqType;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.scene.entity.Scene;
-import com.fdkankan.scene.entity.SceneEditControls;
-import com.fdkankan.scene.entity.SceneEditInfo;
-import com.fdkankan.scene.entity.SceneEditInfoExt;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisClient;
+import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.SceneEditInfoMapper;
-import com.fdkankan.scene.service.SceneEditControlsService;
-import com.fdkankan.scene.service.SceneEditInfoExtService;
-import com.fdkankan.scene.service.SceneEditInfoService;
-import com.fdkankan.scene.service.SceneService;
+import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.Objects;
+import javax.annotation.Resource;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -53,8 +50,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //    private ISceneProService sceneProService;
 //    @Resource
 //    private FYunFileServiceInterface fYunFileService;
-//    @Autowired
-//    RedisUtil redisUtil;
+    @Resource
+    private RedisClient redisClient;
 //    @Autowired
 //    private RedisLockUtil redisLockUtil;
 //    @Autowired
@@ -63,6 +60,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
     private SceneEditInfoExtService sceneEditInfoExtService;
     @Autowired
     private SceneService sceneService;
+    @Autowired
+    private SceneFileMappingService sceneFileMappingService;
 //    @Autowired
 //    IScenePlusExtService scenePlusExtService;
 //    @Autowired
@@ -416,7 +415,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
                 return this.getSceneInfo4Edit(param.getNum());
             //如果是查看页面请求,查redis
             case VIEW:
-                return this.getSceneInfo4View(param.getNum());
+                return this.getSceneInfo4Edit(param.getNum());
         }
         return null;
     }
@@ -468,6 +467,28 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 
 //        this.SortBoxVideos(sceneInfoVO);
 
+        Set<String> keySet = new HashSet<>();
+        Set<Long> deleteIds = new HashSet<>();
+        List<SceneFileMapping> mappings = new ArrayList<>();
+        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());
+                mappings.add(mapping);
+            }
+        }
+        if(CollUtil.isNotEmpty(deleteIds)){
+            sceneFileMappingService.removeByIds(deleteIds);
+        }
+
+        Map<String, String> keyMap = new HashMap<>();
+        for (SceneFileMapping sceneFileMapping : mappings) {
+            keyMap.put(sceneFileMapping.getKey(), "service/scene/file?key=" + sceneFileMapping.getKey());
+        }
+        sceneInfoVO.setMapping(keyMap);
+
         return sceneInfoVO;
     }
 
@@ -1423,28 +1444,28 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<SceneEditInfoMapper, S
 //            }
 //        });
 //    }
-//
-//    @Override
-//    public void saveTagsToSceneEditInfo(String num, SceneEditInfo sceneEditInfo){
-//        //查询缓存是否包含热点数据
-//        String key = String.format(RedisKey.SCENE_HOT_DATA, num);
-//        Map<String, String> allTagsMap = redisUtil.hmget(key);
-//        boolean hashTags = false;
-//        for (Entry<String, String> tagMap : allTagsMap.entrySet()) {
-//            if(StrUtil.isEmpty(tagMap.getValue())){
-//                continue;
-//            }
-//            hashTags = true;
-//            break;
-//        }
-//
-//        //更改热点状态
-//        sceneEditInfo.setTags(hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code());
-//        //version 是空的代表 sceneEditInfo记录集不存在
-//        if(sceneEditInfo.getVersion() != null){
-//            sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
-//        }
-//    }
+
+    @Override
+    public void saveTagsToSceneEditInfo(String num, SceneEditInfo sceneEditInfo){
+        //查询缓存是否包含热点数据
+        String key = String.format(RedisKey.SCENE_HOT_DATA, num);
+        Map<String, String> allTagsMap = redisClient.hmget(key);
+        boolean hashTags = false;
+        for (Map.Entry<String, String> tagMap : allTagsMap.entrySet()) {
+            if(StrUtil.isEmpty(tagMap.getValue())){
+                continue;
+            }
+            hashTags = true;
+            break;
+        }
+
+        //更改热点状态
+        sceneEditInfo.setTags(hashTags ? CommonStatus.YES.code() : CommonStatus.NO.code());
+        //version 是空的代表 sceneEditInfo记录集不存在
+        if(sceneEditInfo.getVersion() != null){
+            sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1);
+        }
+    }
 //
 //    @Override
 //    public ResultData saveVideoBox(FileNameAndDataParamVO param) throws Exception {

File diff suppressed because it is too large
+ 1176 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java


+ 5 - 0
src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -156,4 +156,9 @@ public class SceneServiceImpl extends ServiceImpl<SceneMapper, Scene> implements
     public Scene getByNum(String num) {
         return this.getOne(new LambdaQueryWrapper<Scene>().eq(Scene::getNum, num));
     }
+
+    @Override
+    public List<Scene> listByNum(String num) {
+        return this.list(new LambdaQueryWrapper<Scene>().eq(Scene::getNum, num));
+    }
 }

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

@@ -0,0 +1,23 @@
+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 BaseDataParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotBlank(message = "数据不能为空")
+    private String data;
+
+}

+ 27 - 0
src/main/java/com/fdkankan/scene/vo/DeleteHotParamVO.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>
+ * 删除热点数据参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/8
+ **/
+@Data
+public class DeleteHotParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotNull(message = "sid不能为空")
+    private List<String> sidList;
+
+
+
+}

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

@@ -0,0 +1,24 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/18
+ **/
+@Data
+public class FileNameAndDataParamVO extends BaseDataParamVO{
+
+    /**
+     * 视频文件名
+     */
+    @NotBlank(message = "文件名不能为空")
+    private String fileName;
+
+
+}

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

@@ -0,0 +1,27 @@
+package com.fdkankan.scene.vo;
+
+import javax.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/8
+ **/
+@Data
+public class HotParamVO {
+
+//    @NotNull(message = "操作类型不能为空")
+    private Integer type;
+
+    @NotBlank(message = "sid不能为空")
+    private String sid;
+
+    private String hotData;
+
+
+
+}

+ 34 - 0
src/main/java/com/fdkankan/scene/vo/SaveTagsParamVO.java

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