Exemplo n.º 1
0
        private void reader_PaymentOk(object sender, ZSTReaderEventArgs e)
        {
            _Reader.MessageConfirm(e.ReaderIP);
            OpenCardEventArgs args = null;

            lock (_WaitingPayingCardsLocker)
            {
                if (_WaitingPayingCards.ContainsKey(e.CardID))
                {
                    args = _WaitingPayingCards[e.CardID];
                    _WaitingPayingCards.Remove(e.CardID);
                }
            }
            if (args != null)
            {
                args.Paid = args.Payment.GetPaying(); //默认是直接扣除应收款所以如果扣款成功,已交费用等于应收费用
                args.Payment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer;
                args.Payment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.ZhongShanTong;
                args.Balance             = e.Balance;
                if (this.OnPaidOk != null)
                {
                    this.OnPaidOk(this, args);
                }
            }
        }
Exemplo n.º 2
0
        private void reader_PaymentOk(object sender, ZSTReaderEventArgs e)
        {
            ZSTHandlerInfo zst = _HandlerInfoes.SingleOrDefault(item => item.ReaderIP == e.ReaderIP);

            if (zst != null && zst.ProcessingEvent != null)
            {
                if (zst.ProcessingEvent.CardPaymentInfo != null)
                {
                    zst.ProcessingEvent.CardPaymentInfo.Paid           = zst.ProcessingEvent.CardPaymentInfo.Accounts;
                    zst.ProcessingEvent.CardPaymentInfo.Discount       = zst.ProcessingEvent.CardPaymentInfo.Accounts - zst.ProcessingEvent.CardPaymentInfo.Paid;
                    zst.ProcessingEvent.CardPaymentInfo.PaymentMode    = PaymentMode.ZhongShanTong;
                    zst.ProcessingEvent.CardPaymentInfo.OperatorID     = OperatorInfo.CurrentOperator.OperatorName;
                    zst.ProcessingEvent.CardPaymentInfo.StationID      = WorkStationInfo.CurrentStation.StationName;
                    zst.ProcessingEvent.CardPaymentInfo.IsCenterCharge = false;
                    CommandResult ret = (new CardBll(AppSettings.CurrentSetting.ParkConnect)).PayParkFee(zst.ProcessingEvent.CardPaymentInfo);
                }

                IParkingAdapter pad = ParkingAdapterManager.Instance[zst.ProcessingEvent.ParkID];
                if (pad != null)
                {
                    EventValidNotify n = new EventValidNotify(zst.ProcessingEvent.EntranceID,
                                                              OperatorInfo.CurrentOperator,
                                                              WorkStationInfo.CurrentStation.StationName,
                                                              0);

                    pad.EventValid(n);
                }

                zst.ClearCardInfo();  //清空读卡器内的卡片信息
            }
        }
Exemplo n.º 3
0
 private void ZSTReader_MessageRecieved(object sender, ZSTReaderEventArgs e)
 {
     if (e.ReaderIP == AppSettings.CurrentSetting.ZSTReaderIP && e.MessageType == "1")
     {
         CardReadEventArgs args = new CardReadEventArgs()
         {
             CardID = e.CardID
         };
         CardReadHandler(sender, args);
     }
 }
Exemplo n.º 4
0
        private void reader_CardReadHandler(object sender, ZSTReaderEventArgs e)
        {
            if (_ZSTSetting == null || _ZSTSetting.Items == null || !_ZSTSetting.HasReader(e.ReaderIP))
            {
                _Reader.MessageConfirm(e.ReaderIP);
                return;
            }
            EntranceInfo entrance = ParkBuffer.Current.GetEntrance(_ZSTSetting.GetReader(e.ReaderIP).EntranceID);

            if (entrance == null)
            {
                _Reader.MessageConfirm(e.ReaderIP);
                return;
            }

            CardInfo card = (new CardBll(AppSettings.CurrentSetting.ParkConnect)).GetCardByID(e.CardID).QueryObject;

            if (!entrance.IsExitDevice)
            {
                _Reader.MessageConfirm(e.ReaderIP);
                if (card == null) //入口,如果卡片不在系统中,则先在系统中增加此中山通卡片
                {
                    //寻找系统中是否存在名称为"中山通"的自定义卡片类型
                    CardType ct = null;
                    if (CustomCardTypeSetting.Current != null)
                    {
                        ct = CustomCardTypeSetting.Current.GetCardType("中山通");
                    }
                    if (ct == null)
                    {
                        return;
                    }
                    if (!SaveZSTCard(e.CardID, ct, e.Balance))
                    {
                        return;
                    }
                }
            }

            ZSTHandlerInfo zst = GetZSTHandlerInstance(e.ReaderIP);

            zst.CardID  = e.CardID;
            zst.Balance = e.Balance;

            //通过远程读卡方式
            IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];

            if (pad != null)
            {
                pad.RemoteReadCard(new RemoteReadCardNotify(entrance.RootParkID, entrance.EntranceID, e.CardID));
            }
        }
