Bläddra i källkod

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

 Conflicts:
	project_data/sql/0.0.6-iot/soc/soc.sql
zhulu 1 år sedan
förälder
incheckning
bf8feb8f7e
20 ändrade filer med 390 tillägg och 125 borttagningar
  1. 18 3
      project_data/sql/0.0.6-iot/soc/soc.sql
  2. 2 0
      soc-auth/src/main/java/com/xunmei/auth/SocAuthApplication.java
  3. 5 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/mediator/domain/IotAlarmData.java
  4. 2 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/SocCoreApplication.java
  5. 2 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/SocIotApplication.java
  6. 1 1
      soc-modules/soc-modules-iot/src/main/resources/mapper/DvrDiskMapper.xml
  7. 1 1
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml
  8. 1 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java
  9. 19 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/enums/AlarmDataTypeEnum.java
  10. 35 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/enums/AlarmVideoTypeEnum.java
  11. 2 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDeviceMapper.java
  12. 2 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotSensorMapper.java
  13. 22 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotAlarmDataService.java
  14. 2 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotSensorService.java
  15. 162 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmDataServiceImpl.java
  16. 19 4
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java
  17. 71 41
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotSensorServiceImpl.java
  18. 18 69
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/VideoDiagnosisRecordServiceImpl.java
  19. 1 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java
  20. 5 1
      soc-modules/soc-modules-mediator/src/main/resources/mapper/IotSensorMapper.xml

+ 18 - 3
project_data/sql/0.0.6-iot/soc/soc.sql

@@ -702,6 +702,7 @@ CREATE TABLE `iot_alarm_data` (
     `content` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '告警内容',
     `alarm_value` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '告警值',
     `is_do` int DEFAULT NULL COMMENT '0未处理1已处理',
+    `data_type` int DEFAULT NULL COMMENT '0动环告警 1主机类告警',
     `do_time` datetime DEFAULT NULL COMMENT '处理时间',
     `do_type` tinyint DEFAULT '0' COMMENT '处理方式:0:为处理,1:(暂无)2:误报,3:正常告警,4:报修',
     `create_time` datetime DEFAULT NULL COMMENT '创建时间',
@@ -798,7 +799,7 @@ INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `c
 INSERT INTO `sys_dict_type` ( `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('视频诊断结果', 'video_diagnosis_state', '0', '超级管理员', '2024-02-22 18:04:19', '', NULL, NULL);
 INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '完整', '0', 'video_integrity_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:01:50', '', NULL, NULL);
 INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 1, '部分丢失', '1', 'video_integrity_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:02:01', '', NULL, NULL);
-INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 2, '部丢失', '2', 'video_integrity_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:02:08', '', NULL, NULL);
+INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 2, '部丢失', '2', 'video_integrity_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:02:08', '', NULL, NULL);
 INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '完整', '0', 'video_days_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:03:41', '', NULL, NULL);
 INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 1, '不完整', '1', 'video_days_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:03:48', '', NULL, NULL);
 INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '正常', '0', 'video_diagnosis_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:04:49', '', NULL, NULL);
@@ -852,6 +853,20 @@ INSERT INTO `sys_dict_data`(`dict_sort`, `dict_label`, `dict_value`, `dict_type`
 
 delete from sys_dict_type where dict_type in ('app_sensor_device_type');
 delete from sys_dict_data where dict_type in ('app_sensor_device_type');
+INSERT INTO `sys_dict_type` ( `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 'App动环传感器设备类型', 'app_sensor_device_type', '0', '超级管理员', '2024-03-04 16:21:31', '', NULL, '值与web应保持一致,文本有差异');
+INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '温湿度', '4183', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:22:31', '', NULL, NULL);
+INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 1, '红外', '4181', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:22:41', '超级管理员', '2024-03-04 16:22:45', NULL);
+INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 2, '烟感', '4182', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:22:58', '', NULL, NULL);
+INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 3, '水浸', '4184', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:23:16', '', NULL, NULL);
+INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 4, '门窗磁', '4188', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:23:38', '', NULL, NULL);
+INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 5, '燃气', '41885', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:23:49', '', NULL, NULL);
+
+delete from sys_dict_type where dict_type in ('iot_device_net_status');
+delete from sys_dict_data where dict_type in (iot_device_net_status);
+INSERT INTO `sys_dict_type` (`dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( '物联设备网络状态', 'iot_device_net_status', '0', '超级管理员', '2024-02-23 10:23:34', '', NULL, NULL);
+INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '正常', '0', 'iot_device_net_status', NULL, 'default', 'N', '0', '超级管理员', '2024-02-23 10:24:07', '', NULL, NULL);
+INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 1, '异常', '1', 'iot_device_net_status', NULL, 'default', 'N', '0', '超级管理员', '2024-02-23 10:24:16', '', NULL, NULL);
+INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 2, '中断', '2', 'iot_device_net_status', NULL, 'default', 'N', '0', '超级管理员', '2024-02-23 10:24:24', '', NULL, NULL);
 INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20231113254, 'App动环传感器设备类型', 'app_sensor_device_type', '0', '超级管理员', '2024-03-04 16:21:31', '', NULL, '值与web应保持一致,文本有差异');
 INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20231115451, 0, '温湿度', '4183', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:22:31', '', NULL, NULL);
 INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20231115452, 1, '红外', '4181', 'app_sensor_device_type', NULL, 'default', 'N', '0', '超级管理员', '2024-03-04 16:22:41', '超级管理员', '2024-03-04 16:22:45', NULL);
