public SubmitOrderRequestForm(
     TrainLeftTicketStatus itemData,
     List<string> passengers = null,
     List<string> seatTypeItems = null,
     Func<string> quickTicketSuccessFunc = null)
 {
     this._ItemData = itemData;
     this.InitializeComponent();
     this._Passengers = passengers;
     this._SeatTypeItems = seatTypeItems;
     this._quickTicketSuccessFunc = quickTicketSuccessFunc;
     if (_Passengers != null && _SeatTypeItems != null)
     {
         _QuickGrab = (rand) =>
         {
             this.CheckOrder(rand);
         };
     }
 }
        public void RunCheck(AttentionItem item)
        {
            var query = new NameValueCollection();
            query["method"] = "queryLeftTicket";
            query["orderRequest.train_date"] = item.Date.ToString("yyyy-MM-dd");
            query["orderRequest.from_station_telecode"] = item.FromStation.Code;
            query["orderRequest.to_station_telecode"] = item.ToStation.Code;
            query["orderRequest.train_no"] = item.Train != null ? item.Train.id : "";
            query["trainPassType"] = "QB";
            query["trainClass"] = "QB#D#Z#T#K#QT#";
            query["includeStudent"] = "00";
            query["seatTypeAndNum"] = "";
            query["orderRequest.start_time_str"] = "00:00--24:00";
            HTTP.Request(new HttpRequest()
            {
                OperationName = "后台查询关注票" + item.Key,
                Method = "GET",
                Url = Properties.Settings.Default.QuerySingleActionUrl + "?" + HTTP.ToString(query),
                Referer = Properties.Settings.Default.QuerySingleActionUrl + "?method=init",
                MaxRetryCount = 0,
                OnCancel = (req, reasion) =>
                {

                },
                OnHtml = (req, uri, html) =>
                {
                    bool needUpdate = false;
                    bool isAttentionAvailable = false;
                    lock (InnerLeftTicketStatus)
                    {
                        var rawStatus = html.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        if (rawStatus.Length > 0 && (rawStatus.Length - 1) % 16 == 0)
                        {
                            needUpdate = true;
                            InnerLeftTicketStatus.RemoveAll(v => v.Key == item.Key);
                            int count = (rawStatus.Length - 1) >> 4;
                            for (int i = 0; i < count; i++)
                            {
                                var status = new string[16];
                                Array.Copy(rawStatus, 1 + (i << 4), status, 0, 16);
                                var itemStatus = new TrainLeftTicketStatus(item.Date, status, item);
                                InnerLeftTicketStatus.Add(itemStatus);
                                if (itemStatus.IsAttentionAvailable)
                                {
                                    isAttentionAvailable = true;
                                }
                            }
                            InnerLeftTicketStatus.Sort( (l, r)=>r.IsAttentionAvailable.CompareTo(l.IsAttentionAvailable));
                        }
                        DetermineCall(() =>
                        {
                            if (needUpdate)
                            {
                                LeftTicketStatus.ResetBindings();
                            }
                        });
                    }
                    if (isAttentionAvailable)
                    {
                        MainForm.ShowMyAttentionTicketsForm(true);
                    }
                }
            });
        }
