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); } } }); }
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(); }
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(); } }); }
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); } } }