Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

171 wiersze
8.7 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System;
  7. using System.Buffers.Binary;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using System.Text.Json;
  11. namespace JT808.Protocol.MessageBody.CarDVR
  12. {
  13. /// <summary>
  14. /// 采集指定的超时驾驶记录
  15. /// 返回:符合条件的超时驾驶记录
  16. /// </summary>
  17. public class JT808_CarDVR_Up_0x11 : JT808CarDVRUpBodies, IJT808MessagePackFormatter<JT808_CarDVR_Up_0x11>, IJT808Analyze
  18. {
  19. /// <summary>
  20. /// 0x11
  21. /// </summary>
  22. public override byte CommandId => JT808CarDVRCommandID.采集指定的超时驾驶记录.ToByteValue();
  23. /// <summary>
  24. /// 请求发送指定的时间范围内 N 个单位数据块的数据(N≥1)
  25. /// </summary>
  26. public List<JT808_CarDVR_Up_0x11_DriveOverTime> JT808_CarDVR_Up_0x11_DriveOverTimes{ get; set; }
  27. /// <summary>
  28. /// 符合条件的超时驾驶记录
  29. /// </summary>
  30. public override string Description => "符合条件的超时驾驶记录";
  31. /// <summary>
  32. ///
  33. /// </summary>
  34. /// <param name="reader"></param>
  35. /// <param name="writer"></param>
  36. /// <param name="config"></param>
  37. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  38. {
  39. writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据");
  40. var count = (reader.ReadCurrentRemainContentLength() - 1) / 50;//记录块个数, -1 去掉校验位
  41. for (int i = 0; i < count; i++)
  42. {
  43. JT808_CarDVR_Up_0x11_DriveOverTime jT808_CarDVR_Up_0x11_DriveOverTime = new JT808_CarDVR_Up_0x11_DriveOverTime();
  44. writer.WriteStartObject();
  45. writer.WriteStartObject($"指定的结束时间前最近的第 {i+1}条超时驾驶记录");
  46. var hex = reader.ReadVirtualArray(18);
  47. jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo = reader.ReadASCII(18);
  48. writer.WriteString($"[{hex.ToArray().ToHexString()}机动车驾驶证号码]", jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo);
  49. hex = reader.ReadVirtualArray(6);
  50. jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime = reader.ReadDateTime6();
  51. writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶开始时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime);
  52. hex = reader.ReadVirtualArray(6);
  53. jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime = reader.ReadDateTime6();
  54. writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶结束时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime);
  55. writer.WriteStartObject("连续驾驶开始时间所在的最近一次有效位置信息");
  56. jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng = reader.ReadInt32();
  57. writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng);
  58. jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat = reader.ReadInt32();
  59. writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat.ReadNumber()}纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat);
  60. jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight = reader.ReadInt16();
  61. writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight);
  62. writer.WriteEndObject();
  63. writer.WriteStartObject("连续驾驶结束时间所在的最近一次有效位置信息");
  64. jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng = reader.ReadInt32();
  65. writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng);
  66. jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat = reader.ReadInt32();
  67. writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat);
  68. jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight = reader.ReadInt16();
  69. writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight);
  70. writer.WriteEndObject();
  71. writer.WriteEndObject();
  72. writer.WriteEndObject();
  73. }
  74. writer.WriteEndArray();
  75. }
  76. /// <summary>
  77. ///
  78. /// </summary>
  79. /// <param name="writer"></param>
  80. /// <param name="value"></param>
  81. /// <param name="config"></param>
  82. public void Serialize(ref JT808MessagePackWriter writer, JT808_CarDVR_Up_0x11 value, IJT808Config config)
  83. {
  84. foreach (var driveOverTime in value.JT808_CarDVR_Up_0x11_DriveOverTimes)
  85. {
  86. var currentPosition = writer.GetCurrentPosition();
  87. writer.WriteASCII(driveOverTime.DriverLicenseNo);
  88. writer.Skip(18 - (writer.GetCurrentPosition() - currentPosition), out var _);
  89. writer.WriteDateTime6(driveOverTime.ContinueDrivingStartTime);
  90. writer.WriteDateTime6(driveOverTime.ContinueDrivingEndTime);
  91. writer.WriteInt32(driveOverTime.GpsStartLng);
  92. writer.WriteInt32(driveOverTime.GpsStartLat);
  93. writer.WriteInt16(driveOverTime.StartHeight);
  94. writer.WriteInt32(driveOverTime.GpsEndLng);
  95. writer.WriteInt32(driveOverTime.GpsEndLat);
  96. writer.WriteInt16(driveOverTime.EndHeight);
  97. }
  98. }
  99. /// <summary>
  100. ///
  101. /// </summary>
  102. /// <param name="reader"></param>
  103. /// <param name="config"></param>
  104. /// <returns></returns>
  105. public JT808_CarDVR_Up_0x11 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  106. {
  107. JT808_CarDVR_Up_0x11 value = new JT808_CarDVR_Up_0x11();
  108. value.JT808_CarDVR_Up_0x11_DriveOverTimes = new List<JT808_CarDVR_Up_0x11_DriveOverTime>();
  109. var count = (reader.ReadCurrentRemainContentLength() - 1) / 50;//记录块个数, -1 去掉校验位
  110. for (int i = 0; i < count; i++)
  111. {
  112. JT808_CarDVR_Up_0x11_DriveOverTime jT808_CarDVR_Up_0x11_DriveOverTime = new JT808_CarDVR_Up_0x11_DriveOverTime();
  113. jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo = reader.ReadASCII(18);
  114. jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime = reader.ReadDateTime6();
  115. jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime = reader.ReadDateTime6();
  116. jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng = reader.ReadInt32();
  117. jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat = reader.ReadInt32();
  118. jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight = reader.ReadInt16();
  119. jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng = reader.ReadInt32();
  120. jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat = reader.ReadInt32();
  121. jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight = reader.ReadInt16();
  122. value.JT808_CarDVR_Up_0x11_DriveOverTimes.Add(jT808_CarDVR_Up_0x11_DriveOverTime);
  123. }
  124. return value;
  125. }
  126. }
  127. /// <summary>
  128. /// 单位超时驾驶记录数据块
  129. /// </summary>
  130. public class JT808_CarDVR_Up_0x11_DriveOverTime
  131. {
  132. /// <summary>
  133. /// 机动车驾驶证号码 18位
  134. /// </summary>
  135. public string DriverLicenseNo { get; set; }
  136. /// <summary>
  137. /// 连续驾驶开始时间
  138. /// </summary>
  139. public DateTime ContinueDrivingStartTime { get; set; }
  140. /// <summary>
  141. /// 连续驾驶结束时间
  142. /// </summary>
  143. public DateTime ContinueDrivingEndTime { get; set; }
  144. /// <summary>
  145. /// 经度
  146. /// </summary>
  147. public int GpsStartLng { get; set; }
  148. /// <summary>
  149. /// 纬度
  150. /// </summary>
  151. public int GpsStartLat { get; set; }
  152. /// <summary>
  153. /// 高度
  154. /// </summary>
  155. public short StartHeight { get; set; }
  156. /// <summary>
  157. /// 经度
  158. /// </summary>
  159. public int GpsEndLng { get; set; }
  160. /// <summary>
  161. /// 纬度
  162. /// </summary>
  163. public int GpsEndLat { get; set; }
  164. /// <summary>
  165. /// 高度
  166. /// </summary>
  167. public short EndHeight { get; set; }
  168. }
  169. }