/// <summary>
 /// 增加一个停车场转换器
 /// </summary>
 /// <param name="pa"></param>
 public void Add(int parkID, IParkingAdapter pad)
 {
     lock (_ListLock)
     {
         _parkAdapters.Add(parkID, pad);
     }
 }
Esempio 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();  //清空读卡器内的卡片信息
            }
        }
Esempio n. 3
0
 private void CardReadHandler(object sender, CardReadEventArgs e)
 {
     if (AppSettings.CurrentSetting.EnableWriteCard)
     {
         //当前读到的卡片
         _cardInfo = CardDateResolver.Instance.GetCardInfoFromData(e.CardID, e[GlobalVariables.ParkingSection]);
     }
     foreach (int enID in WorkStationInfo.CurrentStation.EntranceList)
     {
         EntranceInfo entrance = ParkBuffer.Current.GetEntrance(enID);
         if (entrance != null && entrance.IsExitDevice)
         {
             RemoteReadCardNotify notify = new RemoteReadCardNotify(entrance.ParkID, entrance.EntranceID, e.CardID, e[GlobalVariables.ParkingSection]);
             if (_cardInfo != null)
             {
                 notify.LastCarPlate = _cardInfo.LastCarPlate;
             }
             IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.ParkID];
             if (pad != null)
             {
                 pad.RemoteReadCard(notify);
                 break;
             }
         }
     }
 }
Esempio n. 4
0
        private CardPaymentInfo GetPaymentInfo(CardInfo card, OpenCardEventArgs e, DateTime dt)
        {
            CardPaymentInfo ret      = null;
            IParkingAdapter pad      = null;
            EntranceInfo    entrance = e.Entrance;

            if (entrance != null)
            {
                pad = ParkingAdapterManager.Instance[entrance.RootParkID];
            }
            else //中央收费,默认使用卡片的入场停车场来扣费
            {
                entrance = ParkBuffer.Current.GetEntrance(card.LastEntrance);
                if (entrance != null)
                {
                    pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                }
                else
                {
                    if (ParkingAdapterManager.Instance != null && ParkingAdapterManager.Instance.ParkAdapters != null)
                    {
                        pad = ParkingAdapterManager.Instance.ParkAdapters[0];
                    }
                }
            }
            if (pad != null)
            {
                ret = pad.CreateCardPaymentRecord(card, card.CarType, dt);
            }
            return(ret);
        }
        private bool Sync_TarrifSetting()
        {
            bool success = true;
            Dictionary <int, List <EntranceInfo> > parksIDAndEntrances = this.hardwareTree1.GetSelectedParksIDAndEntrances();

            if (parksIDAndEntrances != null)
            {
                foreach (int parkID in parksIDAndEntrances.Keys)
                {
                    foreach (EntranceInfo entrance in parksIDAndEntrances[parkID])
                    {
                        IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                        bool            ret = false;
                        if (pad != null)
                        {
                            NotifyMessage(string.Format(Resources.Resource1.FrmDownLoadTariffSetting_Download, entrance.EntranceName));
                            ret = pad.DownloadTariffSettingToEntrance(entrance.EntranceID, TariffSetting.Current);
                            if (!ret)
                            {
                                WaitingCommandBLL  wcBll  = new WaitingCommandBLL(AppSettings.CurrentSetting.CurrentMasterConnect);
                                WaitingCommandInfo wcInfo = new WaitingCommandInfo();
                                wcInfo.EntranceID = entrance.EntranceID;
                                wcInfo.Command    = BusinessModel.Enum.CommandType.DownloadTariffs;
                                wcBll.DeleteAndInsert(wcInfo);
                            }
                        }
                        success = ret ? success : false;
                        NotifyHardwareTreeEntrance(entrance.EntranceID, ret);
                    }
                }
            }
            return(success);
        }
        private bool Sync_TarrifSetting()
        {
            bool success = true;
            Dictionary <int, List <EntranceInfo> > parksIDAndEntrances = this.hardwareTree1.GetSelectedParksIDAndEntrances();

            if (parksIDAndEntrances != null)
            {
                foreach (int parkID in parksIDAndEntrances.Keys)
                {
                    foreach (EntranceInfo entrance in parksIDAndEntrances[parkID])
                    {
                        IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                        bool            ret = false;
                        if (pad != null)
                        {
                            NotifyMessage(string.Format(Resources.Resource1.FrmDownLoadTariffSetting_Download, entrance.EntranceName));
                            ret = pad.DownloadTariffSettingToEntrance(entrance.EntranceID, TariffSetting.Current);
                        }
                        success = ret ? success : false;
                        NotifyHardwareTreeEntrance(entrance.EntranceID, ret);
                    }
                }
            }
            return(success);
        }
