Sfoglia il codice sorgente

Merge branch 'feature-v4.10.0-20230621-dsx' into test

dsx 2 anni fa
parent
commit
64c00e6b3c

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

@@ -3,9 +3,7 @@ package com.fdkankan.scene.controller;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.SceneInfoReqType;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.model.utils.CreateHouseJsonUtil;
 import com.fdkankan.scene.annotation.CheckPermit;
-import com.fdkankan.scene.entity.SceneAsynOperLog;
 import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.controller.BaseController;
@@ -284,7 +282,7 @@ public class SceneEditController extends BaseController {
      **/
     @CheckPermit
     @PostMapping(value = "/styles/delete")
-    public ResultData deleteStyles(@RequestBody @Validated DeleteLinkSceneStylesParamVO param) throws Exception {
+    public ResultData deleteStyles(@RequestBody @Validated DeleteStylesParamVO param) throws Exception {
         return sceneEditInfoService.deleteStyles(param);
     }
 
@@ -888,4 +886,18 @@ public class SceneEditController extends BaseController {
         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));
+    }
+
+
+
 }

+ 4 - 5
src/main/java/com/fdkankan/scene/service/ISceneEditInfoExtService.java

@@ -3,10 +3,7 @@ package com.fdkankan.scene.service;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
-import com.fdkankan.scene.vo.BaseJsonArrayParamVO;
-import com.fdkankan.scene.vo.BaseJsonDataParamVO;
-import com.fdkankan.scene.vo.BaseSceneParamVO;
-import com.fdkankan.scene.vo.DeleteSidListParamVO;
+import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.response.ResultData;
 
 import java.util.List;
@@ -31,6 +28,8 @@ public interface ISceneEditInfoExtService extends IService<SceneEditInfoExt> {
 
     ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception;
 
-    List<JSONObject> listBillboards(BaseSceneParamVO param) throws Exception;
+    JSONObject listBillboards(BaseSceneParamVO param) throws Exception;
+
+    ResultData deleteBillboardsStyles(DeleteStylesParamVO param) throws Exception;
 
 }

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

@@ -2,17 +2,15 @@ package com.fdkankan.scene.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.fdkankan.scene.annotation.CheckPermit;
 import com.fdkankan.scene.vo.BaseSceneParamVO;
 import com.fdkankan.scene.vo.SaveFiltersParamVO;
-import com.fdkankan.scene.vo.SurveillanceParamVO;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.vo.BallScreenVideoParamVO;
 import com.fdkankan.scene.vo.BaseDataParamVO;
 import com.fdkankan.scene.vo.BaseFileParamVO;
 import com.fdkankan.scene.vo.DeleteLinkPanParamVO;
-import com.fdkankan.scene.vo.DeleteLinkSceneStylesParamVO;
+import com.fdkankan.scene.vo.DeleteStylesParamVO;
 import com.fdkankan.scene.vo.DeleteMosaicParamVO;
 import com.fdkankan.scene.vo.DeleteSidParamVO;
 import com.fdkankan.scene.vo.DownloadVO;
@@ -27,9 +25,7 @@ import com.fdkankan.scene.vo.SceneInfoParamVO;
 import com.fdkankan.scene.vo.SceneInfoVO;
 import java.io.IOException;
 import java.util.List;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
+
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -100,7 +96,7 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     ResultData deleteLinkPan(DeleteLinkPanParamVO param) throws Exception;
 
-    ResultData deleteStyles(DeleteLinkSceneStylesParamVO param) throws Exception;
+    ResultData deleteStyles(DeleteStylesParamVO param) throws Exception;
 
     ResultData deleteMosaics(DeleteMosaicParamVO param) throws Exception;
 

+ 158 - 32
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoExtServiceImpl.java

@@ -10,6 +10,7 @@ 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.FileBizType;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
@@ -25,19 +26,15 @@ import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlusExt;
 import com.fdkankan.scene.mapper.ISceneEditInfoExtMapper;
-import com.fdkankan.scene.service.ISceneEditInfoExtService;
-import com.fdkankan.scene.service.ISceneEditInfoService;
-import com.fdkankan.scene.service.IScenePlusExtService;
-import com.fdkankan.scene.service.IScenePlusService;
-import com.fdkankan.scene.vo.BaseJsonArrayParamVO;
-import com.fdkankan.scene.vo.BaseSceneParamVO;
-import com.fdkankan.scene.vo.DeleteSidListParamVO;
+import com.fdkankan.scene.service.*;
+import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.response.ResultData;
 import org.aspectj.apache.bcel.generic.RET;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -63,6 +60,8 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
     private RedisLockUtil redisLockUtil;
     @Autowired
     private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private ISceneUploadService sceneUploadService;
 
     @Override
     public SceneEditInfoExt getByScenePlusId(long scenePlusId) {
@@ -93,8 +92,7 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
 
         this.addOrUpdateBillboards(param.getNum(), param.getData());
 
-        //写入本地文件,作为备份
-        this.writeBillboardJson(param.getNum());
+        this.addOrUpdateBillboardsStyles(param.getNum(), param.getStyles());
 
         //保存数据库
         SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
@@ -106,6 +104,70 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
         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);
