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