Esempio n. 7
0
 private void ParkingAdapter_ParkAdapterConnectFail(object sender, EventArgs e)
 {
     _Channel = null;
     _ConnectFailEvent.Set();
     _ConnectedOKEvent.Reset();
     Ralid.GeneralLibrary.LOG.FileLog.Log("系统", "断开与服务器连接");
 }
Esempio n. 8
0
        private void FrmCardOut_FormClosing(object sender, FormClosingEventArgs e)
        {
            CardReaderManager.GetInstance(UserSetting.Current.WegenType).PopCardReadRequest(CardReadHandler);

            if (_OutCardsWitPark.Keys.Count > 0)
            {
                MessageBox.Show(Resource1.FrmCardOut_UpdateVacant);

                this.Cursor = Cursors.WaitCursor;
                foreach (ParkInfo park in _OutCardsWitPark.Keys)
                {
                    bool            ret = false;
                    IParkingAdapter pad = ParkingAdapterManager.Instance[park.ParkID];
                    if (pad != null)
                    {
                        ret = pad.ModifiedVacant(_OutCardsWitPark[park]);
                    }
                    //插入卡片直接出场报警记录,记录增加车位数
                    AlarmInfo alarm = new AlarmInfo();
                    alarm.AlarmDateTime = DateTime.Now;
                    alarm.AlarmType     = AlarmType.CardOutAnomaly;
                    alarm.OperatorID    = OperatorInfo.CurrentOperator.OperatorName;
                    alarm.AlarmDescr    = string.Format("[{0}] " + Resource1.FrmCardOut_OutCount + ":[{1}]," + Resource1.FrmCardOut_VacantCount + "[{2}]", park.ParkName, _OutCardsWitPark[park].ToString(), ret ? Resource1.Form_Success : Resource1.Form_Fail);
                    new AlarmBll(AppSettings.CurrentSetting.ParkConnect).Insert(alarm);
                    if (!ret)
                    {
                        this.Cursor = Cursors.Arrow;
                        MessageBox.Show(string.Format("{0} ,{1}", alarm.AlarmDescr, Resource1.FrmCardOut_VacantManual));
                        this.Cursor = Cursors.WaitCursor;
                    }
                }
                this.Cursor = Cursors.Arrow;
            }
        }
Esempio n. 9
0
 private void s_OnPaidOk(object sender, OpenCardEventArgs e)
 {
     try
     {
         if (string.IsNullOrEmpty(e.CardID))
         {
             return;
         }
         CardPaymentInfo pay = e.Payment;
         if (pay != null && (pay.Accounts > 0 || pay.Discount > 0)) //只有要收费的记录才保存
         {
             pay.Paid           = e.Paid;
             pay.IsCenterCharge = true;
             pay.OperatorID     = OperatorInfo.CurrentOperator.OperatorName;
             pay.StationID      = WorkStationInfo.CurrentStation.StationName;
             CommandResult ret = (new CardBll(AppSettings.CurrentSetting.MasterParkConnect)).PayParkFee(pay);
         }
         if (e.Entrance != null)
         {
             IParkingAdapter pad = ParkingAdapterManager.Instance[e.Entrance.RootParkID];
             if (pad != null)
             {
                 var notify = new RemoteReadCardNotify(e.Entrance.RootParkID, e.Entrance.EntranceID, e.CardID, string.Empty,
                                                       OperatorInfo.CurrentOperator.OperatorID, WorkStationInfo.CurrentStation.StationID);
                 string temp   = AppSettings.CurrentSetting.GetConfigContent("RemoteReader");
                 int    reader = 0;
                 if (!int.TryParse(temp, out reader))
                 {
                     reader = 0;
                 }
                 notify.Reader = (EntranceReader)reader;
                 if (!pad.RemoteReadCard(notify))
                 {
                     if (Debug)
                     {
                         Ralid.GeneralLibrary.LOG.FileLog.Log(e.Entrance.EntranceName, string.Format("【{0}】 缴费事件 远程读卡失败", e.CardID));
                     }
                 }
                 if (!string.IsNullOrEmpty(e.CardType)) //只有开放卡片才显示余额
                 {
                     WaitCallback wc = (WaitCallback)((object state) =>
                     {
                         System.Threading.Thread.Sleep(AppSettings.CurrentSetting.GetShowBalanceInterval() * 1000);
                         pad.LedDisplay(new SetLedDisplayNotify(e.Entrance.EntranceID, CanAddress.TicketBoxLed, string.Format("车费{0}元 余额{1}元", e.Paid, e.Balance), false, 0));
                     });
                     ThreadPool.QueueUserWorkItem(wc);
                 }
             }
         }
         if (this.OnPaidOk != null)
         {
             this.OnPaidOk(sender, e);
         }
     }
     catch (Exception ex)
     {
         Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
         throw ex;
     }
 }
Esempio n. 10
0
        private void s_OnReadCard(object sender, OpenCardEventArgs e)
        {
            if (string.IsNullOrEmpty(e.CardID))
            {
                return;
            }
            if (e.Entrance == null)
            {
                return;                   //没有指定通道的读卡事件丢掉不处理
            }
            if (!e.Entrance.IsExitDevice) //入口刷卡时,如果卡片类型为开放卡片类型,则在系统中增加此卡片信息
            {
                CardType ct = string.IsNullOrEmpty(e.CardType) ? null : CustomCardTypeSetting.Current.GetCardType(e.CardType);
                if (ct != null)
                {
                    CardInfo card = (new CardBll(AppSettings.CurrentSetting.ParkConnect)).GetCardByID(e.CardID).QueryObject;
                    if (card == null)
                    {
                        SaveOpenCard(e.CardID, ct, e.Balance);
                    }
                }
            }

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

            if (pad != null)
            {
                var notify = new RemoteReadCardNotify(e.Entrance.RootParkID, e.Entrance.EntranceID, e.CardID, string.Empty,
                                                      OperatorInfo.CurrentOperator.OperatorID, WorkStationInfo.CurrentStation.StationID);
                string temp   = AppSettings.CurrentSetting.GetConfigContent("RemoteReader");
                int    reader = 0;
                if (!int.TryParse(temp, out reader))
                {
                    reader = 0;
                }
                notify.Reader = (EntranceReader)reader;
                if (!pad.RemoteReadCard(notify))
                {
                    if (Debug)
                    {
                        Ralid.GeneralLibrary.LOG.FileLog.Log(e.Entrance.EntranceName, string.Format("【{0}】 读卡事件 远程读卡失败", e.CardID));
                    }
                }
                if (!string.IsNullOrEmpty(e.CardType)) //只有开放卡片才显示余额
                {
                    WaitCallback wc = (WaitCallback)((object state) =>
                    {
                        System.Threading.Thread.Sleep(AppSettings.CurrentSetting.GetShowBalanceInterval() * 1000);
                        pad.LedDisplay(new SetLedDisplayNotify(e.Entrance.EntranceID, CanAddress.TicketBoxLed, string.Format("余额{0}元", e.Balance), false, 0));
                    });
                    ThreadPool.QueueUserWorkItem(wc);
                }
            }
            if (this.OnReadCard != null)
            {
                this.OnReadCard(sender, e);
            }
        }
Esempio n. 11
0
 private void s_OnPaidFail(object sender, OpenCardEventArgs e)
 {
     if (string.IsNullOrEmpty(e.CardID))
     {
         return;
     }
     if (e.Entrance != null)
     {
         IParkingAdapter pad = ParkingAdapterManager.Instance[e.Entrance.RootParkID];
         if (pad != null)
         {
             if (!e.LastError.Contains("余额不足"))
             {
                 pad.LedDisplay(new SetLedDisplayNotify(e.Entrance.EntranceID, CanAddress.TicketBoxLed, string.IsNullOrEmpty(e.LastError) ? "扣款失败" : e.LastError, false, 0));
             }
             else
             {
                 string temp   = AppSettings.CurrentSetting.GetConfigContent("RemoteReader");
                 int    reader = 0;
                 if (!int.TryParse(temp, out reader))
                 {
                     reader = 0;
                 }
                 var ce = new CardEventReport()
                 {
                     EntranceID = e.Entrance.EntranceID,
                     CardID     = e.Payment.CardID,
                     CardType   = e.Payment.CardType,
                     Reader     = (EntranceReader)reader,
                 };
                 var notify = new EventInvalidNotify()
                 {
                     CardEvent   = ce,
                     Balance     = e.Balance,
                     OperatorNum = OperatorInfo.CurrentOperator.OperatorNum,
                     InvalidType = EventInvalidType.INV_Balance
                 };
                 pad.EventInvalid(notify);
                 if (!string.IsNullOrEmpty(e.CardType)) //只有开放卡片才显示余额
                 {
                     WaitCallback wc = (WaitCallback)((object state) =>
                     {
                         System.Threading.Thread.Sleep(AppSettings.CurrentSetting.GetShowBalanceInterval() * 1000);
                         pad.LedDisplay(new SetLedDisplayNotify(e.Entrance.EntranceID, CanAddress.TicketBoxLed, string.Format("车费{0}元 余额{1}元", e.Payment.GetPaying(), e.Balance), false, 0));
                     });
                     ThreadPool.QueueUserWorkItem(wc);
                 }
             }
         }
     }
     if (this.OnPaidFail != null)
     {
         this.OnPaidFail(sender, e);
     }
 }
