using Edge.Core.Parser.BinaryParser.Util;
using ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ShellChina_EPS_Project_CarPlatePay_EpsClient_App.MessageEntity.Incoming
{
public class MembershipInquiryResponse : MembershipInquiryCommand
{
///
/// 消息长度 b2
/// 消息类型 n4
/// 主位图 b8
///
private int ContentPrefixLength = 0;
public MembershipInquiryResponse()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
}
public override int P_3_处理码 { get { this.ParseFromContent(); return base.P_3_处理码; } }
public override string P_12_交易流水号 { get { this.ParseFromContent(); return base.P_12_交易流水号; } }
public override string P_24_会员ID { get { this.ParseFromContent(); return base.P_24_会员ID; } }
public override string P_34_车牌号码 { get { this.ParseFromContent(); return base.P_34_车牌号码; } }
///
/// “00000”表示交易成功,“00001”表示交易失败
///
public override string P_39_交易响应码 { get { this.ParseFromContent(); return base.P_39_交易响应码; } }
public override string P_40_错误信息 { get { this.ParseFromContent(); return base.P_40_错误信息; } }
public override string P_41_终端编号 { get { this.ParseFromContent(); return base.P_41_终端编号; } }
private void ParseFromContent()
{
this.P_3_处理码 = base.Content.Skip(ContentPrefixLength).Take(3).GetBCD();
var dynamicOffset = 3;
if (base.BitMap.Determine(12))
{
this.P_12_交易流水号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(9).ToArray());
dynamicOffset += 9;
}
if (base.BitMap.Determine(24))
{
this.P_24_会员ID = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(20).ToArray());
dynamicOffset += 20;
}
//field 34 is LLLVAR
if (base.BitMap.Determine(34))
{
int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD();
dynamicOffset += 2;
this.P_34_车牌号码 = Encoding.GetEncoding("GBK").GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray());
dynamicOffset += len;
}
this.P_39_交易响应码 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(5).ToArray());
dynamicOffset += 5;
//field 40 is LLLVAR
if (base.BitMap.Determine(40))
{
int len = base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(2).GetBCD();
dynamicOffset += 2;
this.P_40_错误信息 = Encoding.GetEncoding("GBK").GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(len).ToArray());
dynamicOffset += len;
}
if (base.BitMap.Determine(41))
this.P_41_终端编号 = Encoding.ASCII.GetString(base.Content.Skip(ContentPrefixLength + dynamicOffset).Take(12).ToArray());
}
}
}