1
MrShi
2025-03-18 a836f03a5d1fbfa81e147d09ffdfa87ba3975c13
server/jtt808_parent/jtt808-server/src/main/java/org/yzh/protocol/t808/T0200.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
package org.yzh.protocol.t808;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.github.yezhihao.protostar.annotation.Field;
import io.github.yezhihao.protostar.annotation.Message;
import lombok.Data;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.commons.JT808;
import org.yzh.protocol.commons.transform.AttributeConverter;
import org.yzh.protocol.commons.transform.AttributeConverterYue;
import java.time.LocalDateTime;
import java.util.Map;
/**
 * @author yezhihao
 * https://gitee.com/yezhihao/jt808-server
 */
@JsonIgnoreProperties({"attributes",
        "alarmList",
        "dateTime",
        "messageId",
        "properties",
        "protocolVersion",
        "clientId", "serialNo",
        "packageTotal", "packageNo",
        "verified",
        "bodyLength",
        "encryption",
        "subpackage",
        "version",
        "reserved"})
@Message(JT808.位置信息汇报)
@Data
public class T0200 extends JTMessage {
    @Field(length = 4, desc = "报警标志")
    private int warnBit;
    @Field(length = 4, desc = "状态")
    private int statusBit;
    @Field(length = 4, desc = "纬度")
    private int latitude;
    @Field(length = 4, desc = "经度")
    private int longitude;
    @Field(length = 2, desc = "高程(ç±³)")
    private int altitude;
    @Field(length = 2, desc = "速度(1/10公里每小时)")
    private int speed;
    @Field(length = 2, desc = "方向")
    private int direction;
//    @Field(length = 6, charset = "BCD", desc = "时间(YYMMDDHHMMSS)")
//    private LocalDateTime deviceTime;
    @Field(length = 6, charset = "BCD", desc = "时间(YYYY-MM-DDTHH-mm-ss)")
    private LocalDateTime deviceTime;
    @Field(converter = AttributeConverter.class, desc = "位置附加信息", version = {-1, 0})
    @Field(converter = AttributeConverterYue.class, desc = "位置附加信息(粤标)", version = 1)
    private Map<Integer, Object> attributes;
    public int getWarnBit() {
        return warnBit;
    }
    public void setWarnBit(int warnBit) {
        this.warnBit = warnBit;
    }
    public int getStatusBit() {
        return statusBit;
    }
    public void setStatusBit(int statusBit) {
        this.statusBit = statusBit;
    }
    public int getLatitude() {
        return latitude;
    }
    public void setLatitude(int latitude) {
        this.latitude = latitude;
    }
    public int getLongitude() {
        return longitude;
    }
    public void setLongitude(int longitude) {
        this.longitude = longitude;
    }
    public int getAltitude() {
        return altitude;
    }
    public void setAltitude(int altitude) {
        this.altitude = altitude;
    }
    public int getSpeed() {
        return speed;
    }
    public void setSpeed(int speed) {
        this.speed = speed;
    }
    public int getDirection() {
        return direction;
    }
    public void setDirection(int direction) {
        this.direction = direction;
    }
    public LocalDateTime getDeviceTime() {
        return deviceTime;
    }
    public void setDeviceTime(LocalDateTime deviceTime) {
        this.deviceTime = deviceTime;
    }
    public int getAttributeInt(int key) {
        if (attributes != null) {
            Integer value = (Integer) attributes.get(key);
            if (value != null) {
                return value;
            }
        }
        return 0;
    }
    public long getAttributeLong(int key) {
        if (attributes != null) {
            Long value = (Long) attributes.get(key);
            if (value != null) {
                return value;
            }
        }
        return 0L;
    }
    private boolean updated;
    private double lng;
    private double lat;
    private float speedKph;
    @Override
    public boolean transform() {
        if (deviceTime == null)
            return false;
        lng = longitude / 1000000d;
        lat = latitude / 1000000d;
        speedKph = speed / 10f;
        return true;
    }
    public boolean updated() {
        return updated || !(updated = true);
    }
    public double getLng() {
        return lng;
    }
    public double getLat() {
        return lat;
    }
    public float getSpeedKph() {
        return speedKph;
    }
    @Override
    public String toString() {
        StringBuilder sb = toStringHead();
        sb.append("T0200{deviceTime=").append(deviceTime);
        sb.append(",longitude=").append(longitude);
        sb.append(",latitude=").append(latitude);
        sb.append(",altitude=").append(altitude);
        sb.append(",speed=").append(speed);
        sb.append(",direction=").append(direction);
        sb.append(",warnBit=").append(Integer.toBinaryString(warnBit));
        sb.append(",statusBit=").append(Integer.toBinaryString(statusBit));
        sb.append(",attributes=").append(attributes);
        sb.append('}');
        return sb.toString();
    }
}