Esempio n. 12
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));
            }
        }
Esempio n. 13
0
 /// <summary>
 /// 建立WCF连接
 /// </summary>
 /// <returns></returns>
 public bool ConnectServer()
 {
     try
     {
         if (!string.IsNullOrEmpty(_ParkAdapterUri))
         {
             Binding binding = Ralid.GeneralLibrary.WCF.BindingFactory.CreateDualBinding(_ParkAdapterUri);
             if (binding != null)
             {
                 if (_ChannelFactory != null)
                 {
                     _ChannelFactory.Close();
                 }
                 _ChannelFactory = new DuplexChannelFactory <IParkingAdapter>(this, binding, new EndpointAddress(_ParkAdapterUri));
                 IParkingAdapter channel = _ChannelFactory.CreateChannel();
                 channel.Subscription();
                 _Channel = channel;
                 if (ParkApaterReconnected != null)
                 {
                     ParkApaterReconnected(this, EventArgs.Empty);
                 }
                 return(true);
             }
         }
         else
         {
             if (ParkAdapterConnectFail != null)
             {
                 ParkAdapterConnectFail(this, EventArgs.Empty);
             }
         }
     }
     catch (CommunicationException ex)
     {
         if (ParkAdapterConnectFail != null)
         {
             ParkAdapterConnectFail(this, EventArgs.Empty);
         }
     }
     catch (Exception ex)
     {
         ExceptionPolicy.HandleException(ex);
     }
     return(false);
 }
Esempio n. 14
0
        private bool Sync_KeySetting()
        {
            bool success = true;
            List <EntranceInfo> entrances = this.hardwareTree1.GetSelectedEntrances();

            foreach (EntranceInfo entrance in entrances)
            {
                IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                bool            ret = false;
                if (pad != null)
                {
                    NotifyMessage(string.Format(Resources.Resource1.FrmDownLoadKeySetting_Download, entrance.EntranceName));
                    ret = pad.DownloadKeySettingToEntrance(entrance.EntranceID, KeySetting.Current);
                }
                success = ret ? success : false;
                NotifyHardwareTreeEntrance(entrance.EntranceID, ret);
            }
            return(success);
        }
Esempio n. 15
0
 private void s_OnError(object sender, OpenCardEventArgs e)
 {
     if (e.Entrance != null)
     {
         IParkingAdapter pad = ParkingAdapterManager.Instance[e.Entrance.RootParkID];
         if (pad != null)
         {
             if (e.LastError.Contains("黑名单"))
             {
                 string temp   = AppSettings.CurrentSetting.GetConfigContent("RemoteReader");
                 int    reader = 0;
                 if (!int.TryParse(temp, out reader))
                 {
                     reader = 0;
                 }
                 var f**k = new CardEventReport()
                 {
                     EntranceID = e.Entrance.EntranceID,
                     CardID     = e.CardID,
                     CardType   = CustomCardTypeSetting.Current.GetCardType(e.CardType),
                     Reader     = (EntranceReader)reader,
                 };
                 var notify = new EventInvalidNotify()
                 {
                     CardEvent   = f**k,
                     Balance     = e.Balance,
                     OperatorNum = OperatorInfo.CurrentOperator.OperatorNum,
                     InvalidType = EventInvalidType.INV_Invalid,
                 };
                 pad.EventInvalid(notify);
             }
             else
             {
                 pad.LedDisplay(new SetLedDisplayNotify(e.Entrance.EntranceID, CanAddress.TicketBoxLed, e.LastError, false, 0));
             }
         }
     }
     if (this.OnError != null)
     {
         this.OnError(this, e);
     }
 }
