/// <summary> /// 增加一个停车场转换器 /// </summary> /// <param name="pa"></param> public void Add(int parkID, IParkingAdapter pad) { lock (_ListLock) { _parkAdapters.Add(parkID, pad); } }
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(); //清空读卡器内的卡片信息 } }
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; } } } }
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); }
private void ParkingAdapter_ParkAdapterConnectFail(object sender, EventArgs e) { _Channel = null; _ConnectFailEvent.Set(); _ConnectedOKEvent.Reset(); Ralid.GeneralLibrary.LOG.FileLog.Log("系统", "断开与服务器连接"); }
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; } }
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; } }
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); } }
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); } }
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)); } }
/// <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); }
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); }
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); } }
/// <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); }
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; } } } } }
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(); //清空读卡器内的卡片信息 } }
/// <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); }
/// <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); }
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(); //清空读卡器内的卡片信息 } } } }