Пример #1
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();  //清空读卡器内的卡片信息
            }
        }
Пример #2
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));
            }
        }
Пример #3
0
 private ZSTHandlerInfo GetZSTHandlerInstance(string ip)
 {
     lock (_HandlerLocker)
     {
         ZSTHandlerInfo item = _HandlerInfoes.SingleOrDefault(it => it.ReaderIP == ip);
         if (item == null)
         {
             item          = new ZSTHandlerInfo();
             item.ReaderIP = ip;
             _HandlerInfoes.Add(item);
         }
         return(item);
     }
 }
Пример #4
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();  //清空读卡器内的卡片信息
            }
        }
Пример #5
0
        public void ProcessReport(BusinessModel.Report.ReportBase report)
        {
            EntranceInfo entrance = ParkBuffer.Current.GetEntrance(report.EntranceID);

            if (entrance == null)
            {
                return;
            }
            if (entrance.IsExitDevice)  //处理出口
            {
                if (report is CardEventReport)
                {
                    CardEventReport cer = report as CardEventReport;
                    if (cer.EventStatus == CardEventStatus.Pending)
                    {
                        ZSTHandlerInfo zst = GetZSTHandlerInstance(cer.EntranceID);
                        if (zst != null && !string.IsNullOrEmpty(zst.CardID) && zst.CardID == cer.CardID)
                        {
                            if (zst.Balance >= cer.CardPaymentInfo.Accounts)
                            {
                                zst.ProcessingEvent = cer;
                                _Reader.Consumption(zst.ReaderIP, cer.CardPaymentInfo.Accounts);  //余额足够的话就直接扣款
                                IParkingAdapter pad = ParkingAdapterManager.Instance[cer.ParkID];
                                if (pad != null)
                                {
                                    SetLedDisplayNotify notify = new SetLedDisplayNotify(entrance.ParkID, CanAddress.TicketBoxLed,
                                                                                         string.Format("扣款{0}元", cer.CardPaymentInfo.Accounts), false, 0);
                                    pad.LedDisplay(notify);
                                }
                            }
                            else
                            {
                                _Reader.MessageConfirm(zst.ReaderIP); //发送中山通读卡确认消息
                                zst.ClearCardInfo();                  //清空读卡器内的卡片信息
                                IParkingAdapter pad = ParkingAdapterManager.Instance[cer.ParkID];
                                if (pad != null)
                                {
                                    EventInvalidNotify n = new EventInvalidNotify()
                                    {
                                        InvalidType = EventInvalidType.INV_Balance,
                                        Balance     = zst.Balance,
                                        CardEvent   = cer
                                    };
                                    pad.EventInvalid(n);
                                }
                            }
                        }
                    }
                    else
                    {
                        ZSTHandlerInfo zst = GetZSTHandlerInstance(cer.EntranceID);
                        if (zst != null && !string.IsNullOrEmpty(zst.CardID) && zst.CardID == cer.CardID)
                        {
                            _Reader.MessageConfirm(zst.ReaderIP); //发送中山通读卡确认消息
                            zst.ClearCardInfo();                  //清空读卡器内的卡片信息
                        }
                    }
                }
                else if (report is CardInvalidEventReport)
                {
                    CardInvalidEventReport cier = report as CardInvalidEventReport;
                    ZSTHandlerInfo         zst  = GetZSTHandlerInstance(report.EntranceID);
                    if (zst != null && !string.IsNullOrEmpty(zst.CardID) && zst.CardID == cier.CardID)
                    {
                        _Reader.MessageConfirm(zst.ReaderIP); //发送中山通读卡确认消息
                        zst.ClearCardInfo();                  //清空读卡器内的卡片信息
                    }
                }
            }
        }