using Castle.Components.DictionaryAdapter.Xml; using Edge.Core.Domain.FccOrderInfo; using Edge.Core.Parser.BinaryParser.MessageEntity; using Microsoft.EntityFrameworkCore.Metadata.Internal; 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 OrderFromMachine:CommonMessage { /// /// 枪号 /// public int nozzleNum { get; set; } /// /// 交易流水号 /// public int ttc { get; set; } /// /// 加油时间 /// public DateTime? dispenserTime { get; set; } /// /// 挂枪时间 /// public DateTime? endTime { get; set; } /// /// 油品代码 /// public string oilCode { get; set; } /// /// 付款方式/地点 /// public byte payType { get; set; } /// /// 价格 /// public decimal price { get; set; } /// /// 卡交易流水 /// public int ctc { get; set; } /// /// 升累计 /// public decimal volumeTotal { get; set; } /// /// 金额 /// public decimal amount { get; set; } /// /// 升数 /// public decimal volume { get; set; } /// /// 卡号 /// public string cardNum { get; set; } /// /// 消息鉴别码 /// public string MAC { 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.nozzleNum = datas[7]; Span ttcSpan = datas.AsSpan(8, 4); if (BitConverter.IsLittleEndian) ttcSpan.Reverse(); this.ttc = MemoryMarshal.Read(ttcSpan); Span dispenserSpan = datas.AsSpan(12, 7); this.dispenserTime = bytes2DateTime(dispenserSpan.ToArray()); Span endSpan = datas.AsSpan(19, 7); this.endTime = bytes2DateTime(endSpan.ToArray()); Span oilCodeSpan = datas.AsSpan(26, 2); this.oilCode = BitConverter.ToString(oilCodeSpan.ToArray()).Replace("-", ""); this.payType = datas[28]; Span priceSpan = datas.AsSpan(29, 2); if (BitConverter.IsLittleEndian) priceSpan.Reverse(); ushort priceShort = MemoryMarshal.Read(priceSpan); this.price = priceShort / 100; Span ctcSpan = datas.AsSpan(31, 2); if (BitConverter.IsLittleEndian) ctcSpan.Reverse(); this.ctc = MemoryMarshal.Read(ctcSpan); Span volumeTotalSpan = datas.AsSpan(33, 4); if (BitConverter.IsLittleEndian) volumeTotalSpan.Reverse(); uint volumeTotalInt = MemoryMarshal.Read(volumeTotalSpan); this.volumeTotal = volumeTotalInt / 100; Span amountSpan = datas.AsSpan(37, 3); if (BitConverter.IsLittleEndian) amountSpan.Reverse(); uint amountInt = MemoryMarshal.Read(amountSpan); this.amount = amountInt / 100; Span volumeSpan = datas.AsSpan(40, 3); if (BitConverter.IsLittleEndian) volumeSpan.Reverse(); uint volumeInt = MemoryMarshal.Read(volumeSpan); this.volume = volumeInt / 100; Span cardNumSpan = datas.AsSpan(43, 10); this.cardNum = BitConverter.ToString(cardNumSpan.ToArray()).Replace("-", ""); Span MACSpan = datas.AsSpan(53, 10); this.MAC = BitConverter.ToString(MACSpan.ToArray()).Replace("-", ""); return this; } public FccOrderInfo ToComponent() { return new FccOrderInfo { Ttc = this.ttc, AuthorizationTime = this.dispenserTime, EndTime = this.endTime, NozzleNum = this.nozzleNum, PayType = this.payType, PaymentStatus = payType == (int)0x21 ? 0 : 4 , Amount = this.amount, Volume = this.volume, AmountPayable = this.amount, UploadState = 0, IsDelete = 0, PaymentTime = null, OilName = "", CloundOrderId = null }; } /// /// 补充授权订单数据 /// /// 当前数据库中订单数据 /// public FccOrderInfo PaddingAuthorizationOrderData(FccOrderInfo order) { order.EndTime = this.endTime; order.Amount = this.amount; order.Volume = this.volume; return order; } } }