Exemple #1
0
        /// <summary>
        /// 进行天线扣款操作
        /// </summary>
        /// <param name="money"></param>
        /// <returns></returns>
        public int DoRSUPay(int money)
        {
            ETCResponse r = RSUOpen();

            if (r != null && r.ErrorCode == 0)
            {
                r = OBUSearch();
            }
            if (r != null && r.ErrorCode == 0)
            {
                r = GetOBUInfo(r as OBUSearchResponse);
            }
            if (r != null && r.ErrorCode == 0)
            {
                ETCPaymentRecord record = null;
                r = RSUWriteCard(r as GetOBUInfoResponse, money, out record);
                if (record != null)
                {
                    r = ListUpLoad(record);
                }
            }
            if (r != null)
            {
                return(r.ErrorCode);
            }
            return(-1);
        }
Exemple #2
0
        private ETCPaymentRecord CreateRecord(GetCardInfoResponse cardInfo, WriteCardResponse writeInfo)
        {
            var ret = new ETCPaymentRecord()
            {
                ListType      = IsExit ? 1 : 0,
                ListNo        = string.Format("{0}{1}{2}{3}{4}{5}{6}", ProvinceNo, CityNo, AreaNo, GateNo, LaneNo, DateTime.Now.ToString("yyyyMMddHHmmss"), "00"),
                KeyServiceNo  = writeInfo.KeyServiceNo,
                TradeType     = writeInfo.TradeType,
                TermCode      = writeInfo.TermCode,
                TermTradeNo   = writeInfo.TermTradeNo,
                CardTradeNo   = writeInfo.CardTradeNo,
                Tac           = writeInfo.Tac,
                OBUID         = null,
                OBUNO         = null,
                CardNo        = cardInfo.CardNo,
                CashMoney     = writeInfo.CashMoney,
                Balance       = writeInfo.Balance,
                TradeDevice   = 1,
                VehPicture    = null,
                VehPictureLen = 0,
                SquadDate     = DateTime.Today.ToString("yyyyMMdd"),
                ShiftID       = DateTime.Today.ToString("yyMMdd"),
                ExTime        = IsExit ? DateTime.Now.ToString("yyyyMMddHHmmss") : null,
                ExAreaNo      = IsExit ? AreaNo : null,
                ExGateNo      = IsExit ? GateNo : null,
                ExLaneNo      = IsExit ? LaneNo : null,
                ExOperatorNo  = IsExit ? "ffff" : null,
                ExVehPlate    = IsExit ? cardInfo.CardPlate : null,
                ExVehType     = IsExit ? cardInfo.CardVehClass : "255",
                ExVehClass    = IsExit ? cardInfo.CardVehUserType : "255",
                EnTime        = IsExit ? cardInfo.PassTime : DateTime.Now.ToString("yyyyMMddHHmmss"),
                EnOperatorNo  = IsExit ? cardInfo.OperatorNo : "000001",
                EnAreaNo      = IsExit ? cardInfo.CardAreaNo : AreaNo,
                EnGateNo      = IsExit ? cardInfo.CardGateNo : GateNo,
                EnLaneNo      = IsExit ? cardInfo.CardLaneNo : LaneNo,
                EnVehPlate    = IsExit ? cardInfo.VehPlate : cardInfo.CardPlate,
                EnVehType     = IsExit ? cardInfo.VehType : cardInfo.CardVehClass,
                EnVehClass    = IsExit ? cardInfo.VehClass : cardInfo.CardVehUserType,
            };

            if (!string.IsNullOrEmpty(ret.ExGateNo) && ret.ExGateNo.Length > 2)
            {
                ret.ExGateNo = ret.ExGateNo.Substring(2);
            }
            if (!string.IsNullOrEmpty(ret.ExLaneNo) && ret.ExLaneNo.Length > 2)
            {
                ret.ExLaneNo = ret.ExLaneNo.Substring(2);
            }
            if (!string.IsNullOrEmpty(ret.EnGateNo) && ret.EnGateNo.Length > 2)
            {
                ret.EnGateNo = ret.EnGateNo.Substring(2);
            }
            if (!string.IsNullOrEmpty(ret.EnLaneNo) && ret.EnLaneNo.Length > 2)
            {
                ret.EnLaneNo = ret.EnLaneNo.Substring(2);
            }
            return(ret);
        }
