コード例 #1
0
        private ETCPaymentList CreateRecord(GetCardInfoResponse cardInfo, WriteCardResponse writeInfo, bool isExit)
        {
            var ret = new ETCPaymentList()
            {
                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);
        }
コード例 #2
0
        /// <summary>
        /// 上传扣费流水
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        public ETCResponse ListUpLoad(ETCPaymentList record)
        {
            int           plen     = 1000;
            StringBuilder response = new StringBuilder(plen);
            var           request  = new
            {
                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 strReq = JsonConvert.SerializeObject(request);
            var n      = ETCInterop.ListUpLoad(int.Parse(LaneNo), strReq, response, ref plen);

            if (n != 0)
            {
                Ralid.GeneralLibrary.LOG.FileLog.Log("未成功上传流水" + LaneNo.ToString(), strReq);
                return(new ETCResponse()
                {
                    ErrorCode = n
                });
            }
            var ret = JsonConvert.DeserializeObject <WriteCardResponse>(response.ToString());

            ret.Content = response.ToString();
            return(ret);
        }
コード例 #3
0
ファイル: ETCService.cs プロジェクト: josephca88/510-Null
        private void device_OnReadOBUInfo(object sender, ReadOBUInfoEventArgs e)
        {
            ETCDevice device = sender as ETCDevice;

            if (device == null)
            {
                return;
            }
            EntranceInfo      entrance = ParkBuffer.Current.GetEntrance(device.EntranceID);
            OpenCardEventArgs args     = new OpenCardEventArgs()
            {
                CardID   = e.OBUInfo.CardNo,
                CardType = ETCSetting.CardTyte,
                Entrance = entrance,
                Balance  = (decimal)e.OBUInfo.Balance / 100,
            };

            if (entrance != null)
            {
                var park = ParkBuffer.Current.GetPark(entrance.ParkID);
                //开始处理与已经存在的同车牌号的名单的冲突 bruce 2017-3-22
                var con = new CardSearchCondition();
                con.CarPlateOrLast = e.OBUInfo.CardPlate.Trim();
                con.Status         = Ralid.Park.BusinessModel.Enum.CardStatus.Enabled;
                var cards = new CardBll(AppSettings.CurrentSetting.ParkConnect).GetCards(con).QueryObjects;
                if (cards != null)
                {
                    cards = cards.Where(it => it.CardID != e.OBUInfo.CardNo).ToList();                //选出卡号不一样的记录
                }
                if (cards != null && cards.Count > 0)
                {
                    if (cards.Count == 1) //如果系统中只有一个同一车牌号的名单
                    {
                        var cardinfo = cards.Single(it => it.CardID != e.OBUInfo.CardNo);
                        if ((!park.IsWriteCardMode || cardinfo.OnlineHandleWhenOfflineMode) && cardinfo.IsCardList) //如果是在线车场或卡片按在线处理
                        {
                            args.CardID = cardinfo.CardID;                                                          //用现有名单的卡号去读卡
                        }
                        else  //不能在线处理,提示刷卡
                        {
                            string err = park.ListMode == Ralid.Park.BusinessModel.Enum.ParkListMode.CarPlate ? "人工处理" : "请读车场卡";
                            if (this.OnError != null)
                            {
                                this.OnError(this, new OpenCardEventArgs()
                                {
                                    Entrance = entrance, LastError = err
                                });
                            }
                            return;
                        }
                    }
                    else  //多个同车牌号的名单,提示刷卡
                    {
                        string err = park.ListMode == Ralid.Park.BusinessModel.Enum.ParkListMode.CarPlate ? "人工处理" : "请读车场卡";
                        if (this.OnError != null)
                        {
                            this.OnError(this, new OpenCardEventArgs()
                            {
                                Entrance = entrance, LastError = err
                            });
                        }
                        return;
                    }
                }
                //-------------------------------------------结束卡片冲突处理 bruce 2017-3-22
                if (!entrance.IsExitDevice || (park != null && park.IsNested)) //入口或者嵌套车场,
                {
                    ETCPaymentList pr = null;
                    device.RSUWrite(e.OBUInfo, 0, false, out pr); //这里写卡主要是为了让卡片读卡时产生蜂鸣声
                    if (this.OnReadCard != null)
                    {
                        this.OnReadCard(this, args);
                    }
                }
                else
                {
                    HandlePayment(device, args, e, null);
                }
            }
            else
            {
                HandlePayment(device, args, e, null);
            }
        }
コード例 #4
0
        /// <summary>
        /// 进行读卡扣款操作
        /// </summary>
        /// <param name="money"></param>
        /// <returns></returns>
        public WriteCardResponse ReaderWrite(GetCardInfoResponse r, int money, bool isExit, out ETCPaymentList record)
        {
            int n = -1;

            record = null;
            WriteCardResponse ret  = null;
            int           plen     = 3000;
            StringBuilder response = new StringBuilder(plen);
            var           request  = new
            {
                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,
            };

            n = ETCInterop.ReaderWrite(int.Parse(LaneNo), JsonConvert.SerializeObject(request), response, ref plen);
            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, isExit);
            }
            return(ret);
        }
