浏览代码

v4.10.0 指示牌功能开发

dsx 2 年之前
父节点
当前提交
d618f9cdae

+ 5 - 0
src/main/java/com/fdkankan/scene/bean/SceneJsonBean.java

@@ -213,5 +213,10 @@ public class SceneJsonBean {
      */
      */
     private JSONObject sns;
     private JSONObject sns;
 
 
+    /**
+     * 是否有指示牌(0-否,1-是)
+     */
+    private Integer billboards;
+
 
 
 }
 }

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

@@ -6,45 +6,8 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.model.utils.CreateHouseJsonUtil;
 import com.fdkankan.model.utils.CreateHouseJsonUtil;
 import com.fdkankan.scene.annotation.CheckPermit;
 import com.fdkankan.scene.annotation.CheckPermit;
 import com.fdkankan.scene.entity.SceneAsynOperLog;
 import com.fdkankan.scene.entity.SceneAsynOperLog;
-import com.fdkankan.scene.service.IBoxModelService;
-import com.fdkankan.scene.service.IDownloadTourVideoService;
-import com.fdkankan.scene.service.ISceneAsynOperLogService;
-import com.fdkankan.scene.service.ISceneEditInfoService;
-import com.fdkankan.scene.service.ISceneEditService;
-import com.fdkankan.scene.service.IScenePlusService;
-import com.fdkankan.scene.service.ISceneProService;
-import com.fdkankan.scene.service.ISceneUploadService;
-import com.fdkankan.scene.service.ISurveillanceService;
-import com.fdkankan.scene.vo.BallScreenVideoParamVO;
-import com.fdkankan.scene.vo.BaseDataParamVO;
-import com.fdkankan.scene.vo.BaseFileParamVO;
-import com.fdkankan.scene.vo.BaseJsonDataParamVO;
-import com.fdkankan.scene.vo.BaseSceneParamVO;
-import com.fdkankan.scene.vo.BaseSidParamVO;
-import com.fdkankan.scene.vo.DeleteFileParamVO;
-import com.fdkankan.scene.vo.DeleteHotIconParamVO;
-import com.fdkankan.scene.vo.DeleteHotParamVO;
-import com.fdkankan.scene.vo.DeleteLinkPanParamVO;
-import com.fdkankan.scene.vo.DeleteLinkSceneStylesParamVO;
-import com.fdkankan.scene.vo.DeleteMosaicParamVO;
-import com.fdkankan.scene.vo.DeleteSidParamVO;
-import com.fdkankan.scene.vo.DownloadVO;
-import com.fdkankan.scene.vo.FileNameAndDataParamVO;
-import com.fdkankan.scene.vo.FileParamVO;
-import com.fdkankan.scene.vo.LocalesParamVO;
-import com.fdkankan.scene.vo.RenameCadParamVO;
-import com.fdkankan.scene.vo.SaveFiltersParamVO;
-import com.fdkankan.scene.vo.SaveLinkPanParamVO;
-import com.fdkankan.scene.vo.SaveTagsParamVO;
-import com.fdkankan.scene.vo.SaveTagsVisibleParamVO;
-import com.fdkankan.scene.vo.SceneAsynOperLogParamVO;
-import com.fdkankan.scene.vo.SceneAuthVO;
-import com.fdkankan.scene.vo.SceneEditInfoParamVO;
-import com.fdkankan.scene.vo.SceneEditInfoVO;
-import com.fdkankan.scene.vo.SceneInfoParamVO;
-import com.fdkankan.scene.vo.SceneInfoVO;
-import com.fdkankan.scene.vo.SurveillanceParamVO;
-import com.fdkankan.scene.vo.UploadContentParamVO;
+import com.fdkankan.scene.service.*;
+import com.fdkankan.scene.vo.*;
 import com.fdkankan.web.controller.BaseController;
 import com.fdkankan.web.controller.BaseController;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.response.ResultData;
 import java.io.IOException;
 import java.io.IOException;
