/// <summary> /// 返回是否可以提交订单 /// </summary> /// <returns></returns> protected virtual async Task <bool> CanSubmitAsync() { if (PassengerInTickets != null && PassengerInTickets.Any() && PassengerInTickets.All(s => s.SeatType != '\0')) { SubmitOrderWorker.Passengers = PassengerInTickets.ToArray(); if (OrderEventArgs != null) { OrderEventArgs.OrderSubmitContext.Passengers = SubmitOrderWorker.Passengers; } } if (Session.LastVerifyCode != null) { SubmitOrderWorker.RandCode = Session.LastVerifyCode; Session.LastVerifyCode = null; } else { SubmitOrderWorker.RandCode = VerifyCodeBox.Code; } if (SubmitOrderWorker.NeedSlideVc) { SubmitOrderWorker.SlideCSessionId = _slideVc?.CfSessionId; SubmitOrderWorker.SlideSig = _slideVc?.Sig; if (SubmitOrderWorker.SlideSig.IsNullOrEmpty()) { return(false); } } else if (SubmitOrderWorker.RandCode.IsNullOrEmpty() && (SubmitOrderWorker.NeedVc != null && !await CanSkipVcAsync().ConfigureAwait(true))) { this.ShowToast("请输入验证码啊大侠!....", backColor: Color.DarkRed, glowColor: eToastGlowColor.Red); return(false); } if (SubmitButton?.Enabled == false && !_delaySubmit) { return(false); } _delaySubmit = false; if (_safeTimer.Enabled || _safeStartTime != null) { //等待完成提交 if (SubmitButton != null) { SubmitButton.Enabled = false; } _delaySubmit = true; return(false); } return(true); }
public FastSubmitOrder(Session session, QueryResultItem train, char seat, IEnumerable <PassengerInTicket> passengers, QueryParam queryParam, bool byAuto) : base(session, train, seat, passengers, queryParam, byAuto) { InitializeComponent(); //vc.InitSession(session); tc.InitSession(session); tc.ResizeParent(this, ProgramConfiguration.Instance.CaptchaZoom, ClientSize.Width - tc.Width - tc.Location.X - 10 - 10); //VerifyCodeBox = vc; AttachVerifyCodeControl(tc); VerifyCodeBox.RandType = RandCodeType.Randp; //imglist.Images.Add(FSLib.Windows.Utility.Get24PxImageFrom16PxImg(Properties.Resources.user_16)); PostInitialize(); tc.EnableAutoVc = ProgramConfiguration.Instance.AutoSubmitOrderVcCode && Query.EnableAutoVC && VerifyCodeRecognizeServiceLoader.VerifyCodeRecognizeEngine?.IsLoggedIn == true; //TODO: 快速下单模式 _submitWoker = Query.Resign || Query.TemporaryDisableFastSubmitOrder || !ApiConfiguration.Instance.EnableAutoSubmitAPI ? (SubmitOrderBase) new SubmitOrderWorker(Session, Train, Query) { Passengers = PassengerInTickets.ToArray() } : new AutoSubmitWorker(Session, Train, Query, PassengerInTickets.ToArray()) { }; _queueWorker = new QueueOrderWorker(Session) { TourFlag = "dc" }; AttachWorker(_submitWoker, _queueWorker); Load += async(x, y) => { await PrepareOrderAsync().ConfigureAwait(true); }; }
protected override void InitTrainInfoDisplay() { lblError.Text = PassengerInTickets.Select(s => $"<b><font color=\"#049B59\">{s.Name}</font></b> ({ParamData.GetTicketType(s.TicketType).DisplayName}/{ParamData.SeatTypeFull[Seat]}/{ParamData.PassengerIdType[s.IdType]})").JoinAsString(" "); base.InitTrainInfoDisplay(); }
void InitEditor() { //新版12306禁止手动添加乘客 if (Query.Resign) { dgvColAddChild.Visible = dgvPassenger.AllowUserToAddRows = false; ps.Enabled = false; dgvColName.ReadOnly = true; dgvColRemove.Visible = false; dgvColAddChild.Visible = false; dgvId.ReadOnly = true; dgvIdType.ReadOnly = true; //dgvTicketType.ReadOnly = true; chkDwAll.Enabled = false; } else { dgvPassenger.AllowUserToAddRows = _allowUserAdd; chkDwAll.Enabled = _validSeatTypes.ContainsKey('A') || _validSeatTypes.ContainsKey('F'); } dgvPassenger.RowsAdded += dgvPassenger_RowsAdded; dgvPassenger.UserAddedRow += dgvPassenger_UserAddedRow; dgvPassenger.CellBeginEdit += dgvPassenger_CellBeginEdit; dgvPassenger.EditingControlShowing += dgvPassenger_EditingControlShowing; dgvPassenger.CellEndEdit += dgvPassenger_CellEndEdit; ps.RequestSelectPassenger += (s, e) => AddPassengerToList(e.Passenger); if (Query.QueryStudentTicket) { ps.ShowOnlyStudent = Query.QueryStudentTicket; //学生票过滤 //学生票只能选联系人 dgvColName.ReadOnly = true; dgvId.ReadOnly = true; dgvIdType.ReadOnly = true; dgvTicketType.ReadOnly = true; } //席别子类型 //dgvSeatSubType.Items.AddRange(new[]{ // new Entity.SeatSubType(1), // new Entity.SeatSubType(2), // new Entity.SeatSubType(3), // new Entity.SeatSubType(0) //}); dgvSeatSubType.ValueMember = "Id"; dgvSeatSubType.ValueType = typeof(SubType); dgvSeatSubType.DisplayMember = "DisplayName"; //身份证类型 dgvIdType.Items.AddRange(ParamData.PassengerIdType.Select(s => (object)s).ToArray()); dgvIdType.ValueMember = "Key"; dgvIdType.DisplayMember = "Value"; dgvIdType.ValueType = typeof(char); //席别 dgvSeatType.ValueType = typeof(char); dgvSeatType.ValueMember = "Id"; dgvSeatType.DisplayMember = "DisplayName"; //票种 dgvTicketType.ValueType = typeof(int); dgvTicketType.DisplayMember = "DisplayName"; dgvTicketType.ValueMember = "Id"; chkAutoSubmit.DataBindings.Add("Checked", _config, "AutoSubmitAfterEnterCode", false, DataSourceUpdateMode.OnPropertyChanged); if (PassengerInTickets != null && PassengerInTickets.Any()) { PassengerInTickets.ForEach(AddPassengerToList); if (Configuration.SubmitOrder.Current.DisableEditNameOfAutoAddedPassenger || Query.Resign || !_allowUserAdd) { dgvPassenger.Rows.Cast <DataGridViewRow>().Where(s => !s.IsNewRow).ForEach(s => { s.Cells[0].ReadOnly = true; s.Cells[4].ReadOnly = true; s.Cells[5].ReadOnly = true; }); } //txtBox.Focus(); } //验证码OK ps.RequestAddPassenger += ps_RequestAddPassenger; }
/// <summary> /// 订单准备成功 /// </summary> /// <param name="queueWarning">是否有排队警告</param> /// <returns></returns> protected virtual async Task PrepareSuccessAsync(bool queueWarning) { PreventCloseFlag = false; SetFocus(); VerifyCodeBox.SetIfNeedVc(SubmitOrderWorker.NeedVc); if (await CanSkipVcAsync().ConfigureAwait(true)) { //TODO 这里将延迟的流程延迟到提交订单中了。 // 现在的延迟不高 //if (SubmitOrderWorker.NeedVcTime > 0) //{ // _safeTime = SubmitOrderWorker.NeedVcTime - (SubmitOrderWorker.VcBaseTime == null ? 0 : (int)(DateTime.Now - SubmitOrderWorker.VcBaseTime.Value).TotalMilliseconds); // //_safeTime = Math.Min(ApiConfiguration.Instance.MinimalVcWaitTimeRunTime, _safeTime); // _delaySubmit = true; // Debug.WriteLine($"[VCTIME] {SubmitOrderWorker.NeedVcTime} [BASETIME] {SubmitOrderWorker.VcBaseTime?.ToString("O")} [DELAYTIME] {_safeTime}"); // StartSafeTimeCountDown(); //} //else if (PassengerInTickets?.Count() > 0 && PassengerInTickets.All(s => s.SeatType != '\0')) { await BeginSubmitOrderAsync().ConfigureAwait(true); } else { await SafeTimeEnd().ConfigureAwait(true); } } else if (SubmitOrderWorker.NeedSlideVc) { //需要滑动验证码 if (_slideVc == null) { _slideVc = new SlideVcControl(Session, SubmitOrderWorker.SlideVcToken, SlideAppId.Order); _slideVc.SlideOk += async(sender, args) => { await SetAllowOperationAsync(true, true); SubmitOrderWorker.SlideSig = _slideVc.Sig; SubmitOrderWorker.SlideCSessionId = _slideVc.CfSessionId; _submitButton.Visible = true; _slideVc.Visible = false; await TryBeginSubmitOrderAsync(); }; VerifyCodeBox.Parent.Controls.Add(_slideVc); _slideVc.Location = VerifyCodeBox.Location + new Size(0, VerifyCodeBox.Size.Height - _slideVc.Height); _slideVc.BringToFront(); } else { _slideVc.Token = SubmitOrderWorker.SlideVcToken; } VerifyCodeBox.Visible = false; _submitButton.Visible = false; await OrderInitSuccessAsync(true).ConfigureAwait(true); } else if (Session.LastVerifyCode != null) { VerifyCodeBox.ValidateImage = Properties.Resources.img_preinput; SubmitOrderWorker.RandCode = Session.LastVerifyCode; await TryBeginSubmitOrderAsync().ConfigureAwait(true); } else { VerifyCodeBox.Visible = false; if (_slideVc != null) { _slideVc.Visible = false; } _submitButton.Visible = true; await OrderInitSuccessAsync(SubmitOrderWorker.NeedVc).ConfigureAwait(true); } }
protected virtual void AttachWorker([NotNull] SubmitOrderBase orderWorker, [NotNull] QueueOrderWorker queueWorker) { if (orderWorker == null) { throw new ArgumentNullException(nameof(orderWorker)); } if (queueWorker == null) { throw new ArgumentNullException(nameof(queueWorker)); } if (SubmitOrderWorker != null) { throw new InvalidOperationException(); } SubmitOrderWorker = orderWorker; QueueOrderWorker = queueWorker; //初始化信息 if (PassengerInTickets != null && SubmitOrderWorker.Passengers == null) { SubmitOrderWorker.Passengers = PassengerInTickets.ToArray(); } OrderEventArgs = SubmitOrderWorker.CreateEventArgs(); //绑定事件 orderWorker.PrepareFailed += async(s, e) => { if (IsFormClosed) { return; } await PrepareFailed(orderWorker.Error).ConfigureAwait(true); }; orderWorker.PrepareFinished += async(s, e) => { if (IsFormClosed) { return; } await PrepareSuccessAsync(orderWorker.QueueWarning).ConfigureAwait(true); }; //提交失败 orderWorker.SubmitOrderFailed += async(s, e) => { await OrderFailedAsync(orderWorker.Error, false).ConfigureAwait(true); }; orderWorker.SubmitOrderSuccess += async(s, e) => { await SubmitOrderSuccessAsync(orderWorker.Async, orderWorker.OrderID).ConfigureAwait(true); }; QueueOrderWorker.QueryOrderQueueFailed += async(s, e) => { InQueue = false; _cancelQueueConfirm = false; if (SubmitButton != null) { SubmitButton.ColorTable = eButtonColor.BlueWithBackground; SubmitButton.Image = Properties.Resources.cou_32_accept; SubmitButton.Text = "重新提交"; } await OrderFailedAsync(QueueOrderWorker.Error.ToString(), true).ConfigureAwait(true); }; QueueOrderWorker.QueryOrderQueueSuccess += async(s, e) => { InQueue = false; _cancelQueueConfirm = false; if (SubmitButton != null) { SubmitButton.Image = Properties.Resources.cou_32_accept; SubmitButton.Text = "订票成功"; SubmitButton.Enabled = false; } await QueueSucceedAsync(QueueOrderWorker.OrderID).ConfigureAwait(true); }; QueueOrderWorker.QueueMessageChanged += async(s, e) => { await SubmitProgressChangedAsync(QueueOrderWorker.QueueMessage, QueueOrderWorker.SlowQueueWarning).ConfigureAwait(true); }; }