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

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

jiawuxian 1 жил өмнө
parent
commit
294ca88f62
17 өөрчлөгдсөн 490 нэмэгдсэн , 497 устгасан
  1. 0 28
      project_data/sql/0.0.6-iot/soc/soc.sql
  2. 7 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteMediatorService.java
  3. 6 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteMediatorFallbackFactory.java
  4. 23 2
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotDevice.java
  5. 0 118
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/mediator/domain/MediatorDevice.java
  6. 30 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/MediatorTask.java
  7. 20 20
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java
  8. 5 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDvrChannelMapper.java
  9. 0 17
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/MediatorDeviceMapper.java
  10. 33 41
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java
  11. 13 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IIotDeviceService.java
  12. 15 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IIotDvrChannelService.java
  13. 0 31
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IMediatorDeviceService.java
  14. 62 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDeviceServiceImpl.java
  15. 271 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrChannelServiceImpl.java
  16. 0 239
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/MediatorDeviceServiceImpl.java
  17. 5 0
      soc-modules/soc-modules-mediator/src/main/resources/mapper/IotDvrChannelMapper.xml

+ 0 - 28
project_data/sql/0.0.6-iot/soc/soc.sql

@@ -759,34 +759,6 @@ CREATE TABLE `mediator_network_device_detection_log` (
      KEY `idx_user_orgPath` (`org_path`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=' 网络设备检测日志';
 
-drop table if exists mediator_device;
-CREATE TABLE `mediator_device` (
-       `id` varchar(125) COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备id',
-       `org_id` bigint DEFAULT NULL COMMENT '机构id',
-       `org_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构名字',
-       `org_path` varchar(225) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '机构path',
-       `device_code` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备编号',
-       `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备名称',
-       `asset_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '资产类别',
-       `category_id` bigint DEFAULT NULL COMMENT '设备分类',
-       `device_brand` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备品牌',
-       `source` int DEFAULT '0' COMMENT '来源,0:手动添加,1:主机平台,',
-       `host_code` varchar(225) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '主机code',
-       `channel_code` varchar(225) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '通道号',
-       `type` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备型号',
-       `ip` varchar(225) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备ip',
-       `on_line` tinyint(1) DEFAULT NULL COMMENT '是否在线,0:未知,1:在线.2:离线,3:异常',
-       `is_alarm` tinyint(1) DEFAULT NULL COMMENT '是否报警,0:未报警,1:报警中',
-       `do_status` tinyint(1) DEFAULT NULL COMMENT '告警信息处理状态,0未处理,1:已处理',
-       `deleted` tinyint(1)  DEFAULT '0' COMMENT '0存在1删除',
-       `create_time` datetime DEFAULT NULL COMMENT '创建时间',
-       `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-       `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
-       `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
-       PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='北向设备信息表';
-
-
 
 
 

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

@@ -3,6 +3,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;
@@ -50,4 +51,10 @@ public interface RemoteMediatorService {
 
     @PostMapping("/analysisDeviceDataItem")
     void analysisDeviceDataItem(@RequestBody MediatorDeviceData deviceData, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+
+    @PostMapping("/channelCacheDeal")
+    AjaxResult channelCacheDeal();
+
+
 }

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

@@ -1,6 +1,7 @@
 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;
@@ -69,6 +70,11 @@ public class RemoteMediatorFallbackFactory implements FallbackFactory<RemoteMedi
             public void analysisDeviceDataItem(MediatorDeviceData deviceData, String source) {
 
             }
+
+            @Override
+            public AjaxResult channelCacheDeal() {
+                return null;
+            }
         };
     }
 }

+ 23 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/iot/domain/IotDevice.java

@@ -2,9 +2,14 @@ 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 com.xunmei.common.core.web.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,7 +17,7 @@ import lombok.EqualsAndHashCode;
 
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author oygj
@@ -26,7 +31,7 @@ public class IotDevice implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-      @TableId("id")
+    @TableId("id")
     private Long id;
 
     @ApiModelProperty(value = "所属机构")
@@ -93,4 +98,20 @@ public class IotDevice implements Serializable {
     @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;
+
 }

+ 0 - 118
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/mediator/domain/MediatorDevice.java

@@ -1,118 +0,0 @@
-package com.xunmei.common.core.domain.mediator.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-01-31
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-@TableName("mediator_device")
-@ApiModel(value="MediatorDevice对象", description="北向设备信息表")
-public class MediatorDevice implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "设备id")
-    @TableId("id")
-    private String id;
-
-    @ApiModelProperty(value = "机构id")
-    @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("device_code")
-    private String deviceCode;
-
-    @ApiModelProperty(value = "设备名称")
-    @TableField("device_name")
-    private String deviceName;
-
-    @ApiModelProperty(value = "资产类别")
-    @TableField("asset_type")
-    private String assetType;
-
-    @ApiModelProperty(value = "设备分类")
-    @TableField("category_id")
-    private Long categoryId;
-
-    @ApiModelProperty(value = "设备品牌")
-    @TableField("device_brand")
-    private String deviceBrand;
-
-    @ApiModelProperty(value = "来源,0或null:手动添加,1:主机平台,")
-    @TableField("source")
-    private Integer source;
-
-    @ApiModelProperty(value = "主机code")
-    @TableField("host_code")
-    private String hostCode;
-
-    @ApiModelProperty(value = "通道号")
-    @TableField("channel_code")
-    private String channelCode;
-
-    @ApiModelProperty(value = "设备型号")
-    @TableField("type")
-    private String type;
-
-    @ApiModelProperty(value = "设备ip")
-    @TableField("ip")
-    private String ip;
-
-    @ApiModelProperty(value = "是否在线,0:未知,1:在线.2:离线,3:异常")
-    @TableField("on_line")
-    private Integer onLine;
-
-    @ApiModelProperty(value = "是否报警,0:未报警,1:报警中")
-    @TableField("is_alarm")
-    private Boolean isAlarm;
-
-    @ApiModelProperty(value = "告警信息处理状态,0未处理,1:已处理")
-    @TableField("do_status")
-    private Boolean doStatus;
-
-    @ApiModelProperty(value = "0存在1删除")
-    @TableField("deleted")
-    private Boolean deleted;
-
-    @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;
-
-
-}

