|  | @@ -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;
 | 
	
		
			
				|  |  |      }
 |