Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

173 linhas
8.3 KiB

  1. using JT809.Protocol.Enums;
  2. using JT809.Protocol.Formatters;
  3. using JT809.Protocol.MessagePack;
  4. using JT809.Protocol.Extensions;
  5. using JT809.Protocol.Interfaces;
  6. using System;
  7. using System.Text.Json;
  8. namespace JT809.Protocol.SubMessageBody
  9. {
  10. /// <summary>
  11. /// 主动上报报警处理结果信息(2013)
  12. /// 上报报警预警信息(2019)
  13. /// <para>子业务类型标识:UP_WARN_MSG_ADPT_TODO_INFO_2013</para>
  14. /// <para>子业务类型标识:UP_WARN_MSG_INFORM_TIPS_2019</para>
  15. /// <para>描述:下级平台向上级平台上报报警处理结果2013</para>
  16. /// <para>描述:用于下级平台向上级平台上报相关报警预警或运行提示信息2019</para>
  17. /// <para>本条消息上级平台无需应答</para>
  18. /// </summary>
  19. public class JT809_0x1400_0x1403:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1400_0x1403>, IJT809Analyze, IJT809_2019_Version
  20. {
  21. public override ushort SubMsgId => JT809SubBusinessType.主动上报报警处理结果信息2013_上报报警预警信息2019.ToUInt16Value();
  22. public override string Description => "主动上报报警处理结果信息2013_上报报警预警信息2019";
  23. /// <summary>
  24. /// 发起报警平台唯一编码,由平台所在地行政区域代码和平台编号组成
  25. /// </summary>
  26. public string SourcePlatformId { get; set; }
  27. /// <summary>
  28. /// 报警类型
  29. /// </summary>
  30. public JT809WarnType WarnType { get; set; }
  31. /// <summary>
  32. /// 报警时间
  33. /// </summary>
  34. public DateTime WarnTime { get; set; }
  35. /// <summary>
  36. /// 事件开始时间 utc
  37. /// </summary>
  38. public DateTime StartTime { get; set; }
  39. /// <summary>
  40. /// 事件结束时间 utc
  41. /// </summary>
  42. public DateTime EndTime { get; set; }
  43. /// <summary>
  44. /// 车牌号码 非车辆相关报警全填0
  45. /// </summary>
  46. public string VehicleNo { get; set; }
  47. /// <summary>
  48. /// 车牌颜色 非车辆相关报警全填0
  49. /// </summary>
  50. public JT809VehicleColorType VehicleColor { get; set; }
  51. /// <summary>
  52. /// 被报警平台唯一编码,由平台所在地行政区划代码和平台编号组成。非平台相关报警全填0
  53. /// </summary>
  54. public string DestinationPlatformId { get; set; }
  55. /// <summary>
  56. /// 线路ID 808-2019中0x8606规定的报文中的线路ID
  57. /// </summary>
  58. public uint DRVLineId { get; set; }
  59. /// <summary>
  60. /// 数据长度
  61. /// </summary>
  62. public uint InfoLength { get; set; }
  63. /// <summary>
  64. /// 信息内容
  65. /// </summary>
  66. public string InfoContent { get; set; }
  67. /// <summary>
  68. /// 报警信息ID
  69. /// </summary>
  70. public uint InfoID { get; set; }
  71. /// <summary>
  72. /// 处理结果
  73. /// </summary>
  74. public JT809_0x1403_Result Result { get; set; }
  75. public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
  76. {
  77. var value = new JT809_0x1400_0x1403();
  78. if (config.Version == JT809Version.JTT2011)
  79. {
  80. value.InfoID = reader.ReadUInt32();
  81. writer.WriteNumber($"[{value.InfoID.ReadNumber()}]报警信息ID", value.InfoID);
  82. value.Result = (JT809_0x1403_Result)reader.ReadByte();
  83. writer.WriteString($"[{value.Result.ToByteValue()}]处理结果", value.Result.ToString());
  84. }
  85. else
  86. {
  87. var virtualHex = reader.ReadVirtualArray(11);
  88. value.SourcePlatformId = reader.ReadBigNumber(11);
  89. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]发起报警平台唯一编码", value.SourcePlatformId);
  90. value.WarnType = (JT809WarnType)reader.ReadUInt16();
  91. writer.WriteString($"[{value.WarnType.ToUInt16Value()}]处理结果", value.WarnType.ToString());
  92. virtualHex = reader.ReadVirtualArray(8);
  93. value.WarnTime = reader.ReadUTCDateTime();
  94. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]报警时间", value.WarnTime);
  95. virtualHex = reader.ReadVirtualArray(8);
  96. value.StartTime = reader.ReadUTCDateTime();
  97. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]事件开始时间", value.StartTime);
  98. virtualHex = reader.ReadVirtualArray(8);
  99. value.EndTime = reader.ReadUTCDateTime();
  100. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]事件结束时间", value.EndTime);
  101. virtualHex = reader.ReadVirtualArray(21);
  102. value.VehicleNo = reader.ReadString(21);
  103. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号码", value.VehicleNo);
  104. value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
  105. writer.WriteString($"[{value.VehicleColor.ToByteValue()}]处理结果", value.VehicleColor.ToString());
  106. virtualHex = reader.ReadVirtualArray(11);
  107. value.DestinationPlatformId = reader.ReadBigNumber(11);
  108. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]被报警平台唯一编码", value.DestinationPlatformId);
  109. value.DRVLineId = reader.ReadUInt32();
  110. writer.WriteNumber($"[{value.DRVLineId.ReadNumber()}]线路ID", value.DRVLineId);
  111. value.InfoLength = reader.ReadUInt32();
  112. writer.WriteNumber($"[{value.InfoLength.ReadNumber()}]数据长度", value.InfoLength);
  113. virtualHex = reader.ReadVirtualArray((int)value.InfoLength);
  114. value.InfoContent = reader.ReadString((int)value.InfoLength);
  115. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]信息内容", value.InfoContent);
  116. }
  117. }
  118. public JT809_0x1400_0x1403 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  119. {
  120. var value = new JT809_0x1400_0x1403();
  121. if (config.Version == JT809Version.JTT2011)
  122. {
  123. value.InfoID = reader.ReadUInt32();
  124. value.Result = (JT809_0x1403_Result)reader.ReadByte();
  125. }
  126. else
  127. {
  128. value.SourcePlatformId = reader.ReadBigNumber(11);
  129. value.WarnType = (JT809WarnType)reader.ReadUInt16();
  130. value.WarnTime = reader.ReadUTCDateTime();
  131. value.StartTime = reader.ReadUTCDateTime();
  132. value.EndTime = reader.ReadUTCDateTime();
  133. value.VehicleNo = reader.ReadString(21);
  134. value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
  135. value.DestinationPlatformId = reader.ReadBigNumber(11);
  136. value.DRVLineId = reader.ReadUInt32();
  137. value.InfoLength = reader.ReadUInt32();
  138. value.InfoContent = reader.ReadString((int)value.InfoLength);
  139. }
  140. return value;
  141. }
  142. public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1400_0x1403 value, IJT809Config config)
  143. {
  144. if (config.Version == JT809Version.JTT2011)
  145. {
  146. writer.WriteUInt32(value.InfoID);
  147. writer.WriteByte((byte)value.Result);
  148. }
  149. else
  150. {
  151. writer.WriteBigNumber(value.SourcePlatformId,11);
  152. writer.WriteUInt16((ushort)value.WarnType);
  153. writer.WriteUTCDateTime(value.WarnTime);
  154. writer.WriteUTCDateTime(value.StartTime);
  155. writer.WriteUTCDateTime(value.EndTime);
  156. writer.WriteStringPadRight(value.VehicleNo, 21);
  157. writer.WriteByte((byte)value.VehicleColor);
  158. writer.WriteBigNumber(value.DestinationPlatformId,11);
  159. writer.WriteUInt32(value.DRVLineId);
  160. // 先计算内容长度(汉字为两个字节)
  161. writer.Skip(4, out int lengthPosition);
  162. writer.WriteString(value.InfoContent);
  163. writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition);
  164. }
  165. }
  166. }
  167. }