@@ -90,6 +53,8 @@ public class SceneEditController extends BaseController {
     private IScenePlusService scenePlusService;
     private IScenePlusService scenePlusService;
     @Autowired
     @Autowired
     private ISceneAsynOperLogService sceneAsynOperLogService;
     private ISceneAsynOperLogService sceneAsynOperLogService;
+    @Autowired
+    private ISceneEditInfoExtService sceneEditInfoExtService;
 
 
     /**
     /**
      * <p>
      * <p>
@@ -887,4 +852,40 @@ public class SceneEditController extends BaseController {
         return sceneEditService.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));
+    }
+
 }
 }

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

@@ -91,6 +91,12 @@ public class SceneEditInfoExt {
     private String shareLogoImg;
     private String shareLogoImg;
 
 
     /**
     /**
+     * 是否有指示牌(0-否,1-是)
+     */
+    @TableField("billboards")
+    private Integer billboards;
+
+    /**
      * 分享配置信息
      * 分享配置信息
      */
      */
     @TableField("sns_info")
     @TableField("sns_info")

+ 14 - 0
src/main/java/com/fdkankan/scene/service/ISceneEditInfoExtService.java

@@ -1,7 +1,15 @@
 package com.fdkankan.scene.service;
 package com.fdkankan.scene.service;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 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.web.response.ResultData;
+
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -19,4 +27,10 @@ public interface ISceneEditInfoExtService extends IService<SceneEditInfoExt> {
 
 
     void updateToursByNum(String num, Integer tours);
     void updateToursByNum(String num, Integer tours);
 
 
+    ResultData saveBillboards(BaseJsonArrayParamVO param) throws Exception;
+
+    ResultData deleteBillboards(DeleteSidListParamVO param) throws Exception;
+
+    List<JSONObject> listBillboards(BaseSceneParamVO param) throws Exception;
+
 }
 }

+ 249 - 1
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoExtServiceImpl.java

@@ -1,20 +1,45 @@
 package com.fdkankan.scene.service.impl;
 package com.fdkankan.scene.service.impl;
 
 
+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;
+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.extension.service.impl.ServiceImpl;
 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.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.redis.util.RedisLockUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.scene.bean.TagBean;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.SceneEditInfo;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.SceneEditInfoExt;
 import com.fdkankan.scene.entity.ScenePlus;
 import com.fdkankan.scene.entity.ScenePlus;
+import com.fdkankan.scene.entity.ScenePlusExt;
 import com.fdkankan.scene.mapper.ISceneEditInfoExtMapper;
 import com.fdkankan.scene.mapper.ISceneEditInfoExtMapper;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
 import com.fdkankan.scene.service.ISceneEditInfoExtService;
 import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.ISceneEditInfoService;
+import com.fdkankan.scene.service.IScenePlusExtService;
 import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.service.IScenePlusService;
-import java.util.Objects;
+import com.fdkankan.scene.vo.BaseJsonArrayParamVO;
+import com.fdkankan.scene.vo.BaseSceneParamVO;
+import com.fdkankan.scene.vo.DeleteSidListParamVO;
+import com.fdkankan.web.response.ResultData;
+import org.aspectj.apache.bcel.generic.RET;
 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 java.util.*;
