Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
            };
        }
Пример #3
0
        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();
        }
Пример #4
0
        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;
        }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
        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);
            };
        }