Beispiel #3
0
        private void btnQueryLeftTickets_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(cbxFrom.Text))
            {
                MessageBox.Show(this, "请输入出发地", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (string.IsNullOrEmpty(cbxTo.Text))
            {
                MessageBox.Show(this, "请输入目的地", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            var fromSation = Array.Find(RunTimeData.Stations, v => v.Name == cbxFrom.Text || v.ShortCut == cbxFrom.Text);
            if (fromSation == null)
            {
                MessageBox.Show(this, "请输入正确的出发地", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            var toStation = Array.Find(RunTimeData.Stations, v => v.Name == cbxTo.Text || v.ShortCut == cbxTo.Text);
            if (toStation == null)
            {
                MessageBox.Show(this, "请输入正确的目的地", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (cbxFrom.Text != fromSation.Name)
            {
                cbxFrom.Text = fromSation.Name;
            }
            if (cbxTo.Text != toStation.Name)
            {
                cbxTo.Text = toStation.Name;
            }

            var query = new NameValueCollection();
            query["method"] = "queryLeftTicket";
            query["orderRequest.train_date"] = dtpGoDate.Value.Date.ToString("yyyy-MM-dd");
            query["orderRequest.from_station_telecode"] = fromSation.Code;
            query["orderRequest.to_station_telecode"] = toStation.Code;
            query["orderRequest.train_no"] = "";// cbxTrainNo.SelectedValue as string;
            query["trainPassType"] = Array.Find(rbTrainPassTypes, v => v.Checked).Tag as string;
            var trainClass = new List<string>();
            Array.ForEach(Array.FindAll(cbxTrainTypes, v => v.Checked), v => trainClass.Add(v.Tag as string));
            query["trainClass"] = string.Join("#", trainClass.ToArray()) + "#";            ;
            query["includeStudent"] = Array.Find(rbStudentFlags, v => v.Checked).Tag as string; ;
            query["seatTypeAndNum"] = "";
            query["orderRequest.start_time_str"] = cbxGoTime.SelectedItem as string;

            //btnQueryLeftTickets.Enabled = false;
            btnQueryLeftTickets.Text = "查询中……";

            _CurrentQueryRequest = new HttpRequest()
            {
                OperationName = "查询余票",
                Method = "GET",
                Url = Properties.Settings.Default.QuerySingleActionUrl + "?" + HTTP.ToString(query),
                Referer = Properties.Settings.Default.QuerySingleActionUrl + "?method=init",
                MaxRetryCount = 0,
                OnCancel = (req, reasion) =>
                {
                    DetermineCall(() =>
                    {
                        btnQueryLeftTickets.Enabled = true;
                        btnQueryLeftTickets.Text = "查询";
                    });
                },
                OnHtml = (req, uri, html) =>
                {
                    try
                    {
                        var rawStatus = html.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        _LeftTicketStatus.Clear();
                        if (rawStatus.Length > 0 && (rawStatus.Length - 1) % 16 == 0)
                        {
                            int count = (rawStatus.Length - 1) >> 4;
                            for (int i = 0; i < count; i++)
                            {
                                var status = new string[16];
                                Array.Copy(rawStatus, 1 + (i << 4), status, 0, 16);
                                var aItem = new AttentionItem()
                               {
                                   Date = dtpGoDate.Value.Date,
                                   FromStation = fromSation,
                                   ToStation = toStation
                               };
                                var item = new TrainLeftTicketStatus(dtpGoDate.Value.Date, status, aItem);
                                _LeftTicketStatus.Add(item);
                            }
                        }
                        else
                        {
                        }
                        DetermineCall(() =>
                        {
                            _BindingLeftTicketStatus.ResetBindings();
                        });
                    }
                    catch (Exception ex)
                    {
                    }
                    btnQueryLeftTickets.Enabled = true;
                    btnQueryLeftTickets.Text = "查询";
                }
            };

            QueryLeftTicketStatus();
        }
Beispiel #4
0
 private void OnQuickOrders(TrainLeftTicketStatus data)
 {
     if (!data.CanBook) return;
     if (!data.HasSeatTypes(_SeatTypes)) return;
     DetermineCall(() =>
     {
         if (vOrderRequestForm == null && !isTicketSuccess)
         {
             new SoundPlayer(Properties.Resources.notify).Play();
             this.Activate();
             this.BringToFront();
             QuickAttentionWorker.PauseWorking = true;
             vOrderRequestForm = new SubmitOrderRequestForm(data, _Passengers, _SeatTypes, (response) =>
             {
                 TicketdataGridView.Visible = true;
                 isTicketSuccess = true;
                 vOrderRequestForm = null;
                 #region
                 DataTable PassengerList = new DataTable();
                 var textBuilder = new StringBuilder(128);
                 var passengersHtml = StringHelper.FindString(ref response, "class=\"table_list\">", "</table>");
                 var fieldHeader = Regex.Match(passengersHtml, @"<tr[^>]*>(\s*<td[^>]*>.*?</td>\s*){12}</tr>", RegexOptions.Singleline);
                 if (fieldHeader.Success)
                 {
                     var fieldNames = new string[12];
                     int i = 0;
                     foreach (Match m in Regex.Matches(fieldHeader.Value, @"<td[^>]*>(?<name>.*?)</td>", RegexOptions.Singleline))
                     {
                         fieldNames[i] = Regex.Replace(m.Groups["name"].Value, @"\s", _m => "");
                         PassengerList.Columns.Add(fieldNames[i], typeof(string));
                         i++;
                     }
                     Match passenger = fieldHeader.NextMatch();
                     while (passenger.Success)
                     {
                         i = 0;
                         var row = PassengerList.NewRow();
                         foreach (Match m in Regex.Matches(passenger.Value, @"<td[^>]*>(?<name>.*?)</td>", RegexOptions.Singleline))
                         {
                             row[fieldNames[i++]] = Regex.Replace(m.Groups["name"].Value, @"<[^>]+/?>|\s", _m => "");
                         }
                         PassengerList.Rows.Add(row);
                         passenger = passenger.NextMatch();
                     }
                     var priceBlock = StringHelper.FindString(ref response, "<ul id=\"Num\">", "</ul>");
                     if (priceBlock != null)
                     {
                         foreach (Match m in Regex.Matches(priceBlock, "<li[^>]*>(?<val>.*?)</li>", RegexOptions.Singleline))
                         {
                             textBuilder.Append(m.Groups["val"].Value);
                             textBuilder.Append("  ");
                         }
                     }
                     TicketdataGridView.AutoGenerateColumns = true;
                     TicketdataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
                     TicketdataGridView.DataSource = PassengerList;
                     TicketdataGridView.Columns["证件号"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                 }
                 #endregion
             });
             vOrderRequestForm.FormClosed += (s, e) =>
             {
                 QuickAttentionWorker.PauseWorking = false;
                 vOrderRequestForm = null;
             };
             vOrderRequestForm.ShowDialog();
         }
     });
 }
Beispiel #5
0
 private void QuikAddTrainTicket(TrainLeftTicketStatus data)
 {
     panel3.Visible = true;
     data.AttentionItem.SeatCount = _Passengers.Count;
     data.AttentionItem.SeatTypes = _SeatTypes.ToArray();
     data.AttentionItem.Train = new TrainItem()
     {
         id = Regex.Match(data.Status[0], @"(?<=id_)[\w\d]+").Value,
         value = data.TrainNo
     };
     lock (RunTimeData.QuickAttentions)
     {
         if (!RunTimeData.QuickAttentions.Exists(item => item.TrainNo == data.AttentionItem.Train.value))
         {
             CheckBox box = new CheckBox()
             {
                 Tag = data.TrainNo,
                 Checked = true,
                 AutoCheck = true,
                 Text = data.TrainNo,
                 FlatStyle = FlatStyle.Flat,
                 AutoSize = true
             };
             box.Click += (ss, ee) =>
             {
                 if (!box.Checked)
                 {
                     flPTrains.Controls.Remove(box);
                     RunTimeData.QuickAttentions.Remove(data.AttentionItem);
                 }
             };
             flPTrains.Controls.Add(box);
             RunTimeData.QuickAttentions.Add(data.AttentionItem);
         }
     }
 }