using Edge.Core.Parser.BinaryParser.MessageEntity; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace HengshanPaymentTerminal.MessageEntity.Incoming { /// /// 油机发送油枪信息数据对象 /// public class NozzleInfo : CommonMessage { /// /// 油枪数 /// public int GunNum { get; set; } /// /// 各油枪信息 /// public List nozzles { get; set; } public class Nozzle { /// /// 加油点 /// public int fpoint { get; set; } /// /// 内部枪号 /// public int internalNum { get; set; } /// /// 外部枪号 /// public int externalNum { get; set; } /// /// 单价 /// public decimal price { get; set; } /// /// 油品代码 /// public string oilCode { get; set; } } public override byte[] ToCommonByteArray() { byte[] content = new byte[] { 0x55, this.Handle, 0x00, ((byte)RESULT.OVER) }; return content2data(content); } public override CommonMessage ToObject(byte[] datas) { getBaseData(datas); this.GunNum = datas[7]; int index = 8; List nozzles = new List(); while (index + 7 <= datas.Length) { Nozzle nozzle = new Nozzle(); nozzle.fpoint = datas[index]; nozzle.internalNum = datas[index + 1]; nozzle.externalNum = datas[index + 2]; Span priceSpan = datas.AsSpan(index + 3, 2); if (BitConverter.IsLittleEndian) { priceSpan.Reverse(); } ushort priceShort = MemoryMarshal.Read(priceSpan); nozzle.price = priceShort / 100; nozzle.oilCode = Bcd2Int(datas[index + 5], datas[index+6]).ToString(); nozzles.Add(nozzle); index += 7; } this.nozzles = nozzles; return this; } } }