using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OASystem.Domain.Dtos.CRM; using OASystem.Domain.Dtos.QiYeWeChat; using OASystem.Domain.Entities.Groups; using OASystem.Domain.Entities.Resource; using OASystem.Domain.Enums; using OpenAI.GPT3.ObjectModels; using SqlSugar; using System.Data; using System.Net; using System.Text.RegularExpressions; using static QRCoder.PayloadGenerator; using System.Windows.Forms; using Microsoft.Data.SqlClient; using OASystem.Domain.Entities.Customer; using Aspose.Words; using Bookmark = Aspose.Words.Bookmark; using OASystem.Domain.ViewModels.QiYeWeChat; using NPOI.SS.UserModel; using System.Collections; namespace OpWin { public partial class Home : Form { static List soure = null; const string OA2023DB = "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;"; SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig() { ConfigId = DBEnum.OA2023DB, ConnectionString = OA2023DB, DbType = SqlSugar.DbType.SqlServer, IsAutoCloseConnection = true }); public Home() { InitializeComponent(); } string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; private void Home_Load(object sender, EventArgs e) { comb_Delegation.ValueMember = "Id"; comb_Delegation.DisplayMember = "TeamName"; soure = Db.Queryable().Where(x=>x.IsDel == 0).ToList(); comb_Delegation.Items.AddRange(soure.ToArray()); comb_Delegation.DropDownHeight = 200; } private void btnOutput_Click(object sender, EventArgs e) { lblOutputResult.Text = "文件正在导出..."; lblOutputResult.ForeColor = Color.Black; //数据源 List _travelList = new List(); int diid = 0; try { var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo); diid = dele.Id; } catch (Exception) { lblOutputResult.Text = "请选择正确的团组!"; lblOutputResult.ForeColor = Color.Black; MessageBox.Show("请选择正确的团组!"); return; } DataTable dtBlack = null; try { dtBlack = GetTableByBlackCode(diid); } catch (Exception) { lblOutputResult.Text = "机票黑屏代码有误!"; lblOutputResult.ForeColor = Color.Black; MessageBox.Show("机票黑屏代码有误!"); return; } Grp_DelegationInfo di = Db.Queryable().First(x => x.Id == diid && x.IsDel == 0); if (di == null) { lblOutputResult.Text = "请选择正确的团组!"; lblOutputResult.ForeColor = Color.Black; MessageBox.Show("请选择正确的团组!"); return; } string CityStr1 = ""; List countriesList = new List(); List cityList = new List(); string countriesIntroduction = ""; string cityIntroduction = ""; string timeDifference = ""; string currExchangeRate = ""; string txt_itemPrepare = ""; string txt_specialReminder = ""; string txt_cGPrecautions = ""; string txt_yGCG = ""; string txt_conduct = ""; string txt_commonEnglish = ""; if (dtBlack == null && (dtBlack.Rows[0]["Day"] == null || dtBlack.Rows[0]["Day"].ToString() == "")) { //提示 //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString()); } else { //创建三字码示例 Res_ThreeCode t = new Res_ThreeCode(); //城市缓存 string city = ""; //出访城市 for (int i = 0; i < dtBlack.Rows.Count; i++) { if ((i + 1) < dtBlack.Rows.Count && dtBlack.Rows[i]["Three"].ToString() == dtBlack.Rows[i + 1]["Three"].ToString()) { continue; } if (dtBlack.Rows.Count > 0 && (dtBlack.Rows[i]["Three"].ToString() != null && dtBlack.Rows[i]["Three"].ToString() != "")) { //出发城市 string cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(0, 3); t = Db.Queryable().First(x => x.Three == cityTemp && x.IsDel == 0 ); if (t != null) { city = city + "/" + t.City; } else { city = city + "/【" + cityTemp + "未收录,请联系机票同事录入】"; } if (i == dtBlack.Rows.Count - 1) { //抵达城市 cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(3, 3); t = Db.Queryable().First(x => x.Three == cityTemp && x.IsDel == 0); if (t != null) { city = city + "/" + t.City; } else { city = city + "/【" + cityTemp + "未收录,请联系机票同事录入】"; } } } } if (city != "" && city != null) { string[] cityStr2 = city.Split('/'); string[] strs = cityStr2.Distinct().ToArray(); ; string str = ""; foreach (var s in strs) { str += s + "/"; } str = str.TrimStart('/'); str = str.TrimEnd('/'); //lblTourCity.Text = "去重前:" + city.TrimStart('/') + "\n 去重后:" + str; CityStr1 = city.TrimStart('/'); } //opitineraryService opitservice = new opitineraryService(); ////城市不为空 //if (!string.IsNullOrEmpty(city)) //{ // cityList = city.TrimStart('/').Split('/').ToList(); // if (cityList.Count > 1) // { // cityList.RemoveAt(0); // } // opitinerarydata cityData = opitservice.getDaFirstData(cityList[0]); // cityIntroduction = cityData.Introduction; // timeDifference = cityData.TimeDifference; // currExchangeRate = cityData.CurrExchangeRate.ToString(); //} ////国家不为空 //if (!string.IsNullOrEmpty(di.VisitCountry)) //{ // countriesList = di.VisitCountry.Split(' ').ToList(); // opitinerarydata Country = opitservice.getDaFirstData(countriesList[0]); // countriesIntroduction = Country.Introduction == null ? "" : Country.Introduction; //} ////取出固定标语 //opitineraryfixed fixedData = opitservice.getFiFirstData(); ////if (!string.IsNullOrEmpty(fixedData.Tid.ToString())) ////{ ////} //txt_cGPrecautions = fixedData.CGPrecautions; //txt_commonEnglish = fixedData.CommonEnglish; //txt_conduct = fixedData.Conduct; //txt_itemPrepare = fixedData.ItemPrepare; //txt_specialReminder = fixedData.SpecialReminder; //txt_yGCG = fixedData.YGCG; // 行程repeater if (GetByDiid(diid).Count > 0) { _travelList = GetByDiid(diid).Where(x => x.Issel == 1 && x.IsDel == 0).ToList(); } else { //生成该时间段日期 List timeList = GetTimeListByDataTable(dtBlack); if (timeList != null) { string[] str = new string[timeList.Count]; //rpData.DataSource = str; //rpData.DataBind(); } } } //创建数据源Table DataTable dtSource = new DataTable(); dtSource.Columns.Add("Days", typeof(string)); dtSource.Columns.Add("Date", typeof(string)); dtSource.Columns.Add("Week", typeof(string)); dtSource.Columns.Add("Traffic", typeof(string)); dtSource.Columns.Add("Trip", typeof(string)); //获取数据,放到datatable foreach (var item in _travelList) { DataRow dr = dtSource.NewRow(); dr["Days"] = item.Days; dr["Date"] = item.Date; dr["Week"] = item.WeekDay; dr["Traffic"] = item.Traffic_First + "\r\n" + item.Traffic_Second; if (item.Trip.Replace("(此地区为黄热病地区,请注意打疫苗)", "").Length < 15) { item.Trip += @" 08:00 早餐于酒店; 09:00 公务活动; 10:30 公务活动; 12:00 午餐于当地餐厅; 14:00 公务活动; 16:00 公务活动; 18:00 晚餐于当地餐厅; 19:00 入住酒店休息;"; } dr["Trip"] = item.Trip; dtSource.Rows.Add(dr); } //lblTeamName.Text = di.TourCode; //lblVisitDays.Text = di.VisitDays.ToString(); //lblVisitDays2.Text = di.VisitDays.ToString(); //lblPNumber.Text = di.VisitPNumber.ToString(); //lblGroup.Text = di.TeamName.ToString(); Dictionary dic = new Dictionary(); dic.Add("Dele", di.TeamName.ToString() + GetNum(di.VisitDays.ToString())); dic.Add("City", CityStr1); dic.Add("Days", di.VisitDays.ToString()); dic.Add("DeleCode", di.TourCode); dic.Add("Pnum", di.VisitPNumber.ToString()); dic.Add("Pnum2", di.VisitPNumber.ToString()); List leader = GetByDiidClient(di.Id); if (leader != null && leader.Count > 0) { dic.Add("Leader", GetByDiidClient(di.Id)[0].LastName + GetByDiidClient(di.Id)[0].FirstName); } else { dic.Add("Leader", ""); } dic.Add("Pnum3", di.VisitPNumber.ToString()); int UserId = 253; dic.Add("OP", ""); dic.Add("OPTel", ""); //dic.Add("OP", "OP姓名"); //dic.Add("OPTel", "OP手机号码"); string countriesStr = ""; countriesList.ForEach(s => countriesStr += s + "、"); countriesStr = countriesStr.TrimEnd('、'); string cityStr = ""; cityList.ForEach(s => cityStr += s + "、"); cityStr = cityStr.TrimEnd('、'); //下方数据 dic.Add("selCountries", countriesStr == null ? "" : countriesStr); dic.Add("selCity", cityStr == null ? "" : cityStr); dic.Add("countriesIntroduction", countriesIntroduction == null ? "" : countriesIntroduction); dic.Add("CityIntroduction", cityIntroduction == null ? "" : cityIntroduction); dic.Add("timeDifference", timeDifference == null ? "" : timeDifference); dic.Add("currExchangeRate", currExchangeRate == null ? "" : currExchangeRate); dic.Add("temperature", ""); dic.Add("txt_itemPrepare", txt_itemPrepare == null ? "" : txt_itemPrepare); dic.Add("txt_specialReminder", txt_specialReminder == null ? "" : txt_specialReminder); dic.Add("txt_cGPrecautions", txt_cGPrecautions == null ? "" : txt_cGPrecautions); dic.Add("txt_yGCG", txt_yGCG == null ? "" : txt_yGCG); dic.Add("txt_conduct", txt_conduct == null ? "" : txt_conduct); dic.Add("txt_commonEnglish", txt_commonEnglish == null ? "" : txt_commonEnglish); //模板路径 string tempPath = @"C:\日行程3.docx"; //载入模板 Document doc = null; DocumentBuilder builder = null; try { //载入模板 doc = new Document(tempPath); builder = new DocumentBuilder(doc); } catch (Exception) { //载入模板 doc = new Document(@"D:\日行程3.docx"); builder = new DocumentBuilder(doc); } foreach (var key in dic.Keys) { Bookmark bookmark = doc.Range.Bookmarks[key]; if (bookmark != null) { builder.MoveToBookmark(key); builder.Write(dic[key]); } } //获取word里所有表格 NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); //获取所填表格的序数 Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table; try { //循环赋值 for (int i = 0; i < dtSource.Rows.Count; i++) { builder.MoveToCell(0, i + 1, 0, 0); builder.Write(dtSource.Rows[i]["Days"].ToString()); builder.MoveToCell(0, i + 1, 1, 0); builder.Write(dtSource.Rows[i]["Date"].ToString() + "\r\n" + dtSource.Rows[i]["Week"].ToString()); builder.MoveToCell(0, i + 1, 2, 0); builder.Write(dtSource.Rows[i]["Traffic"].ToString()); var trip = dtSource.Rows[i]["Trip"].ToString(); builder.MoveToCell(0, i + 1, 3, 0); builder.Write(trip); var cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 1, true); var paragraphs = cell.GetChildNodes(NodeType.Paragraph, true); // 获取特定索引的段落 Paragraph paragraph = (Paragraph)paragraphs[0]; Run run = paragraph.Runs[0]; Aspose.Words.Font font = run.Font; font.Name = "黑体"; //设置双休红色 cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true); paragraphs = cell.GetChildNodes(NodeType.Paragraph, true); paragraph = (Paragraph)paragraphs[1]; if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日")) { run = paragraph.Runs[0]; font = run.Font; font.Color = Color.Red; } } } catch (Exception ex) { } //删除多余行 while (tableOne.Rows.Count > 1 + dtSource.Rows.Count) { tableOne.Rows.RemoveAt(1 + dtSource.Rows.Count);//(1+dtSource.Rows.Count + 1)-1 } string savePath = "C:\\OP行程单\\"; if (!Directory.Exists(savePath)) { try { Directory.CreateDirectory(savePath); } catch { } } string strFileName = savePath + di.TeamName + "出访日程.docx"; try { doc.Save(strFileName, Aspose.Words.SaveFormat.Doc); lblOutputResult.Text = "文件导出完成"; lblOutputResult.ForeColor = Color.Green; System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName); } catch (Exception) { lblOutputResult.Text = "请重试!"; lblOutputResult.ForeColor = Color.Green; } //doc.Save(HttpUtility.UrlEncode(strFileName, Encoding.UTF8), Aspose.Words.SaveFormat.Doc, Aspose.Words.SaveType.OpenInWord, Response); } private void btnImport_Click(object sender, EventArgs e) { lblImport.Text = ""; lblImport.Text = "正在导入数据"; int comb_Diid = 0; try { var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo); comb_Diid = dele.Id; } catch (Exception) { lblImport.Text = "请正确的选择团组!"; lblImport.ForeColor = Color.Black; MessageBox.Show("请正确的选择团组!"); return; } int UserId = 253; //下拉框团组对象实例 //Grp_DelegationInfo di = dis.GetDelegationInfoByID(comb_Diid); Grp_DelegationInfo di = Db.Queryable().First(x => x.Id == comb_Diid && x.IsDel == 0); if (di == null) { lblImport.Text = "请正确的选择团组!"; lblImport.ForeColor = Color.Black; MessageBox.Show("请正确的选择团组!"); return; } DataTable dt = null; try { //获取机票黑屏代码信息,生成datatable表 dt = GetTableByBlackCode(di.Id); } catch (Exception) { lblImport.Text = "请正确的选择团组!"; lblImport.ForeColor = Color.Black; MessageBox.Show("机票黑屏代码有误!"); return; } Del(di.Id); //通过datatable表里的第一个字段的信息来判断是否有黑屏代码 //没有则提示未录入 if (dt.Rows[0]["Day"] == null || dt.Rows[0]["Day"].ToString() == "") { //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString()); lblImport.Text = "黑屏代码未录入"; } else//成功获取黑屏代码 { //根据黑屏代码生成日期段 List timeList = GetTimeListByDataTable(dt); //本团车导地接信息 //List listctg = ctgs.GetCarTouristGuideGroundReservationsByDIID(di.Id); List listctg = Db.Queryable().Where(x => x.DiId == di.Id && x.IsDel == 0).ToList(); //本团酒店信息 //List listht = htrs.GetByDIId(di.Id); List listht = Db.Queryable().Where(x => x.DiId == di.Id && x.IsDel == 0).ToList(); //本团行程单数据 //List listTravel = tls.GetByDiid(di.Id); List listTravel = Db.Queryable().Where(x => x.Diid == di.Id && x.IsDel == 0).ToList(); try { if (listTravel != null && listTravel.Count > 0)//若本团已存行程,则合并/更新;同时因为机票行程的变化或行程详情的变化,会导致行程更改 { if (timeList.Count > listTravel.Count)//1.改版后黑屏代码天数>已存在行程的天数 { //1.1替换日期和星期 for (int i = 0; i < listTravel.Count; i++) { //日期转换星期 string weekday = weekdays[(int)new DateTime( Convert.ToInt32(timeList[i].Split('-')[0]), Convert.ToInt32(timeList[i].Split('-')[1]), Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek]; // 日期去掉0 string monthStr = "Unknown", dayStr = "Unknown"; if (!string.IsNullOrEmpty(timeList[i])) { DateTime dateTime = new DateTime(); bool convertResult = DateTime.TryParse(timeList[i], out dateTime); if (convertResult) { monthStr = dateTime.Month.ToString(); dayStr = dateTime.Day.ToString(); } } //日期 listTravel[i].Date = monthStr + "月" + dayStr + "日"; //listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日"; listTravel[i].WeekDay = weekday; listTravel[i].CreateUserId = UserId; listTravel[i].CreateTime = GetBeijingTime(); listTravel[i].IsDel = 0; //tls.EditTravelList(listTravel[i]); Db.Updateable(listTravel[i]).ExecuteCommand(); } //1.2添加未有行程 //航班号标识 //string flightcode_Sign = ""; //三字码标识 //string citycode_Sign = ""; #region 城市数据 20210823 贾文滔 List CityInDateList = GetCityByDataTable(dt); #endregion //生成行程 for (int i = listTravel.Count; i < timeList.Count; i++) { //实、例化一个temp Grp_TravelList tlTemp = new Grp_TravelList(); //团号 tlTemp.Diid = di.Id; //天数序号 tlTemp.Days = i + 1; //日期 tlTemp.Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日"; //日期转换星期 string weekday = weekdays[(int)new DateTime( Convert.ToInt32(timeList[i].Split('-')[0]), Convert.ToInt32(timeList[i].Split('-')[1]), Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek]; tlTemp.WeekDay = weekday; //行程 string trip = ""; //历经城市 string city = ""; #region 机票数据 //根据航班信息推出抵达机场的位置信息 string AirPort = ""; //根据航班时间前后推进入机场或离开机场的时间 string GoAirportTime = "", leaveAirPortTime = ""; //飞机标识 bool airSign = false; //查询该日期下的航班信息 //resultRows字段顺序为:航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间,整理后的起飞日期,整理后的到达日期 DataRow[] resultRows = dt.Select("Day like '%" + timeList[i] + "%'"); if (resultRows.Count() > 0) { //修改标识 airSign = true; } //同一天只有一条数据走正常判定 if (resultRows.Count() == 1) { #region 三字码 string _citycode = resultRows[0]["Three"].ToString(); //起飞城市三字码 Res_ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 Res_ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = getByThree(font_citycode); //验证是否存在三字码 if (font_threecode == null) { city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一"; font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + font_threecode.City; font_Airport = font_threecode.AirPort; font_City = font_threecode.City; ; } back_threecode = getByThree(end_citycode); if (back_threecode == null) { city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一"; back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + back_threecode.City; //部分黄热病国家,需要提醒打疫苗 string result = GetCountryInfo(back_threecode.Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } back_Airport = back_threecode.AirPort; back_City = back_threecode.City; //查询酒店路线要用 AirPort = back_threecode.AirPort; } //行程里加入城市 #endregion #region 信息准备 trip = city.TrimStart('/'); //起飞航站楼 string _StartBuilding = resultRows[0]["StartBuilding"].ToString(); //转机航站楼 string _EndBuilding = resultRows[0]["EndBuilding"].ToString(); //起飞时刻 string _startTime = resultRows[0]["StartTime"].ToString(); //飞行时刻 string _flightTime = resultRows[0]["FlightTime"].ToString(); _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟"; //到达时刻 string _endTime = resultRows[0]["EndTime"].ToString(); //航班号 string _flightcode = resultRows[0]["Fliagtcode"].ToString(); //航司 //Res_AirCompany aircompany = acs.getByShortCode(_flightcode.Substring(0, 2)); Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2)); string _aircompany_Name = ""; if (aircompany == null) { _aircompany_Name = "【此航司" + resultRows[0]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】"; } else { _aircompany_Name = aircompany.CnName; } //机型判断 string airModel = resultRows[0]["AirModel"].ToString(); airModel = GetLonger(airModel.Substring(0, 1)) + airModel; #endregion #region trip编辑 //若本行抵达时间包含"+1",则本行为母版行,仅提示登机 if (resultRows[0]["Sign"].ToString() == "0" && _endTime.Contains("+")) { //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "", mins = ""; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); min = min - Convert.ToInt32(mins); if (min < 0) { min = min + 60; hour = hour - 1; } if (hours != "") { hour = hour - Convert.ToInt32(hours); } if (hour < 0) { hour = hour + 24; } CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "", mins = ""; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min - Convert.ToInt32(mins); if (min < 0) { min = min + 60; hour = hour - 1; } if (hours != "") { hour = hour + Convert.ToInt32(hours); } if (hour < 0) { hour = hour + 24; } CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } //行程 trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"; //标记本行为母版行 //flightcode_Sign = resultRows[0]["Fliagtcode"].ToString(); //citycode_Sign = resultRows[0]["Three"].ToString(); } //与前一行航班号,三字码相同且本行抵达时间不包含"+1",则本行是被生成的重复行,仅提示抵达 else if (resultRows[0]["Sign"].ToString() == "1") /* && (!_endTime.Contains("+"))&&(_flightcode == flightcode_Sign)&&(_citycode == citycode_Sign)*/ { //行程 trip = trip + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; //根据航班信息推算离开机场的时间 int temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); if (i == timeList.Count - 1)//如果本日是行程的最后一天,则提醒“行程圆满结束” { trip = trip + " ,圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { //trip += pushTrip(leaveAirPortTime, back_Airport, city,out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + " 搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); } //正常提示 else { //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //根据航班信息推算离开机场的时间 temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "0", mins = "0"; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour - Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "0", mins = "0"; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour + Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); } #endregion } //同一天多条数据走分类讨论 else { for (int n = 0; n < resultRows.Count(); n++) { city = ""; #region 三字码 string _citycode = resultRows[n]["Three"].ToString(); //起飞城市三字码 Res_ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 Res_ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = getByThree(font_citycode); //验证是否存在三字码 if (font_threecode == null) { city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一"; font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + font_threecode.City; font_Airport = font_threecode.AirPort; font_City = font_threecode.City; ; } back_threecode = getByThree(end_citycode); if (back_threecode == null) { city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一"; back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + back_threecode.City; //部分黄热病国家,需要提醒打疫苗 string result = GetCountryInfo(back_threecode.Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } back_Airport = back_threecode.AirPort; back_City = back_threecode.City; //查询酒店路线要用 AirPort = back_threecode.AirPort; } //行程里加入城市 if (trip == "") { trip = city.TrimStart('/'); } else { trip = trip + "\r\n" + city.TrimStart('/'); } //起飞航站楼 string _StartBuilding = resultRows[n]["StartBuilding"].ToString(); //转机航站楼 string _EndBuilding = resultRows[n]["EndBuilding"].ToString(); //起飞时刻 string _startTime = resultRows[n]["StartTime"].ToString(); //飞行时刻 string _flightTime = resultRows[n]["FlightTime"].ToString(); _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟"; //到达时刻 string _endTime = resultRows[n]["EndTime"].ToString(); //航班号 string _flightcode = resultRows[n]["Fliagtcode"].ToString(); //航司 Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2)); string _aircompany_Name = ""; if (aircompany == null) { _aircompany_Name = "【此航司" + resultRows[n]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】"; } else { _aircompany_Name = aircompany.CnName; } //机型判断 string airModel = resultRows[n]["AirModel"].ToString(); airModel = GetLonger(airModel.Substring(0, 1)) + airModel; #endregion //Sign字段为标识,string类型,含义:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码 //目前存在两种情况:同一天的多条数据标识为“0->0”或“1->0” //如下示例 //Day ArrivedDate Sign //10 10 0 //10 11 0 //11 11 1 //11 12 0 //12 12 1 if (n == 0) { //原生机票代码 if (resultRows[n]["Sign"].ToString() == "0") { #region trip编辑 //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "0", mins = "0"; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour - Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "0", mins = "0"; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour + Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;"; #endregion } //"+1"生成的机票代码 else if (resultRows[n]["Sign"].ToString() == "1") { #region trip编辑 //行程 trip = trip + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;"; #endregion } } else if (n > 0) { //若前行是原生的,则本行判定为转机 if (resultRows[n - 1]["Sign"].ToString() == "0") { #region trip编辑 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 1;//一般提前提前2小时 if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; //若为最后一行,则计算后备等时间 if (n == resultRows.Count() - 1) { //根据航班信息推算离开机场的时间 temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); } #endregion } //若前行是生成的,则本行判定为新出发 else if (resultRows[n - 1]["Sign"].ToString() == "1") { #region trip编辑 //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //根据航班信息推算离开机场的时间 temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "0", mins = "0"; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour - Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "0", mins = "0"; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour + Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); #endregion } } } } #endregion #region 行程和城市赋值 if (trip == "" || trip == " " || city == "" || city == " ") { //city = CityInDateList.Find(cid => cid.Date == timeList[i]).City; city = CityInDateList[i].City; //部分黄热病国家,需要提醒打疫苗 string result = GetCountryInfo(getByCity(city)[0].Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } trip = city; } #endregion #region 公务 20210820 贾文滔 string OATemp = "";//暂存公务活动 //根据团号和日期获取公务数据 List listoa = getByDiidAndDate(comb_Diid, timeList[i]); //若listoa存在公务数据,进行排序,再进行导入 if (listoa != null && listoa.Count > 0) { //利用datatable存放公务活动数据 DataTable OA_DataTable = new DataTable(); OA_DataTable.Columns.Add("StartTime", typeof(string)); //activity开始时刻 OA_DataTable.Columns.Add("EndTime", typeof(string)); //activity结束时刻 OA_DataTable.Columns.Add("Client", typeof(string)); //activity单位 OA_DataTable.Columns.Add("Address", typeof(string)); //activity地址 OA_DataTable.Columns.Add("Contact", typeof(string)); //activity联系人 OA_DataTable.Columns.Add("Tel", typeof(string)); //activity联系人电话 OA_DataTable.Columns.Add("Dresscode", typeof(string)); //activity着装要求 OA_DataTable.Columns.Add("isTranslate", typeof(bool));//是否需要翻译人员 OA_DataTable.Columns.Add("Language", typeof(string));//是否需要翻译人员 //处理公务数据 for (int b = 0; b < listoa.Count; b++) { //起止时间 string[] time = new string[2]; if (listoa[b].Time.Contains('—')) { time = listoa[b].Time.Split('—'); } else if (listoa[b].Time.Contains('-')) { time = listoa[b].Time.Split('-'); } //添加数据 if (time.Length >= 2) { OA_DataTable.Rows.Add(time[0], time[1], listoa[b].Client, listoa[b].Address, listoa[b].Contact, listoa[b].Tel, listoa[b].Dresscode, listoa[b].IsNeedTrans, listoa[b].Language); } else { //PublicCode.GetAlertMsg(this, GetType(), timeList[i] + "的公务数据有误,请检查"); } } //排序 OA_DataTable.DefaultView.Sort = "StartTime asc"; OA_DataTable = OA_DataTable.DefaultView.ToTable(); //导入信息 for (int index = 0; index < OA_DataTable.Rows.Count; index++) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { if (OATemp != "") { OATemp = OATemp + "\r\n" + OA_DataTable.Rows[index]["StartTime"].ToString() + "-" + OA_DataTable.Rows[index]["EndTime"].ToString() + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString() + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString() + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString() + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString() + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString() + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员") + ",议题:-"; } else { OATemp = OA_DataTable.Rows[index]["StartTime"].ToString() + "-" + OA_DataTable.Rows[index]["EndTime"].ToString() + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString() + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString() + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString() + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString() + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString() + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员") + ",议题:-"; } } else { //导入公务 trip = trip + "\r\n" + OA_DataTable.Rows[index]["StartTime"].ToString() + "-" + OA_DataTable.Rows[index]["EndTime"].ToString() + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString() + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString() + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString() + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString() + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString() + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员") + ",议题:-"; } //当天第一个公务或许都是从酒店出发,因此可计算酒店到公务地址的距离和时间 if (index == 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = null; if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString()); if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } else { trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = h.HotelAddress; gtemp.EndAddress = OA_DataTable.Rows[0]["Address"].ToString(); gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)"; } else { trip = trip + "。 (谷歌接口异常,无法测算路程时间)"; } } } } } #endregion } //第二个公务是由中午的餐厅前往公务地址,具有随机性,因此不计算此方向距离时间;但可计算由公务地址回酒店的信息 else { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = null; if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = GetDirectionByGoogleApi(OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress); if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } else { trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = OA_DataTable.Rows[0]["Address"].ToString(); gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)"; } else { trip = trip + "。 (谷歌接口异常,无法测算路程时间)"; } } } } } #endregion } } } #endregion #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))//不去“》=”的原因是行程最后一天一般不会有酒店 { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { trip = trip + "\r\n" + leaveAirPortTime + " 乘车前往酒店:(" + g.Distance + "," + g.Time + ")"; //计算“抵达酒店办理入住手续”的时间 string CheckInHotelTime; //处理时间格式 string hours = "", mins = ""; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + Convert.ToInt32(mins); if (min > 59) { min = min - 60; hour = hour + 1; } if (hours != "") { hour = hour + Convert.ToInt32(hours); } if (hour > 23) { hour = hour - 24; } CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckInHotelTime + " 抵达酒店办理入住手续"; } else { try { JObject Result = GetDirectionByGoogleApi(AirPort, h.HotelAddress); trip = trip + "\r\n" + leaveAirPortTime + " 乘车前往酒店:(" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; //计算“抵达酒店办理入住手续”的时间 string CheckInHotelTime; //处理时间格式 string Gtime = "", hours = "", mins = ""; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + Convert.ToInt32(mins); if (min > 59) { min = min - 60; hour = hour + 1; } if (hours != "") { hour = hour + Convert.ToInt32(hours); } if (hour > 23) { hour = hour - 24; } CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckInHotelTime + " 抵达酒店办理入住手续"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " (谷歌接口异常,无法测算的路程时间)"; } } } trip = trip + "\r\n" + " 酒店名称:" + h.HotelName + "\r\n" + " 酒店地址:" + h.HotelAddress + "\r\n" + " 酒店电话:" + h.HotelTel + " 酒店传真:" + (h.HotelFax == "" ? "-" : h.HotelFax); if (i == 0 && !string.IsNullOrEmpty(OATemp)) { trip = trip + "\r\n" + OATemp; } } } #endregion #region 当天交通工具赋值 //一般行程第一天都是先乘坐飞机后乘坐汽车 if (i == 0) { tlTemp.Traffic_First = "飞机"; tlTemp.Traffic_Second = "汽车"; } else { // 根据车导地接表数据判断交通工具:汽车 List ListCar = listctg.FindAll(c => Convert.ToDateTime(c.ServiceStartTime) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(c.ServiceEndTime) >= Convert.ToDateTime(timeList[i])); //交通工具:汽车 if (ListCar.Count > 0) { tlTemp.Traffic_First = "汽车"; //交通工具:飞机 if (airSign == true) { tlTemp.Traffic_Second = "飞机"; } else { tlTemp.Traffic_Second = ""; } } else { tlTemp.Traffic_First = "汽车"; //交通工具:飞机 if (airSign == true) { tlTemp.Traffic_Second = "飞机"; } else { tlTemp.Traffic_Second = ""; } } } #endregion tlTemp.Trip = trip; tlTemp.CreateUserId = di.Id; tlTemp.CreateTime = GetBeijingTime(); tlTemp.Issel = 1; tlTemp.Diffgroup = 1; tlTemp.IsDel = 0; AddTravelList(tlTemp); } } else if (timeList.Count < listTravel.Count)//2改版天数<原版天数 { //2.1替换日期 for (int i = 0; i < timeList.Count; i++) { //日期转换星期 string weekday = weekdays[(int)new DateTime( Convert.ToInt32(timeList[i].Split('-')[0]), Convert.ToInt32(timeList[i].Split('-')[1]), Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek]; //日期去掉0 string monthStr = "Unknown", dayStr = "Unknown"; if (!string.IsNullOrEmpty(timeList[i])) { DateTime dateTime = new DateTime(); bool convertResult = DateTime.TryParse(timeList[i], out dateTime); if (convertResult) { monthStr = dateTime.Month.ToString(); dayStr = dateTime.Day.ToString(); } } //日期 listTravel[i].Date = monthStr + "月" + dayStr + "日"; //listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日"; listTravel[i].WeekDay = weekday; listTravel[i].CreateUserId = UserId; listTravel[i].CreateTime = GetBeijingTime(); listTravel[i].IsDel = 0; EditTravelList(listTravel[i]); } //2.2删除多余行程 DelOld(comb_Diid, listTravel[timeList.Count - 1].Id, listTravel[listTravel.Count - 1].Id); } else//3改版天数=原版天数 { //3.1替换日期 for (int i = 0; i < timeList.Count; i++) { //日期去掉0 string monthStr = "Unknown", dayStr = "Unknown"; if (!string.IsNullOrEmpty(timeList[i])) { DateTime dateTime = new DateTime(); bool convertResult = DateTime.TryParse(timeList[i], out dateTime); if (convertResult) { monthStr = dateTime.Month.ToString(); dayStr = dateTime.Day.ToString(); } } //日期 listTravel[i].Date = monthStr + "月" + dayStr + "日"; //日期转换星期 string weekday = weekdays[(int)new DateTime( Convert.ToInt32(timeList[i].Split('-')[0]), Convert.ToInt32(timeList[i].Split('-')[1]), Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek]; listTravel[i].WeekDay = weekday; listTravel[i].CreateUserId = UserId; listTravel[i].CreateTime = GetBeijingTime(); listTravel[i].IsDel = 0; EditTravelList(listTravel[i]); } } } else //若本团不存行程,则生成行程。 包含机票、酒店、车导地接等数据 { //航班号标识 //string flightcode_Sign = ""; //三字码标识 //string citycode_Sign = ""; #region 城市数据 20210823 贾文滔 List CityInDateList = GetCityByDataTable(dt); #endregion //生成行程 for (int i = 0; i < timeList.Count; i++) { //实、例化一个temp Grp_TravelList tlTemp = new Grp_TravelList(); //团号 tlTemp.Diid = di.Id; //天数序号 tlTemp.Days = i + 1; //日期去掉0 var datetime1 = timeList[i]; string monthStr = "Unknown", dayStr = "Unknown"; if (!string.IsNullOrEmpty(datetime1)) { DateTime dateTime = new DateTime(); bool convertResult = DateTime.TryParse(datetime1, out dateTime); if (convertResult) { monthStr = dateTime.Month.ToString(); dayStr = dateTime.Day.ToString(); } } //日期 tlTemp.Date = monthStr + "月" + dayStr + "日"; //日期 //tlTemp.Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日"; //日期转换星期 string weekday = weekdays[(int)new DateTime( Convert.ToInt32(timeList[i].Split('-')[0]), Convert.ToInt32(timeList[i].Split('-')[1]), Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek]; tlTemp.WeekDay = weekday; //行程 string trip = ""; //历经城市 string city = ""; #region 机票数据 //根据航班信息推出抵达机场的位置信息 string AirPort = ""; //根据航班时间前后推进入机场或离开机场的时间 string GoAirportTime = "", leaveAirPortTime = ""; //飞机标识 bool airSign = false; //查询该日期下的航班信息 //resultRows字段顺序为:航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间,整理后的起飞日期,整理后的到达日期 DataRow[] resultRows = dt.Select("Day like '%" + timeList[i] + "%'"); if (resultRows.Count() > 0) { //修改标识 airSign = true; } //同一天只有一条数据走正常判定 if (resultRows.Count() == 1) { #region 三字码 string _citycode = resultRows[0]["Three"].ToString(); //起飞城市三字码 Res_ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 Res_ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = getByThree(font_citycode); //验证是否存在三字码 if (font_threecode == null) { city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一"; font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + font_threecode.City; font_Airport = font_threecode.AirPort; font_City = font_threecode.City; ; } back_threecode = getByThree(end_citycode); if (back_threecode == null) { city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一"; back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + back_threecode.City; //部分黄热病国家,需要提醒打疫苗 string result = GetCountryInfo(back_threecode.Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } back_Airport = back_threecode.AirPort; back_City = back_threecode.City; //查询酒店路线要用 AirPort = back_threecode.AirPort; } //行程里加入城市 #endregion #region 信息准备 trip = city.TrimStart('/'); //起飞航站楼 string _StartBuilding = resultRows[0]["StartBuilding"].ToString(); //转机航站楼 string _EndBuilding = resultRows[0]["EndBuilding"].ToString(); //起飞时刻 string _startTime = resultRows[0]["StartTime"].ToString(); //飞行时刻 string _flightTime = resultRows[0]["FlightTime"].ToString(); _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟"; //到达时刻 string _endTime = resultRows[0]["EndTime"].ToString(); //航班号 string _flightcode = resultRows[0]["Fliagtcode"].ToString(); //航司 Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2)); string _aircompany_Name = ""; if (aircompany == null) { _aircompany_Name = "【此航司" + resultRows[0]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】"; } else { _aircompany_Name = aircompany.CnName; } //机型判断 string airModel = resultRows[0]["AirModel"].ToString(); airModel = GetLonger(airModel.Substring(0, 1)) + airModel; #endregion #region trip编辑 //若本行抵达时间包含"+1",则本行为母版行,仅提示登机 if (resultRows[0]["Sign"].ToString() == "0" && _endTime.Contains("+")) { //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "", mins = ""; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); min = min - Convert.ToInt32(mins); if (min < 0) { min = min + 60; hour = hour - 1; } if (hours != "") { hour = hour - Convert.ToInt32(hours); } if (hour < 0) { hour = hour + 24; } CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "", mins = ""; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min - Convert.ToInt32(mins); if (min < 0) { min = min + 60; hour = hour - 1; } if (hours != "") { hour = hour + Convert.ToInt32(hours); } if (hour < 0) { hour = hour + 24; } CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } //行程 trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"; //标记本行为母版行 //flightcode_Sign = resultRows[0]["Fliagtcode"].ToString(); //citycode_Sign = resultRows[0]["Three"].ToString(); } //与前一行航班号,三字码相同且本行抵达时间不包含"+1",则本行是被生成的重复行,仅提示抵达 else if (resultRows[0]["Sign"].ToString() == "1") /* && (!_endTime.Contains("+"))&&(_flightcode == flightcode_Sign)&&(_citycode == citycode_Sign)*/ { //行程 trip = trip + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; //根据航班信息推算离开机场的时间 int temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); if (i == timeList.Count - 1)//如果本日是行程的最后一天,则提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); } //正常提示 else { //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //根据航班信息推算离开机场的时间 temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "0", mins = "0"; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour - Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "0", mins = "0"; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour + Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + gtemp.Distance + "," + gtemp.Time + ")"; } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + "\r\n" + leaveAirPortTime + " 搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); } #endregion } //同一天多条数据走分类讨论 else { for (int n = 0; n < resultRows.Count(); n++) { city = ""; #region 三字码 string _citycode = resultRows[n]["Three"].ToString(); //起飞城市三字码 Res_ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 Res_ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = getByThree(font_citycode); //验证是否存在三字码 if (font_threecode == null) { city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一"; font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + font_threecode.City; font_Airport = font_threecode.AirPort; font_City = font_threecode.City; ; } back_threecode = getByThree(end_citycode); if (back_threecode == null) { city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一"; back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】"; } else { city = city + "/" + back_threecode.City; //部分黄热病国家,需要提醒打疫苗 string result = GetCountryInfo(back_threecode.Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } back_Airport = back_threecode.AirPort; back_City = back_threecode.City; //查询酒店路线要用 AirPort = back_threecode.AirPort; } //行程里加入城市 if (trip == "") { trip = city.TrimStart('/'); } else { trip = trip + "\r\n" + city.TrimStart('/'); } //起飞航站楼 string _StartBuilding = resultRows[n]["StartBuilding"].ToString(); //转机航站楼 string _EndBuilding = resultRows[n]["EndBuilding"].ToString(); //起飞时刻 string _startTime = resultRows[n]["StartTime"].ToString(); //飞行时刻 string _flightTime = resultRows[n]["FlightTime"].ToString(); _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟"; //到达时刻 string _endTime = resultRows[n]["EndTime"].ToString(); //航班号 string _flightcode = resultRows[n]["Fliagtcode"].ToString(); //航司 Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2)); string _aircompany_Name = ""; if (aircompany == null) { _aircompany_Name = "【此航司" + resultRows[n]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】"; } else { _aircompany_Name = aircompany.CnName; } //机型判断 string airModel = resultRows[n]["AirModel"].ToString(); airModel = GetLonger(airModel.Substring(0, 1)) + airModel; #endregion //Sign字段为标识,string类型,含义:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码 //目前存在两种情况:同一天的多条数据标识为“0->0”或“1->0” //如下示例 //Day ArrivedDate Sign //10 10 0 //10 11 0 //11 11 1 //11 12 0 //12 12 1 if (n == 0) { //原生机票代码 if (resultRows[n]["Sign"].ToString() == "0") { #region trip编辑 //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "0", mins = "0"; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour - Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "0", mins = "0"; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour + Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;"; #endregion } //"+1"生成的机票代码 else if (resultRows[n]["Sign"].ToString() == "1") { #region trip编辑 //行程 trip = trip + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;"; #endregion } } else if (n > 0) { //若前行是原生的,则本行判定为转机 if (resultRows[n - 1]["Sign"].ToString() == "0") { #region trip编辑 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 1;//一般提前提前2小时 if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; //若为最后一行,则计算后备等时间 if (n == resultRows.Count() - 1) { //根据航班信息推算离开机场的时间 temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); } #endregion } //若前行是生成的,则本行判定为新出发 else if (resultRows[n - 1]["Sign"].ToString() == "1") { #region trip编辑 //根据航班信息推算进入机场的时间 int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时 string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时 if (result.Contains("2")) { temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时 } if (temp < 0) { temp = temp + 24; } GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2); //根据航班信息推算离开机场的时间 temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1; leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2); //第一天之后的行程可以加上“酒店出发到机场”的距离和时间 if (i > 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { //计算“酒店到机场”的时间 string CheckoutHotelTime; //处理时间格式 string hours = "0", mins = "0"; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2)); int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour - Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport); //计算“抵达酒店办理入住手续”的时间 string CheckoutHotelTime; //处理时间格式 string Gtime = "", hours = "0", mins = "0"; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); _min = _min - Convert.ToInt32(mins); if (_min < 0) { _min = _min + 60; _hour = _hour - 1; } if (hours != "") { _hour = _hour + Convert.ToInt32(hours); } if (_hour < 0) { _hour = _hour + 24; } CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString(); CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString()); trip = trip + "\r\n" + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)"; } } } } } #endregion } trip = trip + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:" + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";" + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");" + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李"; if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束” { trip = trip + ",圆满结束此次访问之行!"; } else //如果本日不是行程的最后一天,正常提醒 { trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime); trip = trip + ";\r\n" + leaveAirPortTime + " 搭乘专车前往酒店,抵达后办理入住;"; } //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻 int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + 10; if (min > 59) { min = min - 60; hour = hour + 1; } if (hour > 23) { hour = hour - 24; } leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); #endregion } } } } #endregion #region 行程和城市赋值 if (trip == "" || trip == " " || city == "" || city == " ") { city = CityInDateList.Find(cid => cid.Date == timeList[i]).City; //部分黄热病国家,需要提醒打疫苗 string result = GetCountryInfo(getByCity(city)[0].Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } trip = city; } #endregion #region 公务 20210820 贾文滔 string OATemp = "";//暂存公务活动 //根据团号和日期获取公务数据 List listoa = getByDiidAndDate(comb_Diid, timeList[i]); //若listoa存在公务数据,进行排序,再进行导入 if (listoa != null && listoa.Count > 0) { //利用datatable存放公务活动数据 DataTable OA_DataTable = new DataTable(); OA_DataTable.Columns.Add("StartTime", typeof(string)); //activity开始时刻 OA_DataTable.Columns.Add("EndTime", typeof(string)); //activity结束时刻 OA_DataTable.Columns.Add("Client", typeof(string)); //activity单位 OA_DataTable.Columns.Add("Address", typeof(string)); //activity地址 OA_DataTable.Columns.Add("Contact", typeof(string)); //activity联系人 OA_DataTable.Columns.Add("Tel", typeof(string)); //activity联系人电话 OA_DataTable.Columns.Add("Dresscode", typeof(string)); //activity着装要求 OA_DataTable.Columns.Add("isTranslate", typeof(bool));//是否需要翻译人员 OA_DataTable.Columns.Add("Language", typeof(string));//是否需要翻译人员 //处理公务数据 for (int b = 0; b < listoa.Count; b++) { //起止时间 string[] time = new string[2]; if (listoa[b].Time.Contains('—')) { time = listoa[b].Time.Split('—'); } else if (listoa[b].Time.Contains('-')) { time = listoa[b].Time.Split('-'); } //添加数据 if (time.Length >= 2) { OA_DataTable.Rows.Add(time[0], time[1], listoa[b].Client, listoa[b].Address, listoa[b].Contact, listoa[b].Tel, listoa[b].Dresscode, listoa[b].IsNeedTrans, listoa[b].Language); } else { //PublicCode.GetAlertMsg(this, GetType(), timeList[i] + "的公务数据有误,请检查"); } } //排序 OA_DataTable.DefaultView.Sort = "StartTime asc"; OA_DataTable = OA_DataTable.DefaultView.ToTable(); //导入信息 for (int index = 0; index < OA_DataTable.Rows.Count; index++) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { if (OATemp != "") { OATemp = OATemp + "\r\n" + OA_DataTable.Rows[index]["StartTime"].ToString() + "-" + OA_DataTable.Rows[index]["EndTime"].ToString() + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString() + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString() + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString() + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString() + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString() + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员") + ",议题:-"; } else { OATemp = OA_DataTable.Rows[index]["StartTime"].ToString() + "-" + OA_DataTable.Rows[index]["EndTime"].ToString() + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString() + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString() + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString() + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString() + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString() + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员") + ",议题:-"; } } else { //导入公务 trip = trip + "\r\n" + OA_DataTable.Rows[index]["StartTime"].ToString() + "-" + OA_DataTable.Rows[index]["EndTime"].ToString() + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString() + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString() + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString() + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString() + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString() + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员") + ",议题:-"; } //当天第一个公务或许都是从酒店出发,因此可计算酒店到公务地址的距离和时间 if (index == 0) { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = null; if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = GetDirectionByGoogleApi(h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString()); if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } else { trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = h.HotelAddress; gtemp.EndAddress = OA_DataTable.Rows[0]["Address"].ToString(); gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)"; } else { trip = trip + "。 (谷歌接口异常,无法测算路程时间)"; } } } } } #endregion } //第二个公务是由中午的餐厅前往公务地址,具有随机性,因此不计算此方向距离时间;但可计算由公务地址回酒店的信息 else { #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = null; if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = GetDirectionByGoogleApi(OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress); if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } else { trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; } GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = OA_DataTable.Rows[0]["Address"].ToString(); gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)"; } else { trip = trip + "。 (谷歌接口异常,无法测算路程时间)"; } } } } } #endregion } } } #endregion #region 酒店 foreach (var h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))//不去“》=”的原因是行程最后一天一般不会有酒店 { //利用谷歌API计算路线 if (AirPort != "") { GoogleMapApiResult g = null; if (g != null) { trip = trip + "\r\n" + leaveAirPortTime + " 乘车前往酒店:(" + g.Distance + "," + g.Time + ")"; //计算“抵达酒店办理入住手续”的时间 string CheckInHotelTime; //处理时间格式 string hours = "", mins = ""; if (g.Time.Contains("hour")) { g.Time = g.Time.Replace("hour", "h"); } else if (g.Time.Contains("hours")) { g.Time = g.Time.Replace("hours", "h"); } g.Time = g.Time.Replace("mins", "m"); if (g.Time.Contains("h")) { hours = g.Time.Split('h')[0].Trim(); } else if (!g.Time.Contains("h")) { mins = g.Time.Split('m')[0].Trim(); } int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); min = min + Convert.ToInt32(mins); if (min > 59) { min = min - 60; hour = hour + 1; } if (hours != "") { hour = hour + Convert.ToInt32(hours); } if (hour > 23) { hour = hour - 24; } CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckInHotelTime + " 抵达酒店办理入住手续"; } else { try { JObject Result = GetDirectionByGoogleApi(AirPort, h.HotelAddress); trip = trip + "\r\n" + leaveAirPortTime + " 乘车前往酒店:(" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "," + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")"; //计算“抵达酒店办理入住手续”的时间 string CheckInHotelTime; //处理时间格式 string Gtime = "", hours = "", mins = ""; if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h"); } else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours")) { Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h"); } Gtime = Gtime.Replace("mins", "m"); if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h")) { hours = Gtime.Split('h')[0].Trim(); } else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h")) { mins = Gtime.Split('m')[0].Trim(); } int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2)); int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2)); if (mins != "") min = min + Convert.ToInt32(mins); if (min > 59) { min = min - 60; hour = hour + 1; } if (hours != "") { hour = hour + Convert.ToInt32(hours); } if (hour > 23) { hour = hour - 24; } CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString(); CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString()); trip = trip + "\r\n" + CheckInHotelTime + " 抵达酒店办理入住手续"; GoogleMapApiResult gtemp = new GoogleMapApiResult(); gtemp.Diid = di.Id; gtemp.Date = ""; gtemp.Moment = ""; gtemp.StartAddress = AirPort; gtemp.EndAddress = h.HotelAddress; gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); //gmrs.Add(gtemp); } catch { trip = trip + "\r\n" + " (谷歌接口异常,无法测算的路程时间)"; } } } trip = trip + "\r\n" + " 酒店名称:" + h.HotelName + "\r\n" + " 酒店地址:" + h.HotelAddress + "\r\n" + " 酒店电话:" + h.HotelTel + " 酒店传真:" + (h.HotelFax == "" ? "-" : h.HotelFax); if (i == 0 && !string.IsNullOrEmpty(OATemp)) { trip = trip + "\r\n" + OATemp; } } } #endregion #region 当天交通工具赋值 //一般行程第一天都是先乘坐飞机后乘坐汽车 if (i == 0) { tlTemp.Traffic_First = "飞机"; tlTemp.Traffic_Second = "汽车"; } else { // 根据车导地接表数据判断交通工具:汽车 List ListCar = listctg.FindAll(c => Convert.ToDateTime(c.ServiceStartTime) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(c.ServiceEndTime) >= Convert.ToDateTime(timeList[i])); //交通工具:汽车 if (ListCar.Count > 0) { tlTemp.Traffic_First = "汽车"; //交通工具:飞机 if (airSign == true) { tlTemp.Traffic_Second = "飞机"; } else { tlTemp.Traffic_Second = ""; } } else { tlTemp.Traffic_First = "汽车"; //交通工具:飞机 if (airSign == true) { tlTemp.Traffic_Second = "飞机"; } else { tlTemp.Traffic_Second = ""; } } } #endregion tlTemp.Trip = trip; tlTemp.CreateUserId = di.Id; tlTemp.CreateTime = DateTime.Now; //tlTemp.OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd hh:mm:ss"); tlTemp.Issel = 1; tlTemp.Diffgroup = 1; tlTemp.IsDel = 0; AddTravelList(tlTemp); } } } catch (Exception ex) { //Response.Write(ex.Message.ToString()); lblImport.Text = ex.Message; } lblImport.Text = "数据录入完成"; } } private string pushTrip(string timeStr, string startAddress, string endAddress, out string timeOut) { startAddress = startAddress.Trim().Replace("(此地区为黄热病地区,请注意打疫苗)", ""); endAddress = endAddress.Trim().Replace("(此地区为黄热病地区,请注意打疫苗)", ""); decimal conversion = 1.61M; DateTime tripTime = DateTime.Now; try { tripTime = DateTime.Parse(timeStr).AddHours(-1); } catch (Exception e) { } endAddress = endAddress.TrimStart('/'); string CheckoutHotelTime = string.Empty; string endCity = string.Empty; if (endAddress.Contains("/")) { endCity = endAddress.Split('/')[1] + "市区"; } else { endCity = endAddress + "市区"; } string Time = string.Empty; string Distance = string.Empty; int GetGoogleResult = 0; JObject Result = null; try { Result = GetDirectionByGoogleApi(startAddress, endCity); Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString(); Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString(); if (Time.Contains("hours")) { Time = Time.Replace("hours", "小时"); } else if (Time.Contains("hour")) { Time = Time.Replace("hour", "小时"); } Time = Time.Replace("mins", "分钟"); if (Time.Contains("小时")) { GetGoogleResult = int.Parse(Regex.Split(Regex.Split(Time, "小时")[1], "分钟")[0]); } else if (Time.Contains("分钟")) { GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]); } if (Distance.Contains("mi")) { var distSp = Regex.Split(Distance, "mi"); if (distSp.Length > 0) { Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里"; } } else if (Distance.Contains("km")) { Distance = Distance.Replace("km", "公里"); } Time = Time.Replace(" ", ""); Distance = Distance.Replace(" ", ""); } catch (Exception e) { Time = "未知!"; Distance = "未知!"; } string trip = string.Empty; if (timeStr.Contains(":")) { int H = tripTime.Hour; int M = tripTime.Minute; if (H < 12) { tripTime = tripTime.AddMinutes(90); CheckoutHotelTime = tripTime.ToString("HH:mm"); trip += $"\r\n{CheckoutHotelTime} 搭乘专车前往市区"; trip += $"({startAddress} - {endCity} 路程{Distance},耗时{Time})"; if (H <= 13) { tripTime = tripTime.AddMinutes(GetGoogleResult); trip += $"\r\n{tripTime.ToString("HH:mm")} 午餐于当地餐厅;"; } } else if (H == 12 && M <= 30) { tripTime = tripTime.AddMinutes(90); CheckoutHotelTime = tripTime.ToString("HH:mm"); trip += $"\r\n{CheckoutHotelTime} 搭乘专车前往市区"; trip += $"({startAddress} - {endCity} 路程{Distance},耗时{Time})"; if (H <= 13) { tripTime = tripTime.AddMinutes(GetGoogleResult); trip += $"\r\n{tripTime.ToString("HH:mm")} 午餐于当地餐厅;"; } } else if (H >= 14) { tripTime = tripTime.AddMinutes(90); CheckoutHotelTime = tripTime.ToString("HH:mm"); trip += $"\r\n{CheckoutHotelTime} 搭乘专车前往市区;"; trip += $"({startAddress} - {endCity} 路程{Distance},耗时{Time})"; tripTime = DateTime.Parse(CheckoutHotelTime).AddMinutes(GetGoogleResult); trip += $"\r\n{tripTime.ToString("HH:mm")} 晚餐于当地餐厅;"; } } timeOut = tripTime.AddMinutes(60).ToString("HH:mm"); return trip; } /// /// 利用谷歌地图API查询国外两地之间距离 /// /// 出发地 /// 目的地 /// 返回Json格式 public JObject GetDirectionByGoogleApi(string Origin, string Destination) { string appkey = "AIzaSyBdLf8u8DinXQWVPLEkdrxOJpClXSqEnho"; string url = "https://maps.googleapis.com/maps/api/directions/json?origin=" + Origin + "&destination=" + Destination + "&key=" + appkey; JObject result = null; try { #region 利用HttpWebRequest访问API ////创建Web访问对象 //HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest; //req.Method = "GET"; //req.ContentType = "application/json"; ////创建web响应对象 //HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); ////通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 //StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); ////如果有编码问题就用这个方法 ////string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd()); ////利用StreamReader就可以从响应内容从头读到尾 //string returnJson = reader.ReadToEnd(); ////反序列化 //result = JsonConvert.DeserializeObject(returnJson) as JObject; #endregion #region 利用HttpClient访问API HttpClient myHttpClient = new HttpClient(); HttpResponseMessage response = myHttpClient.GetAsync(url).Result; //var content = response.Content.ReadAsAsync().Result; var content = response.Content.ReadAsStringAsync().Result; result = JObject.Parse(content); #endregion return result; } catch (Exception e) { string error = e.Message.ToString(); result = JsonConvert.DeserializeObject(error) as JObject; return result; } } /// ///根据机票黑屏代码整理DataTable /// /// /// public DataTable GetTableByBlackCode(int diid) { //黑屏代码信息 List listcode = Db.Queryable().Where(x => x.DiId == diid && x.IsDel == 0).ToList(); //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间 //1.3U8391 TU17NOV CTUCAI 0220 0715 T1 T2 330 10H55M DataTable dt = new DataTable(); dt.Columns.Add("Fliagtcode", typeof(string)); //航班号 dt.Columns.Add("Date", typeof(string));//起飞日期 dt.Columns.Add("Three", typeof(string));//三字码 dt.Columns.Add("StartTime", typeof(string));//起飞时刻 dt.Columns.Add("EndTime", typeof(string));//到达时刻 dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼 dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼 dt.Columns.Add("AirModel", typeof(string)); //机型 dt.Columns.Add("FlightTime", typeof(string));//飞行时间 dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据 dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期 dt.Columns.Add("Error", typeof(string));//整理的到达日期 dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码 //判断是否录入黑屏代码 if (listcode.Count() == 0 || listcode == null) { dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null); } else { //读取单段黑屏代码 for (int i = 0; i < listcode.Count; i++) { //去除序号 string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase); //去除多余空格,方法一Linq扩展方法 CodeList = CodeList.Where(str => str != "").ToArray(); CodeList = CodeList.Where(str => str != " ").ToArray(); //年 int year = Convert.ToInt32(DateTime.Now.Year.ToString()); //读取单条黑屏代码 for (int j = 0; j < CodeList.Count(); j++) { //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd(); string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); //string[] Info = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty) // .TrimStart().TrimEnd().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); //去除多余空格 Info = Info.Where(str => str != "").ToArray(); Info = Info.Where(str => str != " ").ToArray(); //判断黑屏代码是否正确拆分; 理应拆成9段 if (Info.Count() < 9) { dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null); } else { try { //月 int month = Convert.ToInt32(GetLonger(Info[1].Substring(4, 3))); //日 int day = Convert.ToInt32(Info[1].Substring(2, 2)); #region 逐一比较月份,判断是否翻年;逐一比较三字码顶真,判断是否跑错机场 if (j > 0) { string[] Temp = CodeList[j - 1].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty) .TrimStart().TrimEnd().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); Temp = Temp.Where(str => str != "").ToArray(); Temp = Temp.Where(str => str != " ").ToArray(); int monthTemp = Convert.ToInt32(GetLonger(Temp[1].Substring(4, 3))); // 如果相邻月份之差小于0,则证明次一条年份需+1 if (month - monthTemp < 0) { year = year + 1; } //如果相邻代码三字码不顶真,提醒 string FootThree = Temp[2].Substring(3, 3); string HeadThree = Info[2].Substring(0, 3); if (FootThree != HeadThree) { //DelegationInfoService s = new DelegationInfoService(); //UsersService us = new UsersService(); //GroupsTaskAssignmentService gts = new GroupsTaskAssignmentService(); //77 行程 List list2 = Db.Queryable().Where(x => x.CTId == 77 && x.DIId == diid && x.IsDel == 0).ToList(); foreach (var temp in list2) { //if (temp.UId != 21) //SendAndReturn(us.GetUsersByID(temp.UId).Email, // "黑屏代码提醒", // s.GetDelegationInfoByID(diid).TeamName + "的机票黑屏代码中,相邻航段的三字码不连续,请查看!"); } //85 机票预订 List list6 = Db.Queryable().Where(x => x.CTId == 85 && x.DIId == diid && x.IsDel == 0).ToList(); foreach (var temp in list6) { //if (temp.UId != 21) //SendAndReturn(us.GetUsersByID(temp.UId).Email, // "黑屏代码提醒", // s.GetDelegationInfoByID(diid).TeamName + "的机票黑屏代码中,相邻航段的三字码不连续,请查看!"); } } } #endregion #region 判断到达日期是否需要加1 if (Info[4].Contains("+")) { //日期+1 day = day + 1; //判断是否进入下一月 if (day > Convert.ToInt32(GetDaysByMonth(Info[1].Substring(4, 3), year))) { day = day - Convert.ToInt32(GetDaysByMonth(Info[1].Substring(4, 3), year)); month = month + 1; //判断是否进入下一年 if (month > 12) { month = month - 12; year = year + 1; } } //月份整理格式 string monthTemp = month.ToString(); if (month < 10) { monthTemp = "0" + monthTemp; } //日期整理格式 string daytemp = day.ToString(); if (day < 10) { daytemp = "0" + daytemp; } string temp = Info[4].Split('+')[0]; //添加起飞数据 dt.Rows.Add(Info[0], Info[1], Info[2], Info[3], temp, Info[5], Info[6], Info[7], Info[8], year + "-" + GetLonger(Info[1].Substring(4, 3)) + "-" + Info[1].Substring(2, 2), year + "-" + monthTemp + "-" + daytemp, "", "0"); //加1天,添加到达数据 dt.Rows.Add(Info[0], Info[1].Replace(Info[1].Substring(2, 2), daytemp), Info[2], Info[3], temp, Info[5], Info[6], Info[7], Info[8], year + "-" + monthTemp + "-" + daytemp, year + "-" + monthTemp + "-" + daytemp, "", "1"); } else { //月份整理格式 string monthTemp = month.ToString(); if (month < 10) { monthTemp = "0" + monthTemp; } //日期整理格式 string daytemp = day.ToString(); if (day < 10) { daytemp = "0" + daytemp; } dt.Rows.Add(Info[0], Info[1], Info[2], Info[3], Info[4], Info[5], Info[6], Info[7], Info[8], year + "-" + monthTemp + "-" + daytemp, year + "-" + monthTemp + "-" + daytemp, "", "0"); } #endregion } catch (Exception ex) { string exstr = ex.Message.ToString(); } } } //排序 dt.DefaultView.Sort = "Day asc"; dt = dt.DefaultView.ToTable(); } } return dt; } /// /// 根据星期,月份的缩写,转换成数字或者全称 /// 根据币种中文名称返回币种代码 /// 根据数字返回机型型号【2、3开头的就是空客,比如空客320,7开头的就是波音,比如波音777】 /// 20210903贾文滔 /// /// /// /// public string GetLonger(string temp) { string str = ""; switch (temp.ToUpper()) { case "美元": str = "USD"; break; case "日元": str = "JPY"; break; case "英镑": str = "GBP"; break; case "欧元": str = "EUR"; break; case "港币": str = "HKD"; break; case "MO": str = "星期一"; break; case "TU": str = "星期二"; break; case "WE": str = "星期三"; break; case "TH": str = "星期四"; break; case "FR": str = "星期五"; break; case "SA": str = "星期六"; break; case "SU": str = "星期天"; break; case "JAN": str = "01"; break; case "FEB": str = "02"; break; case "MAR": str = "03"; break; case "APR": str = "04"; break; case "MAY": str = "05"; break; case "JUN": str = "06"; break; case "JUL": str = "07"; break; case "AUG": str = "08"; break; case "SEP": str = "09"; break; case "OCT": str = "10"; break; case "NOV": str = "11"; break; case "DEC": str = "12"; break; case "MONDAY": str = "星期一"; break; case "TUESDAY": str = "星期二"; break; case "WEDNESDAY": str = "星期三"; break; case "THURSDAY": str = "星期四"; break; case "FRIDAY": str = "星期五"; break; case "SATURDAY": str = "星期六"; break; case "SUNDAY": str = "星期日"; break; case "01": str = "JAN"; break; case "02": str = "FEB"; break; case "03": str = "MAR"; break; case "04": str = "APR"; break; case "05": str = "MAY"; break; case "06": str = "JUN"; break; case "07": str = "JUL"; break; case "08": str = "AUG"; break; case "09": str = "SEP"; break; case "10": str = "OCT"; break; case "11": str = "NOV"; break; case "12": str = "DEC"; break; case "2": str = "空客A"; break; case "3": str = "空客A"; break; case "7": str = "波音"; break; } return str; } /// /// 1、查询该国家礼拜日是否为周五周六;系统标红礼拜日为这两天 /// 2、查询该国家是否位于美国或者欧洲;需要提前3小时到机场 /// 3、查询该国家是否为黄热病地区;系统提醒一下要打疫苗 /// 20210824 贾文滔 /// /// 查询国家 /// 返回结果:1为礼拜日查询;2为欧洲或美国查询;3为黄热病地区查询 public string GetCountryInfo(string Country) { //礼拜日为周5、6的城市地区;系统标红礼拜日为这两天 string[] CountryOne = {"阿联酋","United Arab Emirates","巴林","Bahrain","卡塔尔","Qatar","沙特阿拉伯","Saudi Arabia","阿曼","Oman","科威特","Kuwait","埃及","Egypt", "约旦","Jordan","伊朗","Iran","伊拉克","Iraq","叙利亚","Syria","黎巴嫩","Lebanon","巴勒斯坦","Palestine","加沙","也门","Yemen"}; //欧洲或美国;需要提前3小时到机场 string[] CountryTwo = {"芬兰","瑞典","挪威","冰岛","丹麦","法罗群岛(丹)","爱沙尼亚","拉脱维亚","立陶宛","白俄罗斯","俄罗斯","乌克兰","摩尔多瓦","波兰","捷克","斯洛伐克", "匈牙利","德国","奥地利","瑞士","列支敦士登","英国","爱尔兰","荷兰","比利时","卢森堡","法国","摩纳哥","罗马尼亚","保加利亚","塞尔维亚","马其顿", "阿尔巴尼亚","希腊","斯洛文尼亚","克罗地亚","波斯尼亚和墨塞哥维那","意大利","梵蒂冈","圣马力诺","马耳他","西班牙","葡萄牙","安道尔","美国" }; //黄热病;系统提醒一下要打疫苗 string[] CountryThree = {"安哥拉","布隆迪","贝宁","布基纳法索","喀麦隆","中非共和国","乍得","刚果","赤道几内亚","埃塞俄比亚","冈比亚","加蓬","几内亚","几内亚比绍", "加纳","象牙海岸","科特迪瓦","肯尼亚","利比里亚","马里","尼日尔","尼日利亚","塞内加尔","塞拉利昂","苏丹","南苏丹","多哥","乌干达","毛里塔尼亚", "刚果民主共和国","玻利维亚","巴西","厄瓜多尔","苏里南","秘鲁","法属圭亚那","法属圭巴拿马","委内瑞拉","巴拉圭","阿根廷","特立尼达和多巴哥" }; string result = ""; if (CountryOne.Contains(Country)) result += "1"; if (CountryTwo.Contains(Country)) result += "2"; if (CountryThree.Contains(Country)) result += "3"; return result; } /// /// 20210816 /// 根据datatable生成某一时间段的日期 /// /// 黑屏代码生成的datatable /// public List GetTimeListByDataTable(DataTable dt) { if (dt.Rows[0]["Day"].ToString() != "") { DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString()); DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString()); List timeList = new List(); while (datestart <= dateend) { timeList.Add(datestart.ToString("yyyy-MM-dd")); datestart = datestart.AddDays(1); } return timeList; } return null; } /// /// 返回网络时间 --北京时间 /// /// public DateTime GetBeijingTime() { WebRequest request = null; WebResponse response = null; WebHeaderCollection headerCollection = null; string datetime = string.Empty; try { request = WebRequest.Create("https://www.baidu.com"); request.Timeout = 3000; request.Credentials = CredentialCache.DefaultCredentials; response = request.GetResponse(); headerCollection = response.Headers; foreach (var h in headerCollection.AllKeys) { if (h == "Date") { datetime = headerCollection[h]; } } return Convert.ToDateTime(datetime); } catch (Exception) { return DateTime.Now; } finally { if (request != null) { request.Abort(); } if (response != null) { response.Close(); } if (headerCollection != null) { headerCollection.Clear(); } } } /// /// 根据月份返回天数 /// /// /// public static string GetDaysByMonth(string Month, int year) { string str = ""; //判断是否是闰年 if (DateTime.IsLeapYear(year) == false) { switch (Month.ToUpper()) { case "JAN": str = "31"; break; case "FEB": str = "28"; break; case "MAR": str = "31"; break; case "APR": str = "30"; break; case "MAY": str = "31"; break; case "JUN": str = "30"; break; case "JUL": str = "31"; break; case "AUG": str = "31"; break; case "SEP": str = "30"; break; case "OCT": str = "31"; break; case "NOV": str = "30"; break; case "DEC": str = "31"; break; case "01": str = "31"; break; case "02": str = "28"; break; case "03": str = "31"; break; case "04": str = "30"; break; case "05": str = "31"; break; case "06": str = "30"; break; case "07": str = "31"; break; case "08": str = "31"; break; case "09": str = "30"; break; case "10": str = "31"; break; case "11": str = "30"; break; case "12": str = "31"; break; } } else { switch (Month.ToUpper()) { case "JAN": str = "31"; break; case "FEB": str = "29"; break; case "MAR": str = "31"; break; case "APR": str = "30"; break; case "MAY": str = "31"; break; case "JUN": str = "30"; break; case "JUL": str = "31"; break; case "AUG": str = "31"; break; case "SEP": str = "30"; break; case "OCT": str = "31"; break; case "NOV": str = "30"; break; case "DEC": str = "31"; break; case "01": str = "31"; break; case "02": str = "29"; break; case "03": str = "31"; break; case "04": str = "30"; break; case "05": str = "31"; break; case "06": str = "30"; break; case "07": str = "31"; break; case "08": str = "31"; break; case "09": str = "30"; break; case "10": str = "31"; break; case "11": str = "30"; break; case "12": str = "31"; break; } } return str; } /// /// 城市日期,PublicCode内部类 /// public class CityInDate { public int Id { get; set; } //城市 public string City { get; set; } //日期 public string Date { get; set; } } /// /// 20210823 /// 根据datatable生成行程里每一天所在的城市 /// /// 黑屏代码生成的datatable /// public List GetCityByDataTable(DataTable dt) { //城市日期键值对 List list = new List(); //ThreeCodeServices tcs = new ThreeCodeServices(); int id = 0; for (int i = 1; i < dt.Rows.Count; i++) { //i-1行的三字码 string Pre_citycode = dt.Rows[i - 1]["Three"].ToString(); if (string.IsNullOrWhiteSpace(Pre_citycode)) { continue; } Pre_citycode = Pre_citycode.Replace("/", string.Empty).Substring(3, 3); string city = ""; //查询该三字码所对应城市的数据 //ThreeCode Pre_TC = tcs.getByThree(Pre_citycode); Res_ThreeCode Pre_TC = Db.Queryable().First(x => x.Three.ToUpper() == Pre_citycode.ToUpper() && x.IsDel == 0 ); //验证是否存在三字码 if (Pre_TC == null) city = "【此三字码" + Pre_citycode + "未收录,请机票同事录入】"; else city = Pre_TC.City; //生成日期 DateTime datestart = Convert.ToDateTime(dt.Rows[i - 1]["Day"].ToString()); DateTime dateend = Convert.ToDateTime(dt.Rows[i]["Day"].ToString()); List timeList = new List(); while (datestart < dateend) { timeList.Add(datestart.ToString("yyyy-MM-dd")); datestart = datestart.AddDays(1); } if (i == dt.Rows.Count - 1) timeList.Add(dt.Rows[i]["Day"].ToString()); for (int j = 0; j < timeList.Count; j++) { CityInDate cid = new CityInDate() { }; cid.Id = id; cid.City = city; cid.Date = timeList[j]; list.Add(cid); id++; } } return list; } Res_ThreeCode getByThree(string three) { return Db.Queryable().First(x => x.Three == three && x.IsDel == 0 ); } Res_AirCompany getByShortCode(string ShortCode) { //return this.excuteType("select * from AirCompany where Isdel=0 and ShortCode=@ShortCode", new SqlParameter("@ShortCode", ShortCode.ToUpper())); return Db.Queryable().First(x => x.ShortCode.ToUpper() == ShortCode.ToUpper() && x.IsDel == 0); } public class GoogleMapApiResult { int id; /// /// 标识 /// public int Id { get => id; set => id = value; } int diid; /// /// 团组ID /// public int Diid { get => diid; set => diid = value; } string date; /// /// 日期 /// public string Date { get => date; set => date = value; } string moment; /// /// 时刻 /// public string Moment { get => moment; set => moment = value; } string startAddress; /// /// 出发地址 /// public string StartAddress { get => startAddress; set => startAddress = value; } string endAddress; /// /// 到达地址 /// public string EndAddress { get => endAddress; set => endAddress = value; } string time; /// /// 耗时 /// public string Time { get => time; set => time = value; } string distance; /// /// 距离 /// public string Distance { get => distance; set => distance = value; } } List getByCity(string city) { //return this.excuteSql("select * from ThreeCode w" + // "here Isdel=0 and City='" + city + "'"); return Db.Queryable().Where(x => x.City == city && x.IsDel == 0).ToList(); } public List getByDiidAndDate(int diid, string date) { //return excuteSql("select * from OfficialActivities where Isdel=0" + // " and Diid=@diid and IsSubmitApproval=0 and Date=@Date " + // "order by Date", new SqlParameter("@diid", diid), // new SqlParameter("@Date", date)); return Db.Queryable().Where(x => x.IsDel == 0 && x.DiId == diid && x.Date == date).ToList(); } bool AddTravelList(Grp_TravelList data) { return Db.Insertable(data).ExecuteCommand() > 0; } bool EditTravelList(Grp_TravelList hd) { //string sql = "update TravelList set Diid=@Diid,Days = @Days,Date = @Date,WeekDay = @WeekDay,Traffic_First = @Traffic_First," // + "Traffic_Second = @Traffic_Second,Trip = @Trip,OPer = @OPer,OPdate = @OPdate,Isdel = @Isdel where Id = @Id"; //SqlParameter[] parameter = new SqlParameter[]{ // new SqlParameter("@Diid",hd.Diid), // new SqlParameter("@Days",hd.Days), // new SqlParameter("@Date",hd.Date), // new SqlParameter("@WeekDay",hd.WeekDay), // new SqlParameter("@Traffic_First",hd.Traffic_First), // new SqlParameter("@Traffic_Second",hd.Traffic_Second), // new SqlParameter("@Trip",hd.Trip), // new SqlParameter("@OPer",hd.OPer), // new SqlParameter("@OPdate",hd.OPdate), // new SqlParameter("@Isdel",hd.Isdel), // new SqlParameter("@Id",hd.Id) //}; //if (SqlHelper.ExecuteNonQuery(sql, CommandType.Text, parameter) > 0) // return true; //return false; return Db.Updateable(hd).ExecuteCommand() > 0; } bool DelOld(int Diid, int start, int end) { //if (SqlHelper.ExecuteNonQuery("delete from TravelList where Diid=" + Diid + " and ( Id>=" + start + " and Id<=" + end + ")", CommandType.Text) > 0) // return true; //return false; return Db.Deleteable().Where(x => x.Diid == Diid && x.Id >= start && x.Id <= end).ExecuteCommand() > 0; } /// /// 根据团组编号查询信息 /// /// 返回空或者对象信息 List GetByDiid(int Diid) { //调用获取单个对象的方法 return Db.Queryable().Where(x => x.Diid == Diid && x.IsDel == 0).ToList(); } public List GetByDiidClient(int DIID) { return Db.Queryable().Where(x => x.DiId == DIID && x.IsDel == 0).ToList(); } /// /// 根据大写数字返回小写数字或根据小写数字返回大写数字 /// /// /// public string GetNum(string num) { string str = ""; switch (num) { case "1": str = "一"; break; case "2": str = "二"; break; case "3": str = "三"; break; case "4": str = "四"; break; case "5": str = "五"; break; case "6": str = "六"; break; case "7": str = "七"; break; case "8": str = "八"; break; case "9": str = "九"; break; case "10": str = "十"; break; case "11": str = "十一"; break; case "12": str = "十二"; break; case "一": str = "1"; break; case "二": str = "2"; break; case "三": str = "3"; break; case "四": str = "4"; break; case "五": str = "5"; break; case "六": str = "6"; break; case "七": str = "7"; break; case "八": str = "8"; break; case "九": str = "9"; break; case "十": str = "10"; break; case "十一": str = "11"; break; case "十二": str = "12"; break; } return str; } public bool Del(int diid) { return Db.Updateable().Where(x => x.Diid == diid && x.IsDel == 0).SetColumns(x => new Grp_TravelList { IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd") }).ExecuteCommand() > 0; } private void comb_Delegation_TextUpdate(object sender, EventArgs e) { ComboBox cb = (ComboBox)sender; cb.DataSource = null; cb.Items.Clear(); string s = cb.Text; var bindList = soure.Where(item => item.TeamName != null && item.TeamName.Contains(s)).ToList(); if (bindList.Count >= 1) // 存在符合条件的内容 { this.comb_Delegation.Items.AddRange(bindList.ToArray()); } else { this.comb_Delegation.Items.Add(new Grp_DelegationInfo { TeamName = "", Id = -1 }); } cb.SelectionStart = cb.Text.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列 cb.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置 cb.MaxDropDownItems = 8; // 自动弹出下拉框 } private void comb_Delegation_MouseClick(object sender, MouseEventArgs e) { comb_Delegation.Text = ""; comb_Delegation_TextUpdate(sender, e); comb_Delegation.DropDownHeight = 200; comb_Delegation.DroppedDown = true; } } }