+
+        //写入本地文件,作为备份
+        this.writeBillboardStylesJson(num);
+    }
+
+    private void syncBillboardsStylesFromFileToRedis(String num) throws Exception{
+
+        String key = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num);
+        boolean exist = redisUtil.hasKey(key);
+        if(exist){
+            return;
+        }
+        String lockKey = String.format(RedisLockKey.LOCK_BILLBOARDS_STYLES_SYNC, num);
+        String lockVal = cn.hutool.core.lang.UUID.randomUUID().toString();
+        boolean lock = redisLockUtil.lock(lockKey, lockVal, RedisKey.EXPIRE_TIME_1_MINUTE);
+        if(!lock){
+            throw new BusinessException(ErrorCode.SYSTEM_BUSY);
+        }
+        try{
+            exist = redisUtil.hasKey(key);
+            if(exist){
+                return;
+            }
+            String stylesPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num);
+            String stylesData = FileUtils.readUtf8String(stylesPath + "billboards-styles.json");
+            if(StrUtil.isEmpty(stylesData)){
+                return;
+            }
+            JSONArray stylesArr = JSON.parseArray(stylesData);
+            if(CollUtil.isEmpty(stylesArr)){
+                return;
+            }
+            Map<String, String> styleMap = new HashMap<>();
+            for (Object style : stylesArr) {
+                JSONObject styleObj = (JSONObject)style;
+                String id = styleObj.getString("sid");
+                styleMap.put(id, styleObj.toJSONString());
+            }
+            redisUtil.hmset(key, styleMap);
+        }finally {
+            redisLockUtil.unlockLua(lockKey, lockVal);
+        }
+
+    }
+
     @Override
     public ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception {
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
@@ -131,7 +193,7 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
     }
 
     @Override
-    public List<JSONObject> listBillboards(BaseSceneParamVO param) throws Exception {
+    public JSONObject listBillboards(BaseSceneParamVO param) throws Exception {
 
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
         SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
@@ -140,6 +202,10 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
         }
 
         this.syncBillboardsFromFileToRedis(param.getNum());
+
+        JSONObject result = new JSONObject();
+
+        //获取指示牌数据
         String key = String.format(RedisKey.SCENE_BILLBOARDS, param.getNum());
         List<String> list = redisUtil.hgetValues(key);
         List<TagBean> sortList = list.stream().map(str -> {
@@ -151,7 +217,26 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
             return tagBean;
         }).collect(Collectors.toList());
         sortList.sort(Comparator.comparingLong(TagBean::getCreateTime).reversed());
-        return sortList.stream().map(item -> item.getTag()).collect(Collectors.toList());
+        List<JSONObject> 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 = redisUtil.hgetValues(key);
+        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());
+        List<JSONObject> styles = sortList.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 {
@@ -166,27 +251,12 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
             return;
         //从redis中移除热点数据
         redisUtil.hdel(key, deleteSidList.toArray());
-
-        String userDataPath = String.format(UploadFilePath.USER_EDIT_PATH, num);
-        //删除图片音频视频等资源文件
-        for (String data : deletDataList) {
-            if(StrUtil.isBlank(data)){
-                continue;
-            }
-            JSONObject jsonObject = JSON.parseObject(data);
-            String icon = jsonObject.getString("icon");
-            if(StrUtil.isEmpty(icon)){
-                continue;
-            }
-            fYunFileService.deleteFile(bucket, userDataPath.concat(icon));
-        }
     }
 