+ 30 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/MediatorTask.java

@@ -0,0 +1,30 @@
+package com.xunmei.job.task;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson2.JSON;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.RemoteDrillService;
+import com.xunmei.system.api.RemoteMediatorService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Slf4j
+@Component("MediatorTask")
+public class MediatorTask {
+
+    @Autowired
+    RemoteMediatorService remoteMediatorService;
+
+    //处理缓存中的通道信息数据
+    public void channelCacheDeal() {
+        String id = UUID.fastUUID().toString();
+        log.info("开始处理缓存中通道信息数据,当前任务 id:{},当前时间:{}", id, new Date());
+        AjaxResult result = remoteMediatorService.channelCacheDeal();
+        log.info("处理缓存中通道信息数据结束....,当前任务 id:{},当前时间:{},结果:{}", id, new Date(), JSON.toJSONString(result));
+    }
+
+
+}

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

@@ -3,9 +3,8 @@ package com.xunmei.mediator.api.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.xunmei.common.core.constant.SecurityConstants;
-import com.xunmei.mediator.api.service.IMediatorDeviceService;
-import com.xunmei.mediator.api.service.IMediatorNetworkDeviceDetectionService;
-import com.xunmei.mediator.api.service.RabbitMsgIdService;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.mediator.api.service.*;
 import com.xunmei.system.api.dto.DataPageDto;
 import com.xunmei.system.api.dto.SensorDto;
 import com.xunmei.system.api.dto.SensorStatusDto;
