Commit e540b712 authored by 罗超's avatar 罗超

变更框架

parent e729ebc3
Pipeline #132 failed with stages
...@@ -6,6 +6,7 @@ using System.Collections.Generic; ...@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using TicketSpider.Model; using TicketSpider.Model;
using TicketSpider.Spiders.EasterLineRule; using TicketSpider.Spiders.EasterLineRule;
......
// See https://aka.ms/new-console-template for more information // See https://aka.ms/new-console-template for more information
using Newtonsoft.Json; using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using TicketSpider.Data; using TicketSpider.Data;
using TicketSpider.Model; using TicketSpider.Model;
using TicketSpider.Spiders; using TicketSpider.Spiders;
using TicketSpider.Uitls; using TicketSpider.Uitls;
ThreadPool.SetMaxThreads(255, 255); static void Main(string [] args)
ThreadPool.SetMinThreads(255, 255);
#region 初始化城市信息
if (!CityService.Load())
{ {
Console.WriteLine("初始化城市信息失败,检查相关文件");
return;
}
#endregion
#region 航司选择 ThreadPool.SetMaxThreads(255, 255);
var airLines = new string[] { "E", "C" }; ThreadPool.SetMinThreads(255, 255);
while (true)
{ #region 初始化城市信息
Console.WriteLine("请选择要执行的航司,E:东航;C:国航,多个航司使用英语逗号相隔(E,C)"); if (!CityService.Load())
var airlineStr = Console.ReadLine(); {
if (!string.IsNullOrEmpty(airlineStr)) Console.WriteLine("初始化城市信息失败,检查相关文件");
return;
}
#endregion
#region 航司选择
var airLines = new string[] { "E", "C" };
while (true)
{ {
var airlineIpt = airlineStr.Split(","); Console.WriteLine("请选择要执行的航司,E:东航;C:国航,多个航司使用英语逗号相隔(E,C)");
var except = airlineIpt.Except(airLines); var airlineStr = Console.ReadLine();
if (except == null || !except.Any()) if (!string.IsNullOrEmpty(airlineStr))
{ {
CmdHelper.AIRLINE = airlineIpt; var airlineIpt = airlineStr.Split(",");
break; var except = airlineIpt.Except(airLines);
if (except == null || !except.Any())
{
CmdHelper.AIRLINE = airlineIpt;
break;
}
} }
Console.WriteLine("输入有误,重新输入");
} }
Console.WriteLine("输入有误,重新输入"); #endregion
}
#endregion
#region 命令模式 #region 命令模式
while (true) while (true)
{
Console.WriteLine("请选择命令模式(1 步骤模式,2 命令行模式)");
var modes = new int[] { 1,2};
var mode = Console.ReadLine();
if (!string.IsNullOrEmpty(mode)&&int.TryParse(mode,out CmdHelper.CMD_MODEL))
{ {
if (modes.Contains(CmdHelper.CMD_MODEL)) Console.WriteLine("请选择命令模式(1 步骤模式,2 命令行模式)");
var modes = new int[] { 1, 2 };
var mode = Console.ReadLine();
if (!string.IsNullOrEmpty(mode) && int.TryParse(mode, out CmdHelper.CMD_MODEL))
{ {
break; if (modes.Contains(CmdHelper.CMD_MODEL))
{
break;
}
} }
Console.WriteLine("输入有误,重新输入");
} }
Console.WriteLine("输入有误,重新输入"); #endregion
}
#endregion
#region 步骤命令模式 #region 步骤命令模式
if (CmdHelper.CMD_MODEL == 1) if (CmdHelper.CMD_MODEL == 1)
{
#region 输入航段
while (true)
{ {
var model = new Flight(); #region 输入航段
//出发与目的地
while (true) while (true)
{ {
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}的出发城市与目的城市,使用'-'相隔。(成都-巴黎)"); var model = new Flight();
var cits = Console.ReadLine();
if (!string.IsNullOrEmpty(cits) && cits.Split("-").Length == 2) //出发与目的地
while (true)
{ {
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}的出发城市与目的城市,使用'-'相隔。(成都-巴黎)");
var cits = Console.ReadLine();
if (!string.IsNullOrEmpty(cits) && cits.Split("-").Length == 2)
{
if (!CityService.Container(cits.Split("-")[0])) if (!CityService.Container(cits.Split("-")[0]))
{
Console.WriteLine($"{cits.Split("-")[0]},没有找到机场信息,请重新输入");
}
else if (!CityService.Container(cits.Split("-")[1]))
{
Console.WriteLine($"{cits.Split("-")[1]},没有找到机场信息,请重新输入");
}
else
{
model.DepartCity = cits.Split("-")[0];
model.ArriveCity = cits.Split("-")[1];
break;
}
}
Console.WriteLine("输入错误,重新输入");
}
//日期
while (true)
{
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}出发日期,(单日:2022/05/01,范围:2022/05/01-2022/07/01,月份:2022/07)");
var dateStr = Console.ReadLine();
var dtNow = DateTime.Now;
if (dateStr.Contains("-") && dateStr.Split("-").Length == 2)
{ {
Console.WriteLine($"{cits.Split("-")[0]},没有找到机场信息,请重新输入"); var dates = dateStr.Split("-");
if (DateTime.TryParse(dates[0], out dtNow) && DateTime.TryParse(dates[1], out dtNow))
{
model.DepartDate = dateStr.Replace("-", "~");
model.DepartDateMode = 2;
break;
}
} }
else if (!CityService.Container(cits.Split("-")[1])) else
{ {
Console.WriteLine($"{cits.Split("-")[1]},没有找到机场信息,请重新输入"); var dates = dateStr.Split("/");
if ((dates.Length == 3 || dates.Length == 2) && DateTime.TryParse(dateStr, out dtNow))
{
model.DepartDate = dateStr;
model.DepartDateMode = dates.Length == 3 ? 1 : 3;
break;
}
} }
else Console.WriteLine("输入错误,重新输入");
}
//航班
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}需要指定的航班(如:3U8633, 没有直接回车)");
model.AirlineCode = Console.ReadLine() ?? string.Empty;
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}需要指定的仓位代码,多个使用英文逗号相隔(如:\"Y\" \"C,Y\", 没有直接回车)");
model.SeatCode = Console.ReadLine() ?? string.Empty;
CmdHelper.FLIGHTS.Add(model);
var isContinu = false;
while (true)
{
Console.WriteLine($"航段{CmdHelper.FLIGHTS.Count()}添加成功,是否继续添加航段? (Y:继续添加/n:不添加)");
var continu = Console.ReadLine() ?? string.Empty;
if (continu == "Y" || continu == "n")
{ {
model.DepartCity = cits.Split("-")[0]; isContinu = continu == "Y";
model.ArriveCity = cits.Split("-")[1]; break;
break;
} }
Console.WriteLine("输入错误,重新输入");
} }
Console.WriteLine("输入错误,重新输入");
if (!isContinu) break;
} }
//日期 #endregion
#region 添加乘客
while (true) while (true)
{ {
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}出发日期,(单日:2022/05/01,范围:2022/05/01-2022/07/01,月份:2022/07)"); var model = new Passenger();
var dateStr = Console.ReadLine(); while (true)
var dtNow = DateTime.Now;
if (dateStr.Contains("-") && dateStr.Split("-").Length == 2)
{ {
var dates = dateStr.Split("-"); Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}的英文姓名(LIU/DONG)");
var name = Console.ReadLine() ?? string.Empty;
if (DateTime.TryParse(dates[0], out dtNow) && DateTime.TryParse(dates[1], out dtNow)) if (name.Split("/").Length == 2)
{ {
model.DepartDate = dateStr.Replace("-","~"); model.paxNameFirst = name.Split("/")[0];
model.DepartDateMode = 2; model.paxNameLast = name.Split("/")[1];
break; break;
} }
Console.WriteLine("输入错误,重新输入");
} }
else while (true)
{ {
var dates = dateStr.Split("/"); Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}的性别(M 男,F 女)");
if ((dates.Length == 3 || dates.Length == 2) && DateTime.TryParse(dateStr, out dtNow)) var name = Console.ReadLine() ?? string.Empty;
if (name == "M" || name == "F")
{ {
model.DepartDate = dateStr; model.gender = name;
model.DepartDateMode = dates.Length == 3 ? 1 : 3;
break; break;
} }
Console.WriteLine("输入错误,重新输入");
} }
Console.WriteLine("输入错误,重新输入"); while (true)
}
//航班
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}需要指定的航班(如:3U8633, 没有直接回车)");
model.AirlineCode = Console.ReadLine() ?? string.Empty;
Console.WriteLine($"请输入航段{CmdHelper.FLIGHTS.Count() + 1}需要指定的仓位代码,多个使用英文逗号相隔(如:\"Y\" \"C,Y\", 没有直接回车)");
model.SeatCode= Console.ReadLine() ?? string.Empty;
CmdHelper.FLIGHTS.Add(model);
var isContinu = false;
while (true)
{
Console.WriteLine($"航段{CmdHelper.FLIGHTS.Count()}添加成功,是否继续添加航段? (Y:继续添加/n:不添加)");
var continu=Console.ReadLine()?? string.Empty;
if (continu == "Y" || continu == "n")
{
isContinu = continu == "Y";
break;
}
Console.WriteLine("输入错误,重新输入");
}
if (!isContinu) break;
}
#endregion
#region 添加乘客
while (true)
{
var model = new Passenger();
while (true)
{
Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}的英文姓名(LIU/DONG)");
var name=Console.ReadLine()?? string.Empty;
if (name.Split("/").Length == 2)
{
model.paxNameFirst = name.Split("/")[0];
model.paxNameLast = name.Split("/")[1];
break;
}
Console.WriteLine("输入错误,重新输入");
}
while (true)
{
Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}的性别(M 男,F 女)");
var name = Console.ReadLine() ?? string.Empty;
if (name == "M" || name == "F")
{
model.gender = name;
break;
}
Console.WriteLine("输入错误,重新输入");
}
while (true)
{
Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}生日 (2022/01/01)");
var name = Console.ReadLine() ?? string.Empty;
var dtnow=DateTime.Now;
if (DateTime.TryParse(name,out dtnow))
{ {
model.birthday = name; Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}生日 (2022/01/01)");
break; var name = Console.ReadLine() ?? string.Empty;
var dtnow = DateTime.Now;
if (DateTime.TryParse(name, out dtnow))
{
model.birthday = name;
break;
}
Console.WriteLine("输入错误,重新输入");
} }
Console.WriteLine("输入错误,重新输入"); while (true)
}
while (true)
{
Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}联系电话 (13080808080)");
var name = Console.ReadLine() ?? string.Empty;
if (name.Length==11)
{ {
model.mobile = name; Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}联系电话 (13080808080)");
break; var name = Console.ReadLine() ?? string.Empty;
if (name.Length == 11)
{
model.mobile = name;
break;
}
Console.WriteLine("输入错误,重新输入");
} }
Console.WriteLine("输入错误,重新输入"); while (true)
}
while (true)
{
Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}护照号和护照有效期 (EH36523023 2029/08/18)");
var name = (Console.ReadLine() ?? string.Empty).Split(" ");
var dtNow=DateTime.Now;
if (name.Length == 2 && name[0].Length>6 && DateTime.TryParse(name[1],out dtNow))
{ {
model.favorPaxIdDtoList = new List<FavorPaxIdDtoList>() { Console.WriteLine($"请输入乘客{CmdHelper.PASSENGETS.Count + 1}护照号和护照有效期 (EH36523023 2029/08/18)");
var name = (Console.ReadLine() ?? string.Empty).Split(" ");
var dtNow = DateTime.Now;
if (name.Length == 2 && name[0].Length > 6 && DateTime.TryParse(name[1], out dtNow))
{
model.favorPaxIdDtoList = new List<FavorPaxIdDtoList>() {
new FavorPaxIdDtoList() new FavorPaxIdDtoList()
{ {
idType="PP", idType="PP",
...@@ -205,236 +213,236 @@ if (CmdHelper.CMD_MODEL == 1) ...@@ -205,236 +213,236 @@ if (CmdHelper.CMD_MODEL == 1)
paxYouxiaoqi=name[1] paxYouxiaoqi=name[1]
} }
}; };
break; break;
}
Console.WriteLine("输入错误,重新输入");
} }
Console.WriteLine("输入错误,重新输入"); CmdHelper.PASSENGETS.Add(model);
} var isContinu = false;
CmdHelper.PASSENGETS.Add(model); while (true)
var isContinu = false;
while (true)
{
Console.WriteLine($"乘客{CmdHelper.PASSENGETS.Count()}添加成功,是否继续添加乘客? (Y:继续添加/n:不添加)");
var continu = Console.ReadLine() ?? string.Empty;
if (continu == "Y" || continu == "n")
{ {
isContinu = continu == "Y"; Console.WriteLine($"乘客{CmdHelper.PASSENGETS.Count()}添加成功,是否继续添加乘客? (Y:继续添加/n:不添加)");
break; var continu = Console.ReadLine() ?? string.Empty;
if (continu == "Y" || continu == "n")
{
isContinu = continu == "Y";
break;
}
Console.WriteLine("输入错误,重新输入");
} }
Console.WriteLine("输入错误,重新输入");
}
if (!isContinu) break; if (!isContinu) break;
}
#endregion
} }
#endregion #endregion
}
#endregion
#region 命令行模式 #region 命令行模式
if (CmdHelper.CMD_MODEL == 2) if (CmdHelper.CMD_MODEL == 2)
{
while (true)
{ {
Console.WriteLine("请输入命令行,如果需要帮助请输入“H”"); while (true)
var cmd = Console.ReadLine();
if (cmd == "H")
{ {
while (true) Console.WriteLine("请输入命令行,如果需要帮助请输入“H”");
var cmd = Console.ReadLine();
if (cmd == "H")
{ {
Console.WriteLine("请选择你需要的帮助信息序号:"); while (true)
Console.WriteLine("1. 单航段单人机票命令说明");
Console.WriteLine("2. 单航段多人机票命令说明");
Console.WriteLine("3. 多航段单人机票命令说明");
Console.WriteLine("4. 多航段多人机票命令说明");
Console.WriteLine("退出输入:“Q”");
var input = Console.ReadLine();
var keys = new string[] { "1", "2", "3", "4", "Q" };
if (keys.Contains(input))
{ {
if (input == "1") Console.WriteLine("请选择你需要的帮助信息序号:");
{ Console.WriteLine("1. 单航段单人机票命令说明");
Console.WriteLine(""); Console.WriteLine("2. 单航段多人机票命令说明");
Console.WriteLine(""); Console.WriteLine("3. 多航段单人机票命令说明");
Console.WriteLine("***************************单航段单人机票命令说明开始***************************"); Console.WriteLine("4. 多航段多人机票命令说明");
Console.WriteLine(""); Console.WriteLine("退出输入:“Q”");
Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18"); var input = Console.ReadLine();
Console.WriteLine(""); var keys = new string[] { "1", "2", "3", "4", "Q" };
Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18"); if (keys.Contains(input))
Console.WriteLine("");
Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine("");
Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间");
Console.WriteLine("");
Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07");
Console.WriteLine("");
Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确");
Console.WriteLine("");
Console.WriteLine("***************************单航段单人机票命令说明结束***************************");
Console.WriteLine("");
}
else if (input == "2")
{ {
Console.WriteLine(""); if (input == "1")
Console.WriteLine(""); {
Console.WriteLine("***************************单航段多人机票命令说明开始***************************"); Console.WriteLine("");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07"); Console.WriteLine("***************************单航段单人机票命令说明开始***************************");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07"); Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07"); Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间,(英文逗号后面继续按照相同格式添加乘客信息)"); Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07"); Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确"); Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("***************************单航段多人机票命令说明结束***************************"); Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("***************************单航段单人机票命令说明结束***************************");
Console.WriteLine("");
}
else if (input == "2")
{
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("***************************单航段多人机票命令说明开始***************************");
Console.WriteLine("");
Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07");
Console.WriteLine("");
Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07");
Console.WriteLine("");
Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07");
Console.WriteLine("");
Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间,(英文逗号后面继续按照相同格式添加乘客信息)");
Console.WriteLine("");
Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07");
Console.WriteLine("");
Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确");
Console.WriteLine("");
Console.WriteLine("***************************单航段多人机票命令说明结束***************************");
Console.WriteLine("");
} }
else if (input == "3") else if (input == "3")
{ {
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("***************************多航段航段单人机票命令说明开始***************************"); Console.WriteLine("***************************多航段航段单人机票命令说明开始***************************");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y,北京/成都 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18"); Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y,北京/成都 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y,北京/成都 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18"); Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y,北京/成都 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 ,北京/成都 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18"); Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 ,北京/成都 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空),(英文逗号后面继续按照格式添加航班)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间"); Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空),(英文逗号后面继续按照格式添加航班)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07"); Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确"); Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("***************************多航段航段单人机票命令说明结束***************************"); Console.WriteLine("***************************多航段航段单人机票命令说明结束***************************");
Console.WriteLine(""); Console.WriteLine("");
} }
else if (input == "4") else if (input == "4")
{ {
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("***************************多航段航段多人机票命令说明开始***************************"); Console.WriteLine("***************************多航段航段多人机票命令说明开始***************************");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y,北京/成都 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07"); Console.WriteLine("指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 3U8633 Y,北京/成都 2022/05/01~2022/07/31 3U8633 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y,北京/成都 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07"); Console.WriteLine("不指定航班,指定仓位:洛杉矶/北京 2022/05/01~2022/07/31 Y,北京/成都 2022/05/01~2022/07/31 Y-LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 ,北京/成都 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07"); Console.WriteLine("不指定航班和仓位:洛杉矶/北京 2022/05/01~2022/07/31 ,北京/成都 2022/05/01~2022/07/31 -LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18,HUANG/KUI 男 1989/02/08 13551126755 EP0218030 2028/02/07");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空),(英文逗号后面继续按照格式添加航班)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间,(英文逗号后面继续按照相同格式添加乘客信息)"); Console.WriteLine("命令解析:出发地/目的地 出发日期 航班(不指定留空)仓位(不指定留空),(英文逗号后面继续按照格式添加航班)-(表示链接乘客信息) 乘客英文名 性别 生日 电话 护照号 护照到期时间,(英文逗号后面继续按照相同格式添加乘客信息)");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07"); Console.WriteLine("出发日期说明:单日:2022/05/01,范围:2022/05/01~2022/07/01,月份:2022/07");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确"); Console.WriteLine("注意:乘客信息务必准确,以防止开票信息不正确");
Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("***************************多航段航段多人机票命令说明结束***************************"); Console.WriteLine("***************************多航段航段多人机票命令说明结束***************************");
Console.WriteLine(""); Console.WriteLine("");
}
else
{
break;
}
Console.WriteLine("按任意键返回上级...");
Console.ReadKey();
} }
else else
{ {
break; Console.WriteLine("输入错误,请重新输入");
} }
Console.WriteLine("按任意键返回上级...");
Console.ReadKey();
}
else
{
Console.WriteLine("输入错误,请重新输入");
}
}
} }
} else
else
{
var cmds = cmd.Split("-");
if (cmds.Length == 2)
{ {
#region 解析航段 var cmds = cmd.Split("-");
if (cmds.Length == 2)
var flights = cmds[0].Split(",");
var flightList = new List<Flight>();
foreach (var flight in flights)
{ {
var flightInfo = flight.Split(" "); #region 解析航段
if (flightInfo.Length == 4 && flightInfo[0].Split("/").Length==2)
var flights = cmds[0].Split(",");
var flightList = new List<Flight>();
foreach (var flight in flights)
{ {
//验证时间 var flightInfo = flight.Split(" ");
var dtNow = DateTime.Now; if (flightInfo.Length == 4 && flightInfo[0].Split("/").Length == 2)
var flightModel = new Flight();
if (!CityService.Container(flightInfo[0].Split("/")[0]))
{ {
Console.WriteLine($"{flightInfo[0].Split("/")[0]},没有找到机场信息,请重新输入"); //验证时间
} var dtNow = DateTime.Now;
else if (!CityService.Container(flightInfo[0].Split("/")[1])) var flightModel = new Flight();
{ if (!CityService.Container(flightInfo[0].Split("/")[0]))
Console.WriteLine($"{flightInfo[0].Split("/")[1]},没有找到机场信息,请重新输入");
}
else
{
flightModel.DepartCity = flightInfo[0].Split("/")[0];
flightModel.ArriveCity = flightInfo[0].Split("/")[1];
flightModel.AirlineCode = flightInfo[2];
flightModel.SeatCode = flightInfo[3];
var dateStr = flightInfo[1];
if (dateStr.Contains("~") && dateStr.Split("~").Length == 2)
{ {
var dates = dateStr.Split("~"); Console.WriteLine($"{flightInfo[0].Split("/")[0]},没有找到机场信息,请重新输入");
if (DateTime.TryParse(dates[0], out dtNow) && DateTime.TryParse(dates[1], out dtNow)) }
{ else if (!CityService.Container(flightInfo[0].Split("/")[1]))
flightModel.DepartDate = dateStr; {
flightModel.DepartDateMode = 2; Console.WriteLine($"{flightInfo[0].Split("/")[1]},没有找到机场信息,请重新输入");
flightList.Add(flightModel);
}
} }
else else
{ {
var dates = dateStr.Split("/"); flightModel.DepartCity = flightInfo[0].Split("/")[0];
if ((dates.Length == 3 || dates.Length == 2) && DateTime.TryParse(dateStr, out dtNow)) flightModel.ArriveCity = flightInfo[0].Split("/")[1];
flightModel.AirlineCode = flightInfo[2];
flightModel.SeatCode = flightInfo[3];
var dateStr = flightInfo[1];
if (dateStr.Contains("~") && dateStr.Split("~").Length == 2)
{ {
flightModel.DepartDate = dateStr; var dates = dateStr.Split("~");
flightModel.DepartDateMode = dates.Length == 3 ? 1 : 3; if (DateTime.TryParse(dates[0], out dtNow) && DateTime.TryParse(dates[1], out dtNow))
flightList.Add(flightModel); {
flightModel.DepartDate = dateStr;
flightModel.DepartDateMode = 2;
flightList.Add(flightModel);
}
}
else
{
var dates = dateStr.Split("/");
if ((dates.Length == 3 || dates.Length == 2) && DateTime.TryParse(dateStr, out dtNow))
{
flightModel.DepartDate = dateStr;
flightModel.DepartDateMode = dates.Length == 3 ? 1 : 3;
flightList.Add(flightModel);
}
} }
} }
} }
} }
}
#endregion #endregion
#region 解析乘客信息 #region 解析乘客信息
var passengers = cmds[1].Split(","); var passengers = cmds[1].Split(",");
var passengerList = new List<Passenger>(); var passengerList = new List<Passenger>();
//LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18 //LUO/CHAO 男 1990/12/26 17308037817 EP2020158 2028/05/18
foreach (var passengerStr in passengers) foreach (var passengerStr in passengers)
{
var pList = passengerStr.Split(" ");
if (pList.Length == 6)
{ {
if (pList[0].Split("/").Length == 2 && (pList[1] == "男" || pList[1] == "女") && DateTime.TryParse(pList[2], out DateTime dt1) && pList[3].Length == 11 && pList[4].Length > 5 && DateTime.TryParse(pList[5], out DateTime dt2)) var pList = passengerStr.Split(" ");
if (pList.Length == 6)
{ {
var passenger = new Passenger() if (pList[0].Split("/").Length == 2 && (pList[1] == "男" || pList[1] == "女") && DateTime.TryParse(pList[2], out DateTime dt1) && pList[3].Length == 11 && pList[4].Length > 5 && DateTime.TryParse(pList[5], out DateTime dt2))
{ {
id = "", var passenger = new Passenger()
paxName = "", {
paxNameFirst = pList[0].Split("/")[0], id = "",
paxNameLast = pList[0].Split("/")[1], paxName = "",
gender = pList[1]=="男"?"M":"F", paxNameFirst = pList[0].Split("/")[0],
birthday = pList[2].Replace("/",""), paxNameLast = pList[0].Split("/")[1],
nationality = "CN", gender = pList[1] == "男" ? "M" : "F",
telephoneCode = "86", birthday = pList[2].Replace("/", ""),
mobile = pList[3], nationality = "CN",
email = "", telephoneCode = "86",
ffpAirline = "", mobile = pList[3],
ffpNo = "", email = "",
favorPaxIdDtoList = new List<FavorPaxIdDtoList>() { ffpAirline = "",
ffpNo = "",
favorPaxIdDtoList = new List<FavorPaxIdDtoList>() {
new FavorPaxIdDtoList() { new FavorPaxIdDtoList() {
id="", id="",
favorPaxId="", favorPaxId="",
...@@ -445,64 +453,67 @@ if (CmdHelper.CMD_MODEL == 2) ...@@ -445,64 +453,67 @@ if (CmdHelper.CMD_MODEL == 2)
paxIDType="" paxIDType=""
} }
}, },
paxType = "" paxType = ""
}; };
passengerList.Add(passenger); passengerList.Add(passenger);
}
} }
} }
}
#endregion #endregion
if (flightList.Count == flights.Length && passengerList.Count == passengers.Length) if (flightList.Count == flights.Length && passengerList.Count == passengers.Length)
{ {
var flightAllName = string.Empty; var flightAllName = string.Empty;
var passNames = string.Empty; var passNames = string.Empty;
flightList.ForEach(x => { flightList.ForEach(x =>
if (flightList.IndexOf(x) != flightList.Count - 1 || flightList.IndexOf(x)==0) flightAllName += "/" + x.DepartCity; {
if (flightList.IndexOf(x) == flightList.Count - 1) flightAllName += "/" + x.ArriveCity; if (flightList.IndexOf(x) != flightList.Count - 1 || flightList.IndexOf(x) == 0) flightAllName += "/" + x.DepartCity;
}); if (flightList.IndexOf(x) == flightList.Count - 1) flightAllName += "/" + x.ArriveCity;
passengerList.ForEach(x => { });
passNames += "/" + x.paxNameFirst + x.paxNameLast; passengerList.ForEach(x =>
}); {
Console.WriteLine($"刷票需求识别成功,本次行程为:{flightAllName.Remove(0,1)} {flightList.Count}段航程,本次乘客为:{passNames.Remove(0, 1)} {passengerList.Count}位乘客"); passNames += "/" + x.paxNameFirst + x.paxNameLast;
CmdHelper.FLIGHTS = flightList; });
CmdHelper.PASSENGETS = passengerList; Console.WriteLine($"刷票需求识别成功,本次行程为:{flightAllName.Remove(0, 1)} {flightList.Count}段航程,本次乘客为:{passNames.Remove(0, 1)} {passengerList.Count}位乘客");
break; CmdHelper.FLIGHTS = flightList;
} CmdHelper.PASSENGETS = passengerList;
break;
}
Console.WriteLine("命令有误,请检查后重新提交"); Console.WriteLine("命令有误,请检查后重新提交");
}
} }
Console.WriteLine("");
} }
Console.WriteLine("");
} }
} #endregion
#endregion
#region 初始化机场信息 #region 初始化机场信息
CmdHelper.FLIGHTS.ForEach(x => CmdHelper.FLIGHTS.ForEach(x =>
{ {
var cityDept = CityService.GetCityHandler(x.DepartCity); var cityDept = CityService.GetCityHandler(x.DepartCity);
var cityArr = CityService.GetCityHandler(x.ArriveCity); var cityArr = CityService.GetCityHandler(x.ArriveCity);
x.depCityCode = cityDept.cityCode; x.depCityCode = cityDept.cityCode;
x.depCode = cityDept.value; x.depCode = cityDept.value;
x.arrCityCode = cityArr.cityCode; x.arrCityCode = cityArr.cityCode;
x.arrCode = cityArr.value; x.arrCode = cityArr.value;
}); });
#endregion #endregion
//Task.Run(() => new FlightFlow().StartAsync()); //Task.Run(() => new FlightFlow().StartAsync());
if (CmdHelper.AIRLINE.Contains("E")) if (CmdHelper.AIRLINE.Contains("E"))
{ {
Task.Factory.StartNew(() => new FlightFlow().StartAsync(), TaskHelper.cancelTokenSource.Token); Task.Factory.StartNew(() => new FlightFlow().StartAsync(), TaskHelper.cancelTokenSource.Token);
} }
if (CmdHelper.AIRLINE.Contains("C")) if (CmdHelper.AIRLINE.Contains("C"))
{ {
Console.WriteLine("暂不支持国航机票嗅探"); Console.WriteLine("暂不支持国航机票嗅探");
} }
Console.ReadLine(); Console.ReadLine();
Environment.Exit(0); Environment.Exit(0);
\ No newline at end of file }
\ No newline at end of file
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
......
...@@ -8,9 +8,12 @@ using System.Collections.Generic; ...@@ -8,9 +8,12 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace TicketSpider.Spiders.EasterLineRule namespace TicketSpider.Spiders.EasterLineRule
......
...@@ -4,6 +4,7 @@ using System; ...@@ -4,6 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using TicketSpider.Model; using TicketSpider.Model;
......
...@@ -4,8 +4,10 @@ using System; ...@@ -4,8 +4,10 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using TicketSpider.Data; using TicketSpider.Data;
using TicketSpider.Uitls; using TicketSpider.Uitls;
...@@ -73,23 +75,23 @@ namespace TicketSpider.Spiders.EasterLineRule ...@@ -73,23 +75,23 @@ namespace TicketSpider.Spiders.EasterLineRule
{ {
Console.WriteLine("未找到机票"); Console.WriteLine("未找到机票");
var newCookies = result.cookies.Split(';',StringSplitOptions.RemoveEmptyEntries); //var newCookies = result.cookies.Split(';',StringSplitOptions.RemoveEmptyEntries);
if (newCookies.Any()) //if (newCookies.Any())
{ //{
var uri = new Uri("https://www.ceair.com"); // var uri = new Uri("https://www.ceair.com");
foreach (var cookie in newCookies) // foreach (var cookie in newCookies)
{ // {
var haveCookies = cookieContainer.GetAllCookies().Where(x => x.Name == cookie.Split("=")[0]); // var haveCookies = cookieContainer.GetAllCookies().Where(x => x.Name == cookie.Split("=")[0]);
if (haveCookies.Any()) // if (haveCookies.Any())
{ // {
haveCookies.First().Value = cookie.Split("=")[1]; // haveCookies.First().Value = cookie.Split("=")[1];
} // }
else // else
{ // {
cookieContainer.SetCookies(uri, cookie); // cookieContainer.SetCookies(uri, cookie);
} // }
} // }
} //}
//TODO 切换代理 //TODO 切换代理
} }
......
...@@ -4,7 +4,9 @@ using System; ...@@ -4,7 +4,9 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using TicketSpider.Model; using TicketSpider.Model;
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace TicketSpider.Uitls namespace TicketSpider.Uitls
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment