using System.Collections.Generic; using System.Linq; using Dfs.WayneChina.HengshanTerminalWrapper.MessageEntity.Base; using Edge.Core.Parser.BinaryParser.Attributes; using Edge.Core.Parser.BinaryParser.Util; namespace Dfs.WayneChina.HengshanTerminalWrapper.MessageEntity.Outgoing { public class GetNozzleStatusResponse : NonCardDispenserMessageTemplateBase { public GetNozzleStatusResponse() { CMD = 0xA0; this.Account = 0x00; this.Status = 0x00; pumpStatuses = new List(); } private List pumpStatuses; public List GetPumpStatuses() { return this.pumpStatuses; } public enum PumpStatus { 不允许加油,//D7 = 0 允许加油,//D7 = 1 加油过程,//D6 = 0 加油结束,//D6 = 1 油枪打开,//D5 = 1 油枪关,//D5 = 0 电机打开,//D4 = 1 电机关,//D4 = 0 帐号加油,//D3=1 邮票加油,//D2=1 公斤加油,//D1=1,D0=0, 公斤加油(升加油);升版 (公斤) 金额加油,//D1 = 0, D0 = 1, 金额加油(升加油); 升版 (公斤) 公升加油,//D1=0,D0=0, 加升油(公斤加油);升版 (公斤) D30,//D3=0 D20//D2=0 } /// /// status = D7D6D5D4D3D2D1D0 /// /// public void AddPumpStatus(PumpStatus s) { this.pumpStatuses.Add(s); switch (s) { case PumpStatus.允许加油: Status = Status.SetBit(7, 7, 1); break; case PumpStatus.不允许加油: Status = Status.SetBit(7, 7, 0); break; case PumpStatus.加油结束: Status = Status.SetBit(6, 6, 1); break; case PumpStatus.加油过程: Status = Status.SetBit(6, 6, 0); break; case PumpStatus.油枪打开: Status = Status.SetBit(5, 5, 1); break; case PumpStatus.油枪关: Status = Status.SetBit(5, 5, 0); break; case PumpStatus.电机打开: Status = Status.SetBit(4, 4, 1); break; case PumpStatus.电机关: Status = Status.SetBit(4, 4, 0); break; case PumpStatus.帐号加油: Status = Status.SetBit(3, 3, 1); break; case PumpStatus.邮票加油: Status = Status.SetBit(2, 2, 1); break; case PumpStatus.公斤加油: Status = Status.SetBit(1, 1, 1); Status = Status.SetBit(0, 0, 0); break; case PumpStatus.金额加油: Status = Status.SetBit(1, 1, 0); Status = Status.SetBit(0, 0, 1); break; case PumpStatus.公升加油: Status = Status.SetBit(1, 1, 0); Status = Status.SetBit(0, 0, 0); break; } } public IEnumerable GetPumpStatus(byte state) { var result = new List(); result.Add(state.GetBit(7)== 0?PumpStatus.不允许加油 : PumpStatus.允许加油); var bit6 = state & 64; result.Add(state.GetBit(6)==0?PumpStatus.加油过程 : PumpStatus.加油结束); var bit5 = state & 32; result.Add(state.GetBit(5) == 1 ? PumpStatus.油枪打开 : PumpStatus.油枪关); var bit4 = state & 16; result.Add(state.GetBit(4) ==0 ? PumpStatus.电机关 : PumpStatus.电机打开); var bit3 = state & 8; result.Add(state.GetBit(3) == 1 ? PumpStatus.帐号加油 : PumpStatus.D30); var bit2 = state & 4; result.Add(state.GetBit(2) == 1 ? PumpStatus.邮票加油 : PumpStatus.D20); var bit01 = state & 3; switch (bit01) { case 0: result.Add(PumpStatus.公斤加油); break; case 1: result.Add(PumpStatus.金额加油); break; case 2: result.Add(PumpStatus.公升加油); break; } return result.ToArray(); } public override string ToLogString() { var logString = base.ToLogString(); if (pumpStatuses.Count > 0) logString += GetPumpStatus(this.Status).Select(s => s.ToString()).Aggregate((acc, n) => acc + "--" + n); return logString; } [Format(2, EncodingType.BIN, 3)] public int 流水号 { get; set; } [Format(3, EncodingType.BCD, 5)] public int 加油量 { get; set; } [Format(3, EncodingType.BCD, 8)] public int 加油金额 { get; set; } [Format(2, EncodingType.BCD, 11)] public int 单价 { get; set; } /// /// 8bits /// D7D6D5D4D3D2D1D0 /// [Format(1, EncodingType.BIN, 13)] public byte Status { get; set; } /// /// 预设值 /// [Format(3, EncodingType.BCD, 14)] public int 定量 { get; set; } /// /// 暂时不用 /// [Format(2, EncodingType.BIN, 17)] public int Account { get; set; } } }