您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

117 行
5.1 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.Interfaces;
  4. using JT808.Protocol.MessagePack;
  5. using System;
  6. namespace JT808.Protocol.MessageBody
  7. {
  8. /// <summary>
  9. /// 驾驶员身份信息采集上报
  10. /// </summary>
  11. public class JT808_0x0702 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0702>, IJT808_2019_Version
  12. {
  13. public override ushort MsgId { get; } = 0x0702;
  14. public override string Description => "驾驶员身份信息采集上报";
  15. /// <summary>
  16. /// 状态
  17. /// 0x01:从业资格证 IC 卡插入(驾驶员上班);
  18. /// 0x02:从业资格证 IC 卡拔出(驾驶员下班)。
  19. /// </summary>
  20. public JT808ICCardStatus IC_Card_Status { get; set; }
  21. /// <summary>
  22. /// 插卡/拔卡时间,YY-MM-DD-hh-mm-ss;
  23. /// 以下字段在状态为 0x01 时才有效并做填充。
  24. /// BCD[6]
  25. /// </summary>
  26. public DateTime IC_Card_PlugDateTime { get; set; }
  27. /// <summary>
  28. /// IC 卡读取结果
  29. /// 0x00:IC 卡读卡成功;
  30. /// 0x01:读卡失败,原因为卡片密钥认证未通过;
  31. /// 0x02:读卡失败,原因为卡片已被锁定;
  32. /// 0x03:读卡失败,原因为卡片被拔出;
  33. /// 0x04:读卡失败,原因为数据校验错误。
  34. /// 以下字段在 IC 卡读取结果等于 0x00 时才有效。
  35. /// </summary>
  36. public JT808ICCardReadResult IC_Card_ReadResult { get; set; }
  37. /// <summary>
  38. /// 驾驶员姓名长度
  39. /// </summary>
  40. public byte DriverUserNameLength { get; set; }
  41. /// <summary>
  42. /// 驾驶员姓名
  43. /// </summary>
  44. public string DriverUserName { get; set; }
  45. /// <summary>
  46. /// 从业资格证编码
  47. /// 长度 20 位,不足补 0x00。
  48. /// </summary>
  49. public string QualificationCode { get; set; }
  50. /// <summary>
  51. /// 发证机构名称长度
  52. /// </summary>
  53. public byte LicenseIssuingLength { get; set; }
  54. /// <summary>
  55. /// 发证机构名称长度
  56. /// </summary>
  57. public string LicenseIssuing { get; set; }
  58. /// <summary>
  59. /// 证件有效期 BCD[4]
  60. /// </summary>
  61. public DateTime CertificateExpiresDate { get; set; }
  62. /// <summary>
  63. /// 驾驶员身份证号 长度20 不足补0
  64. /// 2019版本
  65. /// </summary>
  66. public string DriverIdentityCard { get; set; }
  67. public JT808_0x0702 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  68. {
  69. JT808_0x0702 jT808_0X0702 = new JT808_0x0702();
  70. jT808_0X0702.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte();
  71. jT808_0X0702.IC_Card_PlugDateTime = reader.ReadDateTime6();
  72. if (jT808_0X0702.IC_Card_Status == JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班)
  73. {
  74. jT808_0X0702.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte();
  75. if (jT808_0X0702.IC_Card_ReadResult == JT808ICCardReadResult.IC卡读卡成功)
  76. {
  77. jT808_0X0702.DriverUserNameLength = reader.ReadByte();
  78. jT808_0X0702.DriverUserName = reader.ReadString(jT808_0X0702.DriverUserNameLength);
  79. jT808_0X0702.QualificationCode = reader.ReadString(20);
  80. jT808_0X0702.LicenseIssuingLength = reader.ReadByte();
  81. jT808_0X0702.LicenseIssuing = reader.ReadString(jT808_0X0702.LicenseIssuingLength);
  82. jT808_0X0702.CertificateExpiresDate = reader.ReadDateTime4();
  83. if(reader.Version== JT808Version.JTT2019)
  84. {
  85. jT808_0X0702.DriverIdentityCard = reader.ReadString(20);
  86. }
  87. }
  88. }
  89. return jT808_0X0702;
  90. }
  91. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0702 value, IJT808Config config)
  92. {
  93. writer.WriteByte((byte)value.IC_Card_Status);
  94. writer.WriteDateTime6(value.IC_Card_PlugDateTime);
  95. if (value.IC_Card_Status == JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班)
  96. {
  97. writer.WriteByte((byte)value.IC_Card_ReadResult);
  98. if (value.IC_Card_ReadResult == JT808ICCardReadResult.IC卡读卡成功)
  99. {
  100. writer.WriteByte((byte)value.DriverUserName.Length);
  101. writer.WriteString(value.DriverUserName);
  102. writer.WriteString(value.QualificationCode.PadRight(20, '0'));
  103. writer.WriteByte((byte)value.LicenseIssuing.Length);
  104. writer.WriteString(value.LicenseIssuing);
  105. writer.WriteDateTime4(value.CertificateExpiresDate);
  106. if (writer.Version == JT808Version.JTT2019)
  107. {
  108. writer.WriteString(value.DriverIdentityCard.PadRight(20,'0'));
  109. }
  110. }
  111. }
  112. }
  113. }
  114. }