Jelajahi Sumber

传感器相关:表名修改类名修改,代码提交

jingyuanchao 1 tahun lalu
induk
melakukan
51ab7427a2
25 mengubah file dengan 552 tambahan dan 554 penghapusan
  1. 0 15
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteDeviceService.java
  2. 0 30
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteMediatorService.java
  3. 0 25
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteDeviceFallbackFactory.java
  4. 0 40
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteMediatorFallbackFactory.java
  5. 51 52
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotSensor.java
  6. 95 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotSensorLog.java
  7. 1 1
      soc-modules/soc-modules-gen/src/main/java/com/xunmei/gen/util/CodeGenerators.java
  8. 4 10
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java
  9. 2 7
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/MediatorController.java
  10. 3 3
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/VideoDataController.java
  11. 17 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotSensorLogMapper.java
  12. 17 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotSensorMapper.java
  13. 2 8
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java
  14. 16 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotSensorLogService.java
  15. 23 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotSensorService.java
  16. 4 2
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceDetectionServiceImpl.java
  17. 1 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java
  18. 20 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotSensorLogServiceImpl.java
  19. 278 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotSensorServiceImpl.java
  20. 8 2
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/NorthErrorServiceImpl.java
  21. 5 0
      soc-modules/soc-modules-mediator/src/main/resources/mapper/IotSensorLogMapper.xml
  22. 5 0
      soc-modules/soc-modules-mediator/src/main/resources/mapper/IotSensorMapper.xml
  23. 0 16
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java
  24. 0 9
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysDeviceService.java
  25. 0 333
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeviceServiceImpl.java

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

