Эх сурвалжийг харах

硬盘空间信息同步:表名修改类名修改

jingyuanchao 1 жил өмнө
parent
commit
63fdda00b0
20 өөрчлөгдсөн 515 нэмэгдсэн , 14 устгасан
  1. 34 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/DvrDiskPageDto.java
  2. 32 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/DvrdiskDto.java
  3. 2 8
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/protection/VideoRecorderHardDiskDetectionEditDto.java
  4. 4 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/util/LogUtils.java
  5. 3 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotDvrDisk.java
  6. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotDvrDiskLog.java
  7. 1 1
      soc-modules/soc-modules-gen/src/main/java/com/xunmei/gen/util/CodeGenerators.java
  8. 30 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/VideoDataController.java
  9. 16 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDvrDiskLogMapper.java
  10. 16 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDvrDiskMapper.java
  11. 1 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IIotDeviceService.java
  12. 16 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotDvrDiskLogService.java
  13. 21 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotDvrDiskService.java
  14. 1 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmSubSystemServiceImpl.java
  15. 1 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceServiceImpl.java
  16. 20 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskLogServiceImpl.java
  17. 178 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java
  18. 128 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java
  19. 5 0
      soc-modules/soc-modules-mediator/src/main/resources/mapper/IotDvrDiskLogMapper.xml
  20. 5 0
      soc-modules/soc-modules-mediator/src/main/resources/mapper/IotDvrDiskMapper.xml

+ 34 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/DvrDiskPageDto.java

@@ -0,0 +1,34 @@
+package com.xunmei.system.api.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * DVR硬盘空间信息
+ * </p>
+ *
+ * @author oygj
+ * @since 2022-12-09
+ */
+@Data
+@ApiModel(value="DvrDiskPageDto对象", description="DVR硬盘空间信息")
+public class DvrDiskPageDto implements Serializable {
+
+    @ApiModelProperty(value = "组织机构唯一标识)")
+    private String organizationGuid;
+
+    @ApiModelProperty(value = "录像机或网络设备唯一标识")
+    private String equipmentCode;
+
+    @ApiModelProperty(value = "录像机或网络设备名称")
+    private String equipmentName;
+    @ApiModelProperty(value = "硬盘空间信息列表")
+    private List<DvrdiskDto> diskSpace;
+
+
+}

+ 32 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/DvrdiskDto.java

@@ -0,0 +1,32 @@
+package com.xunmei.system.api.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * DVR硬盘空间信息
+ * </p>
+ *
+ * @author oygj
+ * @since 2022-12-09
+ */
+@Data
+@ApiModel(value="Dvrdisk对象", description="DVR硬盘空间信息")
+public class DvrdiskDto implements Serializable {
+
+    @ApiModelProperty(value = "硬盘可用空间大小(单位:MB)")
+    private String available;
+
+    @ApiModelProperty(value = "硬盘编号")
+    private String diskSerialNum;
+
+    private String name;
+
+    @ApiModelProperty(value = "硬盘总的空间大小(单位:MB)")
+    private String total;
+
+}

+ 2 - 8
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/protection/VideoRecorderHardDiskDetectionEditDto.java