+import java.util.stream.Collectors;
+
 /**
 /**
  * <p>
  * <p>
  *  服务实现类
  *  服务实现类
@@ -29,7 +54,15 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
     @Autowired
     @Autowired
     private IScenePlusService scenePlusService;
     private IScenePlusService scenePlusService;
     @Autowired
     @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
     private ISceneEditInfoService sceneEditInfoService;
     private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private RedisLockUtil redisLockUtil;
+    @Autowired
+    private FYunFileServiceInterface fYunFileService;
 
 
     @Override
     @Override
     public SceneEditInfoExt getByScenePlusId(long scenePlusId) {
     public SceneEditInfoExt getByScenePlusId(long scenePlusId) {
@@ -53,4 +86,219 @@ public class SceneEditInfoExtServiceImpl extends ServiceImpl<ISceneEditInfoExtMa
         sceneEditInfoExt.setTours(tours);
         sceneEditInfoExt.setTours(tours);
         this.updateById(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.writeBillboardJson(param.getNum());
+
+        //保存数据库
+        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
+        this.updateBillboards(param.getNum(), sceneEditInfoExt);
+//        this.updateById(sceneEditInfoExt);
+
+        sceneEditInfoService.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
+
+        return ResultData.ok();
+    }
+
+    @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();
+
+        this.syncBillboardsFromFileToRedis(param.getNum());
+
+        //处理删除状态数据
+        this.deleteBillboards(param.getNum(), deleteSidList, bucket);
+
+        //写入本地文件,作为备份
+        this.writeBillboardJson(param.getNum());
+
+        //保存数据库
+        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
+        this.updateBillboards(param.getNum(), sceneEditInfoExt);
+        sceneEditInfoService.upgradeVersionById(sceneEditInfoExt.getEditInfoId());
+
+        return ResultData.ok();
+    }
+
+    @Override
+    public List<JSONObject> listBillboards(BaseSceneParamVO param) throws Exception {
+
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
+        SceneEditInfoExt sceneEditInfoExt = this.getByScenePlusId(scenePlus.getId());
+        if(sceneEditInfoExt.getBillboards() == CommonStatus.NO.code().intValue()){
+            return null;
+        }
+
+        this.syncBillboardsFromFileToRedis(param.getNum());
+        String key = String.format(RedisKey.SCENE_BILLBOARDS, param.getNum());
+        List<String> list = redisUtil.hgetValues(key);
+        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());
+        return sortList.stream().map(item -> item.getTag()).collect(Collectors.toList());
+    }
+
+    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());
+
+        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{
+        Map<String, String> addOrUpdateMap = new HashMap<>();
+        int i = 0;
+        for (Object item : data) {
+            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(item));
+            jsonObject.put("createTime", Calendar.getInstance().getTimeInMillis() + i++);
+            addOrUpdateMap.put(jsonObject.getString("sid"), JSON.toJSONString(jsonObject));
+        }
+
+        this.syncBillboardsFromFileToRedis(num);
+
+        //处理新增和修改数据
+        this.addOrUpdateBillboardsHandler(num, addOrUpdateMap);
+    }
+
+    /**
+     * <p>
+     保证指示牌数据安全性,当redis宕机导致热点数据丢失时,可以从文件中读取,恢复到redis
+     * </p>
+     * @author dengsixing
+     * @date 2022/3/3
+     **/
+    private void syncBillboardsFromFileToRedis(String num) throws Exception{
+
+        String key = String.format(RedisKey.SCENE_BILLBOARDS, num);
+        boolean exist = redisUtil.hasKey(key);
+        if(exist){
+            return;
+        }
+        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);
+        if(!lock){
+            throw new BusinessException(ErrorCode.SYSTEM_BUSY);
+        }
+        try{
+            exist = redisUtil.hasKey(key);
+            if(exist){
+                return;
+            }
+            String billboardsFilePath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "billboards.json";
+            String billboardsData = FileUtils.readUtf8String(billboardsFilePath);
+            if(StrUtil.isEmpty(billboardsData)){
+                return;
+            }
+            JSONArray billboardArr = JSON.parseArray(billboardsData);
+            if(CollUtil.isEmpty(billboardArr)){
+                return;
+            }
+            Map<String, String> map = new HashMap<>();
+            for (Object o : billboardArr) {
+                JSONObject jo = (JSONObject)o;
+                map.put(jo.getString("sid"), jo.toJSONString());
+            }
+            redisUtil.hmset(key, map);
+        }finally {
+            redisLockUtil.unlockLua(lockKey, lockVal);
+        }
+    }
+
+    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);
+    }
+
+    /**
+     * <p>
+     热点数据保存
+
+     * </p>
+     * @author dengsixing
+     * @date 2022/3/3
+     **/
+    private void writeBillboardJson(String num) throws Exception{
+        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);
+        if(!lock){
+            return;
+        }
+        try{
+            String dataKey = String.format(RedisKey.SCENE_BILLBOARDS, num);
+            String hotJsonPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "billboards.json";
+            if(!redisUtil.hasKey(dataKey)){
+                FileUtil.del(hotJsonPath);
+                return;
+            }
+            Map<String, String> billboardMap = redisUtil.hmget(dataKey);
+            List<JSONObject>  billboardList = billboardMap.entrySet().stream().map(entry->JSON.parseObject(entry.getValue())).collect(Collectors.toList());
+            FileUtil.writeUtf8String(JSON.toJSONString(billboardList), hotJsonPath);
+        }finally {
+            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);
+    }
+
+
+
 }
 }

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

