| package com.doumee.jtt808.web.model.vo; | 
|   | 
| import io.swagger.v3.oas.annotations.media.Schema; | 
| import org.yzh.protocol.commons.Charsets; | 
|   | 
| import java.io.*; | 
| import java.time.LocalDate; | 
|   | 
| import static io.github.yezhihao.protostar.util.DateTool.BCD; | 
|   | 
| /** | 
|  * @author yezhihao | 
|  * https://gitee.com/yezhihao/jt808-server | 
|  */ | 
| public class DeviceInfo { | 
|   | 
|     @Schema(description = "签发日期") | 
|     protected LocalDate issuedAt; | 
|     @Schema(description = "预留字段") | 
|     protected byte reserved; | 
|     @Schema(description = "设备id") | 
|     protected String deviceId; | 
|   | 
|     public DeviceInfo() { | 
|     } | 
|   | 
|     public DeviceInfo(byte[] bytes) { | 
|         formBytes(bytes); | 
|     } | 
|   | 
|     public DeviceInfo(String deviceId, LocalDate issuedAt) { | 
|         this.deviceId = deviceId; | 
|         this.issuedAt = issuedAt; | 
|     } | 
|   | 
|     public LocalDate getIssuedAt() { | 
|         return issuedAt; | 
|     } | 
|   | 
|     public void setIssuedAt(LocalDate issuedAt) { | 
|         this.issuedAt = issuedAt; | 
|     } | 
|   | 
|     public byte getReserved() { | 
|         return reserved; | 
|     } | 
|   | 
|     public void setReserved(byte reserved) { | 
|         this.reserved = reserved; | 
|     } | 
|   | 
|     public String getDeviceId() { | 
|         return deviceId; | 
|     } | 
|   | 
|     public void setDeviceId(String deviceId) { | 
|         this.deviceId = deviceId; | 
|     } | 
|   | 
|     public DeviceInfo formBytes(byte[] bytes) { | 
|         try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes); | 
|              DataInputStream dis = new DataInputStream(bis)) { | 
|   | 
|             byte[] temp; | 
|             dis.read(temp = new byte[3]); | 
|             this.issuedAt = BCD.toDate(temp); | 
|             this.reserved = dis.readByte(); | 
|             int len = dis.readUnsignedByte(); | 
|             dis.read(temp = new byte[len]); | 
|             this.deviceId = new String(temp, Charsets.GBK); | 
|   | 
|             return this; | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public byte[] toBytes() { | 
|         try (ByteArrayOutputStream bos = new ByteArrayOutputStream(32); | 
|              DataOutputStream dos = new DataOutputStream(bos)) { | 
|   | 
|             dos.write(BCD.from(issuedAt)); | 
|             dos.writeByte(reserved); | 
|             byte[] bytes = deviceId.getBytes(Charsets.GBK); | 
|             dos.writeByte(bytes.length); | 
|             dos.write(bytes); | 
|   | 
|             return bos.toByteArray(); | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public String toString() { | 
|         final StringBuilder sb = new StringBuilder("DeviceInfo{"); | 
|         sb.append("issuedAt=").append(issuedAt); | 
|         sb.append(", reserved=").append(reserved); | 
|         sb.append(", deviceId=").append(deviceId); | 
|         sb.append('}'); | 
|         return sb.toString(); | 
|     } | 
| } |