private void Page_Unloaded(object sender, RoutedEventArgs e) { //TPU_CLOSE(); CZLHTpuHandler.Close(); rfidReader.Dispose(); rfidReader = null; //this.parent.RestartSecond(); //this.parent.SelfHelpInfo.TicketNumberList = new List<string>(); }
//***************读卡函数************ // public void DoWork() // { // B_CallBackEventArg arg = new B_CallBackEventArg(); // arg.message = ""; // while (!_shoudStop) // { // #region // try // { // rfidReader.WaitForTicketPresent(-1); // //读取发行信息 // TicketPublishInfo tpInfo = rfidReader.readTicketPublishInfo(); // arg.TicketNumber = tpInfo.ID.ToString();//票号 // //读取销售信息 // TicketSaleInfo? tsInfo = rfidReader.readTicketSaleInfo(); // if (!tsInfo.HasValue)//未做过销售的 // { // #region //验证出票与购票的票种是否相同 // if (tpInfo.TicketClass.ToString() == this.parent.mSelfHelpClass.TicketTypeID) // { // //获到票种实体 // mticketType = D_TicketType.GetTicketTypeInfo(tpInfo.TicketClass.ToString()); // #region//首先判断票种是否存在 // if (mticketType.TICKET_TYPE_ID != null)//当前票票种存在的 // { // Yu_Price = T_SellTicketRecord.Get_sl_period_Price(tpInfo.TicketClass.ToString());//获取预售期票价 // #region//是否团体票 // if (mticketType.TEAM_FLAG == "Y")//团体票 // { // BeginDate = DateTime.Now; // EndDate = DateTime.Now.AddMinutes(M_Configuration.Teamtickettime);//从参数表中取出结束时间//Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 16:00:00")); // arg.message = "此门票为团体票,不能在此销售!"; // // reportChange(-1, arg, null); // wkThread_progressReport(-1, arg, null); // rfidReader.LongBeep(); // } // else // { // if (mticketType.DAY_VALIDATE_FLAG == "Y")//当日有效 // { // BeginDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); // EndDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")); // } // else //非当日有效 // { // BeginDate = DateTime.Now; // EndDate = DateTime.Now.AddYears(2); // } // } // #endregion // #region// 循环写票 // if (this.cardCount > 0)//未出完票的 // { // //************************写入售票内容***************** // #region//写票 // if (rfidReader.writeTicketSaleInfo(BeginDate, EndDate, 1)) // { // if (this.parent.mSelfHelpClass.OperType == "0")//购票时生成销售明细单号 // { // XiaoMX = T_SellTicketRecord.CreateTableUID(M_Configuration.CLIENTID, T_SellTicketRecord.LocalTicketMX_Prefix_ZG, this.cardCount); // } // //保存数据 // #region//保存 // if (T_SellTicketRecord.Insert_SL_ORDER_DETAIL(mticketType, tpInfo.ID.ToString(), Convert.ToInt32(this.parent.mSelfHelpClass.OperType), this.parent.mSelfHelpClass, XiaoMX,this.cardCount)) // { // rfidReader.Beep(); // try // { // if (this.api.OutputCard())//出票 // { // this.cardCount--;//读取成功且出票成功再计数 // } // else//出票不成功 // { // isError = true; // arg.message = "未成功出票!"; // wkThread_progressReport(-1, arg, null); // } // } // catch (Exception ex) // { // _log.Error(typeof(GPPage6), ex); // } // } // else // { // arg.message = "保存票据信息失败!"; // wkThread_progressReport(-1, arg, null); // } //#endregion // } // else//写票失败 // { // arg.message = "写入票据信息失败!"; // wkThread_progressReport(-1, arg, null); // } //#endregion // } // else // { // rfidReader.Beep(); // arg.message = "已完成售票,请取票!"; // wkThread_progressReport(-1, arg, null); // } // #endregion // } // else//该票的票种不存在 // { // arg.message = "系统中不存在当前票种!"; // // reportChange(-1, arg, null); // wkThread_progressReport(-1, arg, null); // rfidReader.LongBeep(); // } // #endregion // } // else//购票与出票 票种不符 // { // arg.message = "当前门票同所购门票的票种不符!"; // // reportChange(-1, arg, null); // wkThread_progressReport(-1, arg, null); // rfidReader.LongBeep(); // } // #endregion // } // else//已做过销售的 // { // arg.message = "当前门票已做过销售处理!"; // // reportChange(-1, arg, null); // wkThread_progressReport(-1, arg, null); // rfidReader.LongBeep(); // } // } // catch (Exception ex) // { // if (_shoudStop) // return; // arg.message = ex.Message; // // reportChange(-1, arg, ex); // wkThread_progressReport(-1, arg, ex); // _log.Error(typeof(GPPage6), ex); // } // finally // { // rfidReader.WaitForTicketRemoval(-1); // } // #endregion // } // } //void wkThread_progressReport(int pProgressPercentage, object UserState, Exception ex) //{ // arg = (B_CallBackEventArg)UserState; // //this.Invoke(new ShowinfoDelegate(ShowInfo)); // if (pProgressPercentage >= 0) // { // // str_ChangTicket = arg.TicketNumber; // } // else // { // // MessageBox.Show("提示信息:"+arg.message, T_SellTicketRecord.str_Apption,MessageBoxButton.OK,MessageBoxImage.Information); // } //} //***************读卡函数************ //*********************刮票、写票、出票操作函数**************** private void OutPutTicket() { //刮票 写票 出票部分 #region bool isok = false; bool isup = false;//上传 try { while (this.cardCount > 0) //未出完票的 { if (this.parent.mSelfHelpClass.OperType == "1") //取票还是购票 0表示购票 1表示取票 自助售票类 { displayErrorMessage("暂不支持自助取票!", "error"); break; //取票 #region //*****************实际取票时 需要判定的情况比较多 //if (M_Configuration.TicketTypeID_1 != M_Configuration.TicketTypeID_2)//不同票种 //{ //不同票种出票 //#region // if (M_Configuration.TicketTypeID_1 == this.parent.mSelfHelpClass.listorderdetail[this.cardCount - 1].TicketTypeId) // { // curBoxNumber = 0;//A票箱号 // this.parent.mSelfHelpClass.BoxNumber = "A"; // _log.Info("出A票箱!"); // } // else if (M_Configuration.TicketTypeID_2 == this.parent.mSelfHelpClass.listorderdetail[this.cardCount - 1].TicketTypeId) // { // curBoxNumber = 1;//B票箱号 // this.parent.mSelfHelpClass.BoxNumber = "B"; // _log.Info("出B票箱!"); // } // else // { // _log.Error("票箱内不含当前票种!"); // } // #endregion //} //else if (M_Configuration.TicketTypeID_1 == M_Configuration.TicketTypeID_2)//同一票种的 //{ // if (T_SellTicketRecord.Judge_TicketAlarmCount("A", 1))//A箱不够出B票箱 // { // curBoxNumber = 1;//B票箱号 // this.parent.mSelfHelpClass.BoxNumber = "B"; // _log.Info("出B票箱!"); // } // else if (T_SellTicketRecord.Judge_TicketAlarmCount("B", 1))//B箱不够出A票箱 // { // curBoxNumber = 0;//A票箱号 // this.parent.mSelfHelpClass.BoxNumber = "A"; // _log.Info("出A票箱!"); // } //} #endregion } else if (this.parent.mSelfHelpClass.OperType == "0")//取票还是购票 0表示购票 1表示取票 自助售票类 { DataTable dt = T_SellTicketRecord.Get_BoxTicketInfo(); for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["ticket_type_id"].ToString() == this.parent.mSelfHelpClass.TicketTypeID && (int)dt.Rows[i]["surplusCount"] >= this.cardCount + (int)dt.Rows[i]["alarmCount"]) { if (dt.Rows[i]["boxNumber"].ToString() == "A") { this.parent.mSelfHelpClass.BoxNumber = "A"; curBoxNumber = 0;//A票箱号 break; } else { this.parent.mSelfHelpClass.BoxNumber = "B"; curBoxNumber = 1;//B票箱号 break; } } } } Thread.Sleep(100); //1.刮票 //num = TPU_SEND_TK(Convert.ToByte(curBoxNumber));//0表示A票箱 1表示B票箱 num = CZLHTpuHandler.SendTicket((byte)curBoxNumber); // num =0;//测试代码 _log.Info("刮票结果:" + num.ToString()); Thread.Sleep(200); if (num == 0) { _log.Info("刮票成功!"); isok = T_SellTicketRecord.Update_SL_TicketCount(this.parent.mSelfHelpClass.BoxNumber); if (isok) { _log.Info("更新票箱余票成功!"); } else { _log.Error("更新票箱余票失败!"); } //2.写票 #region if (WriteTicket() == true) //if(1==1)//测试代码 { Thread.Sleep(100); _log.Info("写票成功!"); //********************写票成功后是各种更新及上传******** #region//各种更新上传 //******************出一张票就上传一次 for (int i = 0; i < 3; i++) { try { isup = B_SellTicketUpData.SellTicketDataUP_MX(this.parent.Client, this.parent.mSelfHelpClass.OrderID, this.parent.mSelfHelpClass, CurTicketID); // CurTicketID if (isup == true) //上传成功 { break; } else { _log.Warn("上传出票数据失败,开始重试。上传计数:" + (i + 1).ToString()); } } catch (Exception ex) { _log.Error("上传出票数据失败,开始重试。上传计数:" + (i + 1).ToString(), ex); } } if (isup) { _log.Info("出票上传成功!"); //******开始出票** //num = TPU_OUT(0);//出票 TPU_OUT返回1为出票成功 num = CZLHTpuHandler.OutTicket(0); // num = 1;//测试代码 if (num != 0) { //num = TPU_OUT(0);//再出一次 num = CZLHTpuHandler.OutTicket(0); } if (num == 0)//出票成功 { _log.Info("出票成功!"); this.cardCount--; } else//出票失败 { #region//出票失败的 _log.Error("出票操作失败!"); M_Configuration.RunState = Convert.ToInt32(DeviceStatus.OutCardFault); //出票机故障 this.cardCount = -99999; //返回首页 displayErrorMessage("出票卡票!请联系工作人员取走卡票,并到人工售票窗口补取余票。", "error"); #endregion } //*******开始出票** } else { //*******************************数据上传失败就回收票********* try { rfidReader.clearTicketSaleInfo(); } catch { } //num = TPU_OUT(1);//出不了就回收 废票回收无法判断是否执行成功 num = CZLHTpuHandler.OutTicket(1); if (num == 0)//回收成功 { _log.Info("出票上传失败,门票回收成功!"); } else { _log.Error("出票上传失败,门票回收失败!状态码:" + num.ToString()); } //*****更新废票箱 isok = T_SellTicketRecord.Update_SL_AbolishCount(false);//更新废票箱票数; if (isok) { _log.Info("更新废票箱成功!"); } else { _log.Error("更新废票箱失败!"); } //*******************************数据上传失败就回收票********* this.cardCount = -99999; this.parent.ticketbox_isErr = 100; } #endregion } else { #region 写票失败的 try { rfidReader.clearTicketSaleInfo(); } catch { } num = CZLHTpuHandler.OutTicket(1); if (num == 0)//回收成功 { _log.Info("写票操作失败,门票回收成功!"); } else { _log.Error("写票操作失败,门票回收失败!状态码:" + num.ToString()); } // 废票回收无法获取到是否回收成功状态 //*****更新废票箱 isok = T_SellTicketRecord.Update_SL_AbolishCount(false);//更新废票箱票数; if (isok) { _log.Info("更新废票箱成功!"); } else { _log.Error("更新废票箱失败!"); } if (this.parent.ticketbox_isErr == 1)//票种放反 { this.cardCount = 0; } #endregion } #endregion } else { //_log.Error("刮票操作失败!"); //TPU_RST(0); num = CZLHTpuHandler.Reset(); if (num == 0)//回收成功 { _log.Error("刮票操作失败,控制板重置成功!"); } else { _log.Error("刮票操作失败,控制板重置失败!状态码:" + num.ToString()); } M_Configuration.RunState = Convert.ToInt32(DeviceStatus.OutCardFault); //出票机故障 this.cardCount = -99999; //返回首页 displayErrorMessage("出票失败!请到人工售票窗口取票。", "error"); } } #endregion if (this.cardCount == 0) { displayErrorMessage("出票完成,请取走门票。", "INFO", true); } } catch (Exception ex) { _log.Error("出票失败,未知异常。", ex); displayErrorMessage("出票失败!请到人工售票窗口取票。", "error"); } finally { CZLHTpuHandler.Close(); } }