@@ -862,8 +877,8 @@ INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value
 
 
 -- 调整统计报表菜单名称
-UPDATE sys_menu m set m.menu_name='行社全面检查统计情况表' WHERE m.menu_name ='行社全面检查统计报表';
-UPDATE sys_menu m set m.menu_name='外包履职评价统计情况表' WHERE m.menu_name ='外包履职评价统计表';
+UPDATE sys_menu m set m.menu_name='行社全面检查情况表' WHERE m.menu_name ='行社全面检查统计报表';
+UPDATE sys_menu m set m.menu_name='外包履职评价情况表' WHERE m.menu_name ='外包履职评价统计表';
 UPDATE sys_menu m set m.menu_name='报警测试情况表' WHERE m.menu_name ='报警测试报表';
 UPDATE sys_menu m set m.menu_name='备用电源维护情况表' WHERE m.menu_name ='备用电源维护报表';
 UPDATE sys_menu m set m.menu_name='离行式自助银行巡检情况表' WHERE m.menu_name ='离行式自助银行巡检报表';

+ 2 - 0
soc-auth/src/main/java/com/xunmei/auth/SocAuthApplication.java

@@ -5,12 +5,14 @@ import com.xunmei.common.swagger.annotation.EnableCustomSwagger2;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 
 /**
  * 认证授权中心
  * 
  * @author xunmei
  */
+@RefreshScope
 @EnableSocFeignClients
 @EnableCustomSwagger2
 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

+ 5 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/mediator/domain/IotAlarmData.java

@@ -51,6 +51,11 @@ public class IotAlarmData extends BaseEntity {
     @TableField("org_id")
     private Long orgId;
 
+
+    @ApiModelProperty(value = "告警数据类型:0 动环类告警,1主机类告警")
+    @TableField("data_type")
+    private Integer dataType;
+
     @ApiModelProperty(value = "报警源类型(设备类型):4:烟雾传感器;5: 温湿度采集器;6:水浸; 7:门磁、窗磁;8:卷帘门门磁;9:地磁;10燃气报警器;50:报警防区")
     @TableField("source_type")
     private Integer sourceType;

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/SocCoreApplication.java

@@ -7,10 +7,11 @@ import com.xunmei.common.swagger.annotation.EnableCustomSwagger2;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableAsync;
 
-
+@RefreshScope
 @MapperScan("com.xunmei.core.**.mapper")
 @EnableCustomConfig
 @ComponentScan(basePackages = {"com.xunmei.core", "com.xunmei.common.redis"})

+ 2 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/SocIotApplication.java

@@ -6,8 +6,9 @@ import com.xunmei.common.security.annotation.EnableSocFeignClients;
 import com.xunmei.common.swagger.annotation.EnableCustomSwagger2;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.scheduling.annotation.EnableAsync;
-
+@RefreshScope
 @EnableAsync
 @EnableCustomConfig
 @EnableCustomSwagger2

+ 1 - 1
soc-modules/soc-modules-iot/src/main/resources/mapper/DvrDiskMapper.xml

@@ -57,7 +57,7 @@
         FROM
         iot_device d
         left join iot_device_detection dd on d.equipment_code =dd.equipment_code
-        LEFT JOIN iot_dvr_hard_disk_detection dhd ON d.equipment_code = dd.equipment_code
+<!--        LEFT JOIN iot_dvr_hard_disk_detection dhd ON d.equipment_code = dhd.equipment_code-->
         WHERE
         d.category_id=#{pageDto.categoryId}
         <if test="pageDto.checkSub==true">

+ 1 - 1
soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml

@@ -76,7 +76,7 @@
             and d.equipment_name like concat('%', #{pageDto.hostName},'%')
         </if>
         <if test="pageDto.channelName!=null and pageDto.channelName!=''">
-            and d.channel_name like concat('%', #{pageDto.channelName},'%')
+            and c.channel_name like concat('%', #{pageDto.channelName},'%')
         </if>
         <if test="pageDto.integrityState!=null">
             and vic.status=#{pageDto.integrityState}

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

@@ -110,7 +110,7 @@ public class DataController {
 
 
 
-    @ApiOperation(value = "传感器通用设备信息同步", notes = "直连主机传感器")
+    @ApiOperation(value = "传感器通用设备信息同步", notes = "直连主机传感器,每个完整的包为一个机构机构数据,非所有机构数据")
     @PostMapping({"/api/data/sensorCommonList"})
     public ReceiveErrorDto sensor(String msgId, @RequestBody DataPageDto<SensorDto> sensors) {
         LogUtils.DIRECT_HOST_SENSOR.info("【北向接口-{}】【msgId:{}】【接收参数:{}】", "接受传感器通用设备信息同步:/api/data/sensorCommonList", msgId, JSON.toJSONString(sensors));

+ 19 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/enums/AlarmDataTypeEnum.java

@@ -0,0 +1,19 @@
+package com.xunmei.mediator.api.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+/**
+ * 告警数据类型枚举
+ */
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public enum AlarmDataTypeEnum {
+
+    IOT_ALARM(0),
+    HOST_ALARM(1);
+
+    private int value;
+}

+ 35 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/enums/AlarmVideoTypeEnum.java

@@ -0,0 +1,35 @@
+package com.xunmei.mediator.api.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public enum AlarmVideoTypeEnum {
+
+    SIGNALLOST(1001,"信号丢失"),
+    OCCLUDE(1002,"遮挡"),
+    BRIGHTNESS(1003,"亮度"),
+    COLORCAST(1004,"偏色"),
+    SNOWFLAKE(1005,"雪花"),
+    STRIPE(1006,"条纹"),
+    CONTRAST(1007,"对比度"),
+    BLURRY(1008,"模糊"),
+    DVRDISK(1009,"硬盘");
+
+    private int value;
+
+    private String text;
+
+    public static String getTextByValue(int property) {
+        for (AlarmVideoTypeEnum obj : values()) {
+            if (obj.getValue() == property) {
+                return obj.getText();
+            }
+        }
+
+        throw new IllegalArgumentException("Invalid property.");
+    }
+}

+ 2 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/mapper/IotDeviceMapper.java

@@ -3,6 +3,7 @@ package com.xunmei.mediator.api.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -12,6 +13,7 @@ import com.xunmei.common.core.domain.iot.domain.IotDevice;
  * @author oygj
  * @since 2024-02-20
  */
+@Mapper
 public interface IotDeviceMapper extends BaseMapper<IotDevice> {
 
 }

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

@@ -4,6 +4,7 @@ package com.xunmei.mediator.api.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -16,4 +17,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface IotSensorMapper extends BaseMapper<IotSensor> {
 
+    void updateDelByOrgId(@Param("orgId") Long orgId);
 }

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

@@ -1,8 +1,10 @@
 package com.xunmei.mediator.api.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
+import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisRecord;
 
 import java.util.List;
 
@@ -25,7 +27,26 @@ public interface IotAlarmDataService extends IService<IotAlarmData> {
      */
     void dealSensorData(IotSensor iotSensor)throws Exception;
 
-
+    /**
+     * 处理动环类告警数据
+     * @param iotSensor
+     * @throws Exception
+     */
     void dealSensorListData(List<IotSensor> iotSensor)throws Exception;
 
+    /**
+     * 视频质量诊断告警数据
+     * @param videoDiagnosis
+     * @throws Exception
+     */
+    void dealVideoDiagnosisData(MediatorVideoDiagnosisRecord videoDiagnosis)throws Exception;
+
+
+    /**
+     * 硬盘告警处理
+     * @param iotDvrDisk
+     * @throws Exception
+     */
+    void dealDvrDiskData(IotDvrDisk iotDvrDisk)throws Exception;
+
 }

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

@@ -21,4 +21,6 @@ public interface IotSensorService extends IService<IotSensor> {
 
     ReceiveErrorDto saveDirectHostStatus(DataPageDto<SensorStatusDto> statuses, String msgId);
      void saveStatusAsync(DataPageDto<SensorStatusDto> request, String msgId);
+
+    void updateDelByOrgId(Long orgId);
 }

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

@@ -8,14 +8,19 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.iot.domain.IotDevice;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleSource;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmSystemField;
+import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisRecord;
 import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.mediator.api.enums.AlarmDataTypeEnum;
 import com.xunmei.mediator.api.enums.AlarmRuleExpressOperateEnum;
+import com.xunmei.mediator.api.enums.AlarmVideoTypeEnum;
 import com.xunmei.mediator.api.mapper.*;
 import com.xunmei.mediator.api.service.IotAlarmDataService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,6 +55,9 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
     @Autowired
     private IotSensorMapper iotSensorMapper;
 
+    @Autowired
+    private IotDeviceMapper iotDeviceMapper;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void dealSensorData(IotSensor iotSensor) throws Exception {
@@ -138,6 +146,141 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void dealVideoDiagnosisData(MediatorVideoDiagnosisRecord videoDiagnosis) throws Exception {
+        //设备名称
+        String deviceName = videoDiagnosis.getDeviceName();
+        //通道名称
+        String channelName = videoDiagnosis.getChannelName();
+        //设备id
+        String deviceId = videoDiagnosis.getDeviceId();
+        //机构id
+        Long orgId = videoDiagnosis.getOrgId();
+
+        //信号丢失 0: 正常 | 1:异常 1001
+        Integer signalLost = videoDiagnosis.getSignalLost();
+        dealAlarmVideo(AlarmVideoTypeEnum.SIGNALLOST.getValue(),signalLost,deviceName,channelName,deviceId,orgId);
+
+        //遮挡  0: 正常 | 1:异常  1002
+        Integer occlude = videoDiagnosis.getOcclude();
+        dealAlarmVideo(AlarmVideoTypeEnum.OCCLUDE.getValue(),occlude,deviceName,channelName,deviceId,orgId);
+
+        //亮度  0: 正常 | 1:异常 1003
+        Integer brightness = videoDiagnosis.getBrightness();
+        dealAlarmVideo(AlarmVideoTypeEnum.BRIGHTNESS.getValue(),brightness,deviceName,channelName,deviceId,orgId);
+
+        //偏色  0: 正常 | 1:异常 1004
+        Integer colorCast = videoDiagnosis.getColorCast();
+        dealAlarmVideo(AlarmVideoTypeEnum.COLORCAST.getValue(),colorCast,deviceName,channelName,deviceId,orgId);
+
+        //雪花  0: 正常 | 1:异常 1005
+        Integer snowflake = videoDiagnosis.getSnowflake();
+        dealAlarmVideo(AlarmVideoTypeEnum.SNOWFLAKE.getValue(),snowflake,deviceName,channelName,deviceId,orgId);
+
+        //条纹  0: 正常 | 1:异常 1006
+        Integer stripe = videoDiagnosis.getStripe();
+        dealAlarmVideo(AlarmVideoTypeEnum.STRIPE.getValue(),stripe,deviceName,channelName,deviceId,orgId);
+
+        //对比度  0: 正常 | 1:异常 1007
+        Integer contrast = videoDiagnosis.getContrast();
+        dealAlarmVideo(AlarmVideoTypeEnum.CONTRAST.getValue(),contrast,deviceName,channelName,deviceId,orgId);
+
+        //模糊  0: 正常 | 1:异常 1008
+        Integer blurry = videoDiagnosis.getBlurry();
+        dealAlarmVideo(AlarmVideoTypeEnum.BLURRY.getValue(),blurry,deviceName,channelName,deviceId,orgId);
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void dealDvrDiskData(IotDvrDisk iotDvrDisk) throws Exception {
+        Long orgId = iotDvrDisk.getOrgId();
+
+        //硬盘状态。0:正常,1:异常
+        Integer state = iotDvrDisk.getState();
+
+        //监控主机唯一标识
+        String hostCode = iotDvrDisk.getHostCode();
+
+        QueryWrapper<IotDevice> idqw = new QueryWrapper<>();
+        idqw.lambda().eq(IotDevice::getEquipmentCode,hostCode).eq(IotDevice::getOrgId,orgId);
+        IotDevice iotDevice = iotDeviceMapper.selectOne(idqw);
+        if(iotDevice == null){
+            return;
+        }
+        String equipmentName = iotDevice.getEquipmentName();
+        String diskName = iotDvrDisk.getDiskName();
+
+        hostCode = hostCode + "__" +iotDvrDisk.getDiskIndex();
+
+        QueryWrapper<IotAlarmData> qw = new QueryWrapper<>();
+        qw.lambda().eq(IotAlarmData::getOrgId,orgId).eq(IotAlarmData::getDeviceId,hostCode).isNull(IotAlarmData::getEndTime);
+        List<IotAlarmData> datas = baseMapper.selectList(qw);
+
+
+        if(state ==1 && datas.size() == 0){
+            //报警,且没有告警数据
+            IotAlarmData alarmDisk = createAlarmDisk(equipmentName, diskName, orgId, hostCode);
+            this.save(alarmDisk);
+        }
+
+        if(state == 0 && datas.size() > 0){
+            IotAlarmData iotAlarmData = datas.get(0);
+            iotAlarmData.setEndTime(LocalDateTime.now());
+            this.updateById(iotAlarmData);
+        }
+
+
+    }
+
+    private IotAlarmData createAlarmDisk(String equipmentName,String diskName, long orgId, String hostCode){
+        IotAlarmData iotAlarmData = new IotAlarmData();
+        iotAlarmData.setAlarmValue("异常");
+        iotAlarmData.setTime(LocalDateTime.now());
+        iotAlarmData.setDeviceName(equipmentName + "-" + diskName);
+        iotAlarmData.setRuleId(1L);
+        iotAlarmData.setSourceType(AlarmVideoTypeEnum.DVRDISK.getValue());
+        iotAlarmData.setSourceTypeDes(AlarmVideoTypeEnum.getTextByValue(AlarmVideoTypeEnum.DVRDISK.getValue()));
+        iotAlarmData.setFieldCode(AlarmVideoTypeEnum.DVRDISK.getValue() + "");
+        iotAlarmData.setOperator("EQUALS");
+        iotAlarmData.setValue("1");
+        iotAlarmData.setValueText("告警");
+        iotAlarmData.setContent(iotAlarmData.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes() + "告警");
+        iotAlarmData.setOrgId(orgId);
+        iotAlarmData.setDataType(AlarmDataTypeEnum.HOST_ALARM.getValue());
+        iotAlarmData.setDeviceId(hostCode);
+        return iotAlarmData;
+    }
+
+    private void dealAlarmVideo(int diagnosisType ,Integer diagnosisValue,String deviceName,String channelName,String deviceId,Long orgId){
+
+        QueryWrapper<IotAlarmData> qw = new QueryWrapper<>();
+        qw.lambda().eq(IotAlarmData::getDeviceId,deviceId).eq(IotAlarmData::getOrgId,orgId)
+                .eq(IotAlarmData::getSourceType,diagnosisType).isNull(IotAlarmData::getEndTime);
+        List<IotAlarmData> iots = baseMapper.selectList(qw);
+
+        if(diagnosisValue == 1 && iots.size() == 0){
+            /**
+             * 报警处理逻辑
+             * 1、判断报警表中是否有该类报警的数据;
+             * 2、没有,则新增该类报警。
+             * 3、有,这不做处理
+             */
+            //不存在告警,创建告警数据
+            IotAlarmData iotAlarmData = builderAlarmVideo(deviceName,channelName,diagnosisType,orgId,deviceId);
+            this.save(iotAlarmData);
+
+
+        }
+        if(diagnosisValue == 0 && iots.size() > 0){
+            IotAlarmData iotAlarmData = iots.get(0);
+            iotAlarmData.setEndTime(LocalDateTime.now());
+            this.updateById(iotAlarmData);
+        }
+
+    }
+
     private IotAlarmData createAlarmData(IotSensor iotSensor,IotAlarmRuleExpress express,Map<String, IotAlarmSystemField> fieldMap){
         IotAlarmData iotAlarmData = null;
         String operator = express.getOperator();
@@ -184,6 +327,24 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         return iotAlarmData;
     }
 
+    private IotAlarmData builderAlarmVideo(String deviceName,String channelName,int diagnosisType, long orgId,String deviceId){
+        IotAlarmData iotAlarmData = new IotAlarmData();
+        iotAlarmData.setAlarmValue("异常");
+        iotAlarmData.setTime(LocalDateTime.now());
+        iotAlarmData.setDeviceName(deviceName + "-" + channelName);
+        iotAlarmData.setRuleId(1L);
+        iotAlarmData.setSourceType(diagnosisType);
+        iotAlarmData.setSourceTypeDes(AlarmVideoTypeEnum.getTextByValue(diagnosisType));
+        iotAlarmData.setFieldCode(diagnosisType + "");
+        iotAlarmData.setOperator("EQUALS");
+        iotAlarmData.setValue("1");
+        iotAlarmData.setValueText("告警");
+        iotAlarmData.setContent(iotAlarmData.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes() + "告警");
+        iotAlarmData.setOrgId(orgId);
+        iotAlarmData.setDataType(AlarmDataTypeEnum.HOST_ALARM.getValue());
+        iotAlarmData.setDeviceId(deviceId);
+        return iotAlarmData;
+    }
 
     private IotAlarmData builderAlarm(String sensorValue,IotAlarmSystemField field,IotAlarmRuleExpress express,IotSensor iotSensor){
         IotAlarmData iotAlarmData = new IotAlarmData();
@@ -199,6 +360,7 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         iotAlarmData.setValueText(express.getValueText());
         iotAlarmData.setContent(iotSensor.getDeviceName() + "触发" + field.getName());
         iotAlarmData.setOrgId(iotSensor.getOrgId());
+        iotAlarmData.setDataType(AlarmDataTypeEnum.IOT_ALARM.getValue());
         iotAlarmData.setDeviceId(iotSensor.getDeviceCode());
         return iotAlarmData;
     }

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

@@ -13,10 +13,7 @@ import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.mediator.api.mapper.IotDvrDiskMapper;
-import com.xunmei.mediator.api.service.IIotDeviceService;
-import com.xunmei.mediator.api.service.IotDvrDiskService;
-import com.xunmei.mediator.api.service.NorthErrorService;
-import com.xunmei.mediator.api.service.NorthStatisticsSyncService;
+import com.xunmei.mediator.api.service.*;
 import com.xunmei.mediator.util.CheckDataUtil;
 import com.xunmei.mediator.util.RedisCheckRepeatDataUtil;
 import com.xunmei.system.api.domain.north.NorthError;
@@ -31,6 +28,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import java.time.LocalDateTime;
 import java.util.*;
@@ -56,6 +55,9 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
     @Autowired
     private IIotDeviceService iotDeviceService;
 
+    @Autowired
+    private IotAlarmDataService iotAlarmDataService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateStatusByDiskDetection(IotDvrHardDiskDetection videoRecorderHardDiskDetection) {
@@ -120,6 +122,19 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
                 throw new RuntimeException(e.getMessage());
             }
         }
+
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+            @Override
+            public void afterCommit() {
+                try {
+                    for (IotDvrDisk dvrdisk : dvrdisks) {
+                        iotAlarmDataService.dealDvrDiskData(dvrdisk);
+                    }
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        });
     }
 
     private Map<String, Object> checkDvrDiskPageDto(List<DvrDiskPageDto> dvrdiskPageLists, String msgId) throws IllegalAccessException {

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

@@ -27,6 +27,7 @@ import com.xunmei.system.api.dto.SensorStatusDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.enums.ElectricityMeterAttributes;
 import com.xunmei.system.api.util.LogUtils;
+import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -67,6 +68,20 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void updateDelByOrgId(Long orgId) {
+        if (ObjectUtil.isNull(orgId)) {
+            return;
+        }
+        final List<IotSensor> sensors = baseMapper.selectList(new LambdaQueryWrapper<IotSensor>().eq(IotSensor::getSource, 1).eq(IotSensor::getOrgId, orgId));
+        final List<String> collect = sensors.stream().map(IotSensor::getDeviceCode).distinct().collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(collect)) {
+            iotSensorLogService.remove(new LambdaQueryWrapper<IotSensorLog>().eq(IotSensorLog::getOrgId, orgId).in(IotSensorLog::getDeviceCode, collect));
+        }
+        baseMapper.updateDelByOrgId(orgId);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public ReceiveErrorDto saveDirectHostStatus(DataPageDto<SensorStatusDto> request, String msgId) {
         ReceiveErrorDto dto = CheckDataUtil.checkObjFieldIsNull(request);
 
@@ -78,10 +93,27 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
     }
 
     @Override
-    public void saveStatusAsync(DataPageDto<SensorStatusDto> request, String msgId){
+    public void saveStatusAsync(DataPageDto<SensorStatusDto> request, String msgId) {
         String path = "/api/status/sensorCommon";
         List<NorthError> errors = new ArrayList<>();
-        Map<String, List<IotSensor>> productDeviceMap = getAllDevice();
+        final long count = request.getData().stream().map(SensorStatusDto::getOrgCode).distinct().count();
+        if (count > 1) {
+            errors.add(new NorthError(msgId, path, StringUtil.EMPTY_STRING, "数据异常:完整数据内发现存在不同机构数据"));
+            northErrorService.saveErrorData(errors);
+            return;
+        }
+        final SensorStatusDto dto = request.getData().get(0);
+        final SysOrg org = remoteOrgService.findByCode(dto.getOrgCode(), SecurityConstants.INNER);
+        if (org == null) {
+            errors.add(new NorthError(msgId, path, dto, "参数非法:机构orgCode不存在:" + dto.getOrgCode()));
+            northErrorService.saveErrorData(errors);
+            return;
+        }
+        Map<String, List<IotSensor>> productDeviceMap = getAllDevice(org.getId());
+        if (ObjectUtil.isEmpty(productDeviceMap)) {
+            LogUtils.DIRECT_HOST_SENSOR_STATUS.error("处理动环传感器状态时,未查询到传感器数据!");
+            return;
+        }
         List<IotSensor> sensorList = new ArrayList<>();
         List<IotSensorLog> sensorLogList = new ArrayList<>();
         for (SensorStatusDto status : request.getData()) {
@@ -90,17 +122,14 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
                         , status, "参数非法:未传orgCode"));
                 continue;
             }
-            final SysOrg org = remoteOrgService.findByCode(status.getOrgCode(), SecurityConstants.INNER);
-            if (org == null) {
-                errors.add(new NorthError(msgId, path
-                        , status, "参数非法:机构orgCode不存在:" + status.getOrgCode()));
+            final List<IotSensor> iotSensors = productDeviceMap.get(String.valueOf(status.getDeviceCode()));
+            if (ObjectUtil.isEmpty(iotSensors)) {
+                errors.add(new NorthError(msgId, path, status, "对应设备不存在:" + status.getDeviceCode()));
                 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, path
-                        , status, "对应设备不存在:" + status.getDeviceCode()));
+                errors.add(new NorthError(msgId, path, status, "对应设备不存在:" + status.getDeviceCode()));
                 continue;
             }
             final String infoStr = JSON.toJSONString(status.getInfos());
@@ -157,8 +186,12 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
             } else {
                 obj.put("unit", attributesEnum.getEnumText());
                 final Map extraMap = JSON.parseObject(attributesEnum.getEnumText(), Map.class);
-                final String o = (String) extraMap.get(val);
-                obj.put("res", o);
+                for (Object o : extraMap.keySet()) {
+                    if (String.valueOf(o).equals(val)) {
+                        obj.put("res", (String) extraMap.get(o));
+                    }
+                }
+
             }
         }
         return JSON.toJSONString(jsonArray);
@@ -169,35 +202,43 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
     public ReceiveErrorDto saveDirectHost(DataPageDto<SensorDto> request, String msgId) {
         //验证基础分页信息
         ReceiveErrorDto dto = CheckDataUtil.checkObjFieldIsNull(request);
-
-
         if (dto.getSuccess()) {
             //分页数据的存取
             final List<SensorDto> data = RedisCheckRepeatDataUtil.isCompleted(request, SensorDto.class);
-
             LogUtils.DIRECT_HOST_SENSOR.info("判断是否获取通用传感器全部信息分页数据:{}", data.size() > 0);
             if (ObjectUtil.isEmpty(data)) {
                 return dto;
             }
+            List<IotSensor> devices = convertToDomain(data, msgId);
+            if (ObjectUtil.isEmpty(devices)) {
 
-           /* new Thread(() -> {
-                //删除直连主机传感器一个月前的状态数据
-                // productDeviceMapper.deleteDirectHostHistory(DateUtil.offset(new Date(), DateField.MONTH, -1));
-            }).start();*/
-
-            List<Long> deletedDeviceIds = new ArrayList<>();
-            List<IotSensor> devices = convertToDomain(data, msgId, deletedDeviceIds);
-            this.removeByIds(deletedDeviceIds);
+                return dto;
+            }
+            final Long orgId = devices.get(0).getOrgId();
+            this.updateDelByOrgId(orgId);
             this.saveOrUpdateBatch(devices);
         }
         return dto;
     }
 
-    private List<IotSensor> convertToDomain(List<SensorDto> sensorDtos, String msgId, List<Long> deletedDeviceIds) {
+    private List<IotSensor> convertToDomain(List<SensorDto> sensorDtos, String msgId) {
         List<IotSensor> domains = new ArrayList<>();
         List<NorthError> errors = new ArrayList<>();
         String path = "/api/data/sensorCommonList";
-        Map<String, List<IotSensor>> productDeviceMap = getAllDevice();
+
+        final SensorDto dto = sensorDtos.get(0);
+        final String orgCode = dto.getOrgCode();
+        SysOrg org = remoteOrgService.findByCode(orgCode, SecurityConstants.INNER);
+        if (org == null) {
+            errors.add(new NorthError(msgId, path, dto, "参数非法:机构orgCode不存在:" + orgCode));
+            return new ArrayList<>();
+        }
+        final long count = sensorDtos.stream().map(SensorDto::getOrgCode).distinct().count();
+        if (count > 1) {
+            errors.add(new NorthError(msgId, path, dto, "数据异常:完整数据内发现存在不同机构数据:" + orgCode));
+            return new ArrayList<>();
+        }
+        Map<String, List<IotSensor>> productDeviceMap = getAllDevice(org.getId());
         Set<String> uniqueSet = new HashSet<>();
         for (SensorDto sensorDto : sensorDtos) {
             NorthError error = null;
@@ -210,14 +251,7 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
                 continue;
             }
 
-            SysOrg org = remoteOrgService.findByCode(sensorDto.getOrgCode(), SecurityConstants.INNER);
-            if (org == null) {
-                error = new NorthError(msgId, path
-                        , sensorDto, "参数非法:机构orgCode不存在:" + sensorDto.getOrgCode());
-                errors.add(error);
-                continue;
-            }
-            String key = org.getId() + sensorDto.getDeviceCode();
+            String key = sensorDto.getDeviceCode();
             if (uniqueSet.contains(key)) {
                 errors.add(new NorthError(msgId, path
                         , sensorDto, "数据来源中,同机构中设备编号重复。"));
@@ -235,7 +269,6 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
             domain.setDeviceType(sensorDto.getDeviceType());
             domain.setDeleted(0);
             domain.setCreateTime(LocalDateTime.now());
-
             if (ObjectUtil.isNotEmpty(exists)) {
                 if (exists.size() > 1) {
                     errors.add(new NorthError(msgId, path, sensorDto, "同机构下设备编号重复,将取第一条"));
@@ -252,24 +285,21 @@ public class IotSensorServiceImpl extends ServiceImpl<IotSensorMapper, IotSensor
             domain.setSource(1);
             domains.add(domain);
         }
-
         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() {
+    private Map<String, List<IotSensor>> getAllDevice(Long orgId) {
         return baseMapper.selectList(new LambdaQueryWrapper<IotSensor>()
+                        .eq(ObjectUtil.isNotNull(orgId), IotSensor::getOrgId, orgId)
+                        .eq(IotSensor::getDeleted, 0)
                         .eq(IotSensor::getSource, 1))
                 .stream()
-                .collect(Collectors.groupingBy(c -> String.valueOf(c.getOrgId())));
+                .collect(Collectors.groupingBy(IotSensor::getDeviceCode));
     }
 
     private String convertDeviceType(String deviceType) {
-        if (ObjectUtil.isNotNull(deviceType)){
+        if (ObjectUtil.isEmpty(deviceType)) {
             return null;
         }
         return DictUtils.getDictLabel(DictConstants.SENSOR_DEVICE_TYPE, Integer.parseInt(deviceType));

+ 18 - 69
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/VideoDiagnosisRecordServiceImpl.java

@@ -14,10 +14,12 @@ import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.mediator.api.mapper.IotAlarmCodeMapper;
 import com.xunmei.mediator.api.mapper.MediatorCategoryMapper;
 import com.xunmei.mediator.api.mapper.VideoDiagnosisRecordMapper;
+import com.xunmei.mediator.api.service.*;
 import com.xunmei.mediator.api.service.IIotDeviceService;
 import com.xunmei.mediator.api.service.IIotDvrChannelService;
 import com.xunmei.mediator.api.service.IVideoDiagnosisLogService;
 import com.xunmei.mediator.api.service.IVideoDiagnosisRecordService;
+import com.xunmei.mediator.domain.dto.redis.RedisKey;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.mediator.domain.dto.videoDiagnosis.VideoDiagnosisDetailInfoVo;
 import com.xunmei.mediator.domain.dto.videoDiagnosis.VideoDiagnosisDto;
@@ -25,8 +27,11 @@ import com.xunmei.mediator.util.CheckDataUtil;
 import com.xunmei.mediator.util.RedisUtil;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import javax.annotation.Resource;
 import java.text.ParseException;
@@ -57,6 +62,9 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
     IIotDvrChannelService dvrChannelService;
     @Resource
     IotAlarmCodeMapper alarmCodeMapper;
+
+    @Autowired
+    private IotAlarmDataService iotAlarmDataService;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ReceiveErrorDto saveData(VideoDiagnosisDto videoDiagnosisDto, String msgId) throws IllegalAccessException, ParseException {
@@ -64,9 +72,9 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
         //与上次接收到的数据进行比较,如果相同则不进行处理
         //这里要返回true,不然接口调用端会重复发送
         if (redisUtil.compareWithCache(videoDiagnosisDto)) {
-          /*  error.setErrorMsg(RedisKey.REPORT_DATA_REFUSE_MSG);
+            error.setErrorMsg(RedisKey.REPORT_DATA_REFUSE_MSG);
             error.setSuccess(true);
-            return error;*/
+            return error;
         }
         Map<String, Object> map = this.checkVideoDiagnosisDto(videoDiagnosisDto);
         error = (ReceiveErrorDto) map.get("error");
@@ -124,12 +132,9 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
             map.put("device", channel);
             map.put("org", org);
            // map.put("category", category);
-            map.put("error", error);
-            return map;
-        } else {
-            map.put("error", error);
-            return map;
         }
+        map.put("error", error);
+        return map;
     }
 
     private Boolean checkDetailInfo(String detailInfo) {
@@ -217,54 +222,6 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
         videoDiagnosis.setDeviceId(String.valueOf(channel.getId()));
         this.dealDetailInfo(videoDiagnosis);
         objectMap.put("videoDiagnosis", videoDiagnosis);
-
-        QueryWrapper<IotAlarmCode> qw = new QueryWrapper<>();
-        qw.lambda().eq(IotAlarmCode::getParentId, 6);
-        qw.lambda().eq(IotAlarmCode::getDeleted, 0);
-        List<IotAlarmCode> codes = alarmCodeMapper.selectList(qw);
-        objectMap.put("codes", codes);
-
-       /* List<HostAlarmRecord> alarmRecords = this.buildHostAlarmRecord(videoDiagnosis, org, category, device, videoDiagnosisDto, codes);
-        if (alarmRecords != null && alarmRecords.size() > 0) {
-            QueryWrapper<HostAlarmRecord> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(HostAlarmRecord::getDeviceId, device.getId());
-            queryWrapper.lambda().eq(HostAlarmRecord::getOrgId, org.getId());
-            queryWrapper.lambda().eq(HostAlarmRecord::getAlarmStatus, 1);
-            List<HostAlarmRecord> alarmRecordList = hostAlarmRecordDao.list(queryWrapper);
-            //传过来的数据(告警未结束,需要插入的数据)
-            List<HostAlarmRecord> alarmRecordsa = alarmRecords.stream().filter(r -> r.getAlarmStatus() == 1).collect(Collectors.toList());
-            //传过来的数据(告警结束,需要修改的数据)
-            List<HostAlarmRecord> alarmRecordsb = alarmRecords.stream().filter(r -> r.getAlarmStatus() == 0).collect(Collectors.toList());
-            List<HostAlarmRecord> alarmRecordsInsert = new ArrayList<>();
-            List<HostAlarmRecord> alarmRecordsUpdate = new ArrayList<>();
-            if (alarmRecordsa != null && alarmRecordsa.size() > 0) {
-                for (HostAlarmRecord record : alarmRecordsa) {
-                    if (alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId()) && r.getAlarmCode().equals(record.getAlarmCode())).count() > 0) {
-                        continue;
-                    } else {
-                        record.setId(IDHelper.id());
-                        alarmRecordsInsert.add(record);
-
-                    }
-                }
-                objectMap.put("alarmRecordsInsert", alarmRecordsInsert);
-            }
-            if (alarmRecordsb != null && alarmRecordsb.size() > 0) {
-                for (HostAlarmRecord record : alarmRecordsb) {
-                    if (alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId()) && r.getAlarmCode().equals(record.getAlarmCode())).count() > 0) {
-                        List<HostAlarmRecord> recordaa = alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId()) && r.getAlarmCode().equals(record.getAlarmCode())).collect(Collectors.toList());
-                        if (recordaa != null && recordaa.size() > 0) {
-                            HostAlarmRecord recorda = recordaa.get(0); //alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId())).collect(Collectors.toList()).get(0);
-                            BeanHelper.copyProperties(recorda, record);
-                            alarmRecordsUpdate.add(recorda);
-                        }
-                    } else {
-                        continue;
-                    }
-                }
-                objectMap.put("alarmRecordsUpdate", alarmRecordsUpdate);
-            }
-        }*/
         return objectMap;
     }
     private void  dealDetailInfo(MediatorVideoDiagnosisRecord record){
@@ -335,23 +292,15 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
             throw new RuntimeException(e.getMessage());
         }
 
-    /*    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
             @Override
             public void afterCommit() {
-                //如果未开启自动生成运维单则 返回
-                if(alarmRecordsInsert!=null&&alarmRecordsInsert.size()>0){
-                    for (HostAlarmRecord record : alarmRecordsInsert) {
-                        List<AlarmCode> codes1 = codes.stream().filter(r -> r.getCode().equals(record.getAlarmCode())).collect(Collectors.toList());
-                        if (codes1 != null && codes1.size() > 0) {
-                            AlarmCode code = codes1.get(0);
-                            if (code != null && code.getAutoGenerate()!=null&& 0 != code.getAutoGenerate()) {
-                                deal(videoDiagnosisDto, videoDiagnosis, device.getId());
-                            }
-                        }
-
-                    }
+                try {
+                    iotAlarmDataService.dealVideoDiagnosisData(videoDiagnosis);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
                 }
             }
-        });*/
+        });
     }
 }

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

@@ -106,7 +106,7 @@ public class RedisCheckRepeatDataUtil {
             allPageKeyList.add(everyPageKey);
         }
         //判断是否拿到所有的数据
-        final List<Boolean> list = allPageKeyList.stream().map(key -> redisTemplate.hasKey(key)).distinct().collect(Collectors.toList());
+        final List<Boolean> list = allPageKeyList.stream().map(redisTemplate::hasKey).distinct().collect(Collectors.toList());
         if (list.contains(Boolean.FALSE)) {
             // return ListUtil.empty();
         }

+ 5 - 1
soc-modules/soc-modules-mediator/src/main/resources/mapper/IotSensorMapper.xml

@@ -1,5 +1,9 @@
 <?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">
-
+    <update id="updateDelByOrgId">
+        update iot_sensor
+        set deleted=1
+        where org_id = #{orgId}
+    </update>
 </mapper>