Esempio n. 1
0
 /// <summary>
 /// 是否有票
 /// </summary>
 /// <param name="ticket"></param>
 /// <returns></returns>
 private bool CheckTicket(QueryTicket ticket)
 {
     return(true);
     //var dic = PramHelper.GetProperties(ticket);
     //var parmStr = PramHelper.GetParamSrc(dic);
     //return parmStr.Contains("有");
 }
Esempio n. 2
0
        /// <summary>
        /// 获取排队数
        /// </summary>
        /// <param name="selectedTrain"></param>
        /// <param name="buySeat"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        private bool GetQueueCount(QueryTicket selectedTrain, string buySeat, InitInfo info)
        {
            try
            {
                string   url = "https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount";
                DateTime dt;
                DateTime.TryParse(_date, out dt);

                string trainDate = UrlEncode(dt.ToString("ddd MMM dd yyyy ",
                                                         CultureInfo.CreateSpecificCulture("en-GB")) + "00:00:00 GMT+0800 (CST)");
                string fromStationTelecode = _fromStation.Code;
                string toStationTelecode   = _toStation.Code;
                string stationTrainCode    = selectedTrain.Station_Train_Code;
                string trainNo             = selectedTrain.Train_No;

                string data =
                    string.Format(
                        "train_date={0}&train_no={1}&stationTrainCode={2}&seatType={3}&fromStationTelecode={4}&toStationTelecode={5}&leftTicket={6}&purpose_codes={7}&train_location={8}&_json_att=&REPEAT_SUBMIT_TOKEN={9}",
                        trainDate, trainNo, stationTrainCode, buySeat, fromStationTelecode, toStationTelecode,
                        info.LeftTicketInfo, info.PurposeCodes, info.Location, info.SubmitToken);
                HttpJsonEntity <Dictionary <string, string> > contentEntity =
                    HttpHelper.Post(_agent, url, data, _cookie);
                LogHelper.Info(selectedTrain.Station_Train_Code + " GetQueueCount成功");
                return(contentEntity.status.ToUpper().Equals("TRUE") && contentEntity.httpstatus.Equals(200));
            }
            catch (Exception ex)
            {
                LogHelper.Error("GetQueueCount", ex);
                return(false);
            }
        }
