/// <summary>初始化 <see cref="TrainHbAvailableEventArgs" /> 类的新实例。</summary> public TrainHbAvailableEventArgs(QueryResult result, QueryResultItem resultItem, LeftTicketData ticketData, HbQueueInfoCacheItem cacheItem) { Result = result; ResultItem = resultItem; TicketData = ticketData; CacheItem = cacheItem; }
public QueryResultItem SelectFromCollection(CollectionItem collectionItem, FilterDefinition <HumitureItem> filter) { try { QueryResultItem item = new QueryResultItem(); if (_database == null) { return(item); } var collection = _database.GetCollection <HumitureItem>(collectionItem.FullEncodedName); if (collection == null) { return(item); } item.HumitureItems = collection.Find(filter).ToList(); item.Name = collectionItem.Name; return(item); } catch (Exception ex) { LoggingManager.LogError(System.Reflection.MethodBase.GetCurrentMethod().Name, ex); } return(new QueryResultItem()); }
/// <summary> /// 创建 <see cref="AutoSelectResult" /> 的新实例(AutoSelectResult) /// </summary> /// <param name="train"></param> /// <param name="seat"></param> /// <param name="count"></param> /// <param name="passengers"></param> public AutoSelectResult(QueryResultItem train, char seat, int count, PassengerInTicket[] passengers) { Train = train; Seat = seat; Count = count; Passengers = passengers; }
private EFontAwesomeIcon BestFittingIcon(QueryResultItem result) { return(result.ResultType switch { ResultType.Directory => EFontAwesomeIcon.Regular_Folder, ResultType.File => BestFileIcon(result), ResultType.Unknown => EFontAwesomeIcon.Solid_Question, ResultType.Volume => EFontAwesomeIcon.Regular_Hdd, _ => EFontAwesomeIcon.Solid_Question });
protected OrderSubmitDialogUiBase(Session session, QueryResultItem train, char seat, IEnumerable <PassengerInTicket> passengers, QueryParam queryParam, bool byAuto) : base(session, train, seat, passengers, queryParam, byAuto) { InitializeComponent(); Load += (s, e) => { InitUI(); }; }
/// <summary> /// 查询车次停靠站信息 /// </summary> /// <param name="train"></param> /// <param name="fromStatCode"></param> /// <param name="toStatCode"></param> /// <param name="depDate"></param> public void Query(QueryResultItem train) { if (IsBusy) { return; } _operation = AsyncOperationManager.CreateOperation(null); ThreadPool.QueueUserWorkItem(_ => QueryInternal(train)); }
/// <summary> /// 创建 <see cref="QueryResultListViewItem" /> 的新实例(QueryResultListViewItem) /// </summary> public QueryResultListViewItem(QueryResultItem resultItem, Font[] font, bool showStartEndStation = false, QueryResultItem originalItem = null) : base(CreateSubItems(resultItem, font, showStartEndStation, originalItem), 0) { _showStartEndStation = showStartEndStation; _resultItem = resultItem; _originalItem = originalItem; UseItemStyleForSubItems = false; RefreshIcon(); _fonts = font; }
/// <summary> /// 创建 <see cref="TrainToStationNameSubItem" /> 的新实例(SubItemBase) /// </summary> public TrainToStationNameSubItem(QueryResultItem resultItem, Font[] font) : base(resultItem, font) { if (resultItem != null) { Text = resultItem.ToStation.StationName + "\n" + resultItem.ToStation.ArriveTime.Value.ToString("HH:mm"); } else { Text = "数据\n无效"; } }
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(); }
/// <summary> /// 创建 <see cref="TrainFromStationNameSubItem" /> 的新实例(SubItemBase) /// </summary> public TrainFromStationNameSubItem(QueryResultItem resultItem, Font[] font) : base(resultItem, font) { if (resultItem != null) { Text = resultItem.FromStation.StationName + "\n" + resultItem.FromStation.DepartureTime.Value.ToString("HH:mm"); } else { Text = "数据\n无效"; } //var vi = new BetterListViewItem(resultItem.From.StationName + "\n" + resultItem.From.DepartureTime.Value.ToString("HH:mm")); }
public EverythingResult(QueryResultItem item) : base( item.ResultType != ResultType.Directory ? item.Name : Path.GetFileName(item.FullPath), item.FullPath ) { _item = item; Options.Add(new RunAsAdminOption(item.FullPath)); if (item.ResultType == ResultType.File) { Options.Add(new OpenLocationOption(item.FullPath)); } }
/// <summary> /// 创建 <see cref="TrainToStationDateSubItem"/> 的新实例(TrainToStationDateSubItem) /// </summary> public TrainToStationDateSubItem(QueryResultItem resultItem, Font[] font) : base(resultItem, font) { var(days, strinfo) = resultItem.ElapsedTimeInfo; if (days > 0) { Text = ("第" + (days + 1).ToString("#0") + "天"); } else { Text = ("当天"); } Text += "\n" + strinfo; }
/// <summary> /// 查询车次停靠站信息 /// </summary> /// <param name="train"></param> public void QueryInternal(QueryResultItem train) { var trainid = train.Id; var fromStatCode = train.FromStation.Code; var toStatCode = train.ToStation.Code; var depDate = train.FromStation.DepartureTime.Value; var firstStationTime = train.StartStation.DepartureTime; var data = new { train_no = trainid, from_station_telecode = fromStatCode, to_station_telecode = toStatCode, depart_date = depDate.ToString("yyyy-MM-dd") }; var task = Session.NetClient.Create <TrainStopResponse>(HttpMethod.Get, "czxx/queryByTrainNo", "leftTicket/init", data).Send(); if (task == null || !task.IsSuccess || task.Result?.Data?.Data == null) { Error = task?.Exception; Success = false; if (_operation == null) { OnLoadFailed(); } else { _operation.PostOperationCompleted(_ => OnLoadFailed(), null); } } else { Result = task.Result.Data.Data; Result.ApplyTime(train, firstStationTime, depDate); Success = true; if (_operation == null) { OnLoadComplete(); } else { _operation.PostOperationCompleted(_ => OnLoadComplete(), null); } } }
public void AddDisableTicketData(QueryResultItem train) { var key = CreateTicketDataSign(train); lock (_cache) { if (_cache.ContainsKey(key)) { _cache[key].Enqueue(DateTime.Now); } else { _cache.Add(key, new Queue <DateTime>(new[] { DateTime.Now })); } } }
/// <summary> /// 创建 <see cref="SubItemBase" /> 的新实例(SubItemBase) /// </summary> public TrainMemoSubItem(QueryResultItem resultItem, Font[] font) : base(resultItem, font) { Font = font.Last(); ForeColor = Color.Chocolate; var feature = new List <string>(3); if (!resultItem.HasAc) { feature.Add("无空调"); } if (resultItem.SupportIdCard) { feature.Add("可身份证进站"); } if (resultItem.CanExchangeByCredit) { feature.Add("可积分兑换"); } //起售信息? if (!resultItem.IsAvailable && resultItem.BeginSellTime != null) { //查找高级软卧并显示 var tip = resultItem.BeginSellTime.Value == DateTime.MinValue ? "不在预售期里啊.." : new[] { resultItem.BeginSellTime.Value.MakeDateFriendly(), resultItem.BeginSellTime.Value.Hour + "点", (resultItem.BeginSellTime.Value.Minute > 0 ? resultItem.BeginSellTime.Value.Minute + "分" : ""), "起售" }.Where(s => !string.IsNullOrEmpty(s)).JoinAsString(""); feature.Add(tip); } if (!resultItem.IsAvailable && resultItem.IsLimitSell) { //暂售 feature.Add(resultItem.ButtonTextInfo); } // Text = feature.JoinAsString("\n"); }
public bool IsTicketDataDisabledExists(QueryResultItem train) { var key = CreateTicketDataSign(train); Queue <DateTime> queue; if (!_cache.TryGetValue(key, out queue)) { return(false); } if (queue.Count >= OrderConfiguration.Instance.SubmitFailedNoTicketControlRate) { queue.Enqueue(DateTime.Now); return(true); } return(false); }
static BetterListViewSubItem[] CreateSubItems(QueryResultItem result, Font[] font, bool showStartEndStation, QueryResultItem originalItem = null) { var array = new BetterListViewSubItem[] { new TrainCodeSubItem(result, font), showStartEndStation ? new StartOrEndStation(result, font, true) : null, new TrainFromStationNameSubItem(result, font), new TrainToStationNameSubItem(result, font), showStartEndStation ? new StartOrEndStation(result, font, false) : null, new TrainToStationDateSubItem(result, font) }.ExceptNull().ToArray(); //var baseTicketPriceIndex = array.Length; array = array.Concat(Configuration.QueryViewConfiguration.Instance.SeatOrder.Select(s => new TicketCellSubItem(result, s, font))) .Concat(new[] { new TrainMemoSubItem(result, font) }) .ToArray(); return(array); }
protected OrderSubmitDialogBase(Session session, QueryResultItem train, char seat, IEnumerable <PassengerInTicket> passengers, QueryParam queryParam, bool byAuto) { InitSession(session); Train = train; OriginalSeat = seat; Seat = train.FindCorrectSeat(seat);; PassengerInTickets = queryParam.PrepareTicketInfoForPassengers(train, passengers, Seat); Query = queryParam; if (Program.IsRunning) { Icon = MainForm.Instance.Icon; if (byAuto) { QueryResumeManager.Controller.Instance[session].Register(this); } } Session.Logout += Session_Logout; Session.QueueOrderCancelled += Session_QueueOrderCancelled; CaptchaLoaded += OrderSubmitDialogBase_CaptchaLoaded; OnOrderDialogOpen(this); //冲突检测 OrderDialogOpen += OrderSubmitDialogBase_OrderDialogOpen; FormClosing += (s, e) => { if (PreventCloseFlag) { this.ShowToast("窗口正在忙碌...请等待当前操作完成后再关闭。"); e.Cancel = true; return; } IsFormClosed = true; _safeTimer?.Stop(); Session.Logout -= Session_Logout; OrderDialogOpen -= OrderSubmitDialogBase_OrderDialogOpen; Session.QueueOrderCancelled -= Session_QueueOrderCancelled; }; //安全期 InitSafeTimer(); }
/// <summary> /// 创建 <see cref="TrainToStationNameSubItem" /> 的新实例(SubItemBase) /// </summary> public StartOrEndStation(QueryResultItem resultItem, Font[] font, bool start) : base(resultItem, font) { _start = start; if (resultItem == null || (start && resultItem.FromStation.IsFirst) || (!start && resultItem.ToStation.IsEnd)) { Text = ""; } else { if (start) { Text = resultItem.StartStation.StationName; } else { Text = resultItem.EndStation.StationName; } } ForeColor = Configuration.QueryViewConfiguration.Instance.StartEndStationColor; }
public (bool allow, string message) CanAdd(QueryResultItem train, char seat) { //已经添加过? if (Items.Any(s => s.Train.Id == train.Id && s.Seat == seat && s.Train.Date == train.Date)) { return(false, "已经在候选列表中"); } if (seat == '0' || seat == '*') { return(false, "无座或其它不可候补"); } if (Items.Count == 4) { return(false, "不能超过四个候选"); } var dates = Items.Select(s => s.Train.QueryResult.Date).Concat(new[] { train.QueryResult.Date }).Distinct().ToArray(); if (dates.Length > 2) { return(false, "候补最多只能选择两个日期"); } if (dates.Length == 2 && Math.Round((dates[1] - dates[0]).TotalDays) > 1) { return(false, "候补订单日期必须相邻"); } //每日只能选择两个组合 if (Items.Select(s => s.Train.QueryResult.Date).Concat(new[] { train.QueryResult.Date }).GroupBy(s => s).Any(s => s.Count() > 2)) { return(false, "每日选择的车次+席别组合不能超过两个"); } return(true, null); }
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); }; }
public void ShowTrain(QueryResultItem train) { Train = train; pTools.Enabled = false; if (train == null) { pLoading.Visible = false; dgv.DataSource = null; return; } dgv.DataSource = null; pInfo.Text = $"<b><font color='Red'>{train.Code}</font></b> <b>{train.StartStation.StationName}</b>-><b>{train.EndStation.StationName}</b> "; if (train.IsTicketStationInfoLoaded) { LoadStopInfo(); } else { var worker = new QueryTrainStopInfoWorker { Session = Session }; worker.LoadComplete += worker_LoadComplete; worker.LoadFailed += worker_LoadFailed; pLoading.ForeColor = SystemColors.ControlText; pictureBox1.Image = Properties.Resources._16px_loading_1; lblStatus.Text = "正在查询中...ヽ(≧Д≦)ノ"; pLoading.BringToFront(); pLoading.Show(); //获得数据 worker.Query(train); } }
/// <summary> /// 创建 <see cref="SubmitOrderWorker" /> 的新实例(SubmitOrderWorker) /// </summary> public SubmitOrderWorker(Session session, QueryResultItem train, QueryParam query) : base(session, train, query) { }
/// <summary> /// 判断指定的选项是否符合规则。 /// </summary> /// <param name="query">当前的查询</param> /// <param name="result">当前的结果</param> /// <param name="currentItem">当前的车次</param> /// <param name="ticket">当前的车票</param> /// <returns> /// 如果返回 <see langword="true" />,则说明此记录符合结果,将会继续处理;否则则会跳过 /// </returns> public bool IsMatch(QueryParam query, QueryResult result, QueryResultItem currentItem, LeftTicketData ticket) { return((ticket.Count >= Count) ^ IsLessThan); }
public OrderNotification(Session session, QueryParam query, QueryResultItem train, IEnumerable <PassengerInTicket> passengers, string error, string orderid) { _query = query; _train = train; _passengers = passengers; _error = error; _orderid = orderid; InitializeComponent(); InitSession(session); Icon = Properties.Resources.icon_warning; imglist.Images.Add(UiUtility.Get24PxImageFrom16PxImg(Properties.Resources.user_16)); lblTrainCode.Text = train.Code; lblDate.Text = train.FromStation.DepartureTime.Value.ToString("M月d日"); lblFrom.Text = train.FromStation.StationName; lblTo.Text = train.ToStation.StationName; lblTimeInfo.Text = lblTimeInfo.Text.FormatWith( train.FromStation.DepartureTime.Value.ToString("HH:mm"), train.ToStation.ArriveTime.Value.ToString("HH:mm"), train.ElapsedTime.ToString("dd'天'hh'时'mm'分'")); if (passengers != null) { lstPas.Items.AddRange(passengers.Select(s => new ListViewItem(new[] { ParamData.GetTicketType(s.TicketType).DisplayName, ParamData.SeatTypeFull[s.SeatType], s.Name, ParamData.PassengerIdType[s.IdType], s.IdNo }) { ImageIndex = 0 }).ToArray()); } if (string.IsNullOrEmpty(error)) { Gif.SetSuccessImage(pbAnimate); lblError.ForeColor = Color.RoyalBlue; lblError.Text = "订票成功!订单号为:" + orderid.DefaultForEmpty("<未知>") + ",请尽快付款!如果订单没有立刻查询到,请刷新订单列表!"; btnOK.Click += btnOK_Click; btnOK.Text = "乖~~戳我去付款啦~~要截图留念请速度并打码哦 ლ(^o^ლ) "; Operation.Instance.PlayMusicForSuccess(); } else { lblError.Text = error; btnOK.Text = "同学不哭,站起来擦干眼泪继续刷 ლ(╹◡╹ლ)"; Gif.SetFailedImage(pbAnimate); btnOK.Click += (s, e) => Close(); if (error.IndexOf("未完成") != -1) { session.OnRequestShowPanel(PanelIndex.Orders); session.OnOrderChanged(); } } if (ProgramConfiguration.Instance.OrderDlgCenterMainform) { UiUtility.PlaceFormAtCenter(this, show: false); } else { StartPosition = FormStartPosition.CenterScreen; } FormPlacementManager.Instance.Control(this); Load += async(s, e) => { WindowState = FormWindowState.Normal; BringToFront(); Activate(); if (_error.IsNullOrEmpty()) { await CheckNotification().ConfigureAwait(true); await SendWebNotification().ConfigureAwait(true); } }; }
string CreateTicketDataSign(QueryResultItem item) { return(item.Id + item.TicketCount.OrderBy(s => s.Key).Select(s => s.Key + s.Value.Count).JoinAsString("")); }
static string GetPrefix(QueryResultItem item) { return($"{item.QueryResult.Date:yyyyMMdd}{item.Id}"); }
/// <summary> /// 创建 <see cref="TrainAlterToStationName" /> 的新实例(SubItemBase) /// </summary> public TrainAlterToStationName(QueryResultItem resultItem, Font[] font) : base(resultItem, font) { Text = resultItem.ToStation.StationName + "\n" + resultItem.ToStation.ArriveTime.Value.ToString("HH:mm"); }
/// <summary> /// 创建 <see cref="SubmitOrderWorker" /> 的新实例(SubmitOrderWorker) /// </summary> public SubmitOrderBase(Session session, QueryResultItem train, TOBA.Entity.QueryParam query) : base(session) { Train = train; Query = query; }
/// <summary> /// 创建 <see cref="TicketCellSubItem"/> 的新实例(TicketCellSubItem) /// </summary> public TicketCellSubItem(QueryResultItem resultItem, char code, Font[] font) : base(resultItem, font) { Code = code; Bind(); }