Exemple #3
0
        private ETCResponse ListUpLoad(ETCPaymentRecord record)
        {
            StringBuilder response = new StringBuilder(100);
            var           request  = new
            {
                UserName      = UserName,
                ProvinceNo    = ProvinceNo,
                CityNo        = CityNo,
                ListType      = record.ListType.ToString(),
                ListNo        = record.ListNo,
                KeyServiceNo  = record.KeyServiceNo,
                TradeType     = record.TradeType.ToString(),
                TermCode      = record.TermCode,
                TermTradeNo   = record.TermTradeNo,
                CardTradeNo   = record.CardTradeNo,
                Tac           = record.Tac,
                OBUID         = record.OBUID == null ? string.Empty : record.OBUID,
                OBUNO         = record.OBUNO == null ? string.Empty : record.OBUNO,
                CardNo        = record.CardNo,
                CashMoney     = record.CashMoney.ToString(),
                Balance       = record.Balance.ToString(),
                TradeDevice   = record.TradeDevice.ToString(),
                VehPicture    = record.VehPicture,
                VehPictureLen = record.VehPictureLen.ToString(),
                SquadDate     = record.SquadDate,
                ShiftID       = record.ShiftID,
                ExTime        = record.ExTime,
                ExAreaNo      = record.ExAreaNo,
                ExGateNo      = record.ExGateNo,
                ExLaneNo      = record.ExLaneNo,
                ExOperatorNo  = record.ExOperatorNo,
                ExVehPlate    = record.ExVehPlate,
                ExVehType     = record.ExVehType,
                ExVehClass    = record.ExVehClass,
                EnTime        = record.EnTime,
                EnOperatorNo  = record.EnOperatorNo,
                EnAreaNo      = record.EnAreaNo,
                EnGateNo      = record.EnGateNo,
                EnLaneNo      = record.EnLaneNo,
                EnVehPlate    = record.EnVehPlate,
                EnVehType     = record.EnVehType,
                EnVehClass    = record.EnVehClass,
            };
            var n = ETCInterop.ListUpLoad(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response);

            if (n != 0)
            {
                return new ETCResponse()
                       {
                           ErrorCode = n
                       }
            }
            ;
            var ret = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString());

            ret.Content = response.ToString();
            return(ret);
        }
Exemple #4
0
        /// <summary>
        /// 进行读卡扣款操作
        /// </summary>
        /// <param name="money"></param>
        /// <returns></returns>
        public int DoReaderPay(int money)
        {
            ETCResponse r = CardReaderOpen();

            if (r != null && r.ErrorCode == 0)
            {
                r = CardSearch();
            }
            if (r != null && r.ErrorCode == 0)
            {
                r = GetCardInfoFromReader(r as CardSearchResponse);
            }
            if (r != null && r.ErrorCode == 0)
            {
                ETCPaymentRecord record = null;
                r = CardReaderWriteCard(r as GetCardInfoResponse, money, out record);
                if (record != null)
                {
                    r = ListUpLoad(record);
                }
            }
            return(r.ErrorCode);
        }
