package com.ruoyi.dataInterchange.model;
|
|
import cn.hutool.core.util.ArrayUtil;
|
import com.ruoyi.dataInterchange.pojo.BaseModel;
|
import com.ruoyi.dataInterchange.util.jtt809.common.ByteArrayUtil;
|
import com.ruoyi.dataInterchange.util.jtt809.common.Jtt809Util;
|
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.Unpooled;
|
import lombok.Data;
|
import org.springframework.data.elasticsearch.annotations.Document;
|
import org.springframework.data.elasticsearch.annotations.Field;
|
import org.springframework.data.elasticsearch.annotations.FieldType;
|
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* 上报报警信息
|
*
|
* @author zhibing.pu
|
* @Date 2025/3/3 14:50
|
*/
|
@Data
|
@Document(indexName = "up_warn_msg_adpt_info")
|
public class UPWarnMsgAdptInfo extends BaseModel {
|
/**
|
* 车牌号
|
*/
|
@Field(type = FieldType.Text)
|
private String vehicleNo;
|
/**
|
* 车牌颜色
|
*/
|
@Field(type = FieldType.Integer)
|
private int vehicleColor;
|
/**
|
* 子业务类型标识
|
*/
|
@Field(type = FieldType.Integer)
|
private int dataType;
|
/**
|
* 后续数据长度
|
*/
|
@Field(type = FieldType.Integer)
|
private int dataLength;
|
/**
|
* 报警信息来源
|
* 0x01: 车载终端
|
* 0x02: 企业监控平台
|
* 0x03: 政府监管平台
|
* 0x09: 其他
|
*/
|
@Field(type = FieldType.Integer)
|
private int warnSrc;
|
/**
|
* 报警类型
|
* 0x0001: 超速报警
|
* 0x0002: 疲劳驾驶报警
|
* 0x0003: 紧急报警
|
* 0x0004: 进入指定区域报警
|
* 0x0005: 离开指定区域报警
|
* 0x0006: 路段堵塞报警
|
* 0x0007: 危险路段报警
|
* 0x0008: 越界报警
|
* 0x0009: 盗警
|
*/
|
@Field(type = FieldType.Integer)
|
private int warnType;
|
/**
|
* 报警时间
|
*/
|
@Field(type = FieldType.Integer)
|
private long warnTime;
|
/**
|
* 信息ID
|
*/
|
@Field(type = FieldType.Text)
|
private String infoId;
|
/**
|
* 驾驶员姓名长度
|
*/
|
@Field(type = FieldType.Integer)
|
private int driverLength;
|
/**
|
* 驾驶员姓名
|
*/
|
@Field(type = FieldType.Text)
|
private String driver;
|
/**
|
* 驾驶员驾照号码长度
|
*/
|
@Field(type = FieldType.Integer)
|
private int driverNoLength;
|
/**
|
* 驾驶员驾照号码
|
*/
|
@Field(type = FieldType.Text)
|
private String driverNo;
|
/**
|
* 报警级别
|
*/
|
@Field(type = FieldType.Integer)
|
private int level;
|
/**
|
* 经度
|
*/
|
@Field(type = FieldType.Integer)
|
private int longitude;
|
/**
|
* 纬度
|
*/
|
@Field(type = FieldType.Integer)
|
private int latitude;
|
/**
|
* 海拔
|
*/
|
@Field(type = FieldType.Integer)
|
private int altitude;
|
/**
|
* 行车速度
|
*/
|
@Field(type = FieldType.Integer)
|
private int speed;
|
/**
|
* 行驶记录速度
|
*/
|
@Field(type = FieldType.Integer)
|
private int vec2;
|
/**
|
* 报警状态
|
* 1:报警开始
|
* 2:报警结束
|
*/
|
@Field(type = FieldType.Integer)
|
private int status;
|
/**
|
* 方向
|
*/
|
@Field(type = FieldType.Integer)
|
private int direction;
|
/**
|
* 报警数据长度
|
*/
|
@Field(type = FieldType.Integer)
|
private int infoLength;
|
/**
|
* 上报报警信息内容
|
*/
|
@Field(type = FieldType.Text)
|
private String infoContent;
|
/**
|
* 报警处理结果
|
* 0x00:处理中
|
* 0x01:已处理完毕
|
* 0x02:不作处理
|
* 0x03:将来处理
|
*/
|
@Field(type = FieldType.Integer)
|
private int result;
|
/**
|
* 报警督办发起时间
|
*/
|
@Field(type = FieldType.Long)
|
private long pushTime;
|
|
|
/**
|
* 解析报文
|
*/
|
public UPWarnMsgAdptInfo decode1(WarnMsg warnMsg) {
|
try {
|
byte[] data = warnMsg.getData();
|
ByteBuf byteBuf = Unpooled.wrappedBuffer(data);
|
this.vehicleNo = warnMsg.getVehicleNo();
|
this.vehicleColor = warnMsg.getVehicleColor();
|
this.dataType = warnMsg.getDataType();
|
this.dataLength = warnMsg.getDataLength();
|
|
//报警信息来源
|
this.warnSrc = byteBuf.readByte();
|
//报警类型
|
this.warnType = byteBuf.readShort();
|
byte[] readableBytes = new byte[8];
|
byteBuf.readBytes(readableBytes);
|
String time = ByteArrayUtil.bytes2HexStr(readableBytes);
|
//报警时间
|
this.warnTime = Long.parseLong(time, 16);
|
//信息ID
|
this.infoId = Integer.valueOf(byteBuf.readInt()).toString();
|
//报警数据长度
|
this.infoLength = byteBuf.readInt();
|
//上报报警信息内容
|
this.infoContent = Jtt809Util.readGBKString(byteBuf, this.infoLength);
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return this;
|
}
|
|
/**
|
* 解析报文(川标)
|
*/
|
public UPWarnMsgAdptInfo decode2(WarnMsg warnMsg) {
|
try {
|
byte[] data = warnMsg.getData();
|
ByteBuf byteBuf = Unpooled.wrappedBuffer(data);
|
this.vehicleNo = warnMsg.getVehicleNo();
|
this.vehicleColor = warnMsg.getVehicleColor();
|
this.dataType = warnMsg.getDataType();
|
this.dataLength = warnMsg.getDataLength();
|
|
//报警信息来源
|
this.warnSrc = byteBuf.readByte();
|
//报警类型
|
this.warnType = byteBuf.readShort();
|
byte[] readableBytes = new byte[8];
|
byteBuf.readBytes(readableBytes);
|
String time = ByteArrayUtil.bytes2HexStr(readableBytes);
|
//报警时间
|
this.warnTime = Long.parseLong(time, 16);
|
//团标扩展
|
//信息ID
|
this.infoId = Jtt809Util.readGBKString(byteBuf,32);
|
//驾驶员姓名长度
|
this.driverLength = byteBuf.readByte();
|
//驾驶员姓名
|
this.driver = Jtt809Util.readGBKString(byteBuf,this.driverLength);
|
//驾驶员驾照号码长度
|
this.driverNoLength = byteBuf.readByte();
|
//驾驶员驾照号码
|
this.driverNo = Jtt809Util.readGBKString(byteBuf,this.driverNoLength);
|
//报警级别
|
this.level = byteBuf.readByte();
|
//经度
|
this.longitude = byteBuf.readInt();
|
//纬度
|
this.latitude = byteBuf.readInt();
|
//海拔高度
|
this.altitude = byteBuf.readUnsignedShort();
|
//行车速度
|
this.speed = byteBuf.readUnsignedShort();
|
//行驶记录速度
|
this.vec2 = byteBuf.readUnsignedShort();
|
//报警状态
|
this.status = byteBuf.readByte();
|
//方向
|
this.direction = byteBuf.readUnsignedShort();
|
//报警数据长度
|
this.infoLength = byteBuf.readUnsignedShort();
|
//报警信息内容
|
this.infoContent = Jtt809Util.readGBKString(byteBuf,this.infoLength);
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
return this;
|
}
|
}
|