diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTPositionInfo.java b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTPositionInfo.java index f8cdfb2e5..d0bf18f8a 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTPositionInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTPositionInfo.java @@ -53,6 +53,12 @@ public class JTPositionInfo { @Schema(description = "时间") private String time; + /** + * 视频报警 + */ + @Schema(description = "视频报警") + private JTVideoAlarm videoAlarm; + public JTAlarmSign getAlarmSign() { return alarmSign; } @@ -117,6 +123,14 @@ public class JTPositionInfo { this.time = time; } + public JTVideoAlarm getVideoAlarm() { + return videoAlarm; + } + + public void setVideoAlarm(JTVideoAlarm videoAlarm) { + this.videoAlarm = videoAlarm; + } + @Override public String toString() { return "位置汇报信息: " + diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTVideoAlarm.java b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTVideoAlarm.java new file mode 100644 index 000000000..8c4d3bd4d --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/bean/JTVideoAlarm.java @@ -0,0 +1,159 @@ +package com.genersoft.iot.vmp.jt1078.bean; + +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.ArrayList; +import java.util.List; + +@Schema(description = "视频报警上报") +public class JTVideoAlarm { + + @Schema(description = "视频信号丢失报警的通道") + private List videoLossChannels; + + @Schema(description = "视频信号遮挡报警的通道") + private List videoOcclusionChannels; + + @Schema(description = "存储器故障报警状态,第 1-12 个主存储器,12-15 分别表示第 1-4 个灾备存储装置") + private List storageFaultAlarm; + + @Schema(description = "异常驾驶行为-疲劳") + private boolean drivingForFatigue; + + @Schema(description = "异常驾驶行为-打电话") + private boolean drivingForCall; + + @Schema(description = "异常驾驶行为-抽烟") + private boolean drivingSmoking; + + @Schema(description = "其他视频设备故障") + private boolean otherDeviceFailure; + + @Schema(description = "客车超员报警") + private boolean overcrowding; + + @Schema(description = "特殊报警录像达到存储阈值报警") + private boolean specialRecordFull; + + public JTVideoAlarm() { + } + + public static JTVideoAlarm getInstance(int alarm, int loss, int occlusion, short storageFault, short driving) { + JTVideoAlarm jtVideoAlarm = new JTVideoAlarm(); + if (alarm == 0) { + return jtVideoAlarm; + } + boolean lossAlarm = (alarm & 1) == 1; + boolean occlusionAlarm = (alarm >>> 1 & 1) == 1; + boolean storageFaultAlarm = (alarm >>> 2 & 1) == 1; + jtVideoAlarm.setOtherDeviceFailure((alarm >>> 3 & 1) == 1); + jtVideoAlarm.setOvercrowding((alarm >>> 4 & 1) == 1); + boolean drivingAlarm = (alarm >>> 5 & 1) == 1; + jtVideoAlarm.setSpecialRecordFull((alarm >>> 6 & 1) == 1); + if (lossAlarm && loss > 0) { + List videoLossChannels = new ArrayList<>(); + for (int i = 0; i < 32; i++) { + if ((loss >>> i & 1) == 1 ) { + videoLossChannels.add(i); + } + } + jtVideoAlarm.setVideoLossChannels(videoLossChannels); + } + if (occlusionAlarm && occlusion > 0) { + List videoOcclusionChannels = new ArrayList<>(); + for (int i = 0; i < 32; i++) { + if ((occlusion >>> i & 1) == 1) { + videoOcclusionChannels.add(i); + } + } + jtVideoAlarm.setVideoOcclusionChannels(videoOcclusionChannels); + } + if (storageFaultAlarm && storageFault > 0) { + List storageFaultAlarmContent = new ArrayList<>(); + for (int i = 0; i < 16; i++) { + if ((storageFault >>> i & 1) == 1) { + storageFaultAlarmContent.add(i); + } + } + jtVideoAlarm.setStorageFaultAlarm(storageFaultAlarmContent); + } + if (drivingAlarm && driving > 0) { + jtVideoAlarm.setDrivingForFatigue((driving & 1) == 1 ); + jtVideoAlarm.setDrivingForCall((driving >>> 1 & 1) == 1 ); + jtVideoAlarm.setDrivingSmoking((driving >>> 2 & 1) == 1 ); + } + return jtVideoAlarm; + } + + public List getVideoLossChannels() { + return videoLossChannels; + } + + public void setVideoLossChannels(List videoLossChannels) { + this.videoLossChannels = videoLossChannels; + } + + public List getVideoOcclusionChannels() { + return videoOcclusionChannels; + } + + public void setVideoOcclusionChannels(List videoOcclusionChannels) { + this.videoOcclusionChannels = videoOcclusionChannels; + } + + public List getStorageFaultAlarm() { + return storageFaultAlarm; + } + + public void setStorageFaultAlarm(List storageFaultAlarm) { + this.storageFaultAlarm = storageFaultAlarm; + } + + public boolean isDrivingForFatigue() { + return drivingForFatigue; + } + + public void setDrivingForFatigue(boolean drivingForFatigue) { + this.drivingForFatigue = drivingForFatigue; + } + + public boolean isDrivingForCall() { + return drivingForCall; + } + + public void setDrivingForCall(boolean drivingForCall) { + this.drivingForCall = drivingForCall; + } + + public boolean isDrivingSmoking() { + return drivingSmoking; + } + + public void setDrivingSmoking(boolean drivingSmoking) { + this.drivingSmoking = drivingSmoking; + } + + public boolean isOtherDeviceFailure() { + return otherDeviceFailure; + } + + public void setOtherDeviceFailure(boolean otherDeviceFailure) { + this.otherDeviceFailure = otherDeviceFailure; + } + + public boolean isOvercrowding() { + return overcrowding; + } + + public void setOvercrowding(boolean overcrowding) { + this.overcrowding = overcrowding; + } + + public boolean isSpecialRecordFull() { + return specialRecordFull; + } + + public void setSpecialRecordFull(boolean specialRecordFull) { + this.specialRecordFull = specialRecordFull; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0200.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0200.java index f418efd48..6e79e0cba 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0200.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0200.java @@ -1,10 +1,7 @@ package com.genersoft.iot.vmp.jt1078.proc.request; import com.genersoft.iot.vmp.jt1078.annotation.MsgId; -import com.genersoft.iot.vmp.jt1078.bean.JTAlarmSign; -import com.genersoft.iot.vmp.jt1078.bean.JTDevice; -import com.genersoft.iot.vmp.jt1078.bean.JTPositionInfo; -import com.genersoft.iot.vmp.jt1078.bean.JTStatus; +import com.genersoft.iot.vmp.jt1078.bean.*; import com.genersoft.iot.vmp.jt1078.proc.Header; import com.genersoft.iot.vmp.jt1078.proc.response.J8001; import com.genersoft.iot.vmp.jt1078.proc.response.Rs; @@ -46,6 +43,15 @@ public class J0200 extends Re { byte[] timeBytes = new byte[6]; buf.readBytes(timeBytes); positionInfo.setTime(BCDUtil.transform(timeBytes)); + + // 支持1078的视频报警上报 + int alarm = buf.readInt(); + int loss = buf.readInt(); + int occlusion = buf.readInt(); + short storageFault = buf.readShort(); + short driving = buf.readShort(); + JTVideoAlarm videoAlarm = JTVideoAlarm.getInstance(alarm, loss, occlusion, storageFault, driving); + positionInfo.setVideoAlarm(videoAlarm); log.info("[JT-位置汇报]: {}", positionInfo.toString()); return null; }