NozzleInfo.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Edge.Core.Parser.BinaryParser.MessageEntity;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace HengshanPaymentTerminal.MessageEntity.Incoming
  9. {
  10. /// <summary>
  11. /// 油机发送油枪信息数据对象
  12. /// </summary>
  13. public class NozzleInfo : CommonMessage
  14. {
  15. /// <summary>
  16. /// 油枪数
  17. /// </summary>
  18. public int GunNum { get; set; }
  19. /// <summary>
  20. /// 各油枪信息
  21. /// </summary>
  22. public List<Nozzle> nozzles { get; set; }
  23. public class Nozzle
  24. {
  25. /// <summary>
  26. /// 加油点
  27. /// </summary>
  28. public int fpoint { get; set; }
  29. /// <summary>
  30. /// 内部枪号
  31. /// </summary>
  32. public int internalNum { get; set; }
  33. /// <summary>
  34. /// 外部枪号
  35. /// </summary>
  36. public int externalNum { get; set; }
  37. /// <summary>
  38. /// 单价
  39. /// </summary>
  40. public decimal price { get; set; }
  41. /// <summary>
  42. /// 油品代码
  43. /// </summary>
  44. public string oilCode { get; set; }
  45. }
  46. public override byte[] ToCommonByteArray()
  47. {
  48. byte[] content = new byte[] { 0x55, this.Handle, 0x00, ((byte)RESULT.OVER) };
  49. return content2data(content);
  50. }
  51. public override CommonMessage ToObject(byte[] datas)
  52. {
  53. getBaseData(datas);
  54. this.GunNum = datas[7];
  55. int index = 8;
  56. List<Nozzle> nozzles = new List<Nozzle>();
  57. while (index + 7 <= datas.Length)
  58. {
  59. Nozzle nozzle = new Nozzle();
  60. nozzle.fpoint = datas[index];
  61. nozzle.internalNum = datas[index + 1];
  62. nozzle.externalNum = datas[index + 2];
  63. Span<byte> priceSpan = datas.AsSpan(index + 3, 2);
  64. if (BitConverter.IsLittleEndian)
  65. {
  66. priceSpan.Reverse();
  67. }
  68. ushort priceShort = MemoryMarshal.Read<ushort>(priceSpan);
  69. nozzle.price = priceShort / 100;
  70. nozzle.oilCode = Bcd2Int(datas[index + 5], datas[index+6]).ToString();
  71. nozzles.Add(nozzle);
  72. index += 7;
  73. }
  74. this.nozzles = nozzles;
  75. return this;
  76. }
  77. }
  78. }