瀏覽代碼

Merge branch 'V0.0.6-iot' of http://10.87.21.221:8000/jzyd_yyds/soc into V0.0.6-iot

jiawuxian 1 年之前
父節點
當前提交
ac59a43e04
共有 24 個文件被更改,包括 184 次插入452 次删除
  1. 0 7
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteDeviceService.java
  2. 0 9
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteMediatorService.java
  3. 0 28
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/device/DeviceReceivePageDto.java
  4. 0 20
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/protection/DefenceareaPageDto.java
  5. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/protection/ReceiveErrorDto.java
  6. 0 5
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteDeviceFallbackFactory.java
  7. 1 11
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteMediatorFallbackFactory.java
  8. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotAlarmDefenceArea.java
  9. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotAlarmSubsystem.java
  10. 5 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/CategoryDataEnum.java
  11. 3 7
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java
  12. 1 10
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/MediatorController.java
  13. 2 2
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/ProtectionController.java
  14. 21 87
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java
  15. 3 2
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IIotDeviceService.java
  16. 3 2
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotAlarmSubsystemService.java
  17. 32 94
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmSubSystemServiceImpl.java
  18. 14 11
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceServiceImpl.java
  19. 1 11
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java
  20. 21 26
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotSensorServiceImpl.java
  21. 70 72
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java
  22. 0 9
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java
  23. 0 6
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysDeviceService.java
  24. 0 31
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeviceServiceImpl.java

+ 0 - 7
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteDeviceService.java

@@ -5,17 +5,10 @@ import com.xunmei.common.core.constant.ServiceNameConstants;
 import com.xunmei.common.core.domain.R;
 import com.xunmei.system.api.domain.SysDevice;
 import com.xunmei.system.api.dto.SysDeviceInnerListDto;
-import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
-import com.xunmei.system.api.factory.RemoteConfigFallbackFactory;
-import com.xunmei.system.api.factory.RemoteDeviceFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author :LuoWei

+ 0 - 9
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteMediatorService.java

@@ -1,16 +1,7 @@
 package com.xunmei.system.api;
 
-import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.constant.ServiceNameConstants;
-import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
 import com.xunmei.common.core.web.domain.AjaxResult;
-import com.xunmei.system.api.domain.SysDictData;
-import com.xunmei.system.api.domain.north.MediatorDeviceData;
-import com.xunmei.system.api.domain.north.MediatorDeviceDataLog;
-import com.xunmei.system.api.domain.north.NorthError;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.enums.DataType;
-import com.xunmei.system.api.factory.RemoteDictDataFallbackFactory;
 import com.xunmei.system.api.factory.RemoteMediatorFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;

+ 0 - 28
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/device/DeviceReceivePageDto.java

@@ -1,28 +0,0 @@
-package com.xunmei.system.api.dto.device;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class DeviceReceivePageDto {
-    private Long totalPage;
-    private Long currPage;
-    private String packageGuid;
-    private String buildTime;
-    private List<DeviceDto> data;
-
-    private String msgId;
-
-    private String branchId;
-
-
-
-
-}

+ 0 - 20
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/protection/DefenceareaPageDto.java

@@ -1,20 +0,0 @@
-package com.xunmei.system.api.dto.protection;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class DefenceareaPageDto {
-    private Long totalPage;
-    private Long currPage;
-    private String packageGuid;
-    private String buildTime;
-    private List<DefenceAreaDto> data;
-}

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/dto/protection/ReceiveErrorDto.java