@@ -295,7 +295,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         sceneJson.setSns(JSON.parseObject(sceneEditInfoExt.getSnsInfo()));
         sceneJson.setSns(JSON.parseObject(sceneEditInfoExt.getSnsInfo()));
 
 
         //处理热点数据,生成hot.json
         //处理热点数据,生成hot.json
-        this.publicHotData(num, sceneEditInfo, bucket);
+        this.publicHotData(num, bucket);
 
 
         //发布场景关联相关数据
         //发布场景关联相关数据
         this.publicLinkSceneData(num, bucket);
         this.publicLinkSceneData(num, bucket);
@@ -306,6 +306,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //发布摄像头数据
         //发布摄像头数据
         this.publicSurveillance(num, sceneEditInfoExt.getSurveillances(), bucket);
         this.publicSurveillance(num, sceneEditInfoExt.getSurveillances(), bucket);
 
 
+        //发布指示牌数据
+        this.publicBillboardData(num, bucket);
 
 
         //本地写sceneJson文件
         //本地写sceneJson文件
         String localSceneJsonPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "scene.json";
         String localSceneJsonPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "scene.json";
@@ -407,7 +409,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
 
     }
     }
 
 
-    private void publicHotData(String sceneNum, SceneEditInfo sceneEditInfo, String bucket) throws IOException {
+    private void publicHotData(String sceneNum, String bucket) throws IOException {
         String hotDataKey = String.format(RedisKey.SCENE_HOT_DATA, sceneNum);
         String hotDataKey = String.format(RedisKey.SCENE_HOT_DATA, sceneNum);
         Map<String, String> hotMap = redisUtil.hmget(hotDataKey);
         Map<String, String> hotMap = redisUtil.hmget(hotDataKey);
 
 
@@ -434,6 +436,18 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
 
 
     }
     }
 
 
+    private void publicBillboardData(String sceneNum, String bucket) throws IOException {
+        String Key = String.format(RedisKey.SCENE_BILLBOARDS, sceneNum);
+        String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, sceneNum) + "billboards.json";
+        List<String> list = redisUtil.hgetValues(Key);
+        if(CollUtil.isEmpty(list)){
+            fYunFileService.deleteFile(bucket, userEditPath);
+            return;
+        }
+        List<JSONObject> collect = list.stream().map(str -> JSON.parseObject(str)).collect(Collectors.toList());
+        fYunFileService.uploadFile(bucket, JSON.toJSONString(collect).getBytes(), userEditPath);
+    }
+
     @Override
     @Override
     public SceneInfoVO getSceneInfo(@Var SceneInfoParamVO param) throws Exception{
     public SceneInfoVO getSceneInfo(@Var SceneInfoParamVO param) throws Exception{
         SceneInfoReqType sceneInfoReqType = SceneInfoReqType.get(param.getReqType());
         SceneInfoReqType sceneInfoReqType = SceneInfoReqType.get(param.getReqType());

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

@@ -0,0 +1,25 @@
+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;
+
+/**
+ * <p>
+ * 通用data类型参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/10
+ **/
+@Data
+public class BaseJsonArrayParamVO extends BaseSceneParamVO{
+
+    @NotEmpty(message = "数据不能为空")
+    private JSONArray data;
+
+}

+ 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;
+
+}

+ 5 - 0
src/main/java/com/fdkankan/scene/vo/SceneInfoVO.java

@@ -239,5 +239,10 @@ public class SceneInfoVO {
      */
      */
     private JSONObject sns;
     private JSONObject sns;
 
 
+    /**
+     * 是否有指示牌(0-否,1-是)
+     */
+    private Integer billboards;
+
 
 
 }
 }