@@ -25,21 +25,6 @@ import java.util.Map;
 public interface RemoteDeviceService {
     @GetMapping("/device/getInfoById")
     SysDevice getInfoById(@RequestParam("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @GetMapping("/device/findByHostCode/{code}")
-    SysDevice findByHostCode(@PathVariable("code") String code, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
     @GetMapping("/device/findList")
     R<List<SysDevice>> findList(@RequestParam("orgId") SysDeviceInnerListDto listDto, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/device/north/saveChannel")
-    ReceiveErrorDto saveChannel(@RequestBody Map<String, Object> dataMap, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @GetMapping("/device/findAlarmHostDevice/{categoryId}")
-    List<SysDevice> findAlarmHostDevice(@PathVariable("categoryId")Long categoryId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/device/north/saveDirectHost")
-    ReceiveErrorDto saveDirectHost(@RequestBody HashMap<String, Object> dataMap, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-    @PostMapping("/device/north/saveDirectHostStatus")
-    ReceiveErrorDto saveDirectHostStatus(HashMap<String, Object> dataMap,@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }

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

@@ -25,36 +25,6 @@ import java.util.List;
 @FeignClient(contextId = "remoteMediatorService", path = "/mediator", value = ServiceNameConstants.MEDIATOR_SERVICE, fallbackFactory = RemoteMediatorFallbackFactory.class)
 public interface RemoteMediatorService {
 
-    @PostMapping("/isCompleted")
-    List<DeviceReceivePageDto> isCompleted(@RequestBody DeviceReceivePageDto pageData, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/saveDeviceData")
-    void saveDeviceData(@RequestBody List<DeviceReceivePageDto> pageData, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @GetMapping("/saveOrUpdateBaseCountByDataType")
-    void saveOrUpdateBaseCountByDataType(@RequestParam("dataType") Integer dataType,
-                                         @RequestParam("size") int size,
-                                         @RequestParam("boo") boolean boo,
-                                         @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/saveErrorData")
-    void saveErrorData(@RequestBody List<NorthError> errors, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @GetMapping("/findCategoryByCodeAndParentId")
-    MediatorCategory findCategoryByCodeAndParentId(@RequestParam("code") String code, @RequestParam("parentId") long parentId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/saveOrUpdateDeviceData")
-    void saveOrUpdateDeviceData(@RequestBody List<MediatorDeviceData> deviceDataList, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/saveOrUpdateDeviceDataLog")
-    void saveOrUpdateDeviceDataLog(@RequestBody List<MediatorDeviceDataLog> deviceDataList, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PostMapping("/analysisDeviceDataItem")
-    void analysisDeviceDataItem(@RequestBody MediatorDeviceData deviceData, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-
     @PostMapping("/channelCacheDeal")
     AjaxResult channelCacheDeal();
-
-
 }

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

@@ -34,35 +34,10 @@ public class RemoteDeviceFallbackFactory implements FallbackFactory<RemoteDevice
             }
 
             @Override
-            public SysDevice findByHostCode(String code, String source) {
-                return null;
-            }
-
-            @Override
             public R<List<SysDevice>> findList(SysDeviceInnerListDto listDto, String source) {
                 return R.fail();
             }
 
-            @Override
-            public ReceiveErrorDto saveChannel(Map<String, Object> dataMap, String source) {
-                return null;
-            }
-
-            @Override
-            public List<SysDevice> findAlarmHostDevice(Long categoryId, String source) {
-                return null;
-            }
-
-            @Override
-            public ReceiveErrorDto saveDirectHost(HashMap<String, Object> dataMap, String source) {
-                return null;
-            }
-
-            @Override
-            public ReceiveErrorDto saveDirectHostStatus(HashMap<String, Object> dataMap, String source) {
-                return null;
-            }
-
         };
 
     }

+ 0 - 40
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteMediatorFallbackFactory.java

@@ -32,46 +32,6 @@ public class RemoteMediatorFallbackFactory implements FallbackFactory<RemoteMedi
         log.error("北向服务调用失败:{}", throwable.getMessage());
         return new RemoteMediatorService() {
             @Override
-            public List<DeviceReceivePageDto> isCompleted(DeviceReceivePageDto pageData, String source) {
-                return null;
-            }
-
-            @Override
-            public void saveDeviceData( List<DeviceReceivePageDto> pageData, String source) {
-
-            }
-
-            @Override
-            public void saveOrUpdateBaseCountByDataType(Integer dataType, int size, boolean boo, String source) {
-
-            }
-
-            @Override
-            public void saveErrorData(List<NorthError> errors, String source) {
-
-            }
-
-            @Override
-            public MediatorCategory findCategoryByCodeAndParentId(String code, long parentId, String source) {
-                return null;
-            }
-
-            @Override
-            public void saveOrUpdateDeviceData(List<MediatorDeviceData> deviceDataList, String source) {
-
-            }
-
-            @Override
-            public void saveOrUpdateDeviceDataLog(List<MediatorDeviceDataLog> deviceDataList, String source) {
-
-            }
-
-            @Override
-            public void analysisDeviceDataItem(MediatorDeviceData deviceData, String source) {
-
-            }
-
-            @Override
             public AjaxResult channelCacheDeal() {
                 return null;
             }

+ 51 - 52
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotSensor.java

@@ -1,8 +1,12 @@
 package com.xunmei.common.core.domain.iot.domain;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -11,94 +15,89 @@ import lombok.EqualsAndHashCode;
  * 
  * </p>
  *
- * @author test
- * @since 2024-02-20
+ * @author oygj
+ * @since 2024-02-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @TableName("iot_sensor")
+@ApiModel(value="IotSensor对象", description="")
 public class IotSensor implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 所属机构
-     */
+    @TableId("id")
+    private Long id;
+
+    @ApiModelProperty(value = "所属机构")
+    @TableField("org_id")
     private Long orgId;
 
-    /**
-     * 所属机构名称
-     */
+    @ApiModelProperty(value = "所属机构名称")
+    @TableField("org_name")
     private String orgName;
 
-    /**
-     * 所属机构path
-     */
+    @ApiModelProperty(value = "所属机构path")
+    @TableField("org_path")
     private String orgPath;
 
-    /**
-     * 视频物联网检测主机唯一标识
-     */
+    @ApiModelProperty(value = "视频物联网检测主机唯一标识,(此字段暂不可用)")
+    @TableField("host_code")
     private String hostCode;
 
-    /**
-     * 设备名称
-     */
+    @ApiModelProperty(value = "设备名称")
+    @TableField("device_name")
     private String deviceName;
 
-    /**
-     * 设备code
-     */
+    @ApiModelProperty(value = "设备code")
+    @TableField("device_code")
     private String deviceCode;
 
-    /**
-     * 设备类型编码
-     */
+    @ApiModelProperty(value = "传感器类型编码")
+    @TableField("category_id")
     private Long categoryId;
 
-    /**
-     * 资产设备id
-     */
+    @ApiModelProperty(value = "设备类型编码")
+    @TableField("device_type")
+    private String deviceType;
+
+    @ApiModelProperty(value = "资产设备id")
+    @TableField("device_id")
     private Long deviceId;
 
-    /**
-     * 属性信息数组
-     */
+    @ApiModelProperty(value = "属性信息数组")
+    @TableField("infos")
     private String infos;
 
-    /**
-     * 0:未删除,1:删除
-     */
+    @TableField("state")
+    private Integer state;
+
+    @ApiModelProperty(value = "最后一次状态更新时间")
+    @TableField("state_update_time")
+    private LocalDateTime stateUpdateTime;
+
+    @ApiModelProperty(value = "0:未删除,1:删除")
+    @TableField("deleted")
     private Integer deleted;
 
-    /**
-     * 来源,0:资产设备,1:iot推送
-     */
+    @ApiModelProperty(value = "来源,0:资产设备,1:iot推送")
+    @TableField("source")
     private Integer source;
 
-    /**
-     * 最后一次状态更新时间
-     */
-    private LocalDateTime statusUpdateTime;
-
-    /**
-     * 创建时间
-     */
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
     private LocalDateTime createTime;
 
-    /**
-     * 修改时间
-     */
+    @ApiModelProperty(value = "修改时间")
+    @TableField("update_time")
     private LocalDateTime updateTime;
 
-    /**
-     * 创建人
-     */
+    @ApiModelProperty(value = "创建人")
+    @TableField("create_by")
     private String createBy;
 
-    /**
-     * 修改人
-     */
+    @ApiModelProperty(value = "修改人")
+    @TableField("update_by")
     private String updateBy;
 
 

+ 95 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotSensorLog.java

@@ -0,0 +1,95 @@
+package com.xunmei.common.core.domain.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("iot_sensor_log")
+@ApiModel(value="IotSensorLog对象", description="")
+public class IotSensorLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Long id;
+
+    @TableId("iot_sensor_id")
+    private Long iotSensorId;
+
+    @ApiModelProperty(value = "所属机构")
+    @TableField("org_id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "所属机构名称")
+    @TableField("org_name")
+    private String orgName;
+
+    @ApiModelProperty(value = "所属机构path")
+    @TableField("org_path")
+    private String orgPath;
+
+    @ApiModelProperty(value = "视频物联网检测主机唯一标识")
+    @TableField("host_code")
+    private String hostCode;
+
+    @ApiModelProperty(value = "设备名称")
+    @TableField("device_name")
+    private String deviceName;
+
+    @ApiModelProperty(value = "设备code")
+    @TableField("device_code")
+    private String deviceCode;
+
+    @ApiModelProperty(value = "传感器类型编码")
+    @TableField("category_id")
+    private Long categoryId;
+
+    @ApiModelProperty(value = "属性信息数组")
+    @TableField("infos")
+    private String infos;
+
+    @TableField("state")
+    private Integer state;
+
+    @ApiModelProperty(value = "最后一次状态更新时间")
+    @TableField("state_update_time")
+    private LocalDateTime stateUpdateTime;
+
+    @ApiModelProperty(value = "来源,0:资产设备,1:iot推送")
+    @TableField("source")
+    private Integer source;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField("create_by")
+    private String createBy;
+
+    @ApiModelProperty(value = "修改人")
+    @TableField("update_by")
+    private String updateBy;
+
+
+}

+ 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_disk,iot_dvr_disk_log";
+    public static final String tableNames="iot_sensor,iot_sensor_log";
 
     public static void main(String[] args) {
         // 代码生成器

+ 4 - 10
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java

@@ -40,6 +40,8 @@ public class DataController {
     private RemoteDeviceService remoteDeviceService;
     @Resource
     private IotDeviceDetectionService networkDeviceDetectionService;
+    @Resource
+    private IotSensorService iotSensorService;
 
 
     /***
@@ -129,11 +131,7 @@ public class DataController {
         LogUtils.DIRECT_HOST_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "接受传感器通用设备信息同步:/api/data/sensorCommonList", branchId, msgId, JSON.toJSONString(sensors));
         ReceiveErrorDto errorDto = ReceiveErrorDto.success();
         try {
-            final HashMap<String, Object> dataMap = new HashMap<>();
-            dataMap.put("sensors", sensors);
-            dataMap.put("branchId", branchId);
-            dataMap.put("msgId", msgId);
-            errorDto = this.remoteDeviceService.saveDirectHost(dataMap, SecurityConstants.INNER);
+            errorDto = this.iotSensorService.saveDirectHost(sensors, branchId, msgId);
         } catch (Exception e) {
             e.printStackTrace();
             LogUtils.DIRECT_HOST_SENSOR.error("保存失败,{}", e);
@@ -150,11 +148,7 @@ public class DataController {
         LogUtils.DIRECT_HOST_SENSOR_STATUS.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "接受传感器通用设备实时状态信息同步:/api/status/sensorCommon", branchId, msgId, JSON.toJSONString(statuses));
         ReceiveErrorDto errorDto = ReceiveErrorDto.success();
         try {
-            final HashMap<String, Object> dataMap = new HashMap<>();
-            dataMap.put("sensors", statuses);
-            dataMap.put("branchId", branchId);
-            dataMap.put("msgId", msgId);
-            errorDto = this.remoteDeviceService.saveDirectHostStatus(dataMap, SecurityConstants.INNER);
+            errorDto = this.iotSensorService.saveDirectHostStatus(statuses, branchId, msgId);
         } catch (Exception e) {
             e.printStackTrace();
             LogUtils.DIRECT_HOST_SENSOR_STATUS.error("保存失败,{}", e);

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

@@ -22,7 +22,7 @@ import java.util.List;
 @RestController("/mediator")
 public class MediatorController {
 
-    @Resource
+   /* @Resource
     private EquipmentSyncService equipmentSyncService;
     @Resource
     private NorthStatisticsSyncService northStatisticsSyncService;
@@ -77,11 +77,6 @@ public class MediatorController {
     @PostMapping("/saveOrUpdateDeviceDataLog")
     void saveOrUpdateDeviceDataLog(@RequestBody List<MediatorDeviceDataLog> deviceDataList) {
         deviceDataLogService.saveOrUpdateBatch(deviceDataList);
-    }
+    }*/
 
-    @InnerAuth
-    @PostMapping("/analysisDeviceDataItem")
-    void analysisDeviceDataItem(@RequestBody MediatorDeviceData deviceData) throws ParseException {
-        equipmentSyncService.analysisItem(deviceData);
-    }
 }

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

@@ -144,15 +144,15 @@ public class VideoDataController {
     @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));
+        LogUtils.BASE_INFO_DVR_DISK.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.BASE_INFO_DVR_DISK.error("保存失败,{}", e);
         }
-        LogUtils.STATUS_INFO_DISKS_SPACE.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "DVR硬盘空间信息同步:/api/data/dvrDiskList", branchId, msgId, JSON.toJSONString(result));
+        LogUtils.BASE_INFO_DVR_DISK.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "DVR硬盘空间信息同步:/api/data/dvrDiskList", branchId, msgId, JSON.toJSONString(result));
         return result;
     }
 }

+ 17 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotSensorLogMapper.java

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

+ 17 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotSensorMapper.java

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

+ 2 - 8
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java

@@ -460,13 +460,7 @@ public class EquipmentSyncService {
         return pages;
     }
 
-    /**
-     * 线程池 处理 设备数据异步操作
-     *
-     * @param deviceData
-     */
-    @DS("master")
-    @Async("asyncExecutor_list")
+
     @Transactional(rollbackFor = Exception.class)
     public void analysisItem(MediatorDeviceData deviceData) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -491,7 +485,7 @@ public class EquipmentSyncService {
             return;
         }
         MediatorProductDevice productDevice = productDevices.stream().collect(Collectors.collectingAndThen
-                (Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ProductDevice -> ProductDevice.getDeviceId()))), ArrayList::new)).get(0);
+                (Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MediatorProductDevice::getDeviceId))), ArrayList::new)).get(0);
         //获取设备类型
         String productType = productDevice.getProductType().toString();
         ProductTypeEnum type = null;

+ 16 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotSensorLogService.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.IotSensorLog;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+public interface IotSensorLogService extends IService<IotSensorLog> {
+
+}

+ 23 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotSensorService.java

@@ -0,0 +1,23 @@
+package com.xunmei.mediator.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.iot.domain.IotSensor;
+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;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+public interface IotSensorService extends IService<IotSensor> {
+
+    ReceiveErrorDto saveDirectHost(DataPageDto<SensorDto> sensors, String branchId, String msgId);
+
+    ReceiveErrorDto saveDirectHostStatus(DataPageDto<SensorStatusDto> statuses, String branchId, String msgId);
+}

+ 4 - 2
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceDetectionServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.iot.domain.IotDevice;
 import com.xunmei.common.core.domain.iot.domain.IotDeviceDetection;
 import com.xunmei.common.core.domain.iot.domain.IotDeviceDetectionLog;
 import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
@@ -11,6 +12,7 @@ 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.IotDeviceDetectionMapper;
+import com.xunmei.mediator.api.service.IIotDeviceService;
 import com.xunmei.mediator.api.service.IMediatorCategoryService;
 import com.xunmei.mediator.api.service.IotDeviceDetectionLogService;
 import com.xunmei.mediator.api.service.IotDeviceDetectionService;
@@ -46,7 +48,7 @@ public class IotDeviceDetectionServiceImpl extends ServiceImpl<IotDeviceDetectio
     @Resource
     RemoteOrgService orgService;
     @Resource
-    RemoteDeviceService deviceService;
+    IIotDeviceService iIotDeviceService;
 
     @Override
     public IotDeviceDetection findByEquipmentCodeAndOrgId(String equipmentCode, Long orgId) {
@@ -100,7 +102,7 @@ public class IotDeviceDetectionServiceImpl extends ServiceImpl<IotDeviceDetectio
                 return map;
             }
             String equipmentCode = networkDeviceDetectionEditDto.getEquipmentCode();
-            SysDevice device = deviceService.findByHostCode(equipmentCode,SecurityConstants.INNER);
+            IotDevice device = iIotDeviceService.findByHostCode(equipmentCode,org.getId());
             if (ObjectUtil.isNull(device)) {
                 error.setSuccess(false);
                 error.setErrorMsg("参数非法:设备code:" + equipmentCode + "不存在");

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

@@ -96,7 +96,7 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
                 baseMapper.delete(null);
                 this.saveBatch(dvrdisks);
             } catch (Exception e) {
-                LogUtils.STATUS_INFO_DISKS_SPACE.error("批量保存dvrdisk失败,失败原因:{}", e.getMessage());
+                LogUtils.BASE_INFO_DVR_DISK.error("批量保存dvrdisk失败,失败原因:{}", e.getMessage());
                 throw new RuntimeException(e.getMessage());
             }
         }

+ 20 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotSensorLogServiceImpl.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.IotSensorLog;
+import com.xunmei.mediator.api.mapper.IotSensorLogMapper;
+import com.xunmei.mediator.api.service.IotSensorLogService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+@Service
+public class IotSensorLogServiceImpl extends ServiceImpl<IotSensorLogMapper, IotSensorLog> implements IotSensorLogService {
+
+}

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

@@ -0,0 +1,278 @@
+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.utils.IDHelper;
+import com.xunmei.mediator.api.mapper.IotSensorMapper;
+import com.xunmei.mediator.api.service.*;
+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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author oygj
+ * @since 2024-02-21
+ */
+@Slf4j
+@Service
+public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor> implements IotSensorService {
+    @Resource
+    private RemoteOrgService remoteOrgService;
+    @Resource
+    private NorthErrorService northErrorService;
+    @Resource
+    private IotSensorLogService iotSensorLogService;
+    @Resource
+    private RedisCheckRepeatDataUtil redisCheckRepeatDataUtil;
+    @Resource
+    private EquipmentSyncService equipmentSyncService;
+
+    @Override
+    public ReceiveErrorDto saveDirectHostStatus(DataPageDto<SensorStatusDto> request, String branchId, String msgId) {
+        ReceiveErrorDto dto = CheckDataUtil.checkObjFieldIsNull(request);
+
+        if (dto.getSuccess() && ObjectUtil.isNotEmpty(request.getData())) {
+            new Thread(() -> {
+                try {
+                    saveStatusAsync(request, msgId, branchId);
+                } catch (ParseException e) {
+                    throw new RuntimeException(e);
+                }
+            }).start();
+        }
+
+        return dto;
+    }
+
+    private void saveStatusAsync(DataPageDto<SensorStatusDto> request, String msgId, String branchId) throws ParseException {
+        String path = "/api/{branchId}/status/sensorCommon";
+        List<NorthError> errors = new ArrayList<>();
+        Map<String, List<IotSensor>> productDeviceMap = getAllDevice();
+        List<MediatorDeviceData> deviceDataList = new ArrayList<>();
+        List<IotSensor> sensorList = new ArrayList<>();
+        List<IotSensorLog> sensorLogList = new ArrayList<>();
+        for (SensorStatusDto status : request.getData()) {
+            if (StringUtils.isEmpty(status.getOrgCode())) {
+                errors.add(new NorthError(msgId, branchId, path
+                        , status, "参数非法:未传orgCode"));
+                continue;
+            }
+            final SysOrg org = remoteOrgService.findByCode(status.getOrgCode(), SecurityConstants.INNER);
+            if (org == null) {
+                errors.add(new NorthError(msgId, branchId, path
+                        , status, "参数非法:机构orgCode不存在:" + status.getOrgCode()));
+                continue;
+            }
+            final List<IotSensor> iotSensors = productDeviceMap.get(String.valueOf(org.getId()));
+            final Optional<IotSensor> optional = iotSensors.stream().filter(sensor -> ObjectUtil.equal(sensor.getDeviceCode(), status.getDeviceCode())).findFirst();
+            if (!optional.isPresent()) {
+                errors.add(new NorthError(msgId, branchId, path
+                        , status, "对应设备不存在:" + status.getDeviceCode()));
+                continue;
+            }
+            buildSensorAndLog(sensorList,sensorLogList, optional.get());
+           /* MediatorDeviceData deviceData = new MediatorDeviceData();
+            deviceData.setDeviceName(status.getDeviceName());
+            deviceData.setOrgId(org.getId());
+            deviceData.setOrgPath(org.getPath());
+            deviceData.setOrgCode(org.getGuid());
+            deviceData.setOrgName(org.getName());
+            deviceData.setUpdateTime(status.getUpdateTime());
+            deviceData.setMulti(0);
+            deviceData.setItems(status.getInfos());
+
+            MediatorDeviceDataLog deviceDataLog = new MediatorDeviceDataLog();
+            BeanHelper.copyProperties(deviceDataLog, deviceData, "id");
+            deviceDataLog.setCreateTime(new Date());
+            deviceDataLogList.add(deviceDataLog);
+            deviceDataList.add(deviceData);*/
+        }
+        if (errors.size() > 0) {
+            northErrorService.saveErrorData(errors);
+        }
+        updateBatchById(sensorList);
+        iotSensorLogService.saveBatch(sensorLogList);
+       /* remoteMediatorService.saveOrUpdateDeviceData(deviceDataList, SecurityConstants.INNER);
+        remoteMediatorService.saveOrUpdateDeviceDataLog(deviceDataLogList, SecurityConstants.INNER);
+
+        for (MediatorDeviceData deviceData : deviceDataList) {
+            equipmentSyncService.analysisItem(deviceData);
+        }*/
+    }
+
+    private void buildSensorAndLog(List<IotSensor> sensorList, List<IotSensorLog> sensorLogList, IotSensor iotSensor) {
+        iotSensor.setUpdateTime(LocalDateTime.now());
+        iotSensor.setInfos(iotSensor.getInfos());
+        iotSensor.setDeviceName(iotSensor.getDeviceName());
+        iotSensor.setDeviceType(iotSensor.getDeviceType());
+        iotSensor.setStateUpdateTime(LocalDateTime.now());
+        final IotSensorLog iotSensorLog = new IotSensorLog();
+        BeanUtils.copyProperties(iotSensor, iotSensorLog);
+        iotSensorLog.setIotSensorId(iotSensor.getId());
+        iotSensorLog.setCreateTime(LocalDateTime.now());
+        iotSensorLog.setUpdateTime(LocalDateTime.now());
+        iotSensorLog.setStateUpdateTime(LocalDateTime.now());
+        iotSensorLog.setSource(1);
+        sensorList.add(iotSensor);
+        sensorLogList.add(iotSensorLog);
+    }
+
+    @Override
+    public ReceiveErrorDto saveDirectHost(DataPageDto<SensorDto> request, String branchId, String msgId) {
+        //验证基础分页信息
+        ReceiveErrorDto dto = CheckDataUtil.checkObjFieldIsNull(request);
+
+
+        if (dto.getSuccess()) {
+            //分页数据的存取
+            final List<SensorDto> data = redisCheckRepeatDataUtil.isCompleted(request, SensorDto.class);
+
+            log.info("判断是否获取通用传感器全部信息分页数据:{}", data.size() > 0);
+            if (data.size() == 0) {
+                return dto;
+            }
+
+            new Thread(() -> {
+                //删除直连主机传感器一个月前的状态数据
+                // productDeviceMapper.deleteDirectHostHistory(DateUtil.offset(new Date(), DateField.MONTH, -1));
+            }).start();
+
+            List<Long> deletedDeviceIds = new ArrayList<>();
+            List<IotSensor> devices = convertToDomain(data, msgId, branchId, deletedDeviceIds);
+            this.removeByIds(deletedDeviceIds);
+            this.saveOrUpdateBatch(devices);
+        }
+        return dto;
+    }
+
+    private List<IotSensor> convertToDomain(List<SensorDto> sensorDtos, String msgId, String branchId, List<Long> deletedDeviceIds) {
+        List<IotSensor> domains = new ArrayList<>();
+        List<NorthError> errors = new ArrayList<>();
+        String path = "/api/{branchId}/data/sensorCommonList";
+        Map<String, List<IotSensor>> productDeviceMap = getAllDevice();
+        Set<String> uniqueSet = new HashSet<>();
+        for (SensorDto sensorDto : sensorDtos) {
+            NorthError error = null;
+            IotSensor domain = new IotSensor();
+
+            if (StringUtils.isEmpty(sensorDto.getOrgCode())) {
+                error = new NorthError(msgId, branchId, path
+                        , sensorDto, "参数非法:未传orgCode");
+                errors.add(error);
+                continue;
+            }
+
+            SysOrg org = remoteOrgService.findByCode(sensorDto.getOrgCode(), SecurityConstants.INNER);
+            if (org == null) {
+                error = new NorthError(msgId, branchId, path
+                        , sensorDto, "参数非法:机构orgCode不存在:" + sensorDto.getOrgCode());
+                errors.add(error);
+                continue;
+            }
+            String key = org.getId() + sensorDto.getDeviceCode();
+            if (uniqueSet.contains(key)) {
+                errors.add(new NorthError(msgId, branchId, path
+                        , sensorDto, "数据来源中,同机构中设备编号重复。"));
+                continue;
+            }
+            Long deviceType = convertDeviceType(sensorDto.getDeviceType());
+            if (ObjectUtil.isNull(deviceType)) {
+                errors.add(new NorthError(msgId, branchId, path
+                        , sensorDto, "无法识别的设备类型"));
+                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.setDeleted(0);
+            domain.setCreateTime(LocalDateTime.now());
+
+            if (ObjectUtil.isNotEmpty(exists)) {
+                if (exists.size() > 1) {
+                    errors.add(new NorthError(msgId, branchId, path, sensorDto, "同机构下设备编号重复,将取第一条"));
+                }
+                domain = exists.get(0);
+            }
+            domain.setUpdateTime(LocalDateTime.now());
+            domain.setDeviceName(sensorDto.getDeviceName().replace("机房/基站环境", "物联环境"));
+            domain.setCategoryId(deviceType);
+            domain.setHostCode(sensorDto.getHostCode());
+            domain.setDeviceCode(sensorDto.getDeviceCode());
+            domain.setOrgId(org.getId());
+            domain.setOrgName(org.getName());
+            domain.setOrgPath(org.getPath());
+            domain.setSource(1);
+            domains.add(domain);
+        }
+        if (errors.size() > 0) {
+            northErrorService.saveErrorData(errors);
+        }
+
+        productDeviceMap.keySet().stream().filter(k -> !uniqueSet.contains(k)).forEach(k -> productDeviceMap.get(k).forEach(d -> deletedDeviceIds.add(d.getId())));
+
+        return domains;
+    }
+
+    private Map<String, List<IotSensor>> getAllDevice() {
+        return baseMapper.selectList(new LambdaQueryWrapper<IotSensor>()
+                        .eq(IotSensor::getSource, 1))
+                .stream()
+                .collect(Collectors.groupingBy(c -> c.getOrgId().toString()));
+    }
+
+    private Long convertDeviceType(String deviceCode) {
+        Long type = null;
+        switch (deviceCode) {
+            case "4183"://温湿度
+                type = 3712195941285888L; //todo
+                break;
+//            case "4181"://红外
+//                type = 3713672266842116L;
+//                break;
+            case "4182": //烟感
+                type = 3712194930442240L;
+                break;
+            case "4184": //水浸
+                type = 3712196701503488L;
+                break;
+            case "4160"://智能电表
+                type = 3712198166114160L;
+        }
+
+        return type;
+    }
+}

+ 8 - 2
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/NorthErrorServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xunmei.mediator.api.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.mediator.api.mapper.NorthErrorMapper;
 import com.xunmei.mediator.api.service.NorthErrorService;
@@ -12,6 +13,7 @@ import java.util.List;
 
 /**
  * 错误数据存储
+ *
  * @author : 高雄
  * @date :2022/8/10 10:10
  * @description :
@@ -22,10 +24,14 @@ public class NorthErrorServiceImpl extends ServiceImpl<NorthErrorMapper, NorthEr
 
 
     @Override
-    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
-    public void saveErrorData(List<NorthError> list){
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    public void saveErrorData(List<NorthError> list) {
+        if (ObjectUtil.isEmpty(list)) {
+            return;
+        }
         this.saveBatch(list);
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveError(NorthError error) {

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/resources/mapper/IotSensorLogMapper.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.IotSensorLogMapper">
+
+</mapper>

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/resources/mapper/IotSensorMapper.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.IotSensorMapper">
+
+</mapper>

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

@@ -308,20 +308,4 @@ public class SysDeviceController extends BaseController {
     SysDevice findByHostCode(@PathVariable("code") String code) {
         return sysDeviceService.findByHostCode(code);
     }
-
-    @PostMapping("/north/saveDirectHost")
-    ReceiveErrorDto saveDirectHost(@RequestBody HashMap<String, Object> dataMap){
-        final DataPageDto<SensorDto> sensorList = (DataPageDto<SensorDto>) dataMap.get("sensors");
-        final String branchId = (String) dataMap.get("branchId");
-        final String msgId = (String) dataMap.get("msgId");
-        return sysDeviceService.saveDirectHost(sensorList, branchId, msgId);
-    }
-
-    @PostMapping("/north/saveDirectHostStatus")
-    ReceiveErrorDto saveDirectHostStatus(@RequestBody HashMap<String, Object> dataMap){
-        final DataPageDto<SensorStatusDto> statusList = (DataPageDto<SensorStatusDto>) dataMap.get("sensors");
-        final String branchId = (String) dataMap.get("branchId");
-        final String msgId = (String) dataMap.get("msgId");
-        return sysDeviceService.saveDirectHostStatus(statusList, branchId, msgId);
-    }
 }

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

@@ -113,13 +113,4 @@ public interface ISysDeviceService extends IService<SysDevice> {
      * @return
      */
     List<SysDevice> findList(SysDeviceInnerListDto listDto);
-
-    SysDevice findByHostCodeAndCodeAndOrgId(String equipmentCode, String channelCode, Long orgId);
-
-    SysDevice findByCodeAndOrgId(String equipmentCode, Long orgId);
-
-    ReceiveErrorDto saveDirectHost(DataPageDto<SensorDto> sensorList, String branchId, String msgId);
-
-    ReceiveErrorDto saveDirectHostStatus(DataPageDto<SensorStatusDto> statusList, String branchId, String msgId);
-
 }

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

@@ -371,337 +371,4 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
     public SysDevice findByHostCode(String code) {
         return lambdaQuery().eq(SysDevice::getHostCode, code).last(Constants.LIMIT1).one();
     }
-
-    @Override
-    public SysDevice findByHostCodeAndCodeAndOrgId(String equipmentCode, String channelCode, Long orgId) {
-        return lambdaQuery()
-                .eq(SysDevice::getHostCode, equipmentCode)
-                .eq(SysDevice::getChannelCode, channelCode)
-                .eq(SysDevice::getOrgId, orgId)
-                .last(Constants.LIMIT1)
-                .one();
-    }
-
-    @Override
-    public SysDevice findByCodeAndOrgId(String code, Long orgId) {
-        return lambdaQuery()
-                .eq(SysDevice::getChannelCode, code)
-                .eq(SysDevice::getOrgId, orgId)
-                .last(Constants.LIMIT1)
-                .one();
-    }
-
-    @Override
-    public ReceiveErrorDto saveDirectHost(DataPageDto<SensorDto> request, String branchId, String msgId) {
-        //验证基础分页信息
-        ReceiveErrorDto dto = checkObjFieldIsNull(request);
-
-
-        if (dto.getSuccess()) {
-            //分页数据的存取
-            final List<SensorDto> data = isCompleted(request, SensorDto.class);
-
-            log.info("判断是否获取通用传感器全部信息分页数据:{}", data.size() > 0);
-            if (data.size() == 0) {
-                return dto;
-            }
-
-            new Thread(() -> {
-                //删除直连主机传感器一个月前的状态数据
-                // productDeviceMapper.deleteDirectHostHistory(DateUtil.offset(new Date(), DateField.MONTH, -1));
-            }).start();
-
-            List<Long> deletedDeviceIds = new ArrayList<>();
-            List<SysDevice> devices = convertToDomain(data, msgId, branchId, deletedDeviceIds);
-            this.removeByIds(deletedDeviceIds);
-            this.saveOrUpdateBatch(devices);
-        }
-        return dto;
-    }
-
-    private List<SysDevice> convertToDomain(List<SensorDto> sensorDtos, String msgId, String branchId, List<Long> deletedDeviceIds) {
-        List<SysDevice> domains = new ArrayList<>();
-        List<NorthError> errors = new ArrayList<>();
-        String path = "/api/{branchId}/data/sensorCommonList";
-        Map<String, List<SysDevice>> productDeviceMap = getAllDevice();
-        Set<String> uniqueSet = new HashSet<>();
-        for (SensorDto sensorDto : sensorDtos) {
-            NorthError error = null;
-            SysDevice domain = new SysDevice();
-
-            if (StringUtils.isEmpty(sensorDto.getOrgCode())) {
-                error = new NorthError(msgId, branchId, path
-                        , sensorDto, "参数非法:未传orgCode");
-                errors.add(error);
-                continue;
-            }
-
-            SysOrg org = orgService.findByCode(sensorDto.getOrgCode());
-            if (org == null) {
-                error = new NorthError(msgId, branchId, path
-                        , sensorDto, "参数非法:机构orgCode不存在:" + sensorDto.getOrgCode());
-                errors.add(error);
-                continue;
-            }
-            String key = org.getId() + sensorDto.getDeviceCode();
-            if (uniqueSet.contains(key)) {
-                errors.add(new NorthError(msgId, branchId, path
-                        , sensorDto, "数据来源中,同机构中设备编号重复。"));
-                continue;
-            }
-            Long deviceType = convertDeviceType(sensorDto.getDeviceType());
-            if (ObjectUtil.isNull(deviceType)) {
-                errors.add(new NorthError(msgId, branchId, path
-                        , sensorDto, "无法识别的设备类型"));
-                continue;
-            }
-            uniqueSet.add(key);
-
-            List<SysDevice> exists = productDeviceMap.get(key);
-            domain.setId(IDHelper.id());
-            domain.setOnline(DeviceOnlineStatus.UNKNOW.ordinal());
-            domain.setIsAlarm(DeviceAlarmStatus.NORMAL.getStatus());
-            domain.setDoStatus(0);
-            domain.setDelFlag("0");
-            domain.setCreateTime(new Date());
-
-            if (ObjectUtil.isNotEmpty(exists)) {
-                if (exists.size() > 1) {
-                    errors.add(new NorthError(msgId, branchId, path, sensorDto, "同机构下设备编号重复,将取第一条"));
-                }
-                domain = exists.get(0);
-            }
-            domain.setUpdateTime(new Date());
-            domain.setDeviceName(sensorDto.getDeviceName().replace("机房/基站环境", "物联环境"));
-            domain.setCategoryId(deviceType);
-            domain.setHostCode(sensorDto.getHostCode());
-            domain.setChannelCode(sensorDto.getDeviceCode());
-            domain.setOrgId(org.getId());
-            domain.setOrgName(org.getName());
-            domain.setOrgPath(org.getPath());
-            domain.setSource(1);
-            domains.add(domain);
-        }
-        if (errors.size() > 0) {
-            remoteMediatorService.saveErrorData(errors, SecurityConstants.INNER);
-        }
-
-        productDeviceMap.keySet().stream().filter(k -> !uniqueSet.contains(k)).forEach(k -> productDeviceMap.get(k).forEach(d -> deletedDeviceIds.add(d.getId())));
-
-        return domains;
-    }
-
-    private Map<String, List<SysDevice>> getAllDevice() {
-        return baseMapper.selectList(new LambdaQueryWrapper<SysDevice>()
-                        .eq(SysDevice::getCategoryId, 1))
-                .stream()
-                .collect(Collectors.groupingBy(c -> c.getOrgId().toString()));
-    }
-
-    private Long convertDeviceType(String deviceCode) {
-        Long type = null;
-        switch (deviceCode) {
-            case "4183"://温湿度
-                type = 3712195941285888L; //todo
-                break;
-//            case "4181"://红外
-//                type = 3713672266842116L;
-//                break;
-            case "4182": //烟感
-                type = 3712194930442240L;
-                break;
-            case "4184": //水浸
-                type = 3712196701503488L;
-                break;
-            case "4160"://智能电表
-                type = 3712198166114160L;
-        }
-
-        return type;
-    }
-
-    public static <T> ReceiveErrorDto checkObjFieldIsNull(DataPageDto<T> request) {
-        String packageGuid = request.getPackageGuid();
-        if (StringUtils.isEmpty(packageGuid)) {
-            return ReceiveErrorDto.error("packageGuid参数非法");
-        }
-        Long totalPage = request.getTotalPage();
-        if (totalPage == null) {
-            return ReceiveErrorDto.error("totalPage参数非法");
-        }
-        Long currPage = request.getCurrPage();
-        if (currPage == null) {
-            return ReceiveErrorDto.error("currPage参数非法");
-        }
-        if (ObjectUtil.isEmpty(request.getData())) {
-            return ReceiveErrorDto.error("data信息为空");
-        }
-        return ReceiveErrorDto.success();
-    }
-
-    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<?> dtoList = request.getData();
-
-        /**
-         * 生成每一页的redis key值
-         */
-        String key = guid + "_" + currPage;
-
-        /**
-         * 判断是否已经获取到该分页数据,如果已获取到,则直接返回
-         */
-        Boolean isExist = RedisUtils.hasKey(key);
-
-        if (!isExist) {
-            String data = JSON.toJSONString(dtoList);
-            redisTemplate.opsForValue().set(key, data);
-            redisTemplate.expire(key, 1, TimeUnit.DAYS);
-        }
-        //判断是否完整
-        for (int i = 1; i <= totalPage; i++) {
-            String ak = guid + "_" + i;
-            Boolean isOk = RedisUtils.hasKey(ak);
-            if (!isOk) {
-                return resultList;
-            }
-        }
-        //数据完整了将数据取出
-        for (int i = 1; i <= totalPage; i++) {
-            String ak = guid + "_" + i;
-            Object obj = redisTemplate.opsForValue().get(ak);
-            List<T> data = JSON.parseArray((String) obj, clazz);
-            if (data != null) {
-                resultList.addAll(data);
-            }
-        }
-        for (int i = 1; i <= totalPage; i++) {
-            String ak = guid + "_" + i;
-            redisTemplate.delete(ak);
-        }
-
-        return resultList;
-    }
-
-    @Override
-    public ReceiveErrorDto saveDirectHostStatus(DataPageDto<SensorStatusDto> request, String branchId, String msgId) {
-        ReceiveErrorDto dto = checkObjFieldIsNull(request);
-
-        if (dto.getSuccess() && org.apache.commons.collections4.CollectionUtils.isNotEmpty(request.getData())) {
-            new Thread(() -> {
-                saveStatusAsync(request, msgId, branchId);
-            }).start();
-        }
-
-        return dto;
-    }
-
-    private void saveStatusAsync(DataPageDto<SensorStatusDto> request, String msgId, String branchId) {
-        String path = "/api/{branchId}/status/sensorCommon";
-        List<NorthError> errors = new ArrayList<>();
-
-        long c1 = System.currentTimeMillis();
-        Map<String, List<SysDevice>> productDeviceMap = getAllDevice();
-        System.out.println("获取设备用时:" + (System.currentTimeMillis() - c1));
-        c1 = System.currentTimeMillis();
-        System.out.println("获取设备状态用时:" + (System.currentTimeMillis() - c1));
-        List<MediatorDeviceData> deviceDataList = new ArrayList<>();
-        List<MediatorDeviceDataLog> deviceDataLogList = new ArrayList<>();
-        for (SensorStatusDto status : request.getData()) {
-            if (StringUtils.isEmpty(status.getOrgCode())) {
-                errors.add(new NorthError(msgId, branchId, path
-                        , status, "参数非法:未传orgCode"));
-                continue;
-            }
-            final SysOrg org = orgService.findByCode(status.getOrgCode());
-            if (org == null) {
-                errors.add(new NorthError(msgId, branchId, path
-                        , status, "参数非法:机构orgCode不存在:" + status.getOrgCode()));
-                continue;
-            }
-
-            String key = org.getId() + status.getDeviceCode();
-            if (!productDeviceMap.containsKey(key)) {
-                errors.add(new NorthError(msgId, branchId, path
-                        , status, "对应设备不存在" + status.getOrgCode()));
-                continue;
-            }
-
-            MediatorDeviceData deviceData = new MediatorDeviceData();
-
-            deviceData.setDeviceName(status.getDeviceName());
-            deviceData.setOrgId(org.getId());
-            deviceData.setOrgPath(org.getPath());
-            deviceData.setOrgCode(org.getGuid());
-            deviceData.setOrgName(org.getName());
-            deviceData.setUpdateTime(status.getUpdateTime());
-            deviceData.setMulti(0);
-            deviceData.setItems(handleInfos(status.getInfos()));
-
-            MediatorDeviceDataLog deviceDataLog = new MediatorDeviceDataLog();
-            BeanHelper.copyProperties(deviceDataLog, deviceData, "id");
-            deviceDataLog.setCreateTime(new Date());
-            deviceDataLogList.add(deviceDataLog);
-            deviceDataList.add(deviceData);
-        }
-        if (errors.size() > 0) {
-            remoteMediatorService.saveErrorData(errors, SecurityConstants.INNER);
-        }
-        remoteMediatorService.saveOrUpdateDeviceData(deviceDataList, SecurityConstants.INNER);
-        remoteMediatorService.saveOrUpdateDeviceDataLog(deviceDataLogList, SecurityConstants.INNER);
-
-        for (MediatorDeviceData deviceData : deviceDataList) {
-            remoteMediatorService.analysisDeviceDataItem(deviceData, SecurityConstants.INNER);
-        }
-    }
-
-    private String handleInfos(String items) {
-        JSONArray array = JSONArray.parseArray(items);
-        JSONArray arrayNew = new JSONArray();
-        for (Object o : array) {
-            JSONObject jo = ((JSONObject) o);
-            String name = jo.getString("name");
-            ElectricityMeterAttributes value = ElectricityMeterAttributes.getEnumByName(name);
-            if (ObjectUtil.isNotEmpty(value)) {
-                String fieldCode = value.getAttrtCode();
-                Long fieldId = value.getNum();
-                jo.put("fieldCode", fieldCode);
-                jo.put("fieldId", fieldId);
-                jo.put("fieldName", name);
-                jo.put("value", jo.getString("val"));
-                jo.remove("name");
-                jo.remove("val");
-                arrayNew.add(jo);
-            }
-           /* switch (ElectricityMeterAttributes.valueOf(name)) {
-                case "环境温度":
-                    fieldCode = "temperature";
-                    fieldId = 8074214277450756099L;
-                    break;
-                case "环境湿度":
-                    fieldCode = "humidity";
-                    fieldId = 8074214277450756097L;
-                    break;
-                case "烟感":
-                    fieldCode = "SmokeSensorState";
-                    fieldId = 8070947354577793026L;
-                    break;
-                case "水浸":
-                    fieldCode = "status";
-                    fieldId = 8123843190642397184L;
-                    break;
-                default:
-                    continue;
-            }*/
-
-
-        }
-
-        return arrayNew.toJSONString();
-    }
-
-
 }