using Aspose.Words; using Aspose.Words.Tables; using DAL; using Models; using Newtonsoft.Json.Linq; using OA2014.publicCode; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; using System.Web.UI.WebControls.WebParts; using System.Web.Util; using System.Windows.Forms; using System.Xml.Linq; namespace WinTools { public partial class OPTravelListOutput : Form { //团组信息DAL DelegationInfoService dis = new DelegationInfoService(); //三字码DAL ThreeCodeServices tcs = new ThreeCodeServices(); //航司缩写DAL AirCompanyServcies acs = new AirCompanyServcies(); //车导地接DAL CarTouristGuideGroundReservationsService ctgs = new CarTouristGuideGroundReservationsService(); //车导地接详情DAL CarTouristGuideGroundReservationsContentService ctgss = new CarTouristGuideGroundReservationsContentService(); //公务 OfficialActivitiesService oas = new OfficialActivitiesService(); //酒店信息DAL HotelReservationsService htrs = new HotelReservationsService(); //行程详情DAL TravelDetailsService tds = new TravelDetailsService(); //行程单DAL TravelListService tls = new TravelListService(); //谷歌地图接口结果DAL GoogleMapApiResultService gmrs = new GoogleMapApiResultService(); string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; public OPTravelListOutput() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { comb_Delegation.ValueMember = "Id"; comb_Delegation.DisplayMember = "TeamName"; comb_Delegation.DataSource = dis.GetAll(); } private void btnOutput_Click(object sender, EventArgs e) { lblOutputResult.Text = "文件正在导出..."; lblOutputResult.ForeColor = Color.Black; //数据源 List _travelList = new List(); int diid = (int)comb_Delegation.SelectedValue; DataTable dtBlack = PublicCode.GetTableByBlackCode(diid); DelegationInfo di = dis.GetDelegationInfoByID(diid); 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 { //创建三字码示例 ThreeCode t = new 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 = tcs.getByThree(cityTemp); 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 = tcs.getByThree(cityTemp); 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 (tls.GetByDiid(diid).Count > 0) { _travelList = tls.GetByDiid(diid).Where(x => x.issel == 1).ToList(); } else { //生成该时间段日期 List timeList = PublicCode.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() + PublicCode.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 = new DeleClientService().GetByDiid(di.Id); if (leader != null && leader.Count > 0) { dic.Add("Leader", new DeleClientService().GetByDiid(di.Id)[0].LastName + new DeleClientService().GetByDiid(di.Id)[0].Name); } else { dic.Add("Leader", ""); } dic.Add("Pnum3", di.VisitPNumber.ToString()); int UserId = int.Parse(ConfigurationManager.AppSettings["OPId"]); dic.Add("OP", new UsersService().GetUsersByID(UserId).CnName); dic.Add("OPTel", new UsersService().GetUsersByID(UserId).Phone); //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 = ConfigurationManager.AppSettings["TravelListDocSavePath"]; 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 = (int)comb_Delegation.SelectedValue; int UserId = int.Parse(ConfigurationManager.AppSettings["OPId"]); //下拉框团组对象实例 DelegationInfo di = dis.GetDelegationInfoByID(comb_Diid); //获取机票黑屏代码信息,生成datatable表 DataTable dt = PublicCode.GetTableByBlackCode(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 = PublicCode.GetTimeListByDataTable(dt); //本团车导地接信息 List listctg = ctgs.GetCarTouristGuideGroundReservationsByDIID(di.Id); //本团酒店信息 List listht = htrs.GetByDIId(di.Id); //本团行程单数据 List listTravel = tls.GetByDiid(di.Id); 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].OPer = UserId; listTravel[i].OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss"); listTravel[i].Isdel = 0; tls.EditTravelList(listTravel[i]); } //1.2添加未有行程 //航班号标识 //string flightcode_Sign = ""; //三字码标识 //string citycode_Sign = ""; #region 城市数据 20210823 贾文滔 List CityInDateList = PublicCode.GetCityByDataTable(dt); #endregion //生成行程 for (int i = listTravel.Count; i < timeList.Count; i++) { //实、例化一个temp Models.TravelList tlTemp = new Models.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(); //起飞城市三字码 ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = tcs.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 = tcs.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 = PublicCode.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(); //航司 AirCompany aircompany = acs.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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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(); //起飞城市三字码 ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = tcs.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 = tcs.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 = PublicCode.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(); //航司 AirCompany aircompany = acs.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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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 = PublicCode.GetCountryInfo(tcs.getByCity(city)[0].Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } trip = city; } #endregion #region 公务 20210820 贾文滔 string OATemp = "";//暂存公务活动 //根据团号和日期获取公务数据 List listoa = oas.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 (HotelReservations h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString()); if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = PublicCode.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 (HotelReservations h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress); if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, AirPort, h.HotelAddress); 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 = PublicCode.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.OPer = di.Id; tlTemp.OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss"); tlTemp.issel = 1; tlTemp.diffgroup = 1; tlTemp.Isdel = 0; tls.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].OPer = UserId; listTravel[i].OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss"); listTravel[i].Isdel = 0; tls.EditTravelList(listTravel[i]); } //2.2删除多余行程 tls.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].OPer = UserId; listTravel[i].OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss"); listTravel[i].Isdel = 0; tls.EditTravelList(listTravel[i]); } } } else //若本团不存行程,则生成行程。 包含机票、酒店、车导地接等数据 { //航班号标识 //string flightcode_Sign = ""; //三字码标识 //string citycode_Sign = ""; #region 城市数据 20210823 贾文滔 List CityInDateList = PublicCode.GetCityByDataTable(dt); #endregion //生成行程 for (int i = 0; i < timeList.Count; i++) { //实、例化一个temp Models.TravelList tlTemp = new Models.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(); //起飞城市三字码 ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = tcs.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 = tcs.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 = PublicCode.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(); //航司 AirCompany aircompany = acs.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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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(); //起飞城市三字码 ThreeCode font_threecode = null; string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3); //抵达城市 string font_City = ""; //起飞城市机场 string font_Airport = ""; //抵达城市三字码 ThreeCode back_threecode = null; string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3); //抵达城市机场 string back_Airport = ""; //抵达城市 string back_City = ""; font_threecode = tcs.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 = tcs.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 = PublicCode.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(); //航司 AirCompany aircompany = acs.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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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 = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport); 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 = PublicCode.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 = PublicCode.GetCountryInfo(tcs.getByCity(city)[0].Country); if (result.Contains("3")) { city += "(此地区为黄热病地区,请注意打疫苗)"; } trip = city; } #endregion #region 公务 20210820 贾文滔 string OATemp = "";//暂存公务活动 //根据团号和日期获取公务数据 List listoa = oas.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 (HotelReservations h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString()); if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = PublicCode.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 (HotelReservations h in listht) { if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i]) && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i])) { //利用谷歌API计算路线 GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress); if (g != null) { if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里 { OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")"; } else { trip = trip + "。 (" + g.Distance + "," + g.Time + ")"; } } else { try { JObject Result = PublicCode.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 (HotelReservations 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 = gmrs.GetByDiidAddress(di.Id, AirPort, h.HotelAddress); 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 = PublicCode.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.OPer = di.Id; tlTemp.OPdate = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); //tlTemp.OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd hh:mm:ss"); tlTemp.issel = 1; tlTemp.diffgroup = 1; tlTemp.Isdel = 0; tls.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.Parse(timeStr).AddHours(-1); 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 = PublicCode.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; } } }