public QPPage3(MainWindow parentWindow) { this.parent = parentWindow; this.InitializeComponent(); TicketInfo.Clear(); //TicketInfo.Add(new TicketInfo //{ // tickettype = "八里沟", // ticketcount = "1", // ticketdate = "2017年5月4日" //}); //TicketInfo.Add(new TicketInfo //{ // tickettype = "九莲山", // ticketcount = "1", // ticketdate = "2017年5月5日" //}); //TicketInfo.Add(new TicketInfo //{ // tickettype = "天界山", // ticketcount = "1", // ticketdate = "2017年5月5日" //}); this.dataGrid1.ItemsSource = TicketInfo.GetInfo(); //发送身份证取票 List <SL_ORDER_DETAIL> listOrderDetail = new List <SL_ORDER_DETAIL>(); listOrderDetail = B_SellTicketUpData.GetTicketInfo_IDCard(this.parent.Client, this.parent.mSelfHelpClass.GetTicketUserNumber); if (listOrderDetail.Count > 0) { //余票验证 #region //1.先获取要取的票中各个票种的数量 Int32 ACount = 0; //A票种数量 Int32 BCount = 0; //B票种数量 for (int i = 0; i < listOrderDetail.Count; i++) { if (listOrderDetail[i].TicketTypeId == M_Configuration.TicketTypeID_1)//A票箱票种 { ACount++; } else if (listOrderDetail[i].TicketTypeId == M_Configuration.TicketTypeID_2)//B票箱票种 { BCount++; } } //2.先看下两个票箱票种是一样的情况 if (M_Configuration.TicketTypeID_1 == M_Configuration.TicketTypeID_2) //票箱放的是一种票的情况 { if ((ACount > 0) && (BCount > 0)) //实际是取两种票的情况 { MessageBox.Show("本取票网点没有您所购的全体票种!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); return; } else { //自助售票机两个票箱是一种票时 有一个票箱的票数能满足就行或A B两票箱数量加起来够也行 Int32 TicketCount = T_SellTicketRecord.GetCount_SL_TicketCount();//获取票箱内全体票数 if (listOrderDetail.Count > TicketCount) { MessageBox.Show("所购票数已超过当前票箱允许的售票数!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); return; } } } else//票箱是两种票的情况 这种情况下必须是两种票都满足才能出票 否则不出票 { for (int i = 0; i < listOrderDetail.Count; i++) { if (T_SellTicketRecord.Judge_TicketAlarmCount(listOrderDetail[i].TicketTypeId, ACount)) { MessageBox.Show("所购票数已超过当前票箱余票数!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); return; } } } #endregion string str1 = ""; //临时存票种1 string str2 = ""; //临时存票种2 string strcount = ""; //计算票数用的 Int32 ticket1count = 0; //****************先根据票种获取箱号 如果是两个票箱号是同一种票种的 哪个余票多就用哪个的票箱号**************** #region//待删除 //if (M_Configuration.TicketTypeID_1 == M_Configuration.TicketTypeID_2) //{ } //else //{ // // //} #endregion //****************先根据票种获取箱号 如果是两个票箱号是同一种票种的 哪个余票多就用哪个的票箱号**************** for (int i = 0; i < listOrderDetail.Count; i++) { TicketInfo.Add(new TicketInfo { tickettype = T_SellTicketRecord.GetTicketInfo(listOrderDetail[i].TicketTypeId).TicketTypeName,//票种 ticketcount = "1", ticketdate = DateTime.Now.ToString("门票日期:MM月dd日") }); if (str1 == "") { str1 = listOrderDetail[i].TicketTypeId; } else if (str1 != listOrderDetail[i].TicketTypeId) { str2 = listOrderDetail[i].TicketTypeId; } if (strcount == "") { strcount = listOrderDetail[i].TicketTypeId; ticket1count = 1; } else if (strcount == listOrderDetail[i].TicketTypeId) { ticket1count = ticket1count + 1;//其中一个票种的票数 } } this.parent.mSelfHelpClass.listtypeid.Add(str1); //票种1 this.parent.mSelfHelpClass.listtypeid.Add(str2); //票种2 this.parent.mSelfHelpClass.listticketcount.Add(ticket1count); //其中一个票种的票数 其实是第一个票种的票数 this.parent.mSelfHelpClass.listticketcount.Add(listOrderDetail.Count - ticket1count); //其中一个票种的票数 第二个票种的票数 //****************赋值 if (this.parent.mSelfHelpClass.OperType != "0") //购票也用此 先区分下 取票还是购票 0表示购票 1表示取票 自助售票类 { this.parent.mSelfHelpClass.OperType = "1"; //取票还是购票 0表示购票 1表示取票 自助售票类 } this.parent.mSelfHelpClass.listorderdetail.Clear(); this.parent.mSelfHelpClass.listorderdetail = listOrderDetail; //服务器回传销售明细信息 this.parent.mSelfHelpClass.TicketTypeID = listOrderDetail[0].TicketTypeId; //票种 this.parent.mSelfHelpClass.TicketCount = listOrderDetail.Count; //票数 this.parent.mSelfHelpClass.SaleTime = DateTime.Now.ToString("MM月dd日"); //销售时间 this.parent.mSelfHelpClass.OrderID = listOrderDetail[0].OrderId; //销售单号 } }
private void timer_Tick(object sender, EventArgs e) { //bool flag = this.firstRun; //if (flag) //{ // bool flag2 = !this.CreateCode(); // if (flag2) // { // this.parent.WarmOperation("暂时无法使用此功能!请重新选择其他付款方式!", "gp4"); // } // this.firstRun = false; //} Int32 PayState = -1;//查询支付状态 bool flag3 = true; if (flag3) { this.inputBox.Focus(); if (this.inputBox.Text != "") { //支付部发 #region /* * bool flag5 = false; * //***************************支付成功后写入数据表中********************* * * this.parent.mSelfHelpClass.PayStat = "2";//支付状态(1-待支付 2-已支付 3-支付失败) * flag5 = T_SellTicketRecord.Insert_GP_Data(this.parent.mSelfHelpClass); * * //***************************支付成功后写入数据表中********************* * if (flag5) * { * this.parent.mSelfHelpClass.PaySuccess = true;//自助售票类 * this.counttimer.Stop(); * this.parent.Operation("gp6"); * } */ #endregion //真正支付部分 #region if (this.inputBox.Text.Length < 18) { this.parent.mSelfHelpClass.PayodNo = this.inputBox.Text; } else { this.parent.mSelfHelpClass.PayodNo = this.inputBox.Text.Substring(0, 18); } bool flag5 = false; if (M_Configuration.SaleMode == 1) //身份证购票模式 直接上传 { if (this.parent.mSelfHelpClass.OperType == "0") //取票还是购票 0表示购票 1表示取票 { try { this.parent.mSelfHelpClass.GetTicketUserNumber = M_Configuration.IDCard;//身份证号 flag5 = B_SellTicketUpData.SellTicketDataUP_IDCard(this.parent.Client, this.parent.mSelfHelpClass.OrderID, this.parent.mSelfHelpClass); if (flag5) { this.parent.EndOperation(); this.counttimer.Stop(); } } catch (Exception ex) {// 查询售票单的支付状态,返回支付状态(1-待支付 2-已支付 3-支付失败),联机,调用6次,每5秒调用一次,非2-已支付 则调用取消交易接口 this.counttimer.Stop(); for (int i = 0; i < 6; i++) { Thread.Sleep(5000); try { PayState = B_SellTicketUpData.Search_PayStat(this.parent.Client, this.parent.mSelfHelpClass.OrderID); } catch { } if (PayState == -2) { isre = true; break; } if (PayState == 2)//已支付 { this.parent.Operation("gp6"); break; } else if (PayState == 3)//撤销支付 { try { bool isok = B_SellTicketUpData.Cancel_Pay(this.parent.Client, this.parent.mSelfHelpClass.OrderID); isre = true; } catch { } break; //MessageBox.Show(" 【 温 馨 提 示 】\r\n\r\n您当前购票交易失败!请重新购票支付或到人工售票网点购票!\r\n\r\n给您造成的不便深表歉意!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); //this.parent.EndOperation(); //break; } if (i == 5) { if (PayState == 1)//最终还是待支付的 { try { bool isok = B_SellTicketUpData.Cancel_Pay(this.parent.Client, this.parent.mSelfHelpClass.OrderID); isre = true; } catch { } break; //MessageBox.Show(" 【 温 馨 提 示 】\r\n\r\n您当前购票交易失败!请重新购票支付或到人工售票网点购票!\r\n\r\n给您造成的不便深表歉意!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); //this.parent.EndOperation(); //break; } } } } } else if (this.parent.mSelfHelpClass.OperType == "1")//取票还是购票 0表示购票 1表示取票 { flag5 = B_SellTicketUpData.SellTicketDataUP(this.parent.Client, this.parent.mSelfHelpClass); if (flag5) { this.parent.mSelfHelpClass.PaySuccess = true;//自助售票类 this.counttimer.Stop(); this.parent.Operation("gp6"); } } } else if (M_Configuration.SaleMode == 0) //出实体票的 { if (this.parent.mSelfHelpClass.OperType != null) { try { flag5 = B_SellTicketUpData.SellTicketDataUP(this.parent.Client, this.parent.mSelfHelpClass); if (flag5) { this.parent.mSelfHelpClass.PaySuccess = true;//自助售票类 this.counttimer.Stop(); this.parent.Operation("gp6"); } } catch (Exception ex) { // 查询售票单的支付状态,返回支付状态(1-待支付 2-已支付 3-支付失败),联机,调用6次,每5秒调用一次,非2-已支付 则调用取消交易接口 this.counttimer.Stop(); for (int i = 0; i < 6; i++) { try { PayState = B_SellTicketUpData.Search_PayStat(this.parent.Client, this.parent.mSelfHelpClass.OrderID); } catch { } if (PayState == -2) { isre = true; break; } if (PayState == 2)//已支付 { this.parent.Operation("gp6"); break; } else if (PayState == 3)//撤销支付 { try { bool isok = B_SellTicketUpData.Cancel_Pay(this.parent.Client, this.parent.mSelfHelpClass.OrderID); isre = true; } catch { } break; //MessageBox.Show(" 【 温 馨 提 示 】\r\n\r\n您当前购票交易失败!请重新购票支付或到人工售票网点购票!\r\n\r\n给您造成的不便深表歉意!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); //this.parent.EndOperation(); //break; } if (i == 5) { if (PayState == 1) { try { bool isok = B_SellTicketUpData.Cancel_Pay(this.parent.Client, this.parent.mSelfHelpClass.OrderID); isre = true; } catch { } break; //MessageBox.Show(" 【 温 馨 提 示 】\r\n\r\n您当前购票交易失败!请重新购票支付或到人工售票网点购票!\r\n\r\n给您造成的不便深表歉意!", T_SellTicketRecord.str_Apption, MessageBoxButton.OK, MessageBoxImage.Information); //this.parent.EndOperation(); //break; } } Thread.Sleep(5000); } } } } #endregion } else { this.inputBox.Focus(); } } }
//***************读卡函数************ // 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(); } }