コード例 #5
0
ファイル: ETCService.cs プロジェクト: josephca88/510-Null
 private void HandlePayment(ETCDevice device, OpenCardEventArgs e, ReadOBUInfoEventArgs obuInfo, ReadCardInfoEventArgs cardInfo)
 {
     if (this.OnPaying != null)
     {
         this.OnPaying(this, e);                        //产生收费事件
     }
     if (e.Payment == null)
     {
         if (this.OnReadCard != null)
         {
             this.OnReadCard(this, e);
         }
         return;
     }
     if (e.Payment.GetPaying() <= 0) //不用收费直接返回收款成功事件
     {
         WriteCardResponse r    = null;
         ETCPaymentList    list = null;
         if (obuInfo != null)
         {
             r = device.RSUWrite(obuInfo.OBUInfo, 0, true, out list);
         }
         else
         {
             r = device.ReaderWrite(cardInfo.CardInfo, 0, true, out list);
         }
         e.Payment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer;
         e.Payment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.GDETC;
         if (this.OnPaidOk != null)
         {
             this.OnPaidOk(this, e);
         }
     }
     else //扣费
     {
         //判断余额是否够扣费,否则返回"余额不足",注意钱包单位是分的,这里要转成分比较
         if (e.Payment.GetPaying() <= e.Balance)
         {
             int               paid = (int)(e.Payment.GetPaying() * 100);
             ETCPaymentList    list = null;
             WriteCardResponse r    = null;
             if (obuInfo != null)
             {
                 r = device.RSUWrite(obuInfo.OBUInfo, paid, true, out list);
             }
             else
             {
                 r = device.ReaderWrite(cardInfo.CardInfo, paid, true, out list);
             }
             if (r.ErrorCode == 0)
             {
                 var res    = device.ListUpLoad(list); //上传流水
                 var record = new Ralid.Park.BusinessModel.Model.ETCPaymentRecord()
                 {
                     LaneNo     = device.LaneNo,
                     Device     = obuInfo != null ? 0 : 1,
                     AddTime    = DateTime.Now,
                     Data       = JsonConvert.SerializeObject(list),
                     UploadTime = res.ErrorCode == 0 ? (DateTime?)DateTime.Now : null,
                 };
                 new ETCPaymentRecordBll(AppSettings.CurrentSetting.ParkConnect).Insert(record); //在数据库中保存流水记录
                 e.Paid = e.Payment.GetPaying();
                 e.Payment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer;
                 e.Payment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.GDETC;
                 e.Balance             = (decimal)r.Balance / 100;
                 if (obuInfo != null && obuInfo.OBUInfo.CardNo != e.CardID)
                 {
                     e.Payment.Memo = "ETC" + obuInfo.OBUInfo.CardNo;                                                        //说明收费的卡号与ETC卡是同一个车牌号
                 }
                 if (this.OnPaidOk != null)
                 {
                     this.OnPaidOk(this, e);
                 }
             }
             else
             {
                 e.LastError = "扣款失败";
                 if (this.OnPaidFail != null)
                 {
                     this.OnPaidFail(this, e);
                 }
             }
         }
         else
         {
             if (obuInfo != null)
             {
                 e.LastError = "余额不足";
                 if (this.OnPaidFail != null)
                 {
                     this.OnPaidFail(this, e);
                 }
             }
             else //ETC读卡器上余额不足时产生读卡事件,在收费电脑上显示明细
             {
                 if (this.OnReadCard != null)
                 {
                     this.OnReadCard(this, e);
                 }
             }
         }
     }
 }