Esempio n. 16
0
        /// <summary>
        /// 网络型下载卡片
        /// </summary>
        private bool SyncCards(List <CardInfo> cards)
        {
            bool result = true;

            foreach (EntranceInfo entrance in _Entrances)
            {
                IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                if (pad != null)
                {
                    bool success = true;
                    if (_DownLoadAll)
                    {
                        //全部下载时,下载前需要清空卡片名单
                        CancelNeedWaiting = true;
                        NotifyMessage(string.Format("{0} {1} {2}", Resources.Resource1.FrmDownLoadAllCards_Entrance, entrance.EntranceName, Resources.Resource1.FrmDownloadAllCards_Clear));
                        success = pad.ClearCardsToEntrance(entrance.EntranceID);//删除所有卡片
                        CancelWaitingEvent.Set();
                        CancelNeedWaiting = false;
                    }
                    if (success)
                    {
                        foreach (CardInfo card in cards)
                        {
                            string msg = _DownLoadCard ? Resources.Resource1.FrmDownloadAllCards_CardProcessing : Resources.Resource1.FrmDownLoadAllCards_Delete;
                            NotifyMessage(string.Format("{0} {1} {2}", Resources.Resource1.FrmDownLoadAllCards_Entrance, entrance.EntranceName, string.Format(msg, card.CardID)));
                            if (_DownLoadCard)
                            {
                                success = pad.SaveCardToEntrance(entrance.EntranceID, card, ActionType.Add) ? success : false;
                            }
                            else
                            {
                                success = pad.DeleteCardToEntrance(entrance.EntranceID, card) ? success : false;//删除选定卡片
                            }
                            NotifyProgress(null);
                        }
                    }
                    result = success ? result : false;
                    NotifyHardwareTreeEntrance(entrance.EntranceID, success);
                }
            }
            return(result);
        }
Esempio n. 17
0
 private void TicketReader_BarCodeRead(object sender, BarCodeReadEventArgs e)
 {
     if (!string.IsNullOrEmpty(e.BarCode))
     {
         foreach (int enID in WorkStationInfo.CurrentStation.EntranceList)
         {
             EntranceInfo entrance = ParkBuffer.Current.GetEntrance(enID);
             if (entrance != null && entrance.IsExitDevice)
             {
                 RemoteReadCardNotify notify = new RemoteReadCardNotify(entrance.ParkID, entrance.EntranceID, e.BarCode);
                 IParkingAdapter      pad    = ParkingAdapterManager.Instance[entrance.ParkID];
                 if (pad != null)
                 {
                     pad.RemoteReadCard(notify);
                     break;
                 }
             }
         }
     }
 }
Esempio n. 18
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();  //清空读卡器内的卡片信息
            }
        }
Esempio n. 19
0
        /// <summary>
        /// 网络型下载卡片
        /// </summary>
        private bool SyncCards(List <CardInfo> cards)
        {
            bool result        = true;
            int  entranceCount = 0;

            foreach (EntranceInfo entrance in _Entrances)
            {
                IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                if (pad != null)
                {
                    pad.WaitingCommandServiceEnable(false);
                    try
                    {
                        bool success = true;
                        if (_DownLoadAll)
                        {
                            //全部下载时,下载前需要清空卡片名单
                            CancelNeedWaiting = true;
                            NotifyMessage(string.Format("{0} {1} {2}", Resources.Resource1.FrmDownLoadAllCards_Entrance, entrance.EntranceName, Resources.Resource1.FrmDownloadAllCards_Clear));
                            success = pad.ClearCardsToEntrance(entrance.EntranceID);//删除所有卡片
                            CancelWaitingEvent.Set();
                            CancelNeedWaiting = false;
                        }
                        if (success)
                        {
                            int             currentcount = 0;
                            int             savecount    = 16;
                            int             failcount    = 0;
                            List <CardInfo> FailCards    = new List <CardInfo>();

                            do
                            {
                                List <CardInfo> infos = new List <CardInfo>();
                                for (int i = 0; i < savecount && currentcount < cards.Count; i++)
                                {
                                    infos.Add(cards[currentcount]);
                                    currentcount++;
                                }

                                if (!pad.SaveCardsToEntrance(entrance.EntranceID, infos, _DownLoadCard ? ActionType.Add : ActionType.Delete))
                                {
                                    success    = false;
                                    failcount += infos.Count;
                                    FailCards.AddRange(infos);
                                }

                                string msg = _DownLoadCard ? Resources.Resource1.FrmDownloadAllCards_CardProcessing : Resources.Resource1.FrmDownLoadAllCards_Delete;
                                msg = string.Format(msg, string.Format(" {0}/{1} {2}:{3}", currentcount, cards.Count, Resources.Resource1.FrmDownLoadAllCards_Fail, failcount));
                                NotifyMessage(string.Format("{0} {1} {2}", Resources.Resource1.FrmDownLoadAllCards_Entrance, entrance.EntranceName, msg));

                                NotifyProgress(entranceCount * cards.Count + currentcount);
                                TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - _Begin.Ticks);
                                NotifyTime(ts);

                                //Thread.Sleep(50);
                            }while (currentcount < cards.Count);

                            //if (FailCards.Count > 0)
                            //{
                            //    WaitingCommandBLL wcBll = new WaitingCommandBLL(AppSettings.CurrentSetting.CurrentMasterConnect);
                            //    foreach (CardInfo fcard in FailCards)
                            //    {
                            //        WaitingCommandInfo wcInfo = new WaitingCommandInfo();
                            //        wcInfo.EntranceID = entrance.EntranceID;
                            //        wcInfo.Command = _DownLoadCard ? BusinessModel.Enum.CommandType.AddCard : BusinessModel.Enum.CommandType.DeleteCard;
                            //        wcInfo.CardID = fcard.CardID;
                            //        wcBll.DeleteAndInsert(wcInfo);
                            //    }
                            //}
                        }
                        result = success ? result : false;
                        NotifyHardwareTreeEntrance(entrance.EntranceID, success);
                    }
                    catch (Exception ex)
                    {
                        Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
                    }

                    pad.WaitingCommandServiceEnable(true);
                }
                entranceCount++;
            }
            return(result);
        }