@@ -35,9 +34,10 @@ public class DataController {
 
     @Resource
     private RabbitMsgIdService rabbitMsgIdService;
-
     @Resource
-    private IMediatorDeviceService deviceService;
+    private IIotDeviceService iotDeviceService;
+    @Resource
+    private IIotDvrChannelService iotDvrChannelService;
     @Resource
     private RemoteDeviceService remoteDeviceService;
     @Resource
@@ -76,7 +76,7 @@ public class DataController {
         try {
             deviceReceivePageDto.setBranchId(branchId);
             deviceReceivePageDto.setMsgId(msgId);
-            ReceiveErrorDto errorDto = deviceService.saveData(deviceReceivePageDto, SecurityConstants.INNER);
+            ReceiveErrorDto errorDto = iotDeviceService.saveData(deviceReceivePageDto, SecurityConstants.INNER);
             LogUtils.BASE_INFO_EQUIPMENT.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "设备信息同步:/api/data/equipmentList/", branchId, msgId, JSON.toJSONString(errorDto));
             return errorDto;
         } catch (Exception e) {
@@ -105,16 +105,8 @@ public class DataController {
         rabbitMsgIdService.sendMsgId(msgId, "/data/channelList", "通道信息同步");
         LogUtils.BASE_INFO_CHANNEL.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "通道信息同步:/api/data/channelList", branchId, msgId, JSONArray.toJSONString(deviceDtos));
         ReceiveErrorDto errorDto = new ReceiveErrorDto();
-        String str = JSONArray.toJSONString(deviceDtos);
-        String value = DigestUtils.md5Hex(str);
-        DeviceDto deviceDto = deviceDtos.get(0);
-        String key = deviceDto.getEquipmentCode() + "_" + deviceDto.getOrganizationGuid() + "channel_data";
         try {
-            Map<String, Object> dataMap = new HashMap<>();
-            dataMap.put("deviceDtoList", deviceDtos);
-            dataMap.put("branchId", branchId);
-            dataMap.put("msgId", msgId);
-            errorDto = this.deviceService.saveChannel(deviceDtos,branchId,msgId, SecurityConstants.INNER);
+            errorDto = this.iotDvrChannelService.saveChannel(deviceDtos, branchId, msgId, SecurityConstants.INNER);
             LogUtils.BASE_INFO_CHANNEL.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "设备信息同步:/api/data/channelList", branchId, msgId, JSON.toJSONString(errorDto));
             return errorDto;
         } catch (Exception e) {
@@ -125,7 +117,15 @@ public class DataController {
 
     }
 
-    @ApiOperation(value = "传感器通用设备信息同步",notes = "直连主机传感器")
+    @ApiOperation("处理缓存中的通道信息数据")
+    @PostMapping({"/mediator/channelCacheDeal"})
+    public AjaxResult channelCacheDeal() {
+        this.iotDvrChannelService.channelCacheDeal();
+        return AjaxResult.success();
+    }
+
+
+    @ApiOperation(value = "传感器通用设备信息同步", notes = "直连主机传感器")
     @PostMapping({"/api/{branchId}/data/sensorCommonList"})
     public ReceiveErrorDto sensor(@PathVariable String branchId, String msgId, @RequestBody DataPageDto<SensorDto> sensors) {
         LogUtils.DIRECT_HOST_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【接收参数:{}】", "接受传感器通用设备信息同步:/api/data/sensorCommonList", branchId, msgId, JSON.toJSONString(sensors));
@@ -135,11 +135,11 @@ public class DataController {
             dataMap.put("sensors", sensors);
             dataMap.put("branchId", branchId);
             dataMap.put("msgId", msgId);
-            errorDto = this.remoteDeviceService.saveDirectHost(dataMap,SecurityConstants.INNER);
+            errorDto = this.remoteDeviceService.saveDirectHost(dataMap, SecurityConstants.INNER);
         } catch (Exception e) {
             e.printStackTrace();
             LogUtils.DIRECT_HOST_SENSOR.error("保存失败,{}", e);
-            return ReceiveErrorDto.error("保存失败:"+ e);
+            return ReceiveErrorDto.error("保存失败:" + e);
         }
         LogUtils.DIRECT_HOST_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "接受传感器通用设备信息同步:/api/data/sensorCommonList", branchId, msgId, JSON.toJSONString(errorDto));
         return errorDto;
@@ -156,11 +156,11 @@ public class DataController {
             dataMap.put("sensors", statuses);
             dataMap.put("branchId", branchId);
             dataMap.put("msgId", msgId);
-            errorDto = this.remoteDeviceService.saveDirectHostStatus(dataMap,SecurityConstants.INNER);
+            errorDto = this.remoteDeviceService.saveDirectHostStatus(dataMap, SecurityConstants.INNER);
         } catch (Exception e) {
             e.printStackTrace();
             LogUtils.DIRECT_HOST_SENSOR_STATUS.error("保存失败,{}", e);
-            return ReceiveErrorDto.error("保存失败:"+ e);
+            return ReceiveErrorDto.error("保存失败:" + e);
         }
         LogUtils.DIRECT_HOST_SENSOR_STATUS.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "接受传感器通用设备实时状态信息同步:/api/status/sensorCommon", branchId, msgId, JSON.toJSONString(errorDto));
         return errorDto;

+ 5 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDvrChannelMapper.java

@@ -2,6 +2,10 @@ package com.xunmei.mediator.api.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
+import com.xunmei.common.core.domain.mediator.vo.EquipmentOrgVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
  */
 public interface IotDvrChannelMapper extends BaseMapper<IotDvrChannel> {
 
+    void batchUpdateDel(@Param("list") List<EquipmentOrgVo> eosList);
 }

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

@@ -1,17 +0,0 @@
-package com.xunmei.mediator.api.mapper;
-
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.xunmei.common.core.domain.mediator.domain.MediatorDevice;
-
-/**
- * <p>
- * 北向设备信息表 Mapper 接口
- * </p>
- *
- * @author oygj
- * @since 2024-01-31
- */
-public interface MediatorDeviceMapper extends BaseMapper<MediatorDevice> {
-
-}

+ 33 - 41
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/EquipmentSyncService.java

@@ -12,6 +12,7 @@ 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.*;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.DateUtils;
@@ -43,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -78,7 +80,7 @@ public class EquipmentSyncService {
 
 
     @Autowired
-    private RemoteDeviceService deviceService;
+    private IIotDeviceService iIotDeviceService;
 
     @Autowired
     private IMediatorProductDeviceService productDeviceService;
@@ -142,30 +144,29 @@ public class EquipmentSyncService {
         Map<String, Map<String, Object>> orgs = new HashMap<>();
 
         Map<String, MediatorCategory> categorys = new HashMap<>();
-        List<SysDevice> olds = new ArrayList();
-        List<SysDevice> list = new ArrayList<>();
+        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<SysDevice>> rel = analysisDeviceList(page, orgs, categorys);
+            Map<String, List<IotDevice>> rel = analysisDeviceList(page, orgs, categorys);
             olds.addAll(rel.get("olds"));
             list.addAll(rel.get("list"));
         }
         //第一步逻辑删除数据,逻辑删除
-      //  this.deviceService.updateDeviceDeleted();
+        this.iIotDeviceService.updateDeviceDeleted();
 
 
         //第二步查询数据,如果存在则更新,如果不存在,则新增
-
         //批量更新
         if (olds.size() > 0) {
-        //    this.deviceService.batchUpdateDevice(olds);
+            this.iIotDeviceService.batchUpdateDevice(olds);
         }
         //批量插入
         if (list.size() > 0) {
-          //  this.deviceService.batchInsertDevice(list);
+            this.iIotDeviceService.batchInsertDevice(list);
         }
         this.northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.deviceCount.getIndex(), list.size() + olds.size(), true);
 
@@ -181,7 +182,7 @@ public class EquipmentSyncService {
         uw.lambda().eq(SysDevice::getOrgId, orgId);
         uw.lambda().eq(SysDevice::getCategoryId, category.getId());
         deviceService.update(uw);*/
-       // productDeviceService.updateDeviceData(equipmentId,orgId,category.getId(),1)
+        // productDeviceService.updateDeviceData(equipmentId,orgId,category.getId(),1)
     }
 
 
@@ -191,8 +192,8 @@ public class EquipmentSyncService {
      * @param page
      * @return
      */
-    private Map<String, List<SysDevice>> analysisDeviceList(DeviceReceivePageDto page, Map<String, Map<String, Object>> orgs, Map<String, MediatorCategory> categorys) {
-        Map<String, List<SysDevice>> rel = new HashMap<>();
+    private Map<String, List<IotDevice>> analysisDeviceList(DeviceReceivePageDto page, Map<String, Map<String, Object>> orgs, Map<String, MediatorCategory> categorys) {
+        Map<String, List<IotDevice>> rel = new HashMap<>();
 
         /**
          * 验证数据正确性,有错误的数据,存储到错误数据中
@@ -202,8 +203,8 @@ public class EquipmentSyncService {
         List<DeviceDto> dtos = page.getData();
         Iterator var2 = dtos.iterator();
         List<NorthError> errors = new ArrayList<>();
-        List<SysDevice> list = new ArrayList<>();
-        List<SysDevice> olds = new ArrayList<>();
+        List<IotDevice> list = new ArrayList<>();
+        List<IotDevice> olds = new ArrayList<>();
         DeviceDto datum = null;
         NorthError error = null;
 
@@ -278,12 +279,8 @@ public class EquipmentSyncService {
             Map<String, Object> map = resolveDevice(datum, categorys);
 
 
-            SysDevice device = (SysDevice) map.get("device");
-            device.setDelFlag("0");
-            device.setSource(1);
-
+            IotDevice device = (IotDevice) map.get("device");
             Integer isOld = (Integer) map.get("isOld");
-
             if (isOld == 1) {
                 olds.add(device);
             } else {
@@ -312,50 +309,48 @@ public class EquipmentSyncService {
      */
     private Map<String, Object> resolveDevice(DeviceDto datum, Map<String, MediatorCategory> categorys) {
         Map<String, Object> map = new HashMap<>();
-        SysDevice device = new SysDevice();
+        IotDevice device = new IotDevice();
         map.put("isOld", 0);
-        QueryWrapper<SysDevice> qw = new QueryWrapper<>();
-        qw.lambda().eq(SysDevice::getId, datum.getEquipmentCode());
-        SysDevice device1 = deviceService.findByHostCode(datum.getEquipmentCode(), SecurityConstants.INNER);
-
+        IotDevice device1 = iIotDeviceService.findByHostCode(datum.getEquipmentCode(), datum.getOrg().getId());
         if (device1 != null) {
             map.put("isOld", 1);
             device = device1;
         }
-        device.setHostCode(datum.getEquipmentCode());
-        //device.setId(datum.getEquipmentCode());
-        device.setDeviceName(datum.getEquipmentName());
-        device.setDeviceType(String.valueOf(DeviceType.Dvs.ordinal()));
-        device.setType(datum.getDeviceType());
-        device.setIp(datum.getNetAddress());
+        device.setEquipmentCode(datum.getEquipmentCode());
+        device.setEquipmentName(datum.getEquipmentName());
+        device.setNetAddress(datum.getNetAddress());
         device.setOrgId(datum.getOrg().getId());
         device.setOrgName(datum.getOrg().getName());
         device.setOrgPath(datum.getOrg().getPath());
-        //device.setIsComplete(1);
-        device.setHostCode(datum.getEquipmentCode());
-        //设置设备默认状态为未知
-        device.setOnline(DeviceOnlineStatus.UNKNOW.ordinal());
+        device.setDeleted(0);
+        device.setSource(1);
         String categoryCode = null;
         switch (datum.getEquipmentType()) {
             case 1:
                 //监控主机
                 device.setDeviceType(String.valueOf(DeviceType.Dvs.ordinal()));
                 categoryCode = "14";
+                device.setCategoryId(3713671510851584L);
                 break;
             case 2:
                 //对讲主机
                 device.setDeviceType(String.valueOf(DeviceType.Intercom_Equipment.ordinal()));
                 categoryCode = "16";
+                device.setCategoryId(3713672073773056L);
                 break;
             case 3:
                 //报警主机
                 device.setDeviceType(String.valueOf(DeviceType.Alarm_Equipment.ordinal()));
                 categoryCode = "15";
+                device.setCategoryId(3713671920926720L);
                 break;
             case 4:
                 //门禁主机
                 device.setDeviceType(String.valueOf(DeviceType.Guard_Equipment.ordinal()));
                 categoryCode = "17";
+                device.setCategoryId(3713672266842112L);
+            default:
+                break;
         }
 
         /**
@@ -365,7 +360,7 @@ public class EquipmentSyncService {
         //处理设备品牌
        /* if(datum.getEquipmentCode().contains("GXX")||datum.getEquipmentCode().contains("gxx")){
             datum.setProducer("高新兴");
-        }*/
+        }
         if (datum.getEquipmentType() == 5) {
             if (datum.getEquipmentCode().contains("XSD") || datum.getEquipmentCode().contains("xsd")) {
                 datum.setProducer("新世电");
@@ -373,7 +368,7 @@ public class EquipmentSyncService {
                 datum.setProducer("高新兴");
             }
         }
-      /*  Brand brand = brands.get(datum.getProducer());
+        Brand brand = brands.get(datum.getProducer());
         if (brand == null) {
             if (StringUtils.isNotEmpty(datum.getProducer())) {
                 //不存在该品牌则新建该品牌
@@ -386,8 +381,7 @@ public class EquipmentSyncService {
             }
         } else {
             device.setBrandId(brand.getId());
-        }
-*/
+        }*/
 
         //处理设备分类,视频物联网监控主机由于清楚DeviceType暂定14写死,和固定写死categoryId
         if (datum.getEquipmentType() == 5) {
@@ -409,10 +403,8 @@ public class EquipmentSyncService {
                 device.setCategoryId(cate.getId());
             }
         }
-        Date date = new Date();
-        device.setCreateTime(date);
-        device.setUpdateTime(date);
-        device.setDelFlag("0");
+        device.setCreateTime(LocalDateTime.now());
+        device.setUpdateTime(LocalDateTime.now());
         map.put("device", device);
         return map;
     }

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

@@ -2,6 +2,10 @@ 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.protection.ReceiveErrorDto;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,4 +20,13 @@ public interface IIotDeviceService extends IService<IotDevice> {
     IotDevice findResult(String channelCode, String equipmentCode, Long orgId);
 
     IotDevice findByHostCode(String equipmentCode, Long orgId);
+
+    void updateDeviceDeleted();
+
+
+    void batchUpdateDevice(List<IotDevice> olds);
+
+    void batchInsertDevice(List<IotDevice> list);
+
+    ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner);
 }

+ 15 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IIotDvrChannelService.java

@@ -2,6 +2,11 @@ package com.xunmei.mediator.api.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
+import com.xunmei.common.core.domain.mediator.vo.EquipmentOrgVo;
+import com.xunmei.system.api.dto.device.DeviceDto;
+import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,4 +19,14 @@ import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
 public interface IIotDvrChannelService extends IService<IotDvrChannel> {
 
     IotDvrChannel findChannel(String channelCode, String equipmentCode, Long orgId);
+
+    ReceiveErrorDto saveChannel(List<DeviceDto> deviceDtos, String branchId, String msgId, String inner);
+
+    void channelCacheDeal();
+
+    void batchUpdateDel(List<EquipmentOrgVo> eosList);
+
+    void batchUpdateDevice(List<IotDvrChannel> upList);
+
+    void batchInsertDevice(List<IotDvrChannel> inList);
 }

+ 0 - 31
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IMediatorDeviceService.java

@@ -1,31 +0,0 @@
-package com.xunmei.mediator.api.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.xunmei.common.core.domain.mediator.domain.MediatorDevice;
-import com.xunmei.system.api.domain.SysDevice;
-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 java.util.List;
-
-/**
- * <p>
- * 北向设备信息表 服务类
- * </p>
- *
- * @author oygj
- * @since 2024-01-31
- */
-public interface IMediatorDeviceService extends IService<MediatorDevice> {
-
-
-    ReceiveErrorDto saveChannel(List<DeviceDto> deviceDtos, String branchId, String msgId, String inner);
-
-    ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner);
-
-    MediatorDevice findByCodeAndOrgId(String equipmentCode, Long orgId);
-
-    MediatorDevice findByHostCodeAndCodeAndOrgId(String equipmentCode, String channelCode, Long orgId);
-}

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

@@ -1,13 +1,25 @@
 package com.xunmei.mediator.api.service.impl;
 
 
+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.system.api.dto.protection.ReceiveErrorDto;
+import com.xunmei.system.api.enums.DataType;
+import com.xunmei.system.api.util.LogUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * <p>
@@ -19,7 +31,10 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice> implements IIotDeviceService {
-
+    @Resource
+    private EquipmentSyncService equipmentSyncService;
+    @Resource
+    private NorthStatisticsSyncService northStatisticsSyncService;
     @Override
     public IotDevice findResult(String channelCode, String equipmentCode, Long orgId) {
         return lambdaQuery()
@@ -38,4 +53,50 @@ public class IotDeviceServiceImpl extends ServiceImpl<IotDeviceMapper, IotDevice
                 .last(Constants.LIMIT1)
                 .one();
     }
+
+    @Override
+    @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);
+        update(wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchUpdateDevice(List<IotDevice> olds) {
+        updateBatchById(olds);
+    }
+
+    @Override
+    public void batchInsertDevice(List<IotDevice> list) {
+        saveBatch(list);
+    }
+
+    @Override
+    public ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner) {
+        String packageGuid = deviceReceivePageDto.getPackageGuid();
+        if (StringUtils.isEmpty(packageGuid)) {
+            return ReceiveErrorDto.error("packageGuid参数非法");
+        }
+        Long totalPage = deviceReceivePageDto.getTotalPage();
+        if (totalPage == null) {
+            return ReceiveErrorDto.error("totalPage参数非法");
+        }
+
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(deviceReceivePageDto.getData())) {
+            return ReceiveErrorDto.error("设备信息数据为空");
+        }
+        List<DeviceReceivePageDto> list = equipmentSyncService.isCompleted(deviceReceivePageDto);
+        LogUtils.BASE_INFO_EQUIPMENT.info("设备数据判断是否获取全部分页数据:{}", list.size());
+        if (list.size() > 0) {
+            LogUtils.BASE_INFO_EQUIPMENT.info("设备数据判断是否获取全部分页数据,开始数据处理界面!");
+            northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.deviceCount.getIndex(), deviceReceivePageDto.getData().size(), false);
+            equipmentSyncService.saveDeviceData(list);
+        }
+        return ReceiveErrorDto.success();
+    }
+
 }

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