@@ -26,6 +26,11 @@ public class ReceiveErrorDto {
     public static ReceiveErrorDto success() {
         return new ReceiveErrorDto();
     }
+    public static ReceiveErrorDto success(String msg) {
+        final ReceiveErrorDto dto = new ReceiveErrorDto();
+        dto.setErrorMsg(msg);
+        return dto;
+    }
 
     public static ReceiveErrorDto error(String msg) {
         ReceiveErrorDto receiveErrorDto = new ReceiveErrorDto();

+ 0 - 5
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteDeviceFallbackFactory.java

@@ -4,17 +4,12 @@ import com.xunmei.common.core.domain.R;
 import com.xunmei.system.api.RemoteDeviceService;
 import com.xunmei.system.api.domain.SysDevice;
 import com.xunmei.system.api.dto.SysDeviceInnerListDto;
-import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author :LuoWei

+ 1 - 11
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteMediatorFallbackFactory.java

@@ -1,23 +1,13 @@
 package com.xunmei.system.api.factory;
 
-import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
 import com.xunmei.common.core.web.domain.AjaxResult;
-import com.xunmei.system.api.RemoteDictDataService;
 import com.xunmei.system.api.RemoteMediatorService;
-import com.xunmei.system.api.domain.SysDictData;
-import com.xunmei.system.api.domain.north.MediatorDeviceData;
-import com.xunmei.system.api.domain.north.MediatorDeviceDataLog;
-import com.xunmei.system.api.domain.north.NorthError;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.enums.DataType;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * 字典服务降级处理
  *

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

@@ -87,7 +87,7 @@ public class IotAlarmDefenceArea implements Serializable {
 
     @ApiModelProperty(value = "是否删除")
     @TableField("deleted")
-    private Integer deleted;
+    private int deleted;
 
     @ApiModelProperty(value = "创建时间")
     @TableField("create_time")

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

@@ -44,7 +44,7 @@ public class IotAlarmSubsystem implements Serializable {
     @TableField("name")
     private String name;
 
-    @ApiModelProperty(value = "布防状态,0:撤防,1:布防")
+    @ApiModelProperty(value = "布防状态,0:撤防,1:布防,2:未知")
     @TableField("status")
     private Integer status;
 

+ 5 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/CategoryDataEnum.java

@@ -22,6 +22,11 @@ public enum CategoryDataEnum {
     TALK_HOST_DEVICE(3713672073773056L, "对讲主机"),
     DOOR_HOST_DEVICE(3713672266842112L, "门禁主机"),
     ALARM_HOST_SENSOR(3713672266842113L, "报警主机传感器"),
+    HUMITURE_SENSOR(3712195941285888L, "温湿度"),
+    INFRARED_SENSOR(3713672266842116L, "红外"),
+    SMOKE_SENSOR(3712194930442240L, "烟感"),
+    WATER_SENSOR(3712196701503488L, "水浸"),
+    AMMETER_SENSOR(3712198166114160L, "智能电表"),
     ;
 
 

+ 3 - 7
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java

@@ -5,20 +5,18 @@ import com.alibaba.fastjson.JSONArray;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.mediator.api.service.*;
+import com.xunmei.system.api.RemoteDeviceService;
 import com.xunmei.system.api.dto.DataPageDto;
 import com.xunmei.system.api.dto.SensorDto;
 import com.xunmei.system.api.dto.SensorStatusDto;
 import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
 import com.xunmei.system.api.dto.protection.NetworkDeviceDetectionEditDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.util.LogUtils;
-import com.xunmei.system.api.RemoteDeviceService;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -69,13 +67,11 @@ public class DataController {
      */
     @ApiOperation("设备信息同步")
     @PostMapping({"/api/{branchId}/data/equipmentList"})
-    public ReceiveErrorDto equipmentList(@PathVariable String branchId, String msgId, @RequestBody DeviceReceivePageDto deviceReceivePageDto) {
+    public ReceiveErrorDto equipmentList(@PathVariable String branchId, String msgId, @RequestBody DataPageDto<DeviceDto> deviceReceivePageDto) {
         rabbitMsgIdService.sendMsgId(msgId, "/data/equipmentList", "设备信息同步");
         LogUtils.BASE_INFO_EQUIPMENT.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "设备信息同步:/api/data/equipmentList/", branchId, msgId, JSON.toJSONString(deviceReceivePageDto));
         try {
-            deviceReceivePageDto.setBranchId(branchId);
-            deviceReceivePageDto.setMsgId(msgId);
-            ReceiveErrorDto errorDto = iotDeviceService.saveData(deviceReceivePageDto, SecurityConstants.INNER);
+            ReceiveErrorDto errorDto = iotDeviceService.saveData(deviceReceivePageDto, msgId,branchId);
             LogUtils.BASE_INFO_EQUIPMENT.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "设备信息同步:/api/data/equipmentList/", branchId, msgId, JSON.toJSONString(errorDto));
             return errorDto;
         } catch (Exception e) {

+ 1 - 10
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/MediatorController.java

@@ -1,17 +1,8 @@
 package com.xunmei.mediator.api.controller;
 
-import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
-import com.xunmei.common.security.annotation.InnerAuth;
-import com.xunmei.mediator.api.service.*;
-import com.xunmei.system.api.domain.north.MediatorDeviceData;
-import com.xunmei.system.api.domain.north.MediatorDeviceDataLog;
-import com.xunmei.system.api.domain.north.NorthError;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
+
 import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
-import java.text.ParseException;
-import java.util.List;
 
 /**
  * @author jingyuanchao

+ 2 - 2
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/ProtectionController.java

@@ -6,7 +6,7 @@ import com.xunmei.mediator.api.service.IotAlarmDefenceAreaService;
 import com.xunmei.mediator.api.service.IotAlarmSubsystemService;
 import com.xunmei.mediator.api.service.RabbitMsgIdService;
 import com.xunmei.system.api.dto.DataPageDto;
-import com.xunmei.system.api.dto.protection.DefenceareaPageDto;
+import com.xunmei.system.api.dto.protection.DefenceAreaDto;
 import com.xunmei.system.api.dto.protection.ProtectionEditDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.dto.protection.SensorDataDto;
@@ -34,7 +34,7 @@ public class ProtectionController {
     private IotAlarmDefenceAreaService defenceAreService;
     @ApiOperation("报警主机子系统及防区信息同步")
     @PostMapping({"/api/{branchId}/data/defenceareaList"})
-    public ReceiveErrorDto defenceareaList(@PathVariable String branchId, String msgId, @RequestBody DefenceareaPageDto request) {
+    public ReceiveErrorDto defenceareaList(@PathVariable String branchId, String msgId, @RequestBody  DataPageDto<DefenceAreaDto> request) {
         rabbitMsgIdService.sendMsgId(msgId, "/data/defenceareaList", "报警主机子系统及防区信息同步");
         LogUtils.BASE_INFO_DEFENCEAREA.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "报警主机子系统及防区信息同步:/api/data/defenceareaList", branchId, msgId, JSONArray.toJSONString(request));
         ReceiveErrorDto errorDto = ReceiveErrorDto.success();

+ 21 - 87
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java

@@ -5,12 +5,8 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
 import com.xunmei.common.core.domain.mediator.domain.*;
@@ -18,26 +14,26 @@ import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.IDHelper;
-import com.xunmei.mediator.api.mapper.*;
+import com.xunmei.mediator.api.mapper.MediatorAlarmRuleExpressMapper;
+import com.xunmei.mediator.api.mapper.MediatorAlarmRuleMapper;
+import com.xunmei.mediator.api.mapper.MediatorAlarmSystemFieldMapper;
+import com.xunmei.mediator.api.mapper.MediatorTimeTemplateMapper;
 import com.xunmei.mediator.domain.dto.redis.RedisKey;
-import com.xunmei.mediator.util.RedisUtil;
-import com.xunmei.system.api.RemoteDeviceService;
 import com.xunmei.system.api.RemoteOrgService;
-import com.xunmei.system.api.domain.SysDevice;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.north.MediatorDeviceData;
 import com.xunmei.system.api.domain.north.MediatorProductDevice;
 import com.xunmei.system.api.domain.north.NorthError;
-import com.xunmei.system.api.dto.device.DeviceData;
 import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.enums.*;
+import com.xunmei.system.api.enums.DataType;
+import com.xunmei.system.api.enums.DeviceType;
+import com.xunmei.system.api.enums.ElectricityMeterAttributes;
+import com.xunmei.system.api.enums.ProductTypeEnum;
 import com.xunmei.system.api.util.LogUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.scheduling.annotation.Async;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -63,7 +59,7 @@ import java.util.stream.Collectors;
 public class EquipmentSyncService {
 
     @Autowired
-    private RedisTemplate redisTemplate;
+    private StringRedisTemplate stringRedisTemplate;
     @Autowired
     private RemoteOrgService orgService;
     @Autowired
@@ -93,17 +89,17 @@ public class EquipmentSyncService {
      * @param
      */
     @Transactional(rollbackFor = Exception.class)
-    public void saveDeviceData(List<DeviceReceivePageDto> pages) {
+    public void saveDeviceData( List<DeviceDto> pages,String msgId, String branchId) {
 
         String key = "base_info_equipment_" + DateUtil.format(new Date(), "yyyy-MM-dd");
         /**
          * 主机可能会在短时间发送两次不同包,但是数据一样的信息过来
          * 导致第一次执行正常,第二次执行报错。故添加一个判断限制在10分钟内有多个请求
          */
-        Boolean isExist = redisTemplate.hasKey(key);
-        if (!isExist) {
-            this.redisTemplate.opsForValue().set(key, true);
-            this.redisTemplate.expire(key, 10, TimeUnit.MINUTES);
+        Boolean isExist = stringRedisTemplate.hasKey(key);
+        if (Boolean.FALSE.equals(isExist)) {
+            this.stringRedisTemplate.opsForValue().set(key, key);
+            this.stringRedisTemplate.expire(key, 10, TimeUnit.MINUTES);
         } else {
             return;
         }
@@ -125,15 +121,9 @@ public class EquipmentSyncService {
         Map<String, MediatorCategory> categorys = new HashMap<>();
         List<IotDevice> olds = new ArrayList();
         List<IotDevice> list = new ArrayList<>();
-        for (int i = 0; i < pages.size(); i++) {
-            DeviceReceivePageDto page = pages.get(i);
-            if (page == null) {
-                continue;
-            }
-            Map<String, List<IotDevice>> rel = analysisDeviceList(page, orgs, categorys);
-            olds.addAll(rel.get("olds"));
-            list.addAll(rel.get("list"));
-        }
+        Map<String, List<IotDevice>> rel = analysisDeviceList(pages, orgs, categorys,msgId,branchId);
+        olds.addAll(rel.get("olds"));
+        list.addAll(rel.get("list"));
         //第一步逻辑删除数据,逻辑删除
         this.iIotDeviceService.updateDeviceDeleted();
 
@@ -168,18 +158,15 @@ public class EquipmentSyncService {
     /**
      * 解析每一页的数据
      *
-     * @param page
+     * @param
      * @return
      */
-    private Map<String, List<IotDevice>> analysisDeviceList(DeviceReceivePageDto page, Map<String, Map<String, Object>> orgs, Map<String, MediatorCategory> categorys) {
+    private Map<String, List<IotDevice>> analysisDeviceList(List<DeviceDto> dtos, Map<String, Map<String, Object>> orgs, Map<String, MediatorCategory> categorys,String msgId, String branchId) {
         Map<String, List<IotDevice>> rel = new HashMap<>();
 
         /**
          * 验证数据正确性,有错误的数据,存储到错误数据中
          */
-        String msgId = page.getMsgId();
-        String branchId = page.getBranchId();
-        List<DeviceDto> dtos = page.getData();
         Iterator var2 = dtos.iterator();
         List<NorthError> errors = new ArrayList<>();
         List<IotDevice> list = new ArrayList<>();
@@ -393,59 +380,6 @@ public class EquipmentSyncService {
         return map;
     }
 
-    /**
-     * 按页码缓存数据,且判断数据是否已经完整
-     *
-     * @param pageData
-     * @return
-     */
-    public List<DeviceReceivePageDto> isCompleted(DeviceReceivePageDto pageData) {
-        List<DeviceReceivePageDto> pages = new ArrayList<>();
-        String guid = pageData.getPackageGuid();
-        Long currPage = pageData.getCurrPage();
-        Long totalPage = pageData.getTotalPage();
-
-        /**
-         * 生成每一页的redis key值
-         */
-        String key = guid + "_" + currPage;
-
-        /**
-         * 判断是否已经获取到该分页数据,如果已获取到,则直接返回
-         */
-        Boolean isExist = redisTemplate.hasKey(key);
-
-        if (!isExist) {
-            String data = JSON.toJSONString(pageData);
-            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 pages;
-            }
-        }
-        /**
-         * 已经获取所有分页,
-         */
-
-        for (int i = 1; i <= totalPage; i++) {
-            String ak = guid + "_" + i;
-            Object obj = this.redisTemplate.opsForValue().get(ak);
-            if (ObjectUtil.isNotEmpty(obj)) {
-                DeviceReceivePageDto page = JSON.parseObject((String) obj, DeviceReceivePageDto.class);
-                pages.add(page);
-                this.redisTemplate.delete(ak);
-            }
-        }
-
-        return pages;
-    }
-
-
     @Transactional(rollbackFor = Exception.class)
     public void analysisItem(MediatorDeviceData deviceData) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -655,7 +589,7 @@ public class EquipmentSyncService {
                 log.info("机构名称:{}, 设备id:{},设备名称:{} 不再接收{}类型报警", productDevice.getOrgName(), productDevice.getDeviceId(), productDevice.getDeviceName(), type.getText());
                 continue;
             }*/
-            boolean equals = Boolean.TRUE.equals(redisTemplate.hasKey(strKey));
+            boolean equals = Boolean.TRUE.equals(stringRedisTemplate.hasKey(strKey));
             if (equals) {
                 LogUtils.STATUS_INFO_DEVICE_DATA.info("机构名称:{}, 设备id:{},设备名称:{} 不再接收{}类型报警", productDevice.getOrgName(), productDevice.getDeviceId(), productDevice.getDeviceName(), type.getText());
                 continue;

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

@@ -2,7 +2,8 @@ package com.xunmei.mediator.api.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.device.DeviceDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 
 import java.util.List;
@@ -28,7 +29,7 @@ public interface IIotDeviceService extends IService<IotDevice> {
 
     void batchInsertDevice(List<IotDevice> list);
 
-    ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner);
+    ReceiveErrorDto saveData(DataPageDto<DeviceDto> deviceReceivePageDto, String msgId, String branchId);
 
     List<IotDevice> findByCategory(Long categoryId);
 }

+ 3 - 2
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotAlarmSubsystemService.java

@@ -3,7 +3,8 @@ package com.xunmei.mediator.api.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
-import com.xunmei.system.api.dto.protection.DefenceareaPageDto;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.protection.DefenceAreaDto;
 import com.xunmei.system.api.dto.protection.ProtectionEditDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 
@@ -18,7 +19,7 @@ import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 public interface IotAlarmSubsystemService extends IService<IotAlarmSubsystem> {
 
 
-    ReceiveErrorDto defenceAreaList(DefenceareaPageDto request, String branchId, String msgId);
+    ReceiveErrorDto defenceAreaList(DataPageDto<DefenceAreaDto> request, String branchId, String msgId);
 
     IotAlarmSubsystem findByCodeAndOrgId(String defenceAreaCode, Long orgId);
 

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

@@ -21,14 +21,19 @@ import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.common.redis.utils.RedisUtils;
+import com.xunmei.mediator.api.mapper.IotAlarmSubsystemMapper;
 import com.xunmei.mediator.api.mapper.MediatorTimeTemplateMapper;
 import com.xunmei.mediator.api.mapper.ProtectionLogMapper;
-import com.xunmei.mediator.api.mapper.IotAlarmSubsystemMapper;
 import com.xunmei.mediator.api.service.*;
+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.protection.*;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.protection.DefenceAreaDto;
+import com.xunmei.system.api.dto.protection.ProtectionEditDto;
+import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
+import com.xunmei.system.api.dto.protection.SensorDto;
 import com.xunmei.system.api.enums.AlarmRuleExpressOperateEnum;
 import com.xunmei.system.api.enums.DataType;
 import com.xunmei.system.api.enums.ProtectionStatus;
@@ -37,7 +42,6 @@ import com.xunmei.system.api.vo.SysOrgVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -46,7 +50,6 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -66,8 +69,6 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
     @Resource
     RemoteOrgService orgService;
     @Resource
-    RedisTemplate redisTemplate;
-    @Resource
     NorthStatisticsSyncService northStatisticsSyncService;
     @Resource
     IMediatorCategoryService categoryService;
@@ -83,7 +84,6 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
     private IMediatorAlarmRuleSourceService alarmRuleSourceService;
     @Resource
     private IMediatorAlarmRuleExpressService alarmRuleExpressService;
-
     @Override
     public IotAlarmSubsystem findByCodeAndOrgId(String defenceAreaCode, Long orgId) {
         return lambdaQuery()
@@ -211,7 +211,7 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
         this.saveOrUpdate(protection);
         this.northStatisticsSyncService.saveOrUpdateBusinessCountByDateAndDataType(DateUtil.today(), DataType.protectionStatusCount.getIndex(), 1L);
         this.saveProtectionLog(protection);
-        this.writeValue(device, protection);
+        //this.writeValue(device, protection);
 
 /*
         //动环告警处理
@@ -247,7 +247,7 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
         protectionLogMapper.insert(protectionLog);
     }
 
-    public void writeValue(final IotDevice device, final IotAlarmSubsystem protection) {
+   /* public void writeValue(final IotDevice device, final IotAlarmSubsystem protection) {
         Map data = null;
 
         try {
@@ -259,7 +259,7 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
         String key = this.toKey(device.getOrgId(), Integer.parseInt(device.getDeviceType()));
         this.redisTemplate.boundHashOps(key).put(device.getId(), data);
         log.info("[ {} ][ {} ][ {} ] 数据 ==> [ {} ]", new Object[]{device.getOrgId(), device.getDeviceType(), device.getId(), data});
-    }
+    }*/
 
     private String toKey(final Long orgId, Integer deviceType) {
         return "device_" + orgId + "_" + deviceType + "_data_map";
@@ -371,8 +371,9 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
 
     }
 
+
     @Override
-    public ReceiveErrorDto defenceAreaList(DefenceareaPageDto request, String branchId, String msgId) {
+    public ReceiveErrorDto defenceAreaList(DataPageDto<DefenceAreaDto> request, String branchId, String msgId) {
         String packageGuid = request.getPackageGuid();
         if (StringUtils.isEmpty(packageGuid)) {
             return ReceiveErrorDto.error("packageGuid参数非法");
@@ -385,22 +386,12 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
         if (CollectionUtils.isEmpty(request.getData())) {
             return ReceiveErrorDto.error("报警主机子系统及防区信息为空");
         }
-        boolean completed = this.isCompleted(request);
-        LogUtils.BASE_INFO_DEFENCEAREA.info("判断是否获取全部报警主机子系统及防区信息分页数据:{}", completed);
-        if (!completed) {
+        final List<DefenceAreaDto> defenceareaList = RedisCheckRepeatDataUtil.isCompleted(request,DefenceAreaDto.class);
+        LogUtils.BASE_INFO_DEFENCEAREA.info("判断是否获取全部报警主机子系统及防区信息分页数据:{}", defenceareaList.size() > 0);
+        if (ObjectUtil.isEmpty(defenceareaList)) {
             return ReceiveErrorDto.error("尚未获取全部报警主机子系统及防区信息分页数据,暂不处理!");
         }
         LogUtils.BASE_INFO_DEFENCEAREA.info("获取全部的报警主机子系统及防区信息,开始数据处理界面!");
-        List<DefenceAreaDto> defenceareaList = new ArrayList<>();
-        for (int i = 1; i <= totalPage; i++) {
-            String ak = packageGuid + "_" + i;
-            Object obj = this.redisTemplate.opsForValue().get(ak);
-            if (ObjectUtil.isNotEmpty(obj)){
-                List<DefenceAreaDto> defenceareaDtos = JSON.parseArray((String) obj, DefenceAreaDto.class);
-                defenceareaList.addAll(defenceareaDtos);
-                redisTemplate.delete(ak);
-            }
-        }
         this.northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.protectionCount.getIndex(), defenceareaList.size(), false);
         new Thread(() -> {
             this.saveAndUpdate(defenceareaList, branchId, msgId);
@@ -516,50 +507,26 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
                 }
             }
             SysOrgVO finalOrg = org;
-            IotDevice device = null;
             List<IotDevice> devicesa = devices.stream().filter(r -> r.getEquipmentCode().equals(dto.getAlarmHostCode()) && r.getOrgId().equals(finalOrg.getId())).collect(Collectors.toList());
-            if (devicesa == null || devicesa.size() == 0) {
+            if (devicesa.size() == 0) {
                 error = new NorthError(msgId, branchId, "/api/data/defenceareaList"
                         , dto, "参数非法:没有找到报警主机");
                 errors.add(error);
                 continue;
             }
             Map<String, Object> map = this.protectionBuild(dto, org);
-            if (map != null) {
-                protectionList.add((IotAlarmSubsystem) map.get("protection"));
-                List<IotAlarmDefenceArea> list = (List<IotAlarmDefenceArea>) map.get("sensorList");
-                if (list != null && list.size() > 0) {
-                    sensorList.addAll(list);
-                }
+            protectionList.add((IotAlarmSubsystem) map.get("protection"));
+            List<IotAlarmDefenceArea> list = (List<IotAlarmDefenceArea>) map.get("sensorList");
+            if (ObjectUtil.isNotEmpty(list)) {
+                sensorList.addAll(list);
             }
 
         }
-        try {
-            //删除传感器表中的数据
-            defenceAreService.remove(new LambdaQueryWrapper<>());
-        } catch (Exception e) {
-            log.error("删除传感器表中的数据失败,失败原因:" + e.getMessage(), e);
-        }
-
-
-        if (errors.size() > 0) {
-            northErrorService.saveErrorData(errors);
-        }
-        try {
-            baseMapper.updateAllDelete();
-        } catch (Exception e) {
-            log.error("修改子系统为逻辑删除失败,失败原因:" + e.getMessage(), e);
-        }
-        try {
-            this.saveOrUpdateBatch(protectionList);
-        } catch (Exception e) {
-            log.error("更新子系统数据失败,失败原因:" + e.getMessage(), e);
-        }
-        try {
-            defenceAreService.saveOrUpdateBatch(sensorList);
-        } catch (Exception e) {
-            log.error("更新t_sensor表传感器数据失败,失败原因:" + e.getMessage(), e);
-        }
+        defenceAreService.remove(new LambdaQueryWrapper<>());
+        northErrorService.saveErrorData(errors);
+        baseMapper.updateAllDelete();
+        this.saveOrUpdateBatch(protectionList);
+        defenceAreService.saveOrUpdateBatch(sensorList);
         this.northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.protectionCount.getIndex(), defenceareaList.size(), true);
     }
 
@@ -574,7 +541,9 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
             protection.setId(IDHelper.id());
             protection.setCreateTime(new Date());
             protection.setStatus(2);
+            protection.setSource(1);
         }
+        protection.setUpdateTime(new Date());
         protection.setDeleted(0);
         protection.setAlarmHostCode(dto.getAlarmHostCode());
         protection.setCode(dto.getDefenceareaCode());
@@ -598,13 +567,13 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
                 sensor.setOrgId(org.getId());
                 sensor.setOrgName(org.getName());
                 sensor.setOrgPath(org.getPath());
+                sensor.setOrganizationGuid(dto.getOrganizationGuid());
                 sensor.setDefenceAreaIndex(sensorDto.getInputIndex());
                 sensor.setDefenceAreaName(sensorDto.getInputName());
                 //sensor.setModuleAddress(sensorDto.getModuleAddress());
                 sensor.setSensorType(sensorDto.getSensorType());
                 sensor.setSensorTypeName(sensorDto.getSensorTypeName());
-                //sensor.setStrDeviceId(dto.getDefenceAreaCode() + sensorDto.getInputIndex());
-                String strDeviceId = dto.getDefenceareaCode() + sensorDto.getInputIndex();
+                sensor.setDeleted(0);
                 final Optional<IotAlarmDefenceArea> optional = sensorList.stream()
                         .filter(r -> r.getOrgId().equals(org.getId()))
                         .filter(r -> r.getAlarmHostCode().equals(dto.getAlarmHostCode()))
@@ -614,11 +583,14 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
                 if (optional.isPresent()) {
                     final IotAlarmDefenceArea iotDefenceAre = optional.get();
                     BeanHelper.copyProperties(iotDefenceAre, sensor);
+                    iotDefenceAre.setUpdateTime(LocalDateTime.now());
                     list.add(iotDefenceAre);
                 } else {
                     sensor.setId(IDHelper.id());
                     sensor.setState("unKnown");
                     sensor.setStateText("未知");
+                    sensor.setCreateTime(LocalDateTime.now());
+                    sensor.setDeleted(0);
                     list.add(sensor);
                 }
             }
@@ -629,39 +601,5 @@ public class IotAlarmSubSystemServiceImpl extends ServiceImpl<IotAlarmSubsystemM
 
         return map;
     }
-
-    public boolean isCompleted(DefenceareaPageDto request) {
-        String guid = request.getPackageGuid();
-        Long currPage = request.getCurrPage();
-        Long totalPage = request.getTotalPage();
-        List<DefenceAreaDto> defenceareaList = request.getData();
-
-        /**
-         * 生成每一页的redis key值
-         */
-        String key = guid + "_" + currPage;
-
-        /**
-         * 判断是否已经获取到该分页数据,如果已获取到,则直接返回
-         */
-        Boolean isExist = redisTemplate.hasKey(key);
-
-        if (!isExist) {
-            String data = JSON.toJSONString(defenceareaList);
-            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 false;
-            }
-        }
-        return true;
-    }
 }
 

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

@@ -1,16 +1,18 @@
 package com.xunmei.mediator.api.service.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
 import com.xunmei.mediator.api.mapper.IotDeviceMapper;
 import com.xunmei.mediator.api.service.EquipmentSyncService;
 import com.xunmei.mediator.api.service.IIotDeviceService;
 import com.xunmei.mediator.api.service.NorthStatisticsSyncService;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
+import com.xunmei.mediator.util.RedisCheckRepeatDataUtil;
+import com.xunmei.system.api.dto.DataPageDto;
+import com.xunmei.system.api.dto.device.DeviceDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.enums.DataType;
 import com.xunmei.system.api.util.LogUtils;
@@ -37,6 +39,7 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
     private EquipmentSyncService equipmentSyncService;
     @Resource
     private NorthStatisticsSyncService northStatisticsSyncService;
+
     @Override
     public IotDevice findResult(String channelCode, String equipmentCode, Long orgId) {
         return lambdaQuery()
@@ -48,7 +51,7 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
     }
 
     @Override
-    public IotDevice findByHostCode(String equipmentCode,Long orgId) {
+    public IotDevice findByHostCode(String equipmentCode, Long orgId) {
         return lambdaQuery()
                 .eq(IotDevice::getOrgId, orgId)
                 .eq(IotDevice::getEquipmentCode, equipmentCode)
@@ -60,9 +63,9 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
     @Transactional(rollbackFor = Exception.class)
     public void updateDeviceDeleted() {
         final LambdaUpdateWrapper<IotDevice> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.eq(IotDevice::getSource,1);
-        wrapper.in(IotDevice::getCategoryId,3713671510851584L,3713671920926720L,3713672073773056L,3713672266842112L);
-        wrapper.set(IotDevice::getDeleted,1);
+        wrapper.eq(IotDevice::getSource, 1);
+        wrapper.in(IotDevice::getCategoryId, 3713671510851584L, 3713671920926720L, 3713672073773056L, 3713672266842112L);
+        wrapper.set(IotDevice::getDeleted, 1);
         update(wrapper);
     }
 
@@ -78,7 +81,7 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
     }
 
     @Override
-    public ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner) {
+    public ReceiveErrorDto saveData(DataPageDto<DeviceDto> deviceReceivePageDto, String msgId, String branchId) {
         String packageGuid = deviceReceivePageDto.getPackageGuid();
         if (StringUtils.isEmpty(packageGuid)) {
             return ReceiveErrorDto.error("packageGuid参数非法");
@@ -91,18 +94,18 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
         if (org.apache.commons.collections4.CollectionUtils.isEmpty(deviceReceivePageDto.getData())) {
             return ReceiveErrorDto.error("设备信息数据为空");
         }
-        List<DeviceReceivePageDto> list = equipmentSyncService.isCompleted(deviceReceivePageDto);
+        final List<DeviceDto> list = RedisCheckRepeatDataUtil.isCompleted(deviceReceivePageDto, DeviceDto.class);
         LogUtils.BASE_INFO_EQUIPMENT.info("设备数据判断是否获取全部分页数据:{}", list.size());
-        if (list.size() > 0) {
+        if (ObjectUtil.isNotEmpty(list)) {
             LogUtils.BASE_INFO_EQUIPMENT.info("设备数据判断是否获取全部分页数据,开始数据处理界面!");
             northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.deviceCount.getIndex(), deviceReceivePageDto.getData().size(), false);
-            equipmentSyncService.saveDeviceData(list);
+            equipmentSyncService.saveDeviceData(list, msgId, branchId);
         }
         return ReceiveErrorDto.success();
     }
 
     @Override
     public List<IotDevice> findByCategory(Long categoryId) {
-        return lambdaQuery().eq(IotDevice::getCategoryId,categoryId).eq(IotDevice::getDeleted,0).list();
+        return lambdaQuery().eq(IotDevice::getCategoryId, categoryId).eq(IotDevice::getDeleted, 0).list();
     }
 }

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

@@ -2,8 +2,6 @@ package com.xunmei.mediator.api.service.impl;
 
 import cn.hutool.core.util.NumberUtil;
 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;
@@ -18,8 +16,6 @@ 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;
@@ -30,14 +26,10 @@ 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;
 
 /**
@@ -59,8 +51,6 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
     private NorthErrorService northErrorService;
     @Autowired
     private IIotDeviceService iotDeviceService;
-    @Autowired
-    private RedisCheckRepeatDataUtil redisCheckRepeatDataUtil;
 
     @Override
     public ReceiveErrorDto saveData(DataPageDto<DvrDiskPageDto> request, String msgId, String branchId) throws Exception {
@@ -68,7 +58,7 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
         ReceiveErrorDto dto = CheckDataUtil.checkObjFieldIsNull(request);
         if (dto.getSuccess()) {
             //分页数据的存取
-            List<DvrDiskPageDto> dvrdiskPageLists = redisCheckRepeatDataUtil.isCompleted(request, DvrDiskPageDto.class);
+            List<DvrDiskPageDto> dvrdiskPageLists = RedisCheckRepeatDataUtil.isCompleted(request, DvrDiskPageDto.class);
 
             log.info("判断是否获取DVR硬盘空间全部信息分页数据:{}", dvrdiskPageLists.size() > 0 ? true : false);
             if (dvrdiskPageLists.size() > 0) {

+ 21 - 26
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotSensorServiceImpl.java

@@ -1,29 +1,29 @@
 package com.xunmei.mediator.api.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.domain.iot.domain.IotSensorLog;
-import com.xunmei.common.core.util.BeanHelper;
+import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.mediator.api.mapper.IotSensorMapper;
-import com.xunmei.mediator.api.service.*;
+import com.xunmei.mediator.api.service.EquipmentSyncService;
+import com.xunmei.mediator.api.service.IotSensorLogService;
+import com.xunmei.mediator.api.service.IotSensorService;
+import com.xunmei.mediator.api.service.NorthErrorService;
 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.MediatorDeviceData;
-import com.xunmei.system.api.domain.north.MediatorDeviceDataLog;
 import com.xunmei.system.api.domain.north.NorthError;
 import com.xunmei.system.api.dto.DataPageDto;
 import com.xunmei.system.api.dto.SensorDto;
 import com.xunmei.system.api.dto.SensorStatusDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
-import com.xunmei.system.api.enums.ElectricityMeterAttributes;
+import com.xunmei.system.api.util.LogUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -53,8 +53,6 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
     @Resource
     private IotSensorLogService iotSensorLogService;
     @Resource
-    private RedisCheckRepeatDataUtil redisCheckRepeatDataUtil;
-    @Resource
     private EquipmentSyncService equipmentSyncService;
 
     @Override
@@ -100,7 +98,7 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
                         , status, "对应设备不存在:" + status.getDeviceCode()));
                 continue;
             }
-            buildSensorAndLog(sensorList,sensorLogList, optional.get());
+            buildSensorAndLog(sensorList, sensorLogList, optional.get());
            /* MediatorDeviceData deviceData = new MediatorDeviceData();
             deviceData.setDeviceName(status.getDeviceName());
             deviceData.setOrgId(org.getId());
@@ -155,17 +153,17 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
 
         if (dto.getSuccess()) {
             //分页数据的存取
-            final List<SensorDto> data = redisCheckRepeatDataUtil.isCompleted(request, SensorDto.class);
+            final List<SensorDto> data = RedisCheckRepeatDataUtil.isCompleted(request, SensorDto.class);
 
-            log.info("判断是否获取通用传感器全部信息分页数据:{}", data.size() > 0);
-            if (data.size() == 0) {
+            LogUtils.DIRECT_HOST_SENSOR.info("判断是否获取通用传感器全部信息分页数据:{}", data.size() > 0);
+            if (ObjectUtil.isEmpty(data)) {
                 return dto;
             }
 
-            new Thread(() -> {
+           /* new Thread(() -> {
                 //删除直连主机传感器一个月前的状态数据
                 // productDeviceMapper.deleteDirectHostHistory(DateUtil.offset(new Date(), DateField.MONTH, -1));
-            }).start();
+            }).start();*/
 
             List<Long> deletedDeviceIds = new ArrayList<>();
             List<IotSensor> devices = convertToDomain(data, msgId, branchId, deletedDeviceIds);
@@ -212,12 +210,9 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
                 continue;
             }
             uniqueSet.add(key);
-
             List<IotSensor> exists = productDeviceMap.get(key);
             domain.setId(IDHelper.id());
-           /* domain.setOnline(DeviceOnlineStatus.UNKNOW.ordinal());
-            domain.setIsAlarm(DeviceAlarmStatus.NORMAL.getStatus());
-            domain.setDoStatus(0);*/
+            domain.setDeviceType(sensorDto.getDeviceType());
             domain.setDeleted(0);
             domain.setCreateTime(LocalDateTime.now());
 
@@ -251,26 +246,26 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
         return baseMapper.selectList(new LambdaQueryWrapper<IotSensor>()
                         .eq(IotSensor::getSource, 1))
                 .stream()
-                .collect(Collectors.groupingBy(c -> c.getOrgId().toString()));
+                .collect(Collectors.groupingBy(c -> c.getOrgId()+c.getDeviceCode()));
     }
 
     private Long convertDeviceType(String deviceCode) {
         Long type = null;
         switch (deviceCode) {
             case "4183"://温湿度
-                type = 3712195941285888L; //todo
+                type = CategoryDataEnum.HUMITURE_SENSOR.getId(); //todo
+                break;
+            case "4181"://红外
+                type = CategoryDataEnum.INFRARED_SENSOR.getId();
                 break;
-//            case "4181"://红外
-//                type = 3713672266842116L;
-//                break;
             case "4182": //烟感
-                type = 3712194930442240L;
+                type = CategoryDataEnum.SMOKE_SENSOR.getId();
                 break;
             case "4184": //水浸
-                type = 3712196701503488L;
+                type = CategoryDataEnum.WATER_SENSOR.getId();
                 break;
             case "4160"://智能电表
-                type = 3712198166114160L;
+                type = CategoryDataEnum.AMMETER_SENSOR.getId();
         }
 
         return type;

+ 70 - 72
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java

@@ -1,72 +1,75 @@
 package com.xunmei.mediator.util;
 
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
+import com.xunmei.common.core.utils.SpringUtils;
 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 org.springframework.data.redis.core.StringRedisTemplate;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
-@Service
 public class RedisCheckRepeatDataUtil {
-    @Autowired
-    private RedisTemplate redisTemplate;
-    @Autowired
-    RedisUtil redisUtil;
+
+    private static final StringRedisTemplate redisTemplate = SpringUtils.getBean(StringRedisTemplate.class);
+
     /**
      * 验证是否在段时间内收到重复的数据
+     *
      * @param key
      * @param value
      * @return
      */
-    public boolean checkData (String key,String value){
+    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)){
+        if (redisTemplate.hasKey(key)) {
+            String val = (String) 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);
+                    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);
+                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);
+            redisTemplate.expire(key, 60, TimeUnit.MINUTES);
         }
         return flag;
     }
 
-    public boolean checkData (String key,String value,int timeOut){
+    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)){
+        if (Boolean.TRUE.equals(redisTemplate.hasKey(key))) {
+            String val = (String) 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) {
+                        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) {
+                    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) {
+                redisTemplate.expire(key, timeOut, TimeUnit.MINUTES);
             }
         }
         return flag;
@@ -74,55 +77,50 @@ public class RedisCheckRepeatDataUtil {
 
     /**
      * 分页数据数据在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();
+    public static <T> List<T> isCompleted(DataPageDto<T> request, Class<T> clazz) {
+        String packageGuid = 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);
+        //生成当前页的redis key值,判断是否已经获取到该分页数据,
+        //若没有获取到,则存入当前页数据,获取到了则继续判断是否拿到所有的数据,
+        //如果拿到了所有的数据则开始处理数据
+        String currPageKey = packageGuid + "_" + currPage;
 
-        if(!isExist){
+        Boolean isExist = redisTemplate.hasKey(currPageKey);
+        if (Boolean.FALSE.equals(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;
-            }
+            redisTemplate.opsForValue().set(currPageKey, data);
+            redisTemplate.expire(currPageKey, 1, TimeUnit.DAYS);
         }
-        //数据完整了将数据取出
+        List<String> allPageKeyList = new ArrayList<>();
         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);
-            }
+            String everyPageKey = packageGuid + "_" + i;
+            allPageKeyList.add(everyPageKey);
         }
-        for (int i = 1; i <= totalPage; i++) {
-            String ak = guid + "_"+i;
-            this.redisUtil.removeByKey(ak);
+        //判断是否拿到所有的数据
+        final List<Boolean> list = allPageKeyList.stream().map(key -> redisTemplate.hasKey(key)).distinct().collect(Collectors.toList());
+        if (list.contains(Boolean.FALSE)) {
+             return ListUtil.empty();
         }
 
-        return resultList;
+        return allPageKeyList.stream().map(k -> {
+            String obj = redisTemplate.opsForValue().get(k);
+            if (ObjectUtil.isNotEmpty(obj)) {
+                final List<T> ts = JSON.parseArray(obj, clazz);
+                redisTemplate.delete(k);
+                return ts;
+            }
+            return null;
+        }).filter(Objects::nonNull).flatMap(Collection::stream).collect(Collectors.toList());
+
     }
 }

+ 0 - 9
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java

@@ -14,21 +14,12 @@ import com.xunmei.common.security.annotation.InnerAuth;
 import com.xunmei.system.api.domain.SysDevice;
 import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.domain.SysOrg;
-import com.xunmei.system.api.dto.DataPageDto;
-import com.xunmei.system.api.dto.SensorDto;
-import com.xunmei.system.api.dto.SensorStatusDto;
 import com.xunmei.system.api.dto.SysDeviceInnerListDto;
-import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
-import com.xunmei.system.api.util.LogUtils;
 import com.xunmei.system.service.ISysDictDataService;
 import com.xunmei.system.service.ISysDictTypeService;
 import com.xunmei.system.service.ISysOrgService;
 import com.xunmei.system.util.DeviceExport;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;

+ 0 - 6
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysDeviceService.java

@@ -7,13 +7,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.system.api.domain.SysDevice;
-import com.xunmei.system.api.dto.DataPageDto;
-import com.xunmei.system.api.dto.SensorDto;
-import com.xunmei.system.api.dto.SensorStatusDto;
 import com.xunmei.system.api.dto.SysDeviceInnerListDto;
-import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.vo.area.HostVO;
 
 import javax.servlet.http.HttpServletResponse;

+ 0 - 31
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeviceServiceImpl.java

@@ -2,48 +2,20 @@ package com.xunmei.system.service.impl;
 
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.text.ParseException;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.common.utils.CollectionUtils;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
-import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
-import com.xunmei.common.core.domain.mediator.vo.EquipmentOrgVo;
 import com.xunmei.common.core.exception.ServiceException;
-import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.utils.DateUtils;
-import com.xunmei.common.core.utils.IDHelper;
-import com.xunmei.common.core.utils.SpringUtils;
-import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.system.api.RemoteMediatorService;
-import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteProtectionService;
 import com.xunmei.system.api.domain.SysDevice;
-import com.xunmei.system.api.domain.SysDictData;
-import com.xunmei.system.api.domain.SysOperLog;
 import com.xunmei.system.api.domain.SysOrg;
-import com.xunmei.system.api.domain.north.MediatorDeviceData;
-import com.xunmei.system.api.domain.north.MediatorDeviceDataLog;
-import com.xunmei.system.api.domain.north.NorthError;
 import com.xunmei.system.api.dto.*;
-import com.xunmei.system.api.dto.device.DeviceData;
-import com.xunmei.system.api.dto.device.DeviceDto;
-import com.xunmei.system.api.dto.device.DeviceReceivePageDto;
-import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
-import com.xunmei.system.api.enums.*;
-import com.xunmei.system.api.util.LogUtils;
 import com.xunmei.system.api.vo.ProtectionVO;
 import com.xunmei.system.mapper.SysOrgMapper;
 import com.xunmei.system.util.DeviceExport;
@@ -51,8 +23,6 @@ import com.xunmei.system.vo.area.AccessType;
 import com.xunmei.system.vo.area.HostVO;
 import com.xunmei.system.vo.area.VideoVO;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -65,7 +35,6 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.system.mapper.SysDeviceMapper;
 import com.xunmei.system.service.ISysDeviceService;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
 /**