Ejemplo n.º 1
0
        public OrderQueue(Session session, OrderCacheItem queueInfo)
        {
            _queueInfo = queueInfo;
            InitializeComponent();
            imglist.Images.Add(UiUtility.Get24PxImageFrom16PxImg(Properties.Resources.user_16));
            Gif.SetLoadingImage(pbAnimate);

            Icon = Properties.Resources.icon_warning;
            InitSession(session);

            LoadInfo();

            _worker = new QueueOrderWorker(session)
            {
                TourFlag = _queueInfo.tourFlag
            };
            _worker.QueueMessageChanged    += _worker_QueueMessageChanged;
            _worker.QueryOrderQueueFailed  += _worker_QueryOrderQueueFailed;
            _worker.QueryOrderQueueSuccess += _worker_QueryOrderQueueSuccess;

            Load += (s, e) =>
            {
                btnClose.Enabled = false;
                _worker.RunQueryOrderQueue();
            };
            FormClosing += (s, e) =>
            {
                e.Cancel = _worker != null;
            };
            btnClose.DialogResult = DialogResult.Cancel;
            btnCancelQueue.Click += BtnCancelQueue_Click;
            FormPlacementManager.Instance.Control(this);
        }
Ejemplo n.º 2
0
        private void _worker_QueryOrderQueueFailed(object sender, EventArgs e)
        {
            pbAnimate.Image        = Properties.Resources.lxh_cry;
            btnCancelQueue.Enabled = true;
            lblTimeInfo.Text       = _worker.Error?.ToString() ?? "未知信息";
            lblTimeInfo.ForeColor  = Color.Red;

            btnClose.Enabled       = true;
            btnCancelQueue.Visible = false;
            _worker = null;
        }
Ejemplo n.º 3
0
        public SubmitOrder(Session session, QueryResultItem train, Entity.QueryParam query, char seat, IEnumerable <PassengerInTicket> passengers, bool byAuto)
            : base(session, train, seat, passengers, query, byAuto)
        {
            InitializeComponent();
            Icon = Properties.Resources.shoppingcart;

            tc.InitSession(session);
            ps.InitSession(session);
            //VerifyCodeBox = verifyCodeBox1;
            AttachVerifyCodeControl(tc);

            if (Session == null)
            {
                return;
            }

            Resign = Query.Resign;

            _config = Configuration.SubmitOrder.Current;

            //初始化票类型
            _validTicketTypes = new Dictionary <int, string>();
            if (Query.QueryStudentTicket)
            {
                _validTicketTypes.Add(3, "学生票");
            }
            else
            {
                _validTicketTypes.Add(1, "成人票");
                _validTicketTypes.Add(2, "儿童票");
                _validTicketTypes.Add(3, "学生票");
                _validTicketTypes.Add(4, "残军票");
            }
            //初始化席别类型
            var allSeatCodes = Train.TicketCount.Keys.Where(s => Train.TicketCount[s].Count > 0 && ParamData.SeatTypeFull.ContainsKey(s)).Select(s => Train.FindCorrectSeat(s)).Where(s => s != 0).Distinct().ToArray();

            _validSeatTypes = allSeatCodes.ToDictionary(s => s, s => ParamData.SeatTypeFull[s]);
            //_validSeatTypesInTicket = _validTicketTypes.Keys.ToDictionary(s => s, s => allSeatCodes);

            _worker = new SubmitOrderWorker(Session, Train, Query);
            //_ticketQueryWorker = new TicketQueryWorker(null, Query);
            _queueWorker          = new QueueOrderWorker(Session);
            _queueWorker.TourFlag = "dc";

            AttachWorker(_worker, _queueWorker);

            //初始化事件
            InitEditor();
            InitSubmit();

            PostInitialize();
        }
Ejemplo n.º 4
0
        protected override void AttachWorker(SubmitOrderBase orderWorker, QueueOrderWorker queueWorker)
        {
            base.AttachWorker(orderWorker, queueWorker);

            orderWorker.TicketCountChanged += (_1, _2) =>
            {
                var str = $"实时余票 {ParamData.SeatTypeFull.GetValue(orderWorker.TicketCountSeat)} {orderWorker.TicketCount} 张";
                if (orderWorker.TicketCountNoSeat >= 0)
                {
                    str += ",无座 " + orderWorker.TicketCountNoSeat + " 张";
                }
                this.Invoke(() => ShowTip(str));
            };
        }
Ejemplo n.º 5
0
        private void _worker_QueryOrderQueueSuccess(object sender, EventArgs e)
        {
            pbAnimate.Image        = Properties.Resources.lxh_happy__2_;
            btnCancelQueue.Enabled = true;
            lblTimeInfo.Text       = $"排队成功!订单号为 {_worker.OrderID},请尽快付款!";
            lblTimeInfo.ForeColor  = Color.Green;

            Session.OnRequestShowPanel(PanelIndex.Orders);
            Session.OnOrderChanged();
            btnClose.Image         = Properties.Resources.cou_32_accept;
            btnClose.Enabled       = true;
            btnCancelQueue.Visible = false;

            _worker = null;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// _订单排队成功_
        /// ---
        ///
        ///
        /// </summary>
        /// <returns></returns>
        protected virtual async Task SubmitOrderSuccessAsync(bool async, string orderid)
        {
            if (async)
            {
                PreventCloseFlag = true;
                await QueueBeginAsync().ConfigureAwait(true);

                QueueOrderWorker.RunQueryOrderQueue();
            }
            else
            {
                PreventCloseFlag = false;
                //非异步模式,不需要排队
                await QueueSucceedAsync(orderid).ConfigureAwait(true);
            }
        }
Ejemplo n.º 7
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);
            };
        }
Ejemplo n.º 8
0
        private async void _submitButton_Click(object sender, EventArgs e)
        {
            if (InQueue)
            {
                if (!_cancelQueueConfirm)
                {
                    _cancelQueueConfirm = true;
                    SubmitButton.Text   = "确认取消";
                    this.ShowToast("请再次点击“确认取消”以确定取消排队");
                }
                else
                {
                    SubmitButton.Text    = "正在取消...";
                    SubmitButton.Enabled = false;

                    var(ret, msg) = await QueueOrderWorker.CancelQueueOrderAsync().ConfigureAwait(true);

                    SubmitButton.Enabled = ret == CancelQueueStatus.Failed || ret == CancelQueueStatus.NetworkError;
                    SubmitButton.Text    = msg;


                    if (ret == CancelQueueStatus.ForceLogout)
                    {
                        DevComponents.DotNetBar.MessageBoxEx.Show(this, "登录已失效,尽快重新登录查看排队结果,请留意是否有未完成订单。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        if (!await Session.BeenForceLogout().ConfigureAwait(true))
                        {
                            Close();
                        }
                    }
                }
            }
            else
            {
                await TryBeginSubmitOrderAsync().ConfigureAwait(true);
            }
        }
Ejemplo n.º 9
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);
            };
        }