@@ -21,10 +21,7 @@ public class VideoRecorderHardDiskDetectionEditDto {
    @ApiModelProperty("编号")
    private Long id;
    @ApiModelProperty("组织机构的唯一标识")
-   @Length(
-      max = 64,
-      message = "名称长度不能超过64"
-   )
+   @Length( max = 64, message = "名称长度不能超过64" )
    private String organizationGuid;
    @ApiModelProperty("录像机的唯一标识")
    private String equipmentCode;
@@ -33,10 +30,7 @@ public class VideoRecorderHardDiskDetectionEditDto {
    @ApiModelProperty("报警状态标识 0:正在报警 | 1:报警结束")
    private Integer isAlarm;
    @ApiModelProperty("报警/恢复时间")
-   @Length(
-      max = 64,
-      message = "报警/恢复时间长度不能超过64"
-   )
+   @Length( max = 64, message = "报警/恢复时间长度不能超过64" )
    private Date alarmTime;
    @ApiModelProperty("硬盘当前状态信息")
    private List<Map<String, Object>> detailInfo;

+ 4 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/util/LogUtils.java

@@ -55,6 +55,10 @@ public class LogUtils {
      */
     public static final Logger STATUS_INFO_DISKS = LoggerFactory.getLogger("statusDisksLog");
     /**
+     * 硬盘状态
+     */
+    public static final Logger STATUS_INFO_DISKS_SPACE = LoggerFactory.getLogger("statusDisksSpaceLog");
+    /**
      * 网络状态
      */
     public static final Logger STATUS_INFO_NETWORK = LoggerFactory.getLogger("statusNetworkLog");

+ 3 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotDvrDisk.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -19,6 +20,7 @@ import lombok.EqualsAndHashCode;
  * @since 2024-02-21
  */
 @Data
+@Builder
 @EqualsAndHashCode(callSuper = false)
 @TableName("iot_dvr_disk")
 @ApiModel(value="IotDvrDisk对象", description="")
@@ -51,7 +53,7 @@ public class IotDvrDisk implements Serializable {
 
     @ApiModelProperty(value = "硬盘序号")
     @TableField("disk_index")
-    private Integer diskIndex;
+    private String diskIndex;
 
     @ApiModelProperty(value = "硬盘总的空间大小(单位:MB)")
     @TableField("total")

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotDvrDiskLog.java

@@ -54,7 +54,7 @@ public class IotDvrDiskLog implements Serializable {
 
     @ApiModelProperty(value = "硬盘序号")
     @TableField("disk_index")
-    private Integer diskIndex;
+    private String diskIndex;
 
     @ApiModelProperty(value = "硬盘状态。0:正常,1:异常")
     @TableField("state")

+ 1 - 1
soc-modules/soc-modules-gen/src/main/java/com/xunmei/gen/util/CodeGenerators.java

@@ -30,7 +30,7 @@ public class CodeGenerators {
     }*/
 
     public static final String moduleName="com.xunmei.mediator";
-    public static final String tableNames="iot_dvr_hard_disk_detection_log";
+    public static final String tableNames="iot_dvr_disk,iot_dvr_disk_log";
 
     public static void main(String[] args) {
         // 代码生成器

+ 30 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/VideoDataController.java

@@ -4,6 +4,8 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.xunmei.mediator.api.service.*;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.DvrDiskPageDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.mediator.domain.dto.videoDaysCheck.VideoDaysCheckDto;
 import com.xunmei.mediator.domain.dto.videoDiagnosis.VideoDiagnosisDto;
@@ -35,6 +37,8 @@ public class VideoDataController {
     private RabbitMsgIdService rabbitMsgIdService;
     @Resource
     IotDvrHardDiskDetectionService videoRecorderHardDiskDetectionService;
+    @Resource
+    IotDvrDiskService dvrDiskService;
     @ApiOperation("录像完整性检查")
     @PostMapping({"/api/{branchId}/video/complete"})
     public ReceiveErrorDto complete(@PathVariable String branchId, String msgId, @RequestBody VideoIntegrityCheckDto videoIntegrityCheckDto) {
@@ -125,4 +129,30 @@ public class VideoDataController {
         LogUtils.STATUS_INFO_DISKS.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "录像机硬盘检测:/api/status/disks", branchId, msgId, JSON.toJSONString(result));
         return result;
     }
+
+    /**
+     * 频率:每次检查完成后,如果某个或者某几个硬盘存在质量问题,则上报一次。中途异常盘发生变化
+     * 不做推送,质量问题修复后,主动上报结束信息。
+     * 粒度:每个硬盘录像机的硬盘情况为一个数据包
+     *
+     * @param branchId
+     * @param msgId
+     * @param dataPageDto
+     * @return
+     */
+    @ApiOperation("DVR硬盘空间信息同步")
+    @PostMapping({"/api/{branchId}/data/dvrDiskList"})
+    ReceiveErrorDto disksList(@PathVariable String branchId, String msgId, @RequestBody DataPageDto<DvrDiskPageDto> dataPageDto) {
+        rabbitMsgIdService.sendMsgId(msgId, "/api/data/dvrDiskList", "DVR硬盘空间信息同步");
+        LogUtils.STATUS_INFO_DISKS_SPACE.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "DVR硬盘空间信息同步:/api/data/dvrDiskList", branchId, msgId, JSON.toJSONString(dataPageDto));
+        ReceiveErrorDto result = ReceiveErrorDto.success();
+        try {
+            result = this.dvrDiskService.saveData(dataPageDto, msgId, branchId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            LogUtils.STATUS_INFO_DISKS_SPACE.error("保存失败,{}", e);
+        }
+        LogUtils.STATUS_INFO_DISKS_SPACE.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "DVR硬盘空间信息同步:/api/data/dvrDiskList", branchId, msgId, JSON.toJSONString(result));
+        return result;
+    }
 }

+ 16 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDvrDiskLogMapper.java

@@ -0,0 +1,16 @@
+package com.xunmei.mediator.api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDiskLog;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+public interface IotDvrDiskLogMapper extends BaseMapper<IotDvrDiskLog> {
+
+}

+ 16 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDvrDiskMapper.java

@@ -0,0 +1,16 @@
+package com.xunmei.mediator.api.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+public interface IotDvrDiskMapper extends BaseMapper<IotDvrDisk> {
+
+}

+ 1 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IIotDeviceService.java

@@ -30,5 +30,5 @@ public interface IIotDeviceService extends IService<IotDevice> {
 
     ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner);
 
-    List<IotDevice> findAlarmHostDevice(Long categoryId);
+    List<IotDevice> findByCategory(Long categoryId);
 }

+ 16 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotDvrDiskLogService.java

@@ -0,0 +1,16 @@
+package com.xunmei.mediator.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDiskLog;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+public interface IotDvrDiskLogService extends IService<IotDvrDiskLog> {
+
+}

+ 21 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotDvrDiskService.java

@@ -0,0 +1,21 @@
+package com.xunmei.mediator.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.DvrDiskPageDto;
+import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+public interface IotDvrDiskService extends IService<IotDvrDisk> {
+
+    ReceiveErrorDto saveData(DataPageDto<DvrDiskPageDto> dataPageDto, String msgId, String branchId) throws Exception;
+
+}

+ 1 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmSubSystemServiceImpl.java

@@ -423,7 +423,7 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
         //获取category列表
         List<MediatorCategory> categorys = categoryService.list();
         //查询报警主机主机设备列表
-        List<IotDevice> devices = iotDeviceService.findAlarmHostDevice(CategoryDataEnum.ALARM_HOST_DEVICE.getId());
+        List<IotDevice> devices = iotDeviceService.findByCategory(CategoryDataEnum.ALARM_HOST_DEVICE.getId());
         checkParam(defenceareaList, branchId, msgId, errors, orgList, categorys, devices, deviceList, protectionList, sensorList);
         return ReceiveErrorDto.success();
     }

+ 1 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceServiceImpl.java

@@ -102,7 +102,7 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
     }
 
     @Override
-    public List<IotDevice> findAlarmHostDevice(Long categoryId) {
+    public List<IotDevice> findByCategory(Long categoryId) {
         return lambdaQuery().eq(IotDevice::getCategoryId,categoryId).eq(IotDevice::getDeleted,0).list();
     }
 }

+ 20 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xunmei.mediator.api.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDiskLog;
+import com.xunmei.mediator.api.mapper.IotDvrDiskLogMapper;
+import com.xunmei.mediator.api.service.IotDvrDiskLogService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+@Service
+public class IotDvrDiskLogServiceImpl extends ServiceImpl<IotDvrDiskLogMapper, IotDvrDiskLog> implements IotDvrDiskLogService {
+
+}

+ 178 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java

@@ -0,0 +1,178 @@
+package com.xunmei.mediator.api.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.CacheConstants;
+import com.xunmei.common.core.domain.iot.domain.IotDevice;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
+import com.xunmei.common.core.enums.CategoryDataEnum;
+import com.xunmei.common.core.utils.IDHelper;
+import com.xunmei.common.redis.utils.RedisUtils;
+import com.xunmei.mediator.api.mapper.IotDvrDiskMapper;
+import com.xunmei.mediator.api.service.IIotDeviceService;
+import com.xunmei.mediator.api.service.IotDvrDiskService;
+import com.xunmei.mediator.api.service.NorthErrorService;
+import com.xunmei.mediator.api.service.NorthStatisticsSyncService;
+import com.xunmei.mediator.util.CheckDataUtil;
+import com.xunmei.mediator.util.RedisCheckRepeatDataUtil;
+import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.domain.north.NorthError;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.DvrDiskPageDto;
+import com.xunmei.system.api.dto.DvrdiskDto;
+import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
+import com.xunmei.system.api.enums.DataType;
+import com.xunmei.system.api.util.LogUtils;
+import com.xunmei.system.api.vo.SysOrgVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+@Service
+@Slf4j
+public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrDisk> implements IotDvrDiskService {
+
+
+    @Autowired
+    private NorthStatisticsSyncService northStatisticsSyncService;
+    @Autowired
+    private NorthErrorService northErrorService;
+    @Autowired
+    private IIotDeviceService iotDeviceService;
+    @Autowired
+    private RedisCheckRepeatDataUtil redisCheckRepeatDataUtil;
+
+    @Override
+    public ReceiveErrorDto saveData(DataPageDto<DvrDiskPageDto> request, String msgId, String branchId) throws Exception {
+        //验证基础分页信息
+        ReceiveErrorDto dto = CheckDataUtil.checkObjFieldIsNull(request);
+        if (dto.getSuccess()) {
+            //分页数据的存取
+            List<DvrDiskPageDto> dvrdiskPageLists = redisCheckRepeatDataUtil.isCompleted(request, DvrDiskPageDto.class);
+
+            log.info("判断是否获取DVR硬盘空间全部信息分页数据:{}", dvrdiskPageLists.size() > 0 ? true : false);
+            if (dvrdiskPageLists.size() > 0) {
+                Map<String, Object> map = this.cheakDvrdiskPageDto(dvrdiskPageLists, branchId, msgId);
+                this.saveAll(map);
+            }
+        }
+        return dto;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveAll(Map<String, Object> map) throws Exception {
+
+        List<NorthError> errors = (List<NorthError>) map.get("errors");
+
+        List<IotDvrDisk> dvrdisks = (List<IotDvrDisk>) map.get("dvrdisks");
+
+        this.northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.dvrdiskCount.getIndex(), dvrdisks.size(), false);
+
+        if (ObjectUtil.isNotEmpty(errors)) {
+            northErrorService.saveErrorData(errors);
+        }
+        if (ObjectUtil.isNotEmpty(dvrdisks)) {
+
+            try {
+                baseMapper.delete(null);
+                this.saveBatch(dvrdisks);
+            } catch (Exception e) {
+                LogUtils.STATUS_INFO_DISKS_SPACE.error("批量保存dvrdisk失败,失败原因:{}", e.getMessage());
+                throw new RuntimeException(e.getMessage());
+            }
+        }
+    }
+
+    private Map<String, Object> cheakDvrdiskPageDto(List<DvrDiskPageDto> dvrdiskPageLists, String branchId, String msgId) throws IllegalAccessException {
+        //获取所有的监控主机
+        final List<IotDevice> deviceListAll = iotDeviceService.findByCategory(CategoryDataEnum.MONITOR_HOST_DEVICE.getId());
+
+        List<SysOrgVO> orgList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+
+        Map<String, Object> map = new HashMap<>();
+
+        List<NorthError> errors = new ArrayList<>();
+
+        List<IotDvrDisk> dvrdisks = new ArrayList<>();
+
+        for (DvrDiskPageDto pageDto : dvrdiskPageLists) {
+            NorthError error = null;
+            SysOrgVO org = null;
+            IotDevice device = null;
+            //验证DvrdiskPageDto对象中是否有参数为null
+            error = CheckDataUtil.checkObjFieldIsNull(pageDto, branchId, msgId, "/api/data/dvrDiskList", null);
+            if (error != null) {
+                errors.add(error);
+                continue;
+            }
+            //验证机构是否存在
+            final Optional<SysOrgVO> optional = orgList.stream().filter(r -> r.getCode().equals(pageDto.getOrganizationGuid())).findFirst();
+            if (!optional.isPresent()) {
+                error = new NorthError(msgId, branchId, "/api/data/dvrDiskList"
+                        , pageDto, "OrganizationGuid:" + pageDto.getOrganizationGuid() + "不正确");
+                errors.add(error);
+                continue;
+            } else {
+                org = optional.get();
+            }
+            //验证监控主机是否存在
+            SysOrgVO finalOrg = org;
+            List<IotDevice> deviceList = deviceListAll.stream().filter(r -> r.getEquipmentCode().equals(pageDto.getEquipmentCode())
+                    && r.getOrgId().equals(finalOrg.getId())).collect(Collectors.toList());
+
+            if (deviceList.size() == 0) {
+                error = new NorthError(msgId, branchId, "/api/data/dvrDiskList"
+                        , pageDto, "EquipmentCode:" + pageDto.getEquipmentCode() + "不正确");
+                errors.add(error);
+                continue;
+            }
+            List<DvrdiskDto> diskSpaces = pageDto.getDiskSpace();
+
+            if (ObjectUtil.isEmpty(diskSpaces)) {
+                return map;
+            }
+            for (DvrdiskDto dto : diskSpaces) {
+                //验证DvrdiskDto是否有字段为null
+                List<String> fields = new ArrayList<>();
+                fields.add("name");
+                error = CheckDataUtil.checkObjFieldIsNull(dto, branchId, msgId, "/api/data/dvrDiskList", fields);
+                if (error != null) {
+                    errors.add(error);
+                    continue;
+                }
+                IotDvrDisk dvrdisk = IotDvrDisk.builder()
+                        .available(dto.getAvailable().substring(0, dto.getAvailable().length() - 2))
+                        .diskIndex(dto.getDiskSerialNum())
+                        .equipmentCode(pageDto.getEquipmentCode())
+                        .diskName(dto.getName())
+                        .id(IDHelper.id())
+                        .total(dto.getTotal().substring(0, dto.getTotal().length() - 2))
+                        .orgId(org.getId()).build();
+
+                dvrdisks.add(dvrdisk);
+            }
+        }
+        map.put("errors", errors);
+        map.put("dvrdisks", dvrdisks);
+        return map;
+    }
+}

+ 128 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java

@@ -0,0 +1,128 @@
+package com.xunmei.mediator.util;
+
+import com.alibaba.fastjson.JSON;
+import com.xunmei.system.api.dto.DataPageDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class RedisCheckRepeatDataUtil {
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    RedisUtil redisUtil;
+    /**
+     * 验证是否在段时间内收到重复的数据
+     * @param key
+     * @param value
+     * @return
+     */
+    public boolean checkData (String key,String value){
+        boolean flag = true;
+        if(redisTemplate.hasKey(key)){
+            String val = (String) this.redisTemplate.opsForValue().get(key);
+            if(val!=null){
+                if(value.equals(val)){
+                    flag = false;
+                }else{
+                    redisTemplate.opsForValue().set(key,value);
+                    this.redisTemplate.expire(key,60, TimeUnit.MINUTES);
+                }
+            }else {
+                redisTemplate.opsForValue().set(key,value);
+                this.redisTemplate.expire(key,60, TimeUnit.MINUTES);
+            }
+        }else{
+            redisTemplate.opsForValue().set(key,value);
+            this.redisTemplate.expire(key,60, TimeUnit.MINUTES);
+        }
+        return flag;
+    }
+
+    public boolean checkData (String key,String value,int timeOut){
+        boolean flag = true;
+        if(redisTemplate.hasKey(key)){
+            String val = (String) this.redisTemplate.opsForValue().get(key);
+            if(val!=null){
+                if(value.equals(val)){
+                    flag = false;
+                }else{
+                    redisTemplate.opsForValue().set(key,value);
+                    if(timeOut>0){
+                        this.redisTemplate.expire(key,timeOut, TimeUnit.MINUTES);
+                    }
+                }
+            }else {
+                redisTemplate.opsForValue().set(key,value);
+                if(timeOut>0){
+                    this.redisTemplate.expire(key,timeOut, TimeUnit.MINUTES);
+                }
+            }
+        }else{
+            redisTemplate.opsForValue().set(key,value);
+            if(timeOut>0){
+                this.redisTemplate.expire(key,timeOut, TimeUnit.MINUTES);
+            }
+        }
+        return flag;
+    }
+
+    /**
+     * 分页数据数据在redis中的存取
+     * @param request
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public <T> List<T> isCompleted(DataPageDto<T> request, Class<T> clazz){
+        List<T> resultList = new ArrayList<>();
+        String guid = request.getPackageGuid();
+        Long currPage = request.getCurrPage();
+        Long totalPage = request.getTotalPage();
+        List<T> dtoList = request.getData();
+
+        /**
+         * 生成每一页的redis key值
+         */
+        String key = guid + "_"+ currPage;
+
+        /**
+         * 判断是否已经获取到该分页数据,如果已获取到,则直接返回
+         */
+        Boolean isExist = redisTemplate.hasKey(key);
+
+        if(!isExist){
+            String data = JSON.toJSONString(dtoList);
+            this.redisTemplate.opsForValue().set(key,data);
+            this.redisTemplate.expire(key,1, TimeUnit.DAYS);
+        }
+        //判断是否完整
+        for (int i = 1; i <=totalPage ; i++) {
+            String ak = guid + "_"+i;
+            Boolean isOk = redisTemplate.hasKey(ak);
+            if(!isOk){
+                return resultList;
+            }
+        }
+        //数据完整了将数据取出
+        for (int i = 1; i <= totalPage; i++) {
+            String ak = guid + "_"+i;
+            Object obj = this.redisTemplate.opsForValue().get(ak);
+            List<T> deviceDtos = JSON.parseArray((String) obj, clazz);
+            if(deviceDtos!=null){
+                resultList.addAll(deviceDtos);
+            }
+        }
+        for (int i = 1; i <= totalPage; i++) {
+            String ak = guid + "_"+i;
+            this.redisUtil.removeByKey(ak);
+        }
+
+        return resultList;
+    }
+}

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/resources/mapper/IotDvrDiskLogMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.mediator.api.mapper.IotDvrDiskLogMapper">
+
+</mapper>

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/resources/mapper/IotDvrDiskMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.mediator.api.mapper.IotDvrDiskMapper">
+
+</mapper>