-    private void addOrUpdateBillboards(String num, JSONArray data) throws Exception{
+    private void addOrUpdateBillboards(String num, List<JSONObject> data) throws Exception{
         Map<String, String> addOrUpdateMap = new HashMap<>();
         int i = 0;
-        for (Object item : data) {
-            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(item));
+        for (JSONObject jsonObject : data) {
             jsonObject.put("createTime", Calendar.getInstance().getTimeInMillis() + i++);
             addOrUpdateMap.put(jsonObject.getString("sid"), JSON.toJSONString(jsonObject));
         }
@@ -227,12 +297,12 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
             if(StrUtil.isEmpty(billboardsData)){
                 return;
             }
-            JSONArray billboardArr = JSON.parseArray(billboardsData);
-            if(CollUtil.isEmpty(billboardArr)){
+            JSONArray tagsArr = JSON.parseArray(billboardsFilePath);
+            if(CollUtil.isEmpty(tagsArr)){
                 return;
             }
             Map<String, String> map = new HashMap<>();
-            for (Object o : billboardArr) {
+            for (Object o : tagsArr) {
                 JSONObject jo = (JSONObject)o;
                 map.put(jo.getString("sid"), jo.toJSONString());
             }
@@ -249,6 +319,9 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
         //批量写入缓存
         String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
         redisUtil.hmset(key, addOrUpdateMap);
+
+        //写入本地文件,作为备份
+        this.writeBillboardJson(num);
     }
 
     /**
@@ -258,8 +331,9 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
      * </p>
      * @author dengsixing
      * @date 2022/3/3
+     *
      **/
-    private void writeBillboardJson(String num) throws Exception{
+    private void writeBillboardJson(String num){
         String lockKey = String.format(RedisLockKey.LOCK_BILLBOARDS_SYNC, num);
         String lockVal = cn.hutool.core.lang.UUID.randomUUID().toString();
         boolean lock = redisLockUtil.lock(lockKey, lockVal, RedisKey.EXPIRE_TIME_1_MINUTE);
@@ -281,6 +355,28 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
         }
     }
 
+    private void writeBillboardStylesJson(String num){
+        String lockKey = String.format(RedisLockKey.LOCK_BILLBOARDS_STYLES_SYNC, num);
+        String lockVal = cn.hutool.core.lang.UUID.randomUUID().toString();
+        boolean lock = redisLockUtil.lock(lockKey, lockVal, RedisKey.EXPIRE_TIME_1_MINUTE);
+        if(!lock){
+            return;
+        }
+        try{
+            String dataKey = String.format(RedisKey.SCENE_BILLBOARDS_STYLES, num);
+            String stylesPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "billboards-styles.json";
+            if(!redisUtil.hasKey(dataKey)){
+                FileUtil.del(stylesPath);
+                return;
+            }
+            Map<String, String> billboardStylesMap = redisUtil.hmget(dataKey);
+            List<JSONObject>  billboardStyleList = billboardStylesMap.entrySet().stream().map(entry->JSON.parseObject(entry.getValue())).collect(Collectors.toList());
+            FileUtil.writeUtf8String(JSON.toJSONString(billboardStyleList), stylesPath);
+        }finally {
+            redisLockUtil.unlockLua(lockKey, lockVal);
+        }
+    }
+
     private void updateBillboards(String num, SceneEditInfoExt sceneEditInfoExt){
         //查询缓存是否包含热点数据
         String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
@@ -299,6 +395,36 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
         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();
+
+        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());
+
+        //写入本地文件,作为备份
+        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();
+    }
 
 
 }

+ 2 - 7
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -1,12 +1,8 @@
 package com.fdkankan.scene.service.impl;
-import cn.hutool.core.net.multipart.UploadFile;
 import cn.hutool.core.util.CharsetUtil;
 import com.fdkankan.common.constant.*;
 import com.fdkankan.common.util.FileSizeUtil;
-import com.fdkankan.common.util.MD5;
 import com.fdkankan.scene.vo.SaveFiltersParamVO;
-import io.opencensus.metrics.LongGauge;
-import java.util.Date;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
@@ -23,7 +19,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.FileMd5Util;
 import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.fyun.constant.FYunTypeEnum;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.model.constants.ConstantFilePath;
 import com.fdkankan.model.constants.UploadFilePath;
@@ -71,7 +66,7 @@ import com.fdkankan.scene.vo.BaseFileParamVO;
 import com.fdkankan.scene.vo.BaseSceneParamVO;
 import com.fdkankan.scene.vo.DeleteFileParamVO;
 import com.fdkankan.scene.vo.DeleteLinkPanParamVO;
-import com.fdkankan.scene.vo.DeleteLinkSceneStylesParamVO;
+import com.fdkankan.scene.vo.DeleteStylesParamVO;
 import com.fdkankan.scene.vo.DeleteMosaicParamVO;
 import com.fdkankan.scene.vo.DeleteSidParamVO;
 import com.fdkankan.scene.vo.DownloadVO;
@@ -2105,7 +2100,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     @Override
-    public ResultData deleteStyles(DeleteLinkSceneStylesParamVO param) throws Exception {
+    public ResultData deleteStyles(DeleteStylesParamVO param) throws Exception {
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
         if (scenePlus == null)
             throw new BusinessException(ErrorCode.FAILURE_CODE_5005);

+ 6 - 2
src/main/java/com/fdkankan/scene/vo/BaseJsonArrayParamVO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * <p>
@@ -19,7 +20,10 @@ import javax.validation.constraints.NotNull;
 @Data
 public class BaseJsonArrayParamVO extends BaseSceneParamVO{
 
-    @NotEmpty(message = "数据不能为空")
-    private JSONArray data;
+    @NotNull(message = "data不能为空")
+//    private List<LinkPanParamVO> linkPans;
+    private List<JSONObject> data;
+
+    private List<JSONObject> styles;
 
 }

+ 1 - 4
src/main/java/com/fdkankan/scene/vo/DeleteLinkSceneStylesParamVO.java

@@ -14,10 +14,7 @@ import lombok.Data;
  * @since 2022/2/8
  **/
 @Data
-public class DeleteLinkSceneStylesParamVO {
-
-    @NotBlank(message = "场景码不能为空")
-    private String num;
+public class DeleteStylesParamVO extends BaseSceneParamVO{
 
     @NotNull(message = "sidList不能为空")
     private List<String> sidList;