Esempio n. 20
0
        /// <summary>
        /// 网络型下载卡片
        /// </summary>
        private bool SyncCards(List <CardInfo> cards)
        {
            bool result = true;

            foreach (EntranceInfo entrance in _Entrances)
            {
                IParkingAdapter pad = ParkingAdapterManager.Instance[entrance.RootParkID];
                if (pad != null)
                {
                    pad.WaitingCommandServiceEnable(false);
                    try
                    {
                        bool success = true;
                        if (_DownLoadAll)
                        {
                            //全部下载时,下载前需要清空卡片名单
                            CancelNeedWaiting = true;
                            NotifyMessage(string.Format("{0} {1} {2}", Resources.Resource1.FrmDownLoadAllCards_Entrance, entrance.EntranceName, Resources.Resource1.FrmDownloadAllCards_Clear));
                            success = pad.ClearCardsToEntrance(entrance.EntranceID);//删除所有卡片
                            CancelWaitingEvent.Set();
                            CancelNeedWaiting = false;
                        }
                        if (success)
                        {
                            int currentcount = 0;
                            int savecount    = 16;
                            int failcount    = 0;

                            do
                            {
                                List <CardInfo> infos = new List <CardInfo>();
                                for (int i = 0; i < savecount && currentcount < cards.Count; i++)
                                {
                                    infos.Add(cards[currentcount]);
                                    currentcount++;
                                }

                                if (!pad.SaveCardsToEntrance(entrance.EntranceID, infos, _DownLoadCard ? ActionType.Add : ActionType.Delete))
                                {
                                    success    = false;
                                    failcount += infos.Count;
                                }

                                string msg = _DownLoadCard ? Resources.Resource1.FrmDownloadAllCards_CardProcessing : Resources.Resource1.FrmDownLoadAllCards_Delete;
                                msg = string.Format(msg, string.Format(" {0}/{1} {2}:{3}", currentcount, cards.Count, Resources.Resource1.FrmDownLoadAllCards_Fail, failcount));
                                NotifyMessage(string.Format("{0} {1} {2}", Resources.Resource1.FrmDownLoadAllCards_Entrance, entrance.EntranceName, msg));

                                NotifyProgress(currentcount);
                                TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - _Begin.Ticks);
                                NotifyTime((int)ts.TotalSeconds);
                            }while (currentcount < cards.Count);
                        }
                        result = success ? result : false;
                        NotifyHardwareTreeEntrance(entrance.EntranceID, success);
                    }
                    catch (Exception ex)
                    {
                        Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex);
                    }

                    pad.WaitingCommandServiceEnable(true);
                }
            }
            return(result);
        }
Esempio n. 21
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();                  //清空读卡器内的卡片信息
                    }
                }
            }
        }