Esempio n. 3
0
        private bool BuyTicket(string secretStr, List <Passenger> selectedPassengers, string buySeat,
                               QueryTicket selectedTrain, out string msg)
        {
            string url  = " https://kyfw.12306.cn/otn/login/checkUser";
            string data = "_json_att=";

            msg = "购票失败!";
            HttpJsonEntity <Dictionary <string, string> > contentEntity = HttpHelper.Post(_agent, url, data, _cookie);

            if (contentEntity.status.ToUpper().Equals("TRUE") && contentEntity.httpstatus.Equals(200))
            {
                if (SubmitOrderRequest(secretStr, out msg))
                {
                    FormatLogInfo("预提交订单成功!");
                    InitInfo info = GetInitInfo();
                    FormatLogInfo("获取页面信息成功!");
                    if (info != null)
                    {
                        Thread.Sleep(1000);
                        string randCode, passengerTicketStr, oldPassengerStr;
                        if (CheckOrderInfo(selectedPassengers, buySeat, info, out randCode, out passengerTicketStr,
                                           out oldPassengerStr))
                        {
                            FormatLogInfo("核查订单成功!");
                            Thread.Sleep(1000);
                            if (GetQueueCount(selectedTrain, buySeat, info))
                            {
                                FormatLogInfo("获取排队人数成功!");
                                Thread.Sleep(1000);
                                if (ConfirmSingleForQueue(passengerTicketStr, oldPassengerStr, randCode, info,
                                                          out msg))
                                {
                                    Thread.Sleep(1000);
                                    FormatLogInfo("开始排队!");
                                    if (QueryOrderWaitTime(info, out msg))
                                    {
                                        EmailHelper.Send("*****@*****.**", "", selectedTrain.Station_Train_Code);
                                        MessageBox.Show("订票成功,请及时查询及支付订单!");
                                        return(true);
                                    }
                                    FormatLogInfo(msg);
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("状态异常,需重新登录");
            }
            return(false);
        }
Esempio n. 4
0
 private void buyTimer_Tick(object sender, EventArgs e)
 {
     //第一次执行后修改为8秒
     if (buyTimer.Interval == 1000)
     {
         buyTimer.Interval = 8000;
     }
     foreach (string trian in select_train_lb.Items)
     {
         j++;
         QueryTicket selectedTrain = tickets.FirstOrDefault(x => x.Station_Train_Code.Equals(trian));
         if (selectedTrain == null || string.IsNullOrEmpty(selectedTrain.SecretStr))
         {
             QueryTickets();
             Thread.Sleep(1000);
             continue;
         }
         string secretStr = selectedTrain.SecretStr;
         string logMsg    = "第" + j + "次购票:" + selectedTrain.Station_Train_Code;
         FormatLogInfo(logMsg);
         bool ticket  = CheckTicket(selectedTrain);
         var  buySeat = string.Empty;//座位号
         var  seats   = GetCheckSeatTypes();
         buySeat = seats.FirstOrDefault()?.SeatCode;
         if (!ticket || string.IsNullOrEmpty(buySeat))
         {
             logMsg = selectedTrain.Station_Train_Code + "无票";
             FormatLogInfo(logMsg);
             QueryTickets();
             Thread.Sleep(1000);
             continue;
         }
         var selectedPassengers = GetPassaPassengers();
         //出发地
         var stationFrom = tb_stationFrom.Text;
         //结束地
         var stationTo = tb_stationTo.Text;
         //行程日期
         string msg        = string.Empty;
         var    train_date = dtpicker.Text;
         if (BuyTicket(secretStr, selectedPassengers, stationFrom, stationTo, train_date, buySeat, out msg, selectedTrain.IsWait))
         {
             if (buyTimer != null)
             {
                 buyTimer.Stop();
             }
         }
         FormatLogInfo(msg);
         //Task task = new Task(StratRunButTicket);
         //task.Start();
     }
 }
Esempio n. 5
0
        private void dgv_tickets_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgv_tickets.CurrentRow == null)
                {
                    return;
                }
                if (dgv_tickets.SelectedRows.Count > 1 || isAutoBuy)
                {
                    return;
                }
                string secretStr = dgv_tickets.CurrentRow.Cells["SecretStr"].Value.ToString();
                LogHelper.Info("车次secretStr:" + secretStr);

                QueryTicket selectedTrain = tickets.FirstOrDefault(x => x.SecretStr.Equals(secretStr));
                if (CheckIsNoTicket(selectedTrain))
                {
                    MessageBox.Show("此车次无票!");
                    return;
                }
                IEnumerable <string> arrySeats = leftSeat.Keys.ToList().Intersect(GetSeatType());
                if (!arrySeats.Any())
                {
                    MessageBox.Show("无此座位,请重新选择");
                    return;
                }
                string           buySeat            = arrySeats.FirstOrDefault();
                List <Passenger> selectedPassengers = GetPassaPassengers();
                if (selectedPassengers.Count == 0)
                {
                    MessageBox.Show("未选择乘客!");
                    return;
                }
                string msg;
                if (BuyTicket(secretStr, selectedPassengers, buySeat, selectedTrain, out msg))
                {
                    LogHelper.Info("订票成功!");
                }
                else
                {
                    MessageBox.Show(msg);
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show("系统异常,请重试!");
                LogHelper.Error("error:", exception);
            }
        }
Esempio n. 6
0
 private void buyTimer_Tick(object sender, EventArgs e)
 {
     foreach (string trian in _lsTrainCode)
     {
         j++;
         QueryTicket selectedTrain = tickets.FirstOrDefault(x => x.Station_Train_Code.Equals(trian));
         if (selectedTrain == null || string.IsNullOrEmpty(selectedTrain.SecretStr))
         {
             QueryTickets(queryUrl);
             Thread.Sleep(1000);
             continue;
         }
         string secretStr = selectedTrain.SecretStr;
         string logMsg    = "第" + j + "次购票:" + selectedTrain.Station_Train_Code;
         LogHelper.Info(logMsg);
         FormatLogInfo(logMsg);
         bool noTicket = CheckIsNoTicket(selectedTrain);
         bool noSeat   = false;
         IEnumerable <string> arrySeats = leftSeat.Keys.ToList().Intersect(GetSeatType());
         string buySeat = arrySeats.FirstOrDefault();
         if (!arrySeats.Any())
         {
             noSeat = true;
         }
         if (noTicket || noSeat)
         {
             logMsg = selectedTrain.Station_Train_Code + "无票";
             LogHelper.Info(logMsg);
             FormatLogInfo(logMsg);
             QueryTickets(queryUrl);
             Thread.Sleep(1000);
             continue;
         }
         List <Passenger> selectedPassengers = GetPassaPassengers();
         string           msg = "";
         if (BuyTicket(secretStr, selectedPassengers, buySeat, selectedTrain, out msg))
         {
             buyTimer.Stop();
         }
     }
 }
Esempio n. 7
0
        /// <summary>
        /// 是否有票
        /// </summary>
        /// <param name="ticket"></param>
        /// <returns></returns>
        private bool CheckIsNoTicket(QueryTicket ticket)
        {
            leftSeat = new Dictionary <string, string>();
            bool result = true;
            var  t      = ticket.GetType();
            //由于我们只在Property设置了Attibute,所以先获取Property
            var properties = t.GetProperties();

            foreach (var property in properties)
            {
                if (!property.IsDefined(typeof(SeatAttribute), false))
                {
                    continue;
                }
                var propertyValue = property.GetValue(ticket) as string;
                if (propertyValue != null && (!propertyValue.Equals(defaultTicket) && !propertyValue.Equals("无")))
                {
                    result = false;
                    SeatAttribute attribute = (SeatAttribute)property.GetCustomAttributes(typeof(SeatAttribute), true).FirstOrDefault();
                    leftSeat.Add(attribute.Code, attribute.Name);
                }
            }
            return(result);
        }
Esempio n. 8
0
 private bool BuyTicket(string secretStr, List <Passenger> selectedPassengers, string buySeat, QueryTicket selectedTrain, out string msg)
 {
     if (SubmitOrderRequest(secretStr, out msg))
     {
         FormatLogInfo("预提交订单成功!");
         InitInfo info = GetInitInfo();
         FormatLogInfo("获取页面信息成功!");
         if (info != null)
         {
             Thread.Sleep(500);
             string randCode, passengerTicketStr, oldPassengerStr;
             if (CheckOrderInfo(selectedPassengers, buySeat, info, out randCode, out passengerTicketStr,
                                out oldPassengerStr))
             {
                 FormatLogInfo("核查订单成功!");
                 Thread.Sleep(500);
                 if (GetQueueCount(selectedTrain, buySeat, info))
                 {
                     FormatLogInfo("获取排队人数成功!");
                     Thread.Sleep(500);
                     if (ConfirmSingleForQueue(passengerTicketStr, oldPassengerStr, randCode, info, out msg))
                     {
                         Thread.Sleep(500);
                         FormatLogInfo("开始排队!");
                         if (QueryOrderWaitTime(info, out msg))
                         {
                             EmailHelper.Send("*****@*****.**", "", selectedTrain.Station_Train_Code);
                             MessageBox.Show("订票成功,请及时查询及支付订单!");
                             return(true);
                         }
                         FormatLogInfo(msg);
                     }
                 }
             }
         }
     }
     return(false);
 }
Esempio n. 9
0
        private bool QueryTickets(string queryUrl)
        {
            string content = HttpHelper.StringGet(_agent, queryUrl, _cookie);

            try
            {
                //转json
                QueryJsonEntity contentEntity =
                    JsonConvert.DeserializeObject <QueryJsonEntity>(content);

                Dictionary <string, string> trainDictionary =
                    JsonConvert.DeserializeObject <Dictionary <string, string> >(contentEntity.data.map.ToString());

                tickets = new List <QueryTicket>();
                if (contentEntity.data.result.Count > 0)
                {
                    List <string> ticketsContent = contentEntity.data.result;
                    foreach (var s in ticketsContent)
                    {
                        QueryTicket ticket = new QueryTicket();
                        string[]    item   = s.Split('|');
                        ticket.SecretStr          = item[0];
                        ticket.Remark             = item[1];
                        ticket.Train_No           = item[2];
                        ticket.Station_Train_Code = item[3];
                        ticket.From_Station_Name  = trainDictionary[item[6]];
                        ticket.To_Station_Name    = trainDictionary[item[7]];
                        ticket.Start_Time         = item[8];
                        ticket.Arrive_Time        = item[9];
                        ticket.LastedTime         = item[10];
                        ticket.Gr_Num             = ScreenInfo(item[21]);
                        ticket.Qt_Num             = ScreenInfo(item[22]);
                        ticket.Rw_Num             = ScreenInfo(item[23]);
                        ticket.Rz_Num             = ScreenInfo(item[25]);
                        ticket.Wz_Num             = ScreenInfo(item[26]);
                        ticket.Yw_Num             = ScreenInfo(item[28]);
                        ticket.Yz_Num             = ScreenInfo(item[29]);
                        ticket.Ze_Num             = ScreenInfo(item[30]);
                        ticket.Zy_Num             = ScreenInfo(item[31]);
                        ticket.Swz_Num            = ScreenInfo(item[32]);
                        ticket.Dw_Num             = ScreenInfo(item[33]);
                        tickets.Add(ticket);
                    }
                    dgv_tickets.AutoGenerateColumns = false;
                    dgv_tickets.DataSource          = tickets;
                    dgv_tickets.DoubleBuffered(true);
                    dgv_tickets.Rows[0].Selected = false;
                    FormatLogInfo("余票查询成功!");
                }
                else
                {
                    LogHelper.Info("查询结果为空");
                    return(true);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(content, ex);
                return(false);
            }
            return(true);
        }