Exemple #5
0
        private WriteCardResponse CardReaderWriteCard(GetCardInfoResponse r, int money, out ETCPaymentRecord record)
        {
            int n = -1;

            record = null;
            WriteCardResponse ret      = null;
            StringBuilder     response = new StringBuilder(3000);

            if (UseInGD)
            {
                var request = new
                {
                    UserName        = UserName,
                    PassWord        = Password,
                    ProvinceNo      = ProvinceNo,
                    CityNo          = CityNo,
                    AreaNo          = AreaNo,
                    GateNo          = GateNo,
                    LaneNo          = LaneNo,
                    CardNo          = r.CardNo,
                    CashMoney       = money.ToString(),
                    CardAreaNo      = AreaNo,
                    CardGateNo      = GateNo.PadLeft(4, '0'),
                    CardLaneNo      = LaneNo.PadLeft(4, '0'),
                    PassTime        = DateTime.Now.ToString("yyyyMMddHHmmss"),
                    VehPlate        = r.CardPlate,
                    VehType         = r.CardVehClass,
                    VehClass        = r.CardVehUserType,
                    OutFlag         = IsExit ? "1" : "0",
                    OperatorNo      = "ffff",
                    LittleGateNo    = r.LittleGateNo,
                    LittleLaneNo    = r.LittleLaneNo,
                    LittlePassTime  = r.LittlePassTime,
                    LittleCashMoney = r.LittleCashMoney,
                    LittleTime      = r.LittleTime,
                    OfferType       = r.OfferType,
                    OfferTime       = r.OfferTime,
                    BackUp          = r.BackUp == null ? string.Empty : r.BackUp, //不能传NULL
                    CheckCode       = r.CheckCode,
                    ReaderID        = EcReaderID
                };

                n = ETCInterop.CardReaderWriteCard_GD(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response);
                if (n != 0)
                {
                    return new WriteCardResponse()
                           {
                               ErrorCode = n
                           }
                }
                ;
                ret         = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString());
                ret.Content = response.ToString();
            }
            else
            {
                var request = new
                {
                    UserName   = UserName,
                    PassWord   = Password,
                    ProvinceNo = ProvinceNo,
                    CityNo     = CityNo,
                    AreaNo     = AreaNo,
                    GateNo     = GateNo,
                    LaneNo     = LaneNo,
                    CardNo     = r.CardNo,
                    CashMoney  = money,
                    CardAreaNo = AreaNo,
                    CardGateNo = GateNo.PadLeft(4, '0'),
                    CardLaneNo = LaneNo.PadLeft(4, '0'),
                    PassTime   = DateTime.Now.ToString("yyyyMMddHHmmss"),
                    VehPlate   = r.CardPlate,
                    VehType    = r.CardVehClass,
                    VehClass   = r.CardVehUserType,
                    OutFlag    = IsExit ? "1" : "0",
                    OperatorNo = "ffff",
                    ReaderID   = EcReaderID
                };
                n = ETCInterop.CardReaderWriteCard(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response);
                if (n != 0)
                {
                    return new WriteCardResponse()
                           {
                               ErrorCode = n
                           }
                }
                ;
                ret         = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString());
                ret.Content = response.ToString();
            }
            if (ret.ErrorCode == -2320) //半条记录的情况,需要验证
            {
                response = new StringBuilder(1000);
                var request = new
                {
                    UserName      = UserName,
                    ProvinceNo    = ProvinceNo,
                    CityNo        = CityNo,
                    AreaNo        = AreaNo,
                    GateNo        = GateNo,
                    LaneNo        = LaneNo,
                    CardNo        = r.CardNo,
                    RelyServiceNo = ret.KeyServiceNo,
                    ReaderID      = EcReaderID
                };
                n = ETCInterop.CardReaderTransActionProve(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response);
                if (n != 0)
                {
                    return new WriteCardResponse {
                               ErrorCode = n
                    }
                }
                ;
                ret         = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString());
                ret.Content = response.ToString();
            }
            if (ret.ErrorCode == 0)
            {
                ret.CashMoney = money; //这两个属性返回串中没有,人为加上去,后面有用!
                ret.Balance   = r.Balance - money;
                record        = CreateRecord(r, ret);
            }
            return(ret);
        }