Exemplo n.º 5
0
 private void reader_MessageRecieved(object sender, ZSTReaderEventArgs e)
 {
     if (e.MessageType == "1")
     {
         reader_CardReadHandler(sender, e);
     }
     else if (e.MessageType == "2")//扣款成功
     {
         reader_PaymentOk(sender, e);
     }
     else if (e.MessageType == "3") //扣款失败
     {
         reader_PaymentFail(sender, e);
     }
 }
Exemplo n.º 6
0
        private void reader_PaymentFail(object sender, ZSTReaderEventArgs e)
        {
            _Reader.MessageConfirm(e.ReaderIP);
            OpenCardEventArgs args = null;

            lock (_WaitingPayingCardsLocker)
            {
                if (_WaitingPayingCards.ContainsKey(e.CardID))
                {
                    args = _WaitingPayingCards[e.CardID];
                    _WaitingPayingCards.Remove(e.CardID);
                }
            }
            if (args != null && args.CardID == e.CardID)
            {
                if (this.OnPaidFail != null)
                {
                    this.OnPaidFail(this, args);
                }
            }
        }
Exemplo n.º 7
0
        private void reader_PaymentFail(object sender, ZSTReaderEventArgs e)
        {
            ZSTHandlerInfo zst = _HandlerInfoes.SingleOrDefault(item => item.ReaderIP == e.ReaderIP);

            if (zst != null && zst.ProcessingEvent != null)
            {
                _Reader.MessageConfirm(zst.ReaderIP); //发送中山通读卡确认消息
                IParkingAdapter pad = ParkingAdapterManager.Instance[zst.ProcessingEvent.ParkID];
                if (pad != null)
                {
                    EventInvalidNotify n = new EventInvalidNotify()
                    {
                        InvalidType = EventInvalidType.INV_ReadCard,
                        Balance     = zst.Balance,
                        CardEvent   = zst.ProcessingEvent
                    };
                    pad.EventInvalid(n);
                }

                zst.ClearCardInfo();  //清空读卡器内的卡片信息
            }
        }
Exemplo n.º 8
0
        private void reader_CardReadHandler(object sender, ZSTReaderEventArgs e)
        {
            if (Setting == null)
            {
                _Reader.MessageConfirm(e.ReaderIP);
                return;
            }
            ZSTItem item = Setting.GetReader(e.ReaderIP);

            if (item == null)
            {
                _Reader.MessageConfirm(e.ReaderIP);
                return;
            }
            EntranceInfo entrance = null;

            entrance = ParkBuffer.Current.GetEntrance(item.EntranceID);
            OpenCardEventArgs args = new OpenCardEventArgs()
            {
                CardID   = e.CardID,
                CardType = ZSTSettings.CardType,
                Balance  = e.Balance,
                Entrance = entrance,
            };

            if (entrance != null && !entrance.IsExitDevice)  //入场时产生读卡事件
            {
                _Reader.MessageConfirm(e.ReaderIP);
                if (this.OnReadCard != null)
                {
                    this.OnReadCard(this, args);
                }
            }
            else  //中央收费和出口产生收费事件
            {
                if (this.OnPaying != null)
                {
                    this.OnPaying(this, args);                        //产生收费事件
                }
                if (args.Payment == null)
                {
                    return;
                }
                if (args.Payment.GetPaying() == 0) //不用收费直接返回收款成功事件
                {
                    args.Payment.PaymentCode = Ralid.Park.BusinessModel.Enum.PaymentCode.Computer;
                    args.Payment.PaymentMode = Ralid.Park.BusinessModel.Enum.PaymentMode.ZhongShanTong;
                    if (this.OnPaidOk != null)
                    {
                        this.OnPaidOk(this, args);
                    }
                }
                else
                {
                    lock (_WaitingPayingCardsLocker)
                    {
                        _WaitingPayingCards[e.CardID] = args;                  //保存某个读卡器目前正在处理的收费记录
                    }
                    _Reader.Consumption(e.ReaderIP, args.Payment.GetPaying()); //直接扣款
                }
            }
        }