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;
}
}
}