@@ -1,11 +1,38 @@
 package com.xunmei.mediator.api.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 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.constant.SecurityConstants;
+import com.xunmei.common.core.domain.iot.domain.IotDevice;
 import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
+import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
+import com.xunmei.common.core.domain.mediator.vo.EquipmentOrgVo;
 import com.xunmei.mediator.api.mapper.IotDvrChannelMapper;
+import com.xunmei.mediator.api.service.IIotDeviceService;
 import com.xunmei.mediator.api.service.IIotDvrChannelService;
+import com.xunmei.mediator.api.service.IMediatorCategoryService;
+import com.xunmei.mediator.api.service.NorthErrorService;
+import com.xunmei.mediator.domain.dto.redis.RedisKey;
+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.device.DeviceDto;
+import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
+import com.xunmei.system.api.util.LogUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.ListOperations;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,6 +44,19 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, IotDvrChannel> implements IIotDvrChannelService {
+    @Resource
+    private IMediatorCategoryService categoryService;
+    @Resource
+    private RemoteOrgService orgService;
+    @Resource
+    private RedisTemplate redisTemplate;
+    @Resource
+    private NorthErrorService northErrorService;
+
+    @Resource
+    @Lazy
+    private IIotDeviceService iIotDeviceService;
+
 
     @Override
     public IotDvrChannel findChannel(String channelCode, String equipmentCode, Long orgId) {
@@ -27,4 +67,235 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
                 .last(Constants.LIMIT1)
                 .one();
     }
+
+    @Override
+    public ReceiveErrorDto saveChannel(List<DeviceDto> deviceDtoList, String branchId, String msgId, String inner) {
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(deviceDtoList)) {
+            return ReceiveErrorDto.error("通道数据为空");
+        } else {
+            MediatorCategory category = categoryService.findCategoryByCodeAndParentId("18", -1L);
+
+            DeviceDto deviceDto;
+            List<NorthError> errors = new ArrayList<>();
+            List<IotDvrChannel> list = new ArrayList<>();
+            String equipmentId = null;
+
+            deviceDto = deviceDtoList.get(0);
+            equipmentId = deviceDto.getEquipmentCode();
+            final SysOrg org = orgService.findByCode(deviceDto.getOrganizationGuid(), SecurityConstants.INNER);
+            String UK = UUID.randomUUID().toString();
+
+            if (org != null) {
+                //制作一个随时变化的key
+                Boolean flag = redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
+                if (!flag) {
+                    //判断是否存在这个key
+                    this.redisTemplate.opsForValue().set(CacheConstants.CHANNEL_KEY, UK);
+                } else {
+                    UK = (String) this.redisTemplate.opsForValue().get(CacheConstants.CHANNEL_KEY);
+                }
+                //根据变化的key,缓存数据,供定时任务使用
+                EquipmentOrgVo eov = new EquipmentOrgVo();
+                eov.setEquipmentCode(equipmentId);
+                eov.setOrgId(org.getId());
+                redisTemplate.opsForList().rightPush(UK, eov);
+                redisTemplate.expire(UK, 1, TimeUnit.HOURS);
+            }
+
+            for (int i = 0; i < deviceDtoList.size(); i++) {
+                deviceDto = deviceDtoList.get(i);
+                if (StringUtils.isEmpty(deviceDto.getEquipmentCode())) {
+                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
+                            , deviceDto, "equipmentCode 为空");
+                    errors.add(error);
+                    continue;
+                }
+
+                if (StringUtils.isEmpty(deviceDto.getOrganizationGuid())) {
+                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
+                            , deviceDto, "organizationGuid 为空");
+                    errors.add(error);
+                    continue;
+                }
+
+                if (StringUtils.isEmpty(deviceDto.getChannelCode())) {
+                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
+                            , deviceDto, "channelCode 为空");
+                    errors.add(error);
+                    continue;
+                }
+
+                if (StringUtils.isEmpty(deviceDto.getChannelName())) {
+                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
+                            , deviceDto, "channelName 为空");
+                    errors.add(error);
+                    continue;
+                }
+
+
+                if (org == null) {
+                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
+                            , deviceDto, "orgGUID:" + deviceDto.getOrganizationGuid() + " 不正确");
+                    errors.add(error);
+                    continue;
+                }
+
+
+                /**
+                 * 先不做数据处理,先缓存所有待处理的数据,然后每5分钟处理一次缓存数据
+                 */
+
+
+                deviceDto.setOrg(org);
+                IotDevice host = iIotDeviceService.findByHostCode(deviceDto.getEquipmentCode(), org.getId());
+                if (host == null) {
+                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
+                            , deviceDto, "equipmentCode:" + deviceDto.getEquipmentCode() + "该主机code不存在");
+                    errors.add(error);
+                    continue;
+                }
+
+                IotDvrChannel device = getChannelDevice(deviceDto, category);
+
+                list.add(device);
+
+            }
+
+            if (list.size() > 0) {
+                redisTemplate.opsForList().rightPushAll(UK + CacheConstants.AFTER_DATA, list);
+                redisTemplate.expire(UK + CacheConstants.AFTER_DATA, 1, TimeUnit.HOURS);
+            }
+            if (errors.size() > 0) {
+                northErrorService.saveErrorData(errors);
+            }
+
+            return ReceiveErrorDto.success();
+        }
+    }
+
+    private IotDvrChannel getChannelDevice(DeviceDto deviceDto, MediatorCategory category) {
+        IotDvrChannel device = new IotDvrChannel();
+        IotDvrChannel old = this.findChannel(deviceDto.getEquipmentCode(), deviceDto.getChannelCode(), deviceDto.getOrg().getId());
+        if (old != null) {
+            device = old;
+        }
+        device.setChannelName(deviceDto.getChannelName());
+        device.setHostCode(deviceDto.getEquipmentCode());
+        device.setOrgId(deviceDto.getOrg().getId());
+        device.setOrgPath(deviceDto.getOrg().getPath());
+        device.setOrgName(deviceDto.getOrg().getName());
+        device.setChannelCode(Integer.parseInt(deviceDto.getChannelCode()));
+        device.setChannelAddr(deviceDto.getNetAddress());
+        final LocalDateTime now = LocalDateTime.now();
+        device.setUpdateTime(now);
+        device.setCreateTime(now);
+
+        device.setSource(1);
+        device.setDeleted(0);
+        return device;
+    }
+
+    @Override
+    public void channelCacheDeal() {
+        try {
+            Boolean flag = redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
+            if (!flag) {
+                return;
+            }
+
+            Boolean isData = this.redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
+            if (!isData) {
+                return;
+            }
+
+            String UK = (String) this.redisTemplate.opsForValue().get(CacheConstants.CHANNEL_KEY);
+
+            ListOperations<String, EquipmentOrgVo> lso = this.redisTemplate.opsForList();
+            List<EquipmentOrgVo> list = lso.range(UK, 0, -1);
+            int voSize = list.size();
+            if (voSize > 0) {
+                lso.trim(UK, voSize, -1L);
+            }
+
+            ListOperations<String, IotDvrChannel> cso = this.redisTemplate.opsForList();
+            List<IotDvrChannel> devices = cso.range(UK + RedisKey.AFTER_DATA, 0, -1);
+            int devSize = devices.size();
+            if (devSize > 0) {
+                cso.trim(UK + RedisKey.AFTER_DATA, devSize, -1L);
+            }
+
+            if (list.size() == 0) {
+                return;
+            }
+            /**
+             * 获取要逻辑删除的主机code和orgId
+             */
+            Set<EquipmentOrgVo> eos = new HashSet<>();
+            eos.addAll(list);
+
+            List<EquipmentOrgVo> eosList = new ArrayList<>();
+            eosList.addAll(eos);
+            /**
+             * 获取要进行批量处理的通道信息
+             * 并通过主机code,通道id,机构id进行去重
+             */
+            List<IotDvrChannel> devis = devices.stream().collect(Collectors.collectingAndThen(
+                    Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getChannelCode() + ";" + o.getHostCode() + ";" + o.getOrgId()))), ArrayList::new));
+
+
+            /**
+             * 第一步 逻辑删除对应 主机的 通道数据
+             * 第二步 批量更新数据
+             */
+            this.batchUpdateDel(eosList);
+
+            /**
+             * 自己写批量插入,更新方法,保证效率
+             */
+            //批量更新列表
+            List<IotDvrChannel> upList = new ArrayList<>();
+            //批量插入列表
+            List<IotDvrChannel> inList = new ArrayList<>();
+            if (devis.size() > 0) {
+                for (IotDvrChannel dev : devis) {
+                    if (ObjectUtil.isNotEmpty(dev.getId())) {
+                        upList.add(dev);
+                    } else {
+                        inList.add(dev);
+                    }
+                }
+            }
+
+            if (upList.size() > 0) {
+                this.batchUpdateDevice(upList);
+            }
+
+            if (inList.size() > 0) {
+                this.batchInsertDevice(inList);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            LogUtils.BASE_INFO_CHANNEL.error("【北向定时任务:{} 执行异常】【异常原因:{}】", "通道信息-DataDealJobService", e);
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchUpdateDel(List<EquipmentOrgVo> eosList) {
+        baseMapper.batchUpdateDel(eosList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchUpdateDevice(List<IotDvrChannel> upList) {
+        updateBatchById(upList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchInsertDevice(List<IotDvrChannel> inList) {
+        saveBatch(inList);
+    }
 }

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

@@ -1,239 +0,0 @@
-package com.xunmei.mediator.api.service.impl;
-
-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.constant.SecurityConstants;
-import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
-import com.xunmei.common.core.domain.mediator.domain.MediatorDevice;
-import com.xunmei.common.core.domain.mediator.vo.EquipmentOrgVo;
-import com.xunmei.mediator.api.mapper.MediatorDeviceMapper;
-import com.xunmei.mediator.api.service.*;
-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.NorthError;
-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.DataType;
-import com.xunmei.system.api.enums.DeviceOnlineStatus;
-import com.xunmei.system.api.enums.DeviceType;
-import com.xunmei.system.api.util.LogUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-
-/**
- * <p>
- * 北向设备信息表 服务实现类
- * </p>
- *
- * @author oygj
- * @since 2024-01-31
- */
-@Service
-public class MediatorDeviceServiceImpl extends ServiceImpl<MediatorDeviceMapper, MediatorDevice> implements IMediatorDeviceService {
-    @Resource
-    private EquipmentSyncService equipmentSyncService;
-    @Resource
-    private NorthStatisticsSyncService northStatisticsSyncService;
-    @Resource
-    private IMediatorCategoryService categoryService;
-    @Resource
-    private RemoteOrgService orgService;
-    @Resource
-    private RedisTemplate redisTemplate;
-    @Resource
-    private NorthErrorService northErrorService;
-
-    @Override
-    public MediatorDevice findByCodeAndOrgId(String equipmentCode, Long orgId) {
-        return lambdaQuery()
-                .eq(MediatorDevice::getChannelCode, equipmentCode)
-                .eq(MediatorDevice::getOrgId, orgId)
-                .last(Constants.LIMIT1)
-                .one();
-    }
-
-    @Override
-    public ReceiveErrorDto saveData(DeviceReceivePageDto deviceReceivePageDto, String inner) {
-        String packageGuid = deviceReceivePageDto.getPackageGuid();
-        if (StringUtils.isEmpty(packageGuid)) {
-            return ReceiveErrorDto.error("packageGuid参数非法");
-        }
-        Long totalPage = deviceReceivePageDto.getTotalPage();
-        if (totalPage == null) {
-            return ReceiveErrorDto.error("totalPage参数非法");
-        }
-
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(deviceReceivePageDto.getData())) {
-            return ReceiveErrorDto.error("设备信息数据为空");
-        }
-        List<DeviceReceivePageDto> list = equipmentSyncService.isCompleted(deviceReceivePageDto);
-        LogUtils.BASE_INFO_EQUIPMENT.info("设备数据判断是否获取全部分页数据:{}", list.size());
-        if (list.size() > 0) {
-            LogUtils.BASE_INFO_EQUIPMENT.info("设备数据判断是否获取全部分页数据,开始数据处理界面!");
-            northStatisticsSyncService.saveOrUpdateBaseCountByDataType(DataType.deviceCount.getIndex(), deviceReceivePageDto.getData().size(), false);
-            equipmentSyncService.saveDeviceData(list);
-        }
-        return ReceiveErrorDto.success();
-    }
-
-    @Override
-    public ReceiveErrorDto saveChannel(List<DeviceDto> deviceDtoList, String branchId, String msgId, String inner) {
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(deviceDtoList)) {
-            return ReceiveErrorDto.error("通道数据为空");
-        } else {
-            MediatorCategory category = categoryService.findCategoryByCodeAndParentId("18", -1L);
-
-            DeviceDto deviceDto;
-            List<NorthError> errors = new ArrayList<>();
-            List<MediatorDevice> list = new ArrayList<>();
-            String equipmentId = null;
-
-            deviceDto = deviceDtoList.get(0);
-            equipmentId = deviceDto.getEquipmentCode();
-            final SysOrg org = orgService.findByCode(deviceDto.getOrganizationGuid(),SecurityConstants.INNER);
-            String UK = UUID.randomUUID().toString();
-
-            if (org != null) {
-                //制作一个随时变化的key
-                Boolean flag = redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
-                if (!flag) {
-                    //判断是否存在这个key
-                    this.redisTemplate.opsForValue().set(CacheConstants.CHANNEL_KEY, UK);
-                } else {
-                    UK = (String) this.redisTemplate.opsForValue().get(CacheConstants.CHANNEL_KEY);
-                }
-                //根据变化的key,缓存数据,供定时任务使用
-                EquipmentOrgVo eov = new EquipmentOrgVo();
-                eov.setEquipmentCode(equipmentId);
-                eov.setOrgId(org.getId());
-                redisTemplate.opsForList().rightPush(UK, eov);
-                redisTemplate.expire(UK, 1, TimeUnit.HOURS);
-            }
-
-            for (int i = 0; i < deviceDtoList.size(); i++) {
-                deviceDto = deviceDtoList.get(i);
-                if (StringUtils.isEmpty(deviceDto.getEquipmentCode())) {
-                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
-                            , deviceDto, "equipmentCode 为空");
-                    errors.add(error);
-                    continue;
-                }
-
-                if (StringUtils.isEmpty(deviceDto.getOrganizationGuid())) {
-                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
-                            , deviceDto, "organizationGuid 为空");
-                    errors.add(error);
-                    continue;
-                }
-
-                if (StringUtils.isEmpty(deviceDto.getChannelCode())) {
-                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
-                            , deviceDto, "channelCode 为空");
-                    errors.add(error);
-                    continue;
-                }
-
-                if (StringUtils.isEmpty(deviceDto.getChannelName())) {
-                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
-                            , deviceDto, "channelName 为空");
-                    errors.add(error);
-                    continue;
-                }
-
-
-                if (org == null) {
-                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
-                            , deviceDto, "orgGUID:" + deviceDto.getOrganizationGuid() + " 不正确");
-                    errors.add(error);
-                    continue;
-                }
-
-
-                /**
-                 * 逻辑删除数据
-                 */
-                //修改成单独事务执行
-                //equipmentSyncService.deleteChannel(equipmentId,org.getId(),category);
-
-                /**
-                 * 先不做数据处理,先缓存所有待处理的数据,然后每5分钟处理一次缓存数据
-                 */
-
-
-                deviceDto.setOrg(org);
-                MediatorDevice host = this.findByCodeAndOrgId(deviceDto.getEquipmentCode(), org.getId());
-                if (host == null) {
-                    NorthError error = new NorthError(msgId, branchId, "/data/channelList"
-                            , deviceDto, "equipmentCode:" + deviceDto.getEquipmentCode() + "该主机code不存在");
-                    errors.add(error);
-                    continue;
-                }
-
-                MediatorDevice device = getChannelDevice(deviceDto, category);
-
-                list.add(device);
-
-            }
-            //this.northStatisticsSyncService.saveOrUpdateAllBaseCountByDataType(DataType.channelCount,list.size());
-            //deviceDao.saveOrUpdateBatch(list);
-            if (list.size() > 0) {
-                redisTemplate.opsForList().rightPushAll(UK + CacheConstants.AFTER_DATA, list);
-                redisTemplate.expire(UK + CacheConstants.AFTER_DATA, 1, TimeUnit.HOURS);
-            }
-            if (errors.size() > 0) {
-                northErrorService.saveErrorData(errors);
-            }
-
-            return ReceiveErrorDto.success();
-        }
-    }
-
-    private MediatorDevice getChannelDevice(DeviceDto deviceDto, MediatorCategory category) {
-        MediatorDevice device = new MediatorDevice();
-        MediatorDevice old = this.findByHostCodeAndCodeAndOrgId(deviceDto.getEquipmentCode(), deviceDto.getChannelCode(), deviceDto.getOrg().getId());
-        if (old != null) {
-            device = old;
-        }
-        device.setDeviceName(deviceDto.getChannelName());
-        device.setHostCode(deviceDto.getEquipmentCode());
-        device.setOrgId(deviceDto.getOrg().getId());
-        device.setOrgPath(deviceDto.getOrg().getPath());
-        device.setOrgName(deviceDto.getOrg().getName());
-        device.setChannelCode(deviceDto.getChannelCode());
-        device.setIp(deviceDto.getNetAddress());
-        device.setOnLine(DeviceOnlineStatus.UNKNOW.ordinal());
-        final LocalDateTime now = LocalDateTime.now();
-        device.setUpdateTime(now);
-        device.setCreateTime(now);
-        device.setIsAlarm(false);
-        device.setDoStatus(null);
-        if (category != null) {
-            device.setCategoryId(category.getId());
-        }
-        device.setSource(1);
-        device.setDeleted(false);
-        return device;
-    }
-
-    @Override
-    public MediatorDevice findByHostCodeAndCodeAndOrgId(String equipmentCode, String channelCode, Long orgId) {
-        return lambdaQuery()
-                .eq(MediatorDevice::getHostCode, equipmentCode)
-                .eq(MediatorDevice::getChannelCode, channelCode)
-                .eq(MediatorDevice::getOrgId, orgId)
-                .last(Constants.LIMIT1)
-                .one();
-    }
-}

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

@@ -2,4 +2,9 @@
 <!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.IotDvrChannelMapper">
 
+    <update id="batchUpdateDel">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            update iot_dvr_channel set deleted = 1 where host_code = #{item.equipmentCode} and org_id = #{item.orgId}
+        </foreach>
+    </update>
 </mapper>