using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using OASystem.Domain.Dtos.CRM;
using OASystem.Domain.Dtos.QiYeWeChat;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.Enums;
using OpenAI.GPT3.ObjectModels;
using SqlSugar;
using System.Data;
using System.Net;
using System.Text.RegularExpressions;
using static QRCoder.PayloadGenerator;
using System.Windows.Forms;
using Microsoft.Data.SqlClient;
using OASystem.Domain.Entities.Customer;
using Aspose.Words;
using Bookmark = Aspose.Words.Bookmark;
using OASystem.Domain.ViewModels.QiYeWeChat;
using NPOI.SS.UserModel;
using System.Collections;

namespace OpWin
{
    public partial class Home : Form
    {
        static List<Grp_DelegationInfo> soure = null;

        const string OA2023DB = "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;MultipleActiveResultSets=True;";

        SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
        {
            ConfigId = DBEnum.OA2023DB,
            ConnectionString = OA2023DB,
            DbType = SqlSugar.DbType.SqlServer,
            IsAutoCloseConnection = true
        });

        public Home()
        {
            InitializeComponent();
        }

        string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

        private void Home_Load(object sender, EventArgs e)
        {
            comb_Delegation.ValueMember = "Id";
            comb_Delegation.DisplayMember = "TeamName";
            soure = Db.Queryable<Grp_DelegationInfo>().Where(x=>x.IsDel == 0).ToList();
            comb_Delegation.Items.AddRange(soure.ToArray());
            comb_Delegation.DropDownHeight = 200;
        }

        private void btnOutput_Click(object sender, EventArgs e)
        {
            lblOutputResult.Text = "文件正在导出...";
            lblOutputResult.ForeColor = Color.Black;

            //数据源
            List<Grp_TravelList> _travelList = new List<Grp_TravelList>();
            int diid = 0;
            try
            {
                var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
                diid = dele.Id;
            }
            catch (Exception)
            {
                lblOutputResult.Text = "请选择正确的团组!";
                lblOutputResult.ForeColor = Color.Black;
                MessageBox.Show("请选择正确的团组!");
                return;
            }

            DataTable dtBlack = null;
            try
            {
                dtBlack = GetTableByBlackCode(diid);
            }
            catch (Exception)
            {
                lblOutputResult.Text = "机票黑屏代码有误!";
                lblOutputResult.ForeColor = Color.Black;
                MessageBox.Show("机票黑屏代码有误!");
                return;
            }

            Grp_DelegationInfo di = Db.Queryable<Grp_DelegationInfo>().First(x => x.Id == diid && x.IsDel == 0);

            if (di == null)
            {
                lblOutputResult.Text = "请选择正确的团组!";
                lblOutputResult.ForeColor = Color.Black;
                MessageBox.Show("请选择正确的团组!");
                return;
            }

            string CityStr1 = "";
            List<string> countriesList = new List<string>();
            List<string> cityList = new List<string>();

            string countriesIntroduction = "";
            string cityIntroduction = "";
            string timeDifference = "";
            string currExchangeRate = "";
            string txt_itemPrepare = "";
            string txt_specialReminder = "";
            string txt_cGPrecautions = "";
            string txt_yGCG = "";
            string txt_conduct = "";
            string txt_commonEnglish = "";

            if (dtBlack == null && (dtBlack.Rows[0]["Day"] == null || dtBlack.Rows[0]["Day"].ToString() == ""))
            {
                //提示

                //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString());
            }
            else
            {
                //创建三字码示例
                Res_ThreeCode t = new Res_ThreeCode();
                //城市缓存
                string city = "";

                //出访城市
                for (int i = 0; i < dtBlack.Rows.Count; i++)
                {
                    if ((i + 1) < dtBlack.Rows.Count && dtBlack.Rows[i]["Three"].ToString() == dtBlack.Rows[i + 1]["Three"].ToString())
                    {
                        continue;
                    }
                    if (dtBlack.Rows.Count > 0 && (dtBlack.Rows[i]["Three"].ToString() != null && dtBlack.Rows[i]["Three"].ToString() != ""))
                    {
                        //出发城市
                        string cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(0, 3);
                        t = Db.Queryable<Res_ThreeCode>().First(x => x.Three == cityTemp && x.IsDel == 0 );
                        if (t != null)
                        {
                            city = city + "/" + t.City;
                        }
                        else
                        {
                            city = city + "/【" + cityTemp + "未收录，请联系机票同事录入】";
                        }

                        if (i == dtBlack.Rows.Count - 1)
                        {
                            //抵达城市
                            cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(3, 3);
                            t = Db.Queryable<Res_ThreeCode>().First(x => x.Three == cityTemp && x.IsDel == 0);
                            if (t != null)
                            {
                                city = city + "/" + t.City;
                            }
                            else
                            {
                                city = city + "/【" + cityTemp + "未收录，请联系机票同事录入】";
                            }
                        }
                    }
                }
                if (city != "" && city != null)
                {
                    string[] cityStr2 = city.Split('/');
                    string[] strs = cityStr2.Distinct().ToArray(); ;
                    string str = "";
                    foreach (var s in strs)
                    {
                        str += s + "/";
                    }
                    str = str.TrimStart('/');
                    str = str.TrimEnd('/');
                    //lblTourCity.Text = "去重前：" + city.TrimStart('/') + "\n 去重后:" + str;
                    CityStr1 = city.TrimStart('/');
                }

                //opitineraryService opitservice = new opitineraryService();

                ////城市不为空
                //if (!string.IsNullOrEmpty(city))
                //{
                //    cityList = city.TrimStart('/').Split('/').ToList();
                //    if (cityList.Count > 1)
                //    {
                //        cityList.RemoveAt(0);
                //    }
                //    opitinerarydata cityData = opitservice.getDaFirstData(cityList[0]);
                //    cityIntroduction = cityData.Introduction;
                //    timeDifference = cityData.TimeDifference;
                //    currExchangeRate = cityData.CurrExchangeRate.ToString();
                //}

                ////国家不为空
                //if (!string.IsNullOrEmpty(di.VisitCountry))
                //{
                //    countriesList = di.VisitCountry.Split(' ').ToList();
                //    opitinerarydata Country = opitservice.getDaFirstData(countriesList[0]);
                //    countriesIntroduction = Country.Introduction == null ? "" : Country.Introduction;
                //}

                ////取出固定标语
                //opitineraryfixed fixedData = opitservice.getFiFirstData();
                ////if (!string.IsNullOrEmpty(fixedData.Tid.ToString()))
                ////{

                ////}

                //txt_cGPrecautions = fixedData.CGPrecautions;
                //txt_commonEnglish = fixedData.CommonEnglish;
                //txt_conduct = fixedData.Conduct;
                //txt_itemPrepare = fixedData.ItemPrepare;
                //txt_specialReminder = fixedData.SpecialReminder;
                //txt_yGCG = fixedData.YGCG;


                // 行程repeater
                if (GetByDiid(diid).Count > 0)
                {
                    _travelList = GetByDiid(diid).Where(x => x.Issel == 1 && x.IsDel == 0).ToList();
                }
                else
                {

                    //生成该时间段日期
                    List<string> timeList = GetTimeListByDataTable(dtBlack);

                    if (timeList != null)
                    {
                        string[] str = new string[timeList.Count];
                        //rpData.DataSource = str;
                        //rpData.DataBind();
                    }
                }
            }


            //创建数据源Table
            DataTable dtSource = new DataTable();
            dtSource.Columns.Add("Days", typeof(string));
            dtSource.Columns.Add("Date", typeof(string));
            dtSource.Columns.Add("Week", typeof(string));
            dtSource.Columns.Add("Traffic", typeof(string));
            dtSource.Columns.Add("Trip", typeof(string));

            //获取数据,放到datatable
            foreach (var item in _travelList)
            {
                DataRow dr = dtSource.NewRow();
                dr["Days"] = item.Days;
                dr["Date"] = item.Date;
                dr["Week"] = item.WeekDay;
                dr["Traffic"] = item.Traffic_First
                                + "\r\n"
                                + item.Traffic_Second;
                if (item.Trip.Replace("（此地区为黄热病地区，请注意打疫苗）", "").Length < 15)
                {
                    item.Trip += @"
08:00 早餐于酒店；
09:00 公务活动；
10:30 公务活动；
12:00 午餐于当地餐厅；
14:00 公务活动；
16:00 公务活动；
18:00 晚餐于当地餐厅；
19:00 入住酒店休息；";
                }

                dr["Trip"] = item.Trip;
                dtSource.Rows.Add(dr);
            }

            //lblTeamName.Text = di.TourCode;
            //lblVisitDays.Text = di.VisitDays.ToString();
            //lblVisitDays2.Text = di.VisitDays.ToString();
            //lblPNumber.Text = di.VisitPNumber.ToString();
            //lblGroup.Text = di.TeamName.ToString();

            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("Dele", di.TeamName.ToString() + GetNum(di.VisitDays.ToString()));
            dic.Add("City", CityStr1);
            dic.Add("Days", di.VisitDays.ToString());
            dic.Add("DeleCode", di.TourCode);
            dic.Add("Pnum", di.VisitPNumber.ToString());
            dic.Add("Pnum2", di.VisitPNumber.ToString());

            List<Crm_DeleClient> leader = GetByDiidClient(di.Id);
            if (leader != null && leader.Count > 0)
            {
                dic.Add("Leader", GetByDiidClient(di.Id)[0].LastName + GetByDiidClient(di.Id)[0].FirstName);
            }
            else
            {
                dic.Add("Leader", "");
            }
            dic.Add("Pnum3", di.VisitPNumber.ToString());
            int UserId = 253;
            dic.Add("OP", "");
            dic.Add("OPTel", "");
            //dic.Add("OP", "OP姓名");
            //dic.Add("OPTel", "OP手机号码");

            string countriesStr = "";
            countriesList.ForEach(s => countriesStr += s + "、");
            countriesStr = countriesStr.TrimEnd('、');

            string cityStr = "";
            cityList.ForEach(s => cityStr += s + "、");
            cityStr = cityStr.TrimEnd('、');

            //下方数据
            dic.Add("selCountries", countriesStr == null ? "" : countriesStr);
            dic.Add("selCity", cityStr == null ? "" : cityStr);
            dic.Add("countriesIntroduction", countriesIntroduction == null ? "" : countriesIntroduction);
            dic.Add("CityIntroduction", cityIntroduction == null ? "" : cityIntroduction);
            dic.Add("timeDifference", timeDifference == null ? "" : timeDifference);
            dic.Add("currExchangeRate", currExchangeRate == null ? "" : currExchangeRate);
            dic.Add("temperature", "");
            dic.Add("txt_itemPrepare", txt_itemPrepare == null ? "" : txt_itemPrepare);
            dic.Add("txt_specialReminder", txt_specialReminder == null ? "" : txt_specialReminder);
            dic.Add("txt_cGPrecautions", txt_cGPrecautions == null ? "" : txt_cGPrecautions);
            dic.Add("txt_yGCG", txt_yGCG == null ? "" : txt_yGCG);
            dic.Add("txt_conduct", txt_conduct == null ? "" : txt_conduct);
            dic.Add("txt_commonEnglish", txt_commonEnglish == null ? "" : txt_commonEnglish);

            //模板路径
            string tempPath = @"C:\日行程3.docx";
            //载入模板
            Document doc = null;
            DocumentBuilder builder = null;
            try
            {
                //载入模板
                doc = new Document(tempPath);
                builder = new DocumentBuilder(doc);
            }
            catch (Exception)
            {
                //载入模板
                doc = new Document(@"D:\日行程3.docx");
                builder = new DocumentBuilder(doc);
            }


            foreach (var key in dic.Keys)
            {
                Bookmark bookmark = doc.Range.Bookmarks[key];
                if (bookmark != null)
                {
                    builder.MoveToBookmark(key);
                    builder.Write(dic[key]);
                }
            }

            //获取word里所有表格
            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
            //获取所填表格的序数
            Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;

            try
            {
                //循环赋值
                for (int i = 0; i < dtSource.Rows.Count; i++)
                {
                    builder.MoveToCell(0, i + 1, 0, 0);
                    builder.Write(dtSource.Rows[i]["Days"].ToString());

                    builder.MoveToCell(0, i + 1, 1, 0);
                    builder.Write(dtSource.Rows[i]["Date"].ToString() + "\r\n" + dtSource.Rows[i]["Week"].ToString());

                    builder.MoveToCell(0, i + 1, 2, 0);
                    builder.Write(dtSource.Rows[i]["Traffic"].ToString());

                    var trip = dtSource.Rows[i]["Trip"].ToString();
                    builder.MoveToCell(0, i + 1, 3, 0);
                    builder.Write(trip);

                    var cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 1, true);
                    var paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);

                    // 获取特定索引的段落
                    Paragraph paragraph = (Paragraph)paragraphs[0];
                    Run run = paragraph.Runs[0];
                    Aspose.Words.Font font = run.Font;
                    font.Name = "黑体";

                    //设置双休红色
                    cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true);
                    paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);
                    paragraph = (Paragraph)paragraphs[1];
                    if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日"))
                    {
                        run = paragraph.Runs[0];
                        font = run.Font;
                        font.Color = Color.Red;
                    }
                }
            }
            catch (Exception ex)
            {

            }


            //删除多余行
            while (tableOne.Rows.Count > 1 + dtSource.Rows.Count)
            {
                tableOne.Rows.RemoveAt(1 + dtSource.Rows.Count);//(1+dtSource.Rows.Count + 1)-1
            }


            string savePath = "C:\\OP行程单\\";
            if (!Directory.Exists(savePath))
            {
                try
                {
                    Directory.CreateDirectory(savePath);
                }
                catch
                {

                }
            }
            string strFileName = savePath + di.TeamName + "出访日程.docx";

            try
            {
                doc.Save(strFileName, Aspose.Words.SaveFormat.Doc);
                lblOutputResult.Text = "文件导出完成";
                lblOutputResult.ForeColor = Color.Green;
                System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName);
            }
            catch (Exception)
            {

                lblOutputResult.Text = "请重试！";
                lblOutputResult.ForeColor = Color.Green;
            }



            //doc.Save(HttpUtility.UrlEncode(strFileName, Encoding.UTF8), Aspose.Words.SaveFormat.Doc, Aspose.Words.SaveType.OpenInWord, Response);
        }

        private void btnImport_Click(object sender, EventArgs e)
        {
            lblImport.Text = "";
            lblImport.Text = "正在导入数据";
            int comb_Diid = 0;
            try
            {
                var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
                comb_Diid = dele.Id;
            }
            catch (Exception)
            {
                lblImport.Text = "请正确的选择团组!";
                lblImport.ForeColor = Color.Black;
                MessageBox.Show("请正确的选择团组!");
                return;
            }
            int UserId = 253;
            //下拉框团组对象实例
            //Grp_DelegationInfo di = dis.GetDelegationInfoByID(comb_Diid);
            Grp_DelegationInfo di = Db.Queryable<Grp_DelegationInfo>().First(x => x.Id == comb_Diid && x.IsDel == 0);

            if (di == null)
            {
                lblImport.Text = "请正确的选择团组!";
                lblImport.ForeColor = Color.Black;
                MessageBox.Show("请正确的选择团组!");
                return;
            }

            DataTable dt = null;
            try
            {
                //获取机票黑屏代码信息，生成datatable表
                dt = GetTableByBlackCode(di.Id);
            }
            catch (Exception)
            {
                lblImport.Text = "请正确的选择团组!";
                lblImport.ForeColor = Color.Black;
                MessageBox.Show("机票黑屏代码有误!");
                return;
            }

            Del(di.Id);

            //通过datatable表里的第一个字段的信息来判断是否有黑屏代码
            //没有则提示未录入
            if (dt.Rows[0]["Day"] == null || dt.Rows[0]["Day"].ToString() == "")
            {
                //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString());
                lblImport.Text = "黑屏代码未录入";
            }
            else//成功获取黑屏代码
            {

                //根据黑屏代码生成日期段
                List<string> timeList = GetTimeListByDataTable(dt);

                //本团车导地接信息
                //List<CarTouristGuideGroundReservations> listctg = ctgs.GetCarTouristGuideGroundReservationsByDIID(di.Id);
                List<Grp_CarTouristGuideGroundReservations> listctg = Db.Queryable<Grp_CarTouristGuideGroundReservations>().Where(x => x.DiId == di.Id && x.IsDel == 0).ToList();

                //本团酒店信息
                //List<HotelReservations> listht = htrs.GetByDIId(di.Id);
                List<Grp_HotelReservations> listht = Db.Queryable<Grp_HotelReservations>().Where(x => x.DiId == di.Id && x.IsDel == 0).ToList();

                //本团行程单数据
                //List<Grp_TravelList> listTravel = tls.GetByDiid(di.Id);
                List<Grp_TravelList> listTravel = Db.Queryable<Grp_TravelList>().Where(x => x.Diid == di.Id && x.IsDel == 0).ToList();

                try
                {
                    if (listTravel != null && listTravel.Count > 0)//若本团已存行程,则合并/更新；同时因为机票行程的变化或行程详情的变化，会导致行程更改
                    {
                        if (timeList.Count > listTravel.Count)//1.改版后黑屏代码天数>已存在行程的天数
                        {
                            //1.1替换日期和星期
                            for (int i = 0; i < listTravel.Count; i++)
                            {
                                //日期转换星期
                                string weekday = weekdays[(int)new DateTime(
                                   Convert.ToInt32(timeList[i].Split('-')[0]),
                                   Convert.ToInt32(timeList[i].Split('-')[1]),
                                   Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];


                                // 日期去掉0
                                string monthStr = "Unknown", dayStr = "Unknown";

                                if (!string.IsNullOrEmpty(timeList[i]))
                                {
                                    DateTime dateTime = new DateTime();
                                    bool convertResult = DateTime.TryParse(timeList[i], out dateTime);
                                    if (convertResult)
                                    {
                                        monthStr = dateTime.Month.ToString();
                                        dayStr = dateTime.Day.ToString();
                                    }
                                }

                                //日期
                                listTravel[i].Date = monthStr + "月" + dayStr + "日";

                                //listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
                                listTravel[i].WeekDay = weekday;


                                listTravel[i].CreateUserId = UserId;
                                listTravel[i].CreateTime = GetBeijingTime();
                                listTravel[i].IsDel = 0;
                                //tls.EditTravelList(listTravel[i]);
                                Db.Updateable<Grp_TravelList>(listTravel[i]).ExecuteCommand();
                            }

                            //1.2添加未有行程
                            //航班号标识
                            //string flightcode_Sign = "";
                            //三字码标识
                            //string citycode_Sign = "";

                            #region 城市数据 20210823 贾文滔
                            List<CityInDate> CityInDateList = GetCityByDataTable(dt);
                            #endregion

                            //生成行程
                            for (int i = listTravel.Count; i < timeList.Count; i++)
                            {
                                //实、例化一个temp
                                Grp_TravelList tlTemp = new Grp_TravelList();

                                //团号
                                tlTemp.Diid = di.Id;
                                //天数序号
                                tlTemp.Days = i + 1;
                                //日期
                                tlTemp.Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";

                                //日期转换星期
                                string weekday = weekdays[(int)new DateTime(
                                   Convert.ToInt32(timeList[i].Split('-')[0]),
                                   Convert.ToInt32(timeList[i].Split('-')[1]),
                                   Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
                                tlTemp.WeekDay = weekday;


                                //行程
                                string trip = "";
                                //历经城市
                                string city = "";


                                #region  机票数据

                                //根据航班信息推出抵达机场的位置信息
                                string AirPort = "";

                                //根据航班时间前后推进入机场或离开机场的时间
                                string GoAirportTime = "", leaveAirPortTime = "";

                                //飞机标识
                                bool airSign = false;

                                //查询该日期下的航班信息
                                //resultRows字段顺序为：航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间,整理后的起飞日期,整理后的到达日期
                                DataRow[] resultRows = dt.Select("Day like '%" + timeList[i] + "%'");

                                if (resultRows.Count() > 0)
                                {
                                    //修改标识
                                    airSign = true;
                                }

                                //同一天只有一条数据走正常判定
                                if (resultRows.Count() == 1)
                                {

                                    #region 三字码

                                    string _citycode = resultRows[0]["Three"].ToString();

                                    //起飞城市三字码
                                    Res_ThreeCode font_threecode = null;

                                    string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
                                    //抵达城市
                                    string font_City = "";
                                    //起飞城市机场
                                    string font_Airport = "";

                                    //抵达城市三字码
                                    Res_ThreeCode back_threecode = null;

                                    string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
                                    //抵达城市机场
                                    string back_Airport = "";
                                    //抵达城市
                                    string back_City = "";




                                    font_threecode = getByThree(font_citycode);
                                    //验证是否存在三字码
                                    if (font_threecode == null)
                                    {
                                        city = city + "【此三字码" + font_citycode + "未收录，请机票同事录入】" + "一";
                                        font_Airport = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                        font_City = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                    }
                                    else
                                    {
                                        city = city + "/" + font_threecode.City;
                                        font_Airport = font_threecode.AirPort;
                                        font_City = font_threecode.City; ;
                                    }
                                    back_threecode = getByThree(end_citycode);
                                    if (back_threecode == null)
                                    {
                                        city = city + "【此三字码" + end_citycode + "未收录，请机票同事录入】" + "一";
                                        back_Airport = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                        back_City = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                    }
                                    else
                                    {
                                        city = city + "/" + back_threecode.City;
                                        //部分黄热病国家，需要提醒打疫苗
                                        string result = GetCountryInfo(back_threecode.Country);
                                        if (result.Contains("3"))
                                        {
                                            city += "（此地区为黄热病地区，请注意打疫苗）";
                                        }
                                        back_Airport = back_threecode.AirPort;
                                        back_City = back_threecode.City;
                                        //查询酒店路线要用
                                        AirPort = back_threecode.AirPort;
                                    }
                                    //行程里加入城市
                                    #endregion

                                    #region 信息准备

                                    trip = city.TrimStart('/');
                                    //起飞航站楼
                                    string _StartBuilding = resultRows[0]["StartBuilding"].ToString();
                                    //转机航站楼
                                    string _EndBuilding = resultRows[0]["EndBuilding"].ToString();
                                    //起飞时刻
                                    string _startTime = resultRows[0]["StartTime"].ToString();
                                    //飞行时刻
                                    string _flightTime = resultRows[0]["FlightTime"].ToString();
                                    _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
                                    //到达时刻
                                    string _endTime = resultRows[0]["EndTime"].ToString();

                                    //航班号
                                    string _flightcode = resultRows[0]["Fliagtcode"].ToString();
                                    //航司
                                    //Res_AirCompany aircompany = acs.getByShortCode(_flightcode.Substring(0, 2));
                                    Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2));

                                    string _aircompany_Name = "";
                                    if (aircompany == null)
                                    {
                                        _aircompany_Name = "【此航司" + resultRows[0]["Fliagtcode"].ToString().Substring(0, 2) + "未收录，请机票同事录入】";
                                    }
                                    else
                                    {
                                        _aircompany_Name = aircompany.CnName;
                                    }



                                    //机型判断
                                    string airModel = resultRows[0]["AirModel"].ToString();

                                    airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
                                    #endregion

                                    #region trip编辑
                                    //若本行抵达时间包含"+1",则本行为母版行,仅提示登机
                                    if (resultRows[0]["Sign"].ToString() == "0" && _endTime.Contains("+"))
                                    {
                                        //根据航班信息推算进入机场的时间                               
                                        int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
                                        string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
                                        if (result.Contains("2"))
                                        {
                                            temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                        }
                                        if (temp < 0)
                                        {
                                            temp = temp + 24;
                                        }
                                        GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                        GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                        //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                        if (i > 0)
                                        {
                                            #region 酒店      
                                            foreach (var h in listht)
                                            {
                                                if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                                 && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
                                                {
                                                    //利用谷歌API计算路线
                                                    if (AirPort != "")
                                                    {
                                                        GoogleMapApiResult g = null;

                                                        if (g != null)
                                                        {
                                                            //计算“酒店到机场”的时间
                                                            string CheckoutHotelTime;

                                                            //处理时间格式
                                                            string hours = "", mins = "";
                                                            if (g.Time.Contains("hour"))
                                                            {
                                                                g.Time = g.Time.Replace("hour", "h");

                                                            }
                                                            else if (g.Time.Contains("hours"))
                                                            {
                                                                g.Time = g.Time.Replace("hours", "h");
                                                            }

                                                            g.Time = g.Time.Replace("mins", "m");
                                                            if (g.Time.Contains("h"))
                                                            {
                                                                hours = g.Time.Split('h')[0].Trim();

                                                            }
                                                            else if (!g.Time.Contains("h"))
                                                            {
                                                                mins = g.Time.Split('m')[0].Trim();
                                                            }

                                                            int hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                            int min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                            min = min - Convert.ToInt32(mins);
                                                            if (min < 0)
                                                            {
                                                                min = min + 60;
                                                                hour = hour - 1;
                                                            }
                                                            if (hours != "")
                                                            {
                                                                hour = hour - Convert.ToInt32(hours);
                                                            }
                                                            if (hour < 0)
                                                            {
                                                                hour = hour + 24;
                                                            }

                                                            CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                            CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                            trip = trip + "\r\n"
                                                                        + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                        }
                                                        else
                                                        {
                                                            try
                                                            {
                                                                JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                                //计算“抵达酒店办理入住手续”的时间
                                                                string CheckoutHotelTime;

                                                                //处理时间格式
                                                                string Gtime = "", hours = "", mins = "";
                                                                if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                                {
                                                                    Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                                }
                                                                else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                                {
                                                                    Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                                }
                                                                Gtime = Gtime.Replace("mins", "m");

                                                                if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                                {
                                                                    hours = Gtime.Split('h')[0].Trim();

                                                                }
                                                                else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                                {
                                                                    mins = Gtime.Split('m')[0].Trim();
                                                                }


                                                                int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                                int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                                min = min - Convert.ToInt32(mins);
                                                                if (min < 0)
                                                                {
                                                                    min = min + 60;
                                                                    hour = hour - 1;
                                                                }

                                                                if (hours != "")
                                                                {
                                                                    hour = hour + Convert.ToInt32(hours);
                                                                }
                                                                if (hour < 0)
                                                                {
                                                                    hour = hour + 24;
                                                                }
                                                                CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                                CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                                trip = trip + "\r\n"
                                                                            + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                                GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                                gtemp.Diid = di.Id;
                                                                gtemp.Date = "";
                                                                gtemp.Moment = "";
                                                                gtemp.StartAddress = AirPort;
                                                                gtemp.EndAddress = h.HotelAddress;
                                                                gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                                gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                                //gmrs.Add(gtemp);

                                                            }
                                                            catch
                                                            {
                                                                trip = trip + "\r\n"
                                                                     + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            #endregion
                                        }

                                        //行程
                                        trip = trip
                                             + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                             + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                             + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；";

                                        //标记本行为母版行
                                        //flightcode_Sign = resultRows[0]["Fliagtcode"].ToString();
                                        //citycode_Sign = resultRows[0]["Three"].ToString();
                                    }
                                    //与前一行航班号,三字码相同且本行抵达时间不包含"+1"，则本行是被生成的重复行,仅提示抵达
                                    else if (resultRows[0]["Sign"].ToString() == "1") /* && (!_endTime.Contains("+"))&&(_flightcode == flightcode_Sign)&&(_citycode == citycode_Sign)*/
                                    {

                                        //行程
                                        trip = trip
                                             + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";

                                        //根据航班信息推算离开机场的时间
                                        int temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                        leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                        leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                        if (i == timeList.Count - 1)//如果本日是行程的最后一天，则提醒“行程圆满结束” 
                                        {
                                            trip = trip + " ，圆满结束此次访问之行！";
                                        }
                                        else //如果本日不是行程的最后一天，正常提醒
                                        {
                                            //trip += pushTrip(leaveAirPortTime, back_Airport, city,out leaveAirPortTime);
                                            trip = trip + "；\r\n" + leaveAirPortTime + " 搭乘专车前往酒店，抵达后办理入住；";
                                        }

                                        //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                        int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                        int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                        min = min + 10;
                                        if (min > 59)
                                        {
                                            min = min - 60;
                                            hour = hour + 1;
                                        }
                                        if (hour > 23)
                                        {
                                            hour = hour - 24;
                                        }
                                        leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                        leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                    }
                                    //正常提示
                                    else
                                    {
                                        //根据航班信息推算进入机场的时间
                                        int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
                                        string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
                                        if (result.Contains("2"))
                                        {
                                            temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                        }
                                        if (temp < 0)
                                        {
                                            temp = temp + 24;
                                        }
                                        GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                        GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                        //根据航班信息推算离开机场的时间
                                        temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                        leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                        leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                        //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                        if (i > 0)
                                        {
                                            #region 酒店      
                                            foreach (var h in listht)
                                            {
                                                if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                                 && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
                                                {
                                                    //利用谷歌API计算路线
                                                    if (AirPort != "")
                                                    {
                                                        GoogleMapApiResult g = null;

                                                        if (g != null)
                                                        {
                                                            //计算“酒店到机场”的时间
                                                            string CheckoutHotelTime;

                                                            //处理时间格式
                                                            string hours = "0", mins = "0";
                                                            if (g.Time.Contains("hour"))
                                                            {
                                                                g.Time = g.Time.Replace("hour", "h");

                                                            }
                                                            else if (g.Time.Contains("hours"))
                                                            {
                                                                g.Time = g.Time.Replace("hours", "h");
                                                            }

                                                            g.Time = g.Time.Replace("mins", "m");
                                                            if (g.Time.Contains("h"))
                                                            {
                                                                hours = g.Time.Split('h')[0].Trim();

                                                            }
                                                            else if (!g.Time.Contains("h"))
                                                            {
                                                                mins = g.Time.Split('m')[0].Trim();
                                                            }

                                                            int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                            int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                            _min = _min - Convert.ToInt32(mins);
                                                            if (_min < 0)
                                                            {
                                                                _min = _min + 60;
                                                                _hour = _hour - 1;
                                                            }
                                                            if (hours != "")
                                                            {
                                                                _hour = _hour - Convert.ToInt32(hours);
                                                            }
                                                            if (_hour < 0)
                                                            {
                                                                _hour = _hour + 24;
                                                            }

                                                            CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                            CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                            trip = trip + "\r\n"
                                                                        + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                        }
                                                        else
                                                        {
                                                            try
                                                            {
                                                                JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                                //计算“抵达酒店办理入住手续”的时间
                                                                string CheckoutHotelTime;

                                                                //处理时间格式
                                                                string Gtime = "", hours = "0", mins = "0";
                                                                if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                                {
                                                                    Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                                }
                                                                else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                                {
                                                                    Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                                }
                                                                Gtime = Gtime.Replace("mins", "m");

                                                                if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                                {
                                                                    hours = Gtime.Split('h')[0].Trim();

                                                                }
                                                                else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                                {
                                                                    mins = Gtime.Split('m')[0].Trim();
                                                                }


                                                                int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                                int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                                _min = _min - Convert.ToInt32(mins);
                                                                if (_min < 0)
                                                                {
                                                                    _min = _min + 60;
                                                                    _hour = _hour - 1;
                                                                }

                                                                if (hours != "")
                                                                {
                                                                    _hour = _hour + Convert.ToInt32(hours);
                                                                }
                                                                if (_hour < 0)
                                                                {
                                                                    _hour = _hour + 24;
                                                                }
                                                                CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                trip = trip + "\r\n"
                                                                            + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                                GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                                gtemp.Diid = di.Id;
                                                                gtemp.Date = "";
                                                                gtemp.Moment = "";
                                                                gtemp.StartAddress = AirPort;
                                                                gtemp.EndAddress = h.HotelAddress;
                                                                gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                                gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                                //gmrs.Add(gtemp);

                                                            }
                                                            catch
                                                            {
                                                                trip = trip + "\r\n"
                                                                     + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            #endregion
                                        }

                                        trip = trip
                                             + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                             + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                             + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                             + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";



                                        if (i == timeList.Count - 1)//如果本日是行程的最后一天，先增加酒店到机场的距离时间，再在末尾提醒“行程圆满结束” 
                                        {
                                            trip = trip + "，圆满结束此次访问之行！";
                                        }
                                        else //如果本日不是行程的最后一天，正常提醒
                                        {
                                            trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                            trip = trip + "；\r\n" + leaveAirPortTime + "搭乘专车前往酒店，抵达后办理入住；";
                                        }

                                        //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                        int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                        int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                        min = min + 10;
                                        if (min > 59)
                                        {
                                            min = min - 60;
                                            hour = hour + 1;
                                        }
                                        if (hour > 23)
                                        {
                                            hour = hour - 24;
                                        }
                                        leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                        leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
                                    }
                                    #endregion

                                }
                                //同一天多条数据走分类讨论
                                else
                                {
                                    for (int n = 0; n < resultRows.Count(); n++)
                                    {
                                        city = "";

                                        #region 三字码

                                        string _citycode = resultRows[n]["Three"].ToString();

                                        //起飞城市三字码
                                        Res_ThreeCode font_threecode = null;
                                        string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
                                        //抵达城市
                                        string font_City = "";
                                        //起飞城市机场
                                        string font_Airport = "";

                                        //抵达城市三字码
                                        Res_ThreeCode back_threecode = null;
                                        string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
                                        //抵达城市机场
                                        string back_Airport = "";
                                        //抵达城市
                                        string back_City = "";


                                        font_threecode = getByThree(font_citycode);
                                        //验证是否存在三字码
                                        if (font_threecode == null)
                                        {
                                            city = city + "【此三字码" + font_citycode + "未收录，请机票同事录入】" + "一";
                                            font_Airport = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                            font_City = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                        }
                                        else
                                        {
                                            city = city + "/" + font_threecode.City;
                                            font_Airport = font_threecode.AirPort;
                                            font_City = font_threecode.City; ;
                                        }
                                        back_threecode = getByThree(end_citycode);
                                        if (back_threecode == null)
                                        {
                                            city = city + "【此三字码" + end_citycode + "未收录，请机票同事录入】" + "一";
                                            back_Airport = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                            back_City = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                        }
                                        else
                                        {
                                            city = city + "/" + back_threecode.City;
                                            //部分黄热病国家，需要提醒打疫苗
                                            string result = GetCountryInfo(back_threecode.Country);
                                            if (result.Contains("3"))
                                            {
                                                city += "（此地区为黄热病地区，请注意打疫苗）";
                                            }
                                            back_Airport = back_threecode.AirPort;
                                            back_City = back_threecode.City;
                                            //查询酒店路线要用
                                            AirPort = back_threecode.AirPort;
                                        }
                                        //行程里加入城市
                                        if (trip == "")
                                        {
                                            trip = city.TrimStart('/');
                                        }
                                        else
                                        {
                                            trip = trip + "\r\n"
                                                 + city.TrimStart('/');
                                        }
                                        //起飞航站楼
                                        string _StartBuilding = resultRows[n]["StartBuilding"].ToString();
                                        //转机航站楼
                                        string _EndBuilding = resultRows[n]["EndBuilding"].ToString();
                                        //起飞时刻
                                        string _startTime = resultRows[n]["StartTime"].ToString();
                                        //飞行时刻
                                        string _flightTime = resultRows[n]["FlightTime"].ToString();
                                        _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
                                        //到达时刻
                                        string _endTime = resultRows[n]["EndTime"].ToString();

                                        //航班号
                                        string _flightcode = resultRows[n]["Fliagtcode"].ToString();
                                        //航司
                                        Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2));
                                        string _aircompany_Name = "";
                                        if (aircompany == null)
                                        {
                                            _aircompany_Name = "【此航司" + resultRows[n]["Fliagtcode"].ToString().Substring(0, 2) + "未收录，请机票同事录入】";
                                        }
                                        else
                                        {
                                            _aircompany_Name = aircompany.CnName;
                                        }



                                        //机型判断
                                        string airModel = resultRows[n]["AirModel"].ToString();

                                        airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
                                        #endregion

                                        //Sign字段为标识，string类型，含义：0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
                                        //目前存在两种情况：同一天的多条数据标识为“0->0”或“1->0”
                                        //如下示例
                                        //Day ArrivedDate Sign
                                        //10      10       0
                                        //10      11       0
                                        //11      11       1
                                        //11      12       0
                                        //12      12       1
                                        if (n == 0)
                                        {
                                            //原生机票代码
                                            if (resultRows[n]["Sign"].ToString() == "0")
                                            {
                                                #region trip编辑
                                                //根据航班信息推算进入机场的时间
                                                int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
                                                string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
                                                if (result.Contains("2"))
                                                {
                                                    temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                                }
                                                if (temp < 0)
                                                {
                                                    temp = temp + 24;
                                                }
                                                GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                                GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);


                                                //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                                if (i > 0)
                                                {
                                                    #region 酒店      
                                                    foreach (var h in listht)
                                                    {
                                                        if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                                         && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
                                                        {
                                                            //利用谷歌API计算路线
                                                            if (AirPort != "")
                                                            {
                                                                GoogleMapApiResult g = null;

                                                                if (g != null)
                                                                {
                                                                    //计算“酒店到机场”的时间
                                                                    string CheckoutHotelTime;

                                                                    //处理时间格式
                                                                    string hours = "0", mins = "0";
                                                                    if (g.Time.Contains("hour"))
                                                                    {
                                                                        g.Time = g.Time.Replace("hour", "h");

                                                                    }
                                                                    else if (g.Time.Contains("hours"))
                                                                    {
                                                                        g.Time = g.Time.Replace("hours", "h");
                                                                    }

                                                                    g.Time = g.Time.Replace("mins", "m");
                                                                    if (g.Time.Contains("h"))
                                                                    {
                                                                        hours = g.Time.Split('h')[0].Trim();

                                                                    }
                                                                    else if (!g.Time.Contains("h"))
                                                                    {
                                                                        mins = g.Time.Split('m')[0].Trim();
                                                                    }

                                                                    int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                                    int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                                    _min = _min - Convert.ToInt32(mins);
                                                                    if (_min < 0)
                                                                    {
                                                                        _min = _min + 60;
                                                                        _hour = _hour - 1;
                                                                    }
                                                                    if (hours != "")
                                                                    {
                                                                        _hour = _hour - Convert.ToInt32(hours);
                                                                    }
                                                                    if (_hour < 0)
                                                                    {
                                                                        _hour = _hour + 24;
                                                                    }

                                                                    CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                    CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                    trip = trip + "\r\n"
                                                                                + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                                }
                                                                else
                                                                {
                                                                    try
                                                                    {
                                                                        JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                                        //计算“抵达酒店办理入住手续”的时间
                                                                        string CheckoutHotelTime;

                                                                        //处理时间格式
                                                                        string Gtime = "", hours = "0", mins = "0";
                                                                        if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                                        {
                                                                            Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                                        }
                                                                        else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                                        {
                                                                            Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                                        }
                                                                        Gtime = Gtime.Replace("mins", "m");

                                                                        if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                                        {
                                                                            hours = Gtime.Split('h')[0].Trim();

                                                                        }
                                                                        else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                                        {
                                                                            mins = Gtime.Split('m')[0].Trim();
                                                                        }


                                                                        int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                                        int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                                        _min = _min - Convert.ToInt32(mins);
                                                                        if (_min < 0)
                                                                        {
                                                                            _min = _min + 60;
                                                                            _hour = _hour - 1;
                                                                        }

                                                                        if (hours != "")
                                                                        {
                                                                            _hour = _hour + Convert.ToInt32(hours);
                                                                        }
                                                                        if (_hour < 0)
                                                                        {
                                                                            _hour = _hour + 24;
                                                                        }
                                                                        CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                        CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                        trip = trip + "\r\n"
                                                                                    + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                                        GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                                        gtemp.Diid = di.Id;
                                                                        gtemp.Date = "";
                                                                        gtemp.Moment = "";
                                                                        gtemp.StartAddress = AirPort;
                                                                        gtemp.EndAddress = h.HotelAddress;
                                                                        gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                                        gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                                        //gmrs.Add(gtemp);

                                                                    }
                                                                    catch
                                                                    {
                                                                        trip = trip + "\r\n"
                                                                             + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                    #endregion
                                                }

                                                trip = trip
                                                     + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                                     + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                                     + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                                     + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李；";

                                                #endregion
                                            }
                                            //"+1"生成的机票代码
                                            else if (resultRows[n]["Sign"].ToString() == "1")
                                            {
                                                #region trip编辑
                                                //行程
                                                trip = trip
                                                     + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李；";
                                                #endregion
                                            }
                                        }
                                        else if (n > 0)
                                        {
                                            //若前行是原生的，则本行判定为转机
                                            if (resultRows[n - 1]["Sign"].ToString() == "0")
                                            {
                                                #region trip编辑
                                                int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 1;//一般提前提前2小时
                                                if (temp < 0)
                                                {
                                                    temp = temp + 24;
                                                }
                                                GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                                GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                                trip = trip
                                                 + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                                 + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                                 + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                                 + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";

                                                //若为最后一行，则计算后备等时间
                                                if (n == resultRows.Count() - 1)
                                                {
                                                    //根据航班信息推算离开机场的时间
                                                    temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                                    leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                                    leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                                    if (i == timeList.Count - 1)//如果本日是行程的最后一天，先增加酒店到机场的距离时间，再在末尾提醒“行程圆满结束” 
                                                    {
                                                        trip = trip + "，圆满结束此次访问之行！";
                                                    }
                                                    else //如果本日不是行程的最后一天，正常提醒
                                                    {
                                                        trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                                        trip = trip + "；\r\n" + leaveAirPortTime + "搭乘专车前往酒店，抵达后办理入住；";
                                                    }

                                                    //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                                    int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                    int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                                    min = min + 10;
                                                    if (min > 59)
                                                    {
                                                        min = min - 60;
                                                        hour = hour + 1;
                                                    }
                                                    if (hour > 23)
                                                    {
                                                        hour = hour - 24;
                                                    }
                                                    leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                    leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
                                                }
                                                #endregion
                                            }
                                            //若前行是生成的，则本行判定为新出发
                                            else if (resultRows[n - 1]["Sign"].ToString() == "1")
                                            {
                                                #region trip编辑
                                                //根据航班信息推算进入机场的时间
                                                int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
                                                string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
                                                if (result.Contains("2"))
                                                {
                                                    temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                                }
                                                if (temp < 0)
                                                {
                                                    temp = temp + 24;
                                                }
                                                GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                                GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                                //根据航班信息推算离开机场的时间
                                                temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                                leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                                leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                                //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                                if (i > 0)
                                                {
                                                    #region 酒店      
                                                    foreach (var h in listht)
                                                    {
                                                        if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                                         && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
                                                        {
                                                            //利用谷歌API计算路线
                                                            if (AirPort != "")
                                                            {
                                                                GoogleMapApiResult g = null;

                                                                if (g != null)
                                                                {
                                                                    //计算“酒店到机场”的时间
                                                                    string CheckoutHotelTime;

                                                                    //处理时间格式
                                                                    string hours = "0", mins = "0";
                                                                    if (g.Time.Contains("hour"))
                                                                    {
                                                                        g.Time = g.Time.Replace("hour", "h");

                                                                    }
                                                                    else if (g.Time.Contains("hours"))
                                                                    {
                                                                        g.Time = g.Time.Replace("hours", "h");
                                                                    }

                                                                    g.Time = g.Time.Replace("mins", "m");
                                                                    if (g.Time.Contains("h"))
                                                                    {
                                                                        hours = g.Time.Split('h')[0].Trim();

                                                                    }
                                                                    else if (!g.Time.Contains("h"))
                                                                    {
                                                                        mins = g.Time.Split('m')[0].Trim();
                                                                    }

                                                                    int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                                    int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                                    _min = _min - Convert.ToInt32(mins);
                                                                    if (_min < 0)
                                                                    {
                                                                        _min = _min + 60;
                                                                        _hour = _hour - 1;
                                                                    }
                                                                    if (hours != "")
                                                                    {
                                                                        _hour = _hour - Convert.ToInt32(hours);
                                                                    }
                                                                    if (_hour < 0)
                                                                    {
                                                                        _hour = _hour + 24;
                                                                    }

                                                                    CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                    CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                    trip = trip + "\r\n"
                                                                                + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                                }
                                                                else
                                                                {
                                                                    try
                                                                    {
                                                                        JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                                        //计算“抵达酒店办理入住手续”的时间
                                                                        string CheckoutHotelTime;

                                                                        //处理时间格式
                                                                        string Gtime = "", hours = "0", mins = "0";
                                                                        if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                                        {
                                                                            Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                                        }
                                                                        else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                                        {
                                                                            Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                                        }
                                                                        Gtime = Gtime.Replace("mins", "m");

                                                                        if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                                        {
                                                                            hours = Gtime.Split('h')[0].Trim();

                                                                        }
                                                                        else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                                        {
                                                                            mins = Gtime.Split('m')[0].Trim();
                                                                        }


                                                                        int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                                        int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                                        _min = _min - Convert.ToInt32(mins);
                                                                        if (_min < 0)
                                                                        {
                                                                            _min = _min + 60;
                                                                            _hour = _hour - 1;
                                                                        }

                                                                        if (hours != "")
                                                                        {
                                                                            _hour = _hour + Convert.ToInt32(hours);
                                                                        }
                                                                        if (_hour < 0)
                                                                        {
                                                                            _hour = _hour + 24;
                                                                        }
                                                                        CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                        CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                        trip = trip + "\r\n"
                                                                                    + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                                        GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                                        gtemp.Diid = di.Id;
                                                                        gtemp.Date = "";
                                                                        gtemp.Moment = "";
                                                                        gtemp.StartAddress = AirPort;
                                                                        gtemp.EndAddress = h.HotelAddress;
                                                                        gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                                        gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                                        //gmrs.Add(gtemp);

                                                                    }
                                                                    catch
                                                                    {
                                                                        trip = trip + "\r\n"
                                                                             + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                    #endregion
                                                }

                                                trip = trip
                                                     + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                                     + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                                     + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                                     + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";

                                                if (i == timeList.Count - 1)//如果本日是行程的最后一天，先增加酒店到机场的距离时间，再在末尾提醒“行程圆满结束” 
                                                {
                                                    trip = trip + "，圆满结束此次访问之行！";
                                                }
                                                else //如果本日不是行程的最后一天，正常提醒
                                                {
                                                    trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                                    trip = trip + "；\r\n" + leaveAirPortTime + "搭乘专车前往酒店，抵达后办理入住；";
                                                }

                                                //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                                int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                                min = min + 10;
                                                if (min > 59)
                                                {
                                                    min = min - 60;
                                                    hour = hour + 1;
                                                }
                                                if (hour > 23)
                                                {
                                                    hour = hour - 24;
                                                }
                                                leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
                                                #endregion
                                            }

                                        }
                                    }
                                }



                                #endregion


                                #region 行程和城市赋值
                                if (trip == "" || trip == " " || city == "" || city == " ")
                                {
                                    //city = CityInDateList.Find(cid => cid.Date == timeList[i]).City;
                                    city = CityInDateList[i].City;
                                    //部分黄热病国家，需要提醒打疫苗
                                    string result = GetCountryInfo(getByCity(city)[0].Country);
                                    if (result.Contains("3"))
                                    {
                                        city += "（此地区为黄热病地区，请注意打疫苗）";
                                    }
                                    trip = city;
                                }
                                #endregion


                                #region 公务  20210820 贾文滔
                                string OATemp = "";//暂存公务活动

                                //根据团号和日期获取公务数据
                                List<Res_OfficialActivities> listoa = getByDiidAndDate(comb_Diid, timeList[i]);

                                //若listoa存在公务数据，进行排序，再进行导入
                                if (listoa != null && listoa.Count > 0)
                                {
                                    //利用datatable存放公务活动数据
                                    DataTable OA_DataTable = new DataTable();
                                    OA_DataTable.Columns.Add("StartTime", typeof(string)); //activity开始时刻
                                    OA_DataTable.Columns.Add("EndTime", typeof(string)); //activity结束时刻
                                    OA_DataTable.Columns.Add("Client", typeof(string)); //activity单位
                                    OA_DataTable.Columns.Add("Address", typeof(string)); //activity地址
                                    OA_DataTable.Columns.Add("Contact", typeof(string)); //activity联系人
                                    OA_DataTable.Columns.Add("Tel", typeof(string)); //activity联系人电话
                                    OA_DataTable.Columns.Add("Dresscode", typeof(string)); //activity着装要求
                                    OA_DataTable.Columns.Add("isTranslate", typeof(bool));//是否需要翻译人员
                                    OA_DataTable.Columns.Add("Language", typeof(string));//是否需要翻译人员

                                    //处理公务数据
                                    for (int b = 0; b < listoa.Count; b++)
                                    {
                                        //起止时间
                                        string[] time = new string[2];
                                        if (listoa[b].Time.Contains('—'))
                                        {
                                            time = listoa[b].Time.Split('—');
                                        }
                                        else if (listoa[b].Time.Contains('-'))
                                        {
                                            time = listoa[b].Time.Split('-');
                                        }

                                        //添加数据
                                        if (time.Length >= 2)
                                        {
                                            OA_DataTable.Rows.Add(time[0], time[1], listoa[b].Client, listoa[b].Address, listoa[b].Contact, listoa[b].Tel, listoa[b].Dresscode, listoa[b].IsNeedTrans, listoa[b].language);
                                        }
                                        else
                                        {
                                            //PublicCode.GetAlertMsg(this, GetType(), timeList[i] + "的公务数据有误，请检查");
                                        }

                                    }
                                    //排序
                                    OA_DataTable.DefaultView.Sort = "StartTime asc";
                                    OA_DataTable = OA_DataTable.DefaultView.ToTable();


                                    //导入信息
                                    for (int index = 0; index < OA_DataTable.Rows.Count; index++)
                                    {
                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                        {
                                            if (OATemp != "")
                                            {
                                                OATemp = OATemp + "\r\n"
                                                         + OA_DataTable.Rows[index]["StartTime"].ToString()
                                                         + "-"
                                                         + OA_DataTable.Rows[index]["EndTime"].ToString()
                                                         + "  拜访" + OA_DataTable.Rows[index]["Client"].ToString()
                                                         + "，联系人：" + OA_DataTable.Rows[index]["Contact"].ToString()
                                                         + "，电话：" + OA_DataTable.Rows[index]["Tel"].ToString()
                                                         + "，地址：" + OA_DataTable.Rows[index]["Address"].ToString()
                                                         + "，着装要求：" + OA_DataTable.Rows[index]["Dresscode"].ToString()
                                                         + "，是否需要翻译：" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
                                                         + "，议题：-";
                                            }
                                            else
                                            {
                                                OATemp = OA_DataTable.Rows[index]["StartTime"].ToString()
                                                         + "-"
                                                         + OA_DataTable.Rows[index]["EndTime"].ToString()
                                                         + "  拜访" + OA_DataTable.Rows[index]["Client"].ToString()
                                                         + "，联系人：" + OA_DataTable.Rows[index]["Contact"].ToString()
                                                         + "，电话：" + OA_DataTable.Rows[index]["Tel"].ToString()
                                                         + "，地址：" + OA_DataTable.Rows[index]["Address"].ToString()
                                                         + "，着装要求：" + OA_DataTable.Rows[index]["Dresscode"].ToString()
                                                         + "，是否需要翻译：" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
                                                         + "，议题：-";
                                            }
                                        }
                                        else
                                        {
                                            //导入公务
                                            trip = trip + "\r\n"
                                                        + OA_DataTable.Rows[index]["StartTime"].ToString()
                                                        + "-"
                                                        + OA_DataTable.Rows[index]["EndTime"].ToString()
                                                         + "  拜访" + OA_DataTable.Rows[index]["Client"].ToString()
                                                         + "，联系人：" + OA_DataTable.Rows[index]["Contact"].ToString()
                                                         + "，电话：" + OA_DataTable.Rows[index]["Tel"].ToString()
                                                         + "，地址：" + OA_DataTable.Rows[index]["Address"].ToString()
                                                         + "，着装要求：" + OA_DataTable.Rows[index]["Dresscode"].ToString()
                                                         + "，是否需要翻译：" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
                                                         + "，议题：-";
                                        }
                                        //当天第一个公务或许都是从酒店出发，因此可计算酒店到公务地址的距离和时间
                                        if (index == 0)
                                        {
                                            #region 酒店
                                            foreach (var h in listht)
                                            {
                                                if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
                                                 && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
                                                {
                                                    //利用谷歌API计算路线
                                                    GoogleMapApiResult g = null;
                                                    if (g != null)
                                                    {
                                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                        {
                                                            OATemp = OATemp + "。  （" + g.Distance + "，" + g.Time + "）";
                                                        }
                                                        else
                                                        {
                                                            trip = trip + "。  （" + g.Distance + "，" + g.Time + "）";
                                                        }

                                                    }
                                                    else
                                                    {
                                                        try
                                                        {
                                                            JObject Result = GetDirectionByGoogleApi(h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString());

                                                            if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                            {
                                                                OATemp = OATemp + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                                + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                            }
                                                            else
                                                            {
                                                                trip = trip + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                            + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                            }


                                                            GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                            gtemp.Diid = di.Id;
                                                            gtemp.Date = "";
                                                            gtemp.Moment = "";
                                                            gtemp.StartAddress = h.HotelAddress;
                                                            gtemp.EndAddress = OA_DataTable.Rows[0]["Address"].ToString();
                                                            gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                            gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                            //gmrs.Add(gtemp);
                                                        }
                                                        catch
                                                        {
                                                            if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                            {
                                                                OATemp = OATemp + "。  （谷歌接口异常，无法测算路程时间）";
                                                            }
                                                            else
                                                            {
                                                                trip = trip + "。  （谷歌接口异常，无法测算路程时间）";
                                                            }

                                                        }
                                                    }
                                                }
                                            }
                                            #endregion
                                        }
                                        //第二个公务是由中午的餐厅前往公务地址，具有随机性，因此不计算此方向距离时间；但可计算由公务地址回酒店的信息
                                        else
                                        {
                                            #region 酒店
                                            foreach (var h in listht)
                                            {
                                                if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
                                                 && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
                                                {
                                                    //利用谷歌API计算路线
                                                    GoogleMapApiResult g = null;
                                                    if (g != null)
                                                    {
                                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                        {
                                                            OATemp = OATemp + "。  （" + g.Distance + "，" + g.Time + "）";
                                                        }
                                                        else
                                                        {
                                                            trip = trip + "。  （" + g.Distance + "，" + g.Time + "）";
                                                        }
                                                    }
                                                    else
                                                    {
                                                        try
                                                        {
                                                            JObject Result = GetDirectionByGoogleApi(OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress);
                                                            if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                            {
                                                                OATemp = OATemp + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                                + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                            }
                                                            else
                                                            {
                                                                trip = trip + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                            + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                            }

                                                            GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                            gtemp.Diid = di.Id;
                                                            gtemp.Date = "";
                                                            gtemp.Moment = "";
                                                            gtemp.StartAddress = OA_DataTable.Rows[0]["Address"].ToString();
                                                            gtemp.EndAddress = h.HotelAddress;
                                                            gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                            gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                            //gmrs.Add(gtemp);
                                                        }
                                                        catch
                                                        {
                                                            if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                            {
                                                                OATemp = OATemp + "。  （谷歌接口异常，无法测算路程时间）";
                                                            }
                                                            else
                                                            {
                                                                trip = trip + "。  （谷歌接口异常，无法测算路程时间）";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            #endregion
                                        }
                                    }
                                }
                                #endregion


                                #region 酒店      
                                foreach (var h in listht)
                                {

                                    if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
                                     && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))//不去“》=”的原因是行程最后一天一般不会有酒店
                                    {
                                        //利用谷歌API计算路线
                                        if (AirPort != "")
                                        {
                                            GoogleMapApiResult g = null;

                                            if (g != null)
                                            {
                                                trip = trip + "\r\n"
                                                    + leaveAirPortTime + " 乘车前往酒店:（" + g.Distance + "，" + g.Time + "）";

                                                //计算“抵达酒店办理入住手续”的时间
                                                string CheckInHotelTime;

                                                //处理时间格式
                                                string hours = "", mins = "";
                                                if (g.Time.Contains("hour"))
                                                {
                                                    g.Time = g.Time.Replace("hour", "h");

                                                }
                                                else if (g.Time.Contains("hours"))
                                                {
                                                    g.Time = g.Time.Replace("hours", "h");
                                                }

                                                g.Time = g.Time.Replace("mins", "m");
                                                if (g.Time.Contains("h"))
                                                {
                                                    hours = g.Time.Split('h')[0].Trim();

                                                }
                                                else if (!g.Time.Contains("h"))
                                                {
                                                    mins = g.Time.Split('m')[0].Trim();
                                                }

                                                int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                min = min + Convert.ToInt32(mins);
                                                if (min > 59)
                                                {
                                                    min = min - 60;
                                                    hour = hour + 1;
                                                }
                                                if (hours != "")
                                                {
                                                    hour = hour + Convert.ToInt32(hours);
                                                }
                                                if (hour > 23)
                                                {
                                                    hour = hour - 24;
                                                }

                                                CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                trip = trip + "\r\n"
                                                            + CheckInHotelTime + " 抵达酒店办理入住手续";
                                            }
                                            else
                                            {
                                                try
                                                {
                                                    JObject Result = GetDirectionByGoogleApi(AirPort, h.HotelAddress);

                                                    trip = trip + "\r\n"
                                                        + leaveAirPortTime + " 乘车前往酒店:（" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                                                 + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";

                                                    //计算“抵达酒店办理入住手续”的时间
                                                    string CheckInHotelTime;

                                                    //处理时间格式
                                                    string Gtime = "", hours = "", mins = "";
                                                    if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                    {
                                                        Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                    }
                                                    else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                    {
                                                        Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                    }
                                                    Gtime = Gtime.Replace("mins", "m");

                                                    if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                    {
                                                        hours = Gtime.Split('h')[0].Trim();

                                                    }
                                                    else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                    {
                                                        mins = Gtime.Split('m')[0].Trim();
                                                    }


                                                    int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                    int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                    min = min + Convert.ToInt32(mins);
                                                    if (min > 59)
                                                    {
                                                        min = min - 60;
                                                        hour = hour + 1;
                                                    }

                                                    if (hours != "")
                                                    {
                                                        hour = hour + Convert.ToInt32(hours);
                                                    }
                                                    if (hour > 23)
                                                    {
                                                        hour = hour - 24;
                                                    }
                                                    CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                    CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                    trip = trip + "\r\n"
                                                                + CheckInHotelTime + " 抵达酒店办理入住手续";

                                                    GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                    gtemp.Diid = di.Id;
                                                    gtemp.Date = "";
                                                    gtemp.Moment = "";
                                                    gtemp.StartAddress = AirPort;
                                                    gtemp.EndAddress = h.HotelAddress;
                                                    gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                    gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                    //gmrs.Add(gtemp);

                                                }
                                                catch
                                                {
                                                    trip = trip + "\r\n"
                                                         + "          （谷歌接口异常，无法测算的路程时间）";
                                                }
                                            }

                                        }

                                        trip = trip + "\r\n"
                                            + "          酒店名称：" + h.HotelName + "\r\n"
                                            + "          酒店地址：" + h.HotelAddress + "\r\n"
                                            + "          酒店电话：" + h.HotelTel + "      酒店传真：" + (h.HotelFax == "" ? "-" : h.HotelFax);

                                        if (i == 0 && !string.IsNullOrEmpty(OATemp))
                                        {
                                            trip = trip + "\r\n" + OATemp;
                                        }
                                    }
                                }
                                #endregion


                                #region 当天交通工具赋值
                                //一般行程第一天都是先乘坐飞机后乘坐汽车
                                if (i == 0)
                                {
                                    tlTemp.Traffic_First = "飞机";
                                    tlTemp.Traffic_Second = "汽车";
                                }
                                else
                                {
                                    // 根据车导地接表数据判断交通工具：汽车
                                    List<Grp_CarTouristGuideGroundReservations> ListCar = listctg.FindAll(c => Convert.ToDateTime(c.ServiceStartTime) <= Convert.ToDateTime(timeList[i])
                                                                                                        && Convert.ToDateTime(c.ServiceEndTime) >= Convert.ToDateTime(timeList[i]));
                                    //交通工具：汽车
                                    if (ListCar.Count > 0)
                                    {
                                        tlTemp.Traffic_First = "汽车";

                                        //交通工具：飞机
                                        if (airSign == true)
                                        {
                                            tlTemp.Traffic_Second = "飞机";
                                        }
                                        else
                                        {
                                            tlTemp.Traffic_Second = "";
                                        }
                                    }
                                    else
                                    {
                                        tlTemp.Traffic_First = "汽车";

                                        //交通工具：飞机
                                        if (airSign == true)
                                        {
                                            tlTemp.Traffic_Second = "飞机";
                                        }
                                        else
                                        {
                                            tlTemp.Traffic_Second = "";
                                        }
                                    }


                                }
                                #endregion

                                tlTemp.Trip = trip;

                                tlTemp.CreateUserId = di.Id;
                                tlTemp.CreateTime = GetBeijingTime();
                                tlTemp.Issel = 1;
                                tlTemp.Diffgroup = 1;
                                tlTemp.IsDel = 0;

                                AddTravelList(tlTemp);
                            }

                        }
                        else if (timeList.Count < listTravel.Count)//2改版天数<原版天数
                        {
                            //2.1替换日期
                            for (int i = 0; i < timeList.Count; i++)
                            {

                                //日期转换星期
                                string weekday = weekdays[(int)new DateTime(
                                   Convert.ToInt32(timeList[i].Split('-')[0]),
                                   Convert.ToInt32(timeList[i].Split('-')[1]),
                                   Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];

                                //日期去掉0
                                string monthStr = "Unknown", dayStr = "Unknown";

                                if (!string.IsNullOrEmpty(timeList[i]))
                                {
                                    DateTime dateTime = new DateTime();
                                    bool convertResult = DateTime.TryParse(timeList[i], out dateTime);
                                    if (convertResult)
                                    {
                                        monthStr = dateTime.Month.ToString();
                                        dayStr = dateTime.Day.ToString();
                                    }
                                }

                                //日期
                                listTravel[i].Date = monthStr + "月" + dayStr + "日";

                                //listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
                                listTravel[i].WeekDay = weekday;


                                listTravel[i].CreateUserId = UserId;
                                listTravel[i].CreateTime = GetBeijingTime();
                                listTravel[i].IsDel = 0;
                                EditTravelList(listTravel[i]);
                            }

                            //2.2删除多余行程
                            DelOld(comb_Diid, listTravel[timeList.Count - 1].Id, listTravel[listTravel.Count - 1].Id);
                        }
                        else//3改版天数=原版天数
                        {
                            //3.1替换日期
                            for (int i = 0; i < timeList.Count; i++)
                            {
                                //日期去掉0
                                string monthStr = "Unknown", dayStr = "Unknown";

                                if (!string.IsNullOrEmpty(timeList[i]))
                                {
                                    DateTime dateTime = new DateTime();
                                    bool convertResult = DateTime.TryParse(timeList[i], out dateTime);
                                    if (convertResult)
                                    {
                                        monthStr = dateTime.Month.ToString();
                                        dayStr = dateTime.Day.ToString();
                                    }
                                }

                                //日期
                                listTravel[i].Date = monthStr + "月" + dayStr + "日";

                                //日期转换星期
                                string weekday = weekdays[(int)new DateTime(
                                   Convert.ToInt32(timeList[i].Split('-')[0]),
                                   Convert.ToInt32(timeList[i].Split('-')[1]),
                                   Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
                                listTravel[i].WeekDay = weekday;

                                listTravel[i].CreateUserId = UserId;
                                listTravel[i].CreateTime = GetBeijingTime();
                                listTravel[i].IsDel = 0;
                                EditTravelList(listTravel[i]);
                            }
                        }
                    }
                    else //若本团不存行程，则生成行程。 包含机票、酒店、车导地接等数据
                    {
                        //航班号标识
                        //string flightcode_Sign = "";
                        //三字码标识
                        //string citycode_Sign = "";

                        #region 城市数据 20210823 贾文滔
                        List<CityInDate> CityInDateList = GetCityByDataTable(dt);
                        #endregion

                        //生成行程
                        for (int i = 0; i < timeList.Count; i++)
                        {
                            //实、例化一个temp
                            Grp_TravelList tlTemp = new Grp_TravelList();

                            //团号
                            tlTemp.Diid = di.Id;
                            //天数序号
                            tlTemp.Days = i + 1;

                            //日期去掉0

                            var datetime1 = timeList[i];
                            string monthStr = "Unknown", dayStr = "Unknown";

                            if (!string.IsNullOrEmpty(datetime1))
                            {
                                DateTime dateTime = new DateTime();
                                bool convertResult = DateTime.TryParse(datetime1, out dateTime);
                                if (convertResult)
                                {
                                    monthStr = dateTime.Month.ToString();
                                    dayStr = dateTime.Day.ToString();
                                }
                            }

                            //日期
                            tlTemp.Date = monthStr + "月" + dayStr + "日";
                            //日期
                            //tlTemp.Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";

                            //日期转换星期
                            string weekday = weekdays[(int)new DateTime(
                               Convert.ToInt32(timeList[i].Split('-')[0]),
                               Convert.ToInt32(timeList[i].Split('-')[1]),
                               Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
                            tlTemp.WeekDay = weekday;


                            //行程
                            string trip = "";
                            //历经城市
                            string city = "";


                            #region  机票数据

                            //根据航班信息推出抵达机场的位置信息
                            string AirPort = "";

                            //根据航班时间前后推进入机场或离开机场的时间
                            string GoAirportTime = "", leaveAirPortTime = "";

                            //飞机标识
                            bool airSign = false;

                            //查询该日期下的航班信息
                            //resultRows字段顺序为：航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间,整理后的起飞日期,整理后的到达日期
                            DataRow[] resultRows = dt.Select("Day like '%" + timeList[i] + "%'");

                            if (resultRows.Count() > 0)
                            {
                                //修改标识
                                airSign = true;
                            }

                            //同一天只有一条数据走正常判定
                            if (resultRows.Count() == 1)
                            {

                                #region 三字码

                                string _citycode = resultRows[0]["Three"].ToString();

                                //起飞城市三字码
                                Res_ThreeCode font_threecode = null;
                                string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
                                //抵达城市
                                string font_City = "";
                                //起飞城市机场
                                string font_Airport = "";

                                //抵达城市三字码
                                Res_ThreeCode back_threecode = null;
                                string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
                                //抵达城市机场
                                string back_Airport = "";
                                //抵达城市
                                string back_City = "";




                                font_threecode = getByThree(font_citycode);
                                //验证是否存在三字码
                                if (font_threecode == null)
                                {
                                    city = city + "【此三字码" + font_citycode + "未收录，请机票同事录入】" + "一";
                                    font_Airport = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                    font_City = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                }
                                else
                                {
                                    city = city + "/" + font_threecode.City;
                                    font_Airport = font_threecode.AirPort;
                                    font_City = font_threecode.City; ;
                                }
                                back_threecode = getByThree(end_citycode);
                                if (back_threecode == null)
                                {
                                    city = city + "【此三字码" + end_citycode + "未收录，请机票同事录入】" + "一";
                                    back_Airport = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                    back_City = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                }
                                else
                                {
                                    city = city + "/" + back_threecode.City;
                                    //部分黄热病国家，需要提醒打疫苗
                                    string result = GetCountryInfo(back_threecode.Country);
                                    if (result.Contains("3"))
                                    {
                                        city += "（此地区为黄热病地区，请注意打疫苗）";
                                    }
                                    back_Airport = back_threecode.AirPort;
                                    back_City = back_threecode.City;
                                    //查询酒店路线要用
                                    AirPort = back_threecode.AirPort;
                                }
                                //行程里加入城市
                                #endregion

                                #region 信息准备

                                trip = city.TrimStart('/');
                                //起飞航站楼
                                string _StartBuilding = resultRows[0]["StartBuilding"].ToString();
                                //转机航站楼
                                string _EndBuilding = resultRows[0]["EndBuilding"].ToString();
                                //起飞时刻
                                string _startTime = resultRows[0]["StartTime"].ToString();
                                //飞行时刻
                                string _flightTime = resultRows[0]["FlightTime"].ToString();
                                _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
                                //到达时刻
                                string _endTime = resultRows[0]["EndTime"].ToString();

                                //航班号
                                string _flightcode = resultRows[0]["Fliagtcode"].ToString();
                                //航司
                                Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2));
                                string _aircompany_Name = "";
                                if (aircompany == null)
                                {
                                    _aircompany_Name = "【此航司" + resultRows[0]["Fliagtcode"].ToString().Substring(0, 2) + "未收录，请机票同事录入】";
                                }
                                else
                                {
                                    _aircompany_Name = aircompany.CnName;
                                }



                                //机型判断
                                string airModel = resultRows[0]["AirModel"].ToString();

                                airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
                                #endregion

                                #region trip编辑
                                //若本行抵达时间包含"+1",则本行为母版行,仅提示登机
                                if (resultRows[0]["Sign"].ToString() == "0" && _endTime.Contains("+"))
                                {
                                    //根据航班信息推算进入机场的时间                               
                                    int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
                                    string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
                                    if (result.Contains("2"))
                                    {
                                        temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                    }
                                    if (temp < 0)
                                    {
                                        temp = temp + 24;
                                    }
                                    GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                    GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                    //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                    if (i > 0)
                                    {
                                        #region 酒店      
                                        foreach (var h in listht)
                                        {
                                            if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                             && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
                                            {
                                                //利用谷歌API计算路线
                                                if (AirPort != "")
                                                {
                                                    GoogleMapApiResult g = null;

                                                    if (g != null)
                                                    {
                                                        //计算“酒店到机场”的时间
                                                        string CheckoutHotelTime;

                                                        //处理时间格式
                                                        string hours = "", mins = "";
                                                        if (g.Time.Contains("hour"))
                                                        {
                                                            g.Time = g.Time.Replace("hour", "h");

                                                        }
                                                        else if (g.Time.Contains("hours"))
                                                        {
                                                            g.Time = g.Time.Replace("hours", "h");
                                                        }

                                                        g.Time = g.Time.Replace("mins", "m");
                                                        if (g.Time.Contains("h"))
                                                        {
                                                            hours = g.Time.Split('h')[0].Trim();

                                                        }
                                                        else if (!g.Time.Contains("h"))
                                                        {
                                                            mins = g.Time.Split('m')[0].Trim();
                                                        }

                                                        int hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                        int min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                        min = min - Convert.ToInt32(mins);
                                                        if (min < 0)
                                                        {
                                                            min = min + 60;
                                                            hour = hour - 1;
                                                        }
                                                        if (hours != "")
                                                        {
                                                            hour = hour - Convert.ToInt32(hours);
                                                        }
                                                        if (hour < 0)
                                                        {
                                                            hour = hour + 24;
                                                        }

                                                        CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                        CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                        trip = trip + "\r\n"
                                                                    + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                    }
                                                    else
                                                    {
                                                        try
                                                        {
                                                            JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                            //计算“抵达酒店办理入住手续”的时间
                                                            string CheckoutHotelTime;

                                                            //处理时间格式
                                                            string Gtime = "", hours = "", mins = "";
                                                            if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                            {
                                                                Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                            }
                                                            else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                            {
                                                                Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                            }
                                                            Gtime = Gtime.Replace("mins", "m");

                                                            if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                            {
                                                                hours = Gtime.Split('h')[0].Trim();

                                                            }
                                                            else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                            {
                                                                mins = Gtime.Split('m')[0].Trim();
                                                            }


                                                            int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                            int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                            min = min - Convert.ToInt32(mins);
                                                            if (min < 0)
                                                            {
                                                                min = min + 60;
                                                                hour = hour - 1;
                                                            }

                                                            if (hours != "")
                                                            {
                                                                hour = hour + Convert.ToInt32(hours);
                                                            }
                                                            if (hour < 0)
                                                            {
                                                                hour = hour + 24;
                                                            }
                                                            CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                            CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                            trip = trip + "\r\n"
                                                                        + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                            GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                            gtemp.Diid = di.Id;
                                                            gtemp.Date = "";
                                                            gtemp.Moment = "";
                                                            gtemp.StartAddress = AirPort;
                                                            gtemp.EndAddress = h.HotelAddress;
                                                            gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                            gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                            //gmrs.Add(gtemp);

                                                        }
                                                        catch
                                                        {
                                                            trip = trip + "\r\n"
                                                                 + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion
                                    }

                                    //行程
                                    trip = trip
                                         + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                         + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                         + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；";

                                    //标记本行为母版行
                                    //flightcode_Sign = resultRows[0]["Fliagtcode"].ToString();
                                    //citycode_Sign = resultRows[0]["Three"].ToString();
                                }
                                //与前一行航班号,三字码相同且本行抵达时间不包含"+1"，则本行是被生成的重复行,仅提示抵达
                                else if (resultRows[0]["Sign"].ToString() == "1") /* && (!_endTime.Contains("+"))&&(_flightcode == flightcode_Sign)&&(_citycode == citycode_Sign)*/
                                {

                                    //行程
                                    trip = trip
                                         + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";

                                    //根据航班信息推算离开机场的时间
                                    int temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                    leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                    leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                    if (i == timeList.Count - 1)//如果本日是行程的最后一天，则提醒“行程圆满结束” 
                                    {
                                        trip = trip + "，圆满结束此次访问之行！";
                                    }
                                    else //如果本日不是行程的最后一天，正常提醒
                                    {
                                        trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                        trip = trip + "；\r\n" + leaveAirPortTime + "搭乘专车前往酒店，抵达后办理入住；";
                                    }

                                    //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                    int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                    int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                    min = min + 10;
                                    if (min > 59)
                                    {
                                        min = min - 60;
                                        hour = hour + 1;
                                    }
                                    if (hour > 23)
                                    {
                                        hour = hour - 24;
                                    }
                                    leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                    leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                }
                                //正常提示
                                else
                                {
                                    //根据航班信息推算进入机场的时间
                                    int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
                                    string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
                                    if (result.Contains("2"))
                                    {
                                        temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                    }
                                    if (temp < 0)
                                    {
                                        temp = temp + 24;
                                    }
                                    GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                    GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                    //根据航班信息推算离开机场的时间
                                    temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                    leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                    leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                    //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                    if (i > 0)
                                    {
                                        #region 酒店      
                                        foreach (var h in listht)
                                        {
                                            if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                             && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
                                            {
                                                //利用谷歌API计算路线
                                                if (AirPort != "")
                                                {
                                                    GoogleMapApiResult g = null;

                                                    if (g != null)
                                                    {
                                                        //计算“酒店到机场”的时间
                                                        string CheckoutHotelTime;

                                                        //处理时间格式
                                                        string hours = "0", mins = "0";
                                                        if (g.Time.Contains("hour"))
                                                        {
                                                            g.Time = g.Time.Replace("hour", "h");

                                                        }
                                                        else if (g.Time.Contains("hours"))
                                                        {
                                                            g.Time = g.Time.Replace("hours", "h");
                                                        }

                                                        g.Time = g.Time.Replace("mins", "m");
                                                        if (g.Time.Contains("h"))
                                                        {
                                                            hours = g.Time.Split('h')[0].Trim();

                                                        }
                                                        else if (!g.Time.Contains("h"))
                                                        {
                                                            mins = g.Time.Split('m')[0].Trim();
                                                        }

                                                        int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                        int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                        _min = _min - Convert.ToInt32(mins);
                                                        if (_min < 0)
                                                        {
                                                            _min = _min + 60;
                                                            _hour = _hour - 1;
                                                        }
                                                        if (hours != "")
                                                        {
                                                            _hour = _hour - Convert.ToInt32(hours);
                                                        }
                                                        if (_hour < 0)
                                                        {
                                                            _hour = _hour + 24;
                                                        }

                                                        CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                        CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                        trip = trip + "\r\n"
                                                                    + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                    }
                                                    else
                                                    {
                                                        try
                                                        {
                                                            JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                            //计算“抵达酒店办理入住手续”的时间
                                                            string CheckoutHotelTime;

                                                            //处理时间格式
                                                            string Gtime = "", hours = "0", mins = "0";
                                                            if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                            {
                                                                Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                            }
                                                            else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                            {
                                                                Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                            }
                                                            Gtime = Gtime.Replace("mins", "m");

                                                            if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                            {
                                                                hours = Gtime.Split('h')[0].Trim();

                                                            }
                                                            else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                            {
                                                                mins = Gtime.Split('m')[0].Trim();
                                                            }


                                                            int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                            int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                            _min = _min - Convert.ToInt32(mins);
                                                            if (_min < 0)
                                                            {
                                                                _min = _min + 60;
                                                                _hour = _hour - 1;
                                                            }

                                                            if (hours != "")
                                                            {
                                                                _hour = _hour + Convert.ToInt32(hours);
                                                            }
                                                            if (_hour < 0)
                                                            {
                                                                _hour = _hour + 24;
                                                            }
                                                            CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                            CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());



                                                            GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                            gtemp.Diid = di.Id;
                                                            gtemp.Date = "";
                                                            gtemp.Moment = "";
                                                            gtemp.StartAddress = AirPort;
                                                            gtemp.EndAddress = h.HotelAddress;
                                                            gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                            gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                            //gmrs.Add(gtemp);

                                                            trip = trip + "\r\n"
                                                                      + CheckoutHotelTime + " 乘车前往机场:（" + gtemp.Distance + "，" + gtemp.Time + "）";
                                                        }
                                                        catch
                                                        {
                                                            trip = trip + "\r\n"
                                                                 + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion
                                    }

                                    trip = trip
                                         + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                         + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                         + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                         + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";



                                    if (i == timeList.Count - 1)//如果本日是行程的最后一天，先增加酒店到机场的距离时间，再在末尾提醒“行程圆满结束” 
                                    {
                                        trip = trip + "，圆满结束此次访问之行！";
                                    }
                                    else //如果本日不是行程的最后一天，正常提醒
                                    {
                                        trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                        trip = trip + "\r\n" + leaveAirPortTime + " 搭乘专车前往酒店，抵达后办理入住；";
                                    }

                                    //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                    int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                    int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                    min = min + 10;
                                    if (min > 59)
                                    {
                                        min = min - 60;
                                        hour = hour + 1;
                                    }
                                    if (hour > 23)
                                    {
                                        hour = hour - 24;
                                    }
                                    leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                    leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
                                }
                                #endregion

                            }
                            //同一天多条数据走分类讨论
                            else
                            {
                                for (int n = 0; n < resultRows.Count(); n++)
                                {
                                    city = "";

                                    #region 三字码

                                    string _citycode = resultRows[n]["Three"].ToString();

                                    //起飞城市三字码
                                    Res_ThreeCode font_threecode = null;
                                    string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
                                    //抵达城市
                                    string font_City = "";
                                    //起飞城市机场
                                    string font_Airport = "";

                                    //抵达城市三字码
                                    Res_ThreeCode back_threecode = null;
                                    string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
                                    //抵达城市机场
                                    string back_Airport = "";
                                    //抵达城市
                                    string back_City = "";


                                    font_threecode = getByThree(font_citycode);
                                    //验证是否存在三字码
                                    if (font_threecode == null)
                                    {
                                        city = city + "【此三字码" + font_citycode + "未收录，请机票同事录入】" + "一";
                                        font_Airport = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                        font_City = "【此三字码" + font_citycode + "未收录，请机票同事录入】";
                                    }
                                    else
                                    {
                                        city = city + "/" + font_threecode.City;
                                        font_Airport = font_threecode.AirPort;
                                        font_City = font_threecode.City; ;
                                    }
                                    back_threecode = getByThree(end_citycode);
                                    if (back_threecode == null)
                                    {
                                        city = city + "【此三字码" + end_citycode + "未收录，请机票同事录入】" + "一";
                                        back_Airport = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                        back_City = "【此三字码" + end_citycode + "未收录，请机票同事录入】";
                                    }
                                    else
                                    {
                                        city = city + "/" + back_threecode.City;
                                        //部分黄热病国家，需要提醒打疫苗
                                        string result = GetCountryInfo(back_threecode.Country);
                                        if (result.Contains("3"))
                                        {
                                            city += "（此地区为黄热病地区，请注意打疫苗）";
                                        }
                                        back_Airport = back_threecode.AirPort;
                                        back_City = back_threecode.City;
                                        //查询酒店路线要用
                                        AirPort = back_threecode.AirPort;
                                    }
                                    //行程里加入城市
                                    if (trip == "")
                                    {
                                        trip = city.TrimStart('/');
                                    }
                                    else
                                    {
                                        trip = trip + "\r\n"
                                             + city.TrimStart('/');
                                    }
                                    //起飞航站楼
                                    string _StartBuilding = resultRows[n]["StartBuilding"].ToString();
                                    //转机航站楼
                                    string _EndBuilding = resultRows[n]["EndBuilding"].ToString();
                                    //起飞时刻
                                    string _startTime = resultRows[n]["StartTime"].ToString();
                                    //飞行时刻
                                    string _flightTime = resultRows[n]["FlightTime"].ToString();
                                    _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
                                    //到达时刻
                                    string _endTime = resultRows[n]["EndTime"].ToString();

                                    //航班号
                                    string _flightcode = resultRows[n]["Fliagtcode"].ToString();
                                    //航司
                                    Res_AirCompany aircompany = getByShortCode(_flightcode.Substring(0, 2));
                                    string _aircompany_Name = "";
                                    if (aircompany == null)
                                    {
                                        _aircompany_Name = "【此航司" + resultRows[n]["Fliagtcode"].ToString().Substring(0, 2) + "未收录，请机票同事录入】";
                                    }
                                    else
                                    {
                                        _aircompany_Name = aircompany.CnName;
                                    }



                                    //机型判断
                                    string airModel = resultRows[n]["AirModel"].ToString();

                                    airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
                                    #endregion

                                    //Sign字段为标识，string类型，含义：0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
                                    //目前存在两种情况：同一天的多条数据标识为“0->0”或“1->0”
                                    //如下示例
                                    //Day ArrivedDate Sign
                                    //10      10       0
                                    //10      11       0
                                    //11      11       1
                                    //11      12       0
                                    //12      12       1
                                    if (n == 0)
                                    {
                                        //原生机票代码
                                        if (resultRows[n]["Sign"].ToString() == "0")
                                        {
                                            #region trip编辑
                                            //根据航班信息推算进入机场的时间
                                            int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
                                            string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
                                            if (result.Contains("2"))
                                            {
                                                temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                            }
                                            if (temp < 0)
                                            {
                                                temp = temp + 24;
                                            }
                                            GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                            GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);


                                            //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                            if (i > 0)
                                            {
                                                #region 酒店      
                                                foreach (var h in listht)
                                                {
                                                    if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                                     && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
                                                    {
                                                        //利用谷歌API计算路线
                                                        if (AirPort != "")
                                                        {
                                                            GoogleMapApiResult g = null;

                                                            if (g != null)
                                                            {
                                                                //计算“酒店到机场”的时间
                                                                string CheckoutHotelTime;

                                                                //处理时间格式
                                                                string hours = "0", mins = "0";
                                                                if (g.Time.Contains("hour"))
                                                                {
                                                                    g.Time = g.Time.Replace("hour", "h");

                                                                }
                                                                else if (g.Time.Contains("hours"))
                                                                {
                                                                    g.Time = g.Time.Replace("hours", "h");
                                                                }

                                                                g.Time = g.Time.Replace("mins", "m");
                                                                if (g.Time.Contains("h"))
                                                                {
                                                                    hours = g.Time.Split('h')[0].Trim();

                                                                }
                                                                else if (!g.Time.Contains("h"))
                                                                {
                                                                    mins = g.Time.Split('m')[0].Trim();
                                                                }

                                                                int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                                int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                                _min = _min - Convert.ToInt32(mins);
                                                                if (_min < 0)
                                                                {
                                                                    _min = _min + 60;
                                                                    _hour = _hour - 1;
                                                                }
                                                                if (hours != "")
                                                                {
                                                                    _hour = _hour - Convert.ToInt32(hours);
                                                                }
                                                                if (_hour < 0)
                                                                {
                                                                    _hour = _hour + 24;
                                                                }

                                                                CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                trip = trip + "\r\n"
                                                                            + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                            }
                                                            else
                                                            {
                                                                try
                                                                {
                                                                    JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                                    //计算“抵达酒店办理入住手续”的时间
                                                                    string CheckoutHotelTime;

                                                                    //处理时间格式
                                                                    string Gtime = "", hours = "0", mins = "0";
                                                                    if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                                    {
                                                                        Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                                    }
                                                                    else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                                    {
                                                                        Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                                    }
                                                                    Gtime = Gtime.Replace("mins", "m");

                                                                    if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                                    {
                                                                        hours = Gtime.Split('h')[0].Trim();

                                                                    }
                                                                    else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                                    {
                                                                        mins = Gtime.Split('m')[0].Trim();
                                                                    }


                                                                    int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                                    int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                                    _min = _min - Convert.ToInt32(mins);
                                                                    if (_min < 0)
                                                                    {
                                                                        _min = _min + 60;
                                                                        _hour = _hour - 1;
                                                                    }

                                                                    if (hours != "")
                                                                    {
                                                                        _hour = _hour + Convert.ToInt32(hours);
                                                                    }
                                                                    if (_hour < 0)
                                                                    {
                                                                        _hour = _hour + 24;
                                                                    }
                                                                    CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                    CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                    trip = trip + "\r\n"
                                                                                + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                                    GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                                    gtemp.Diid = di.Id;
                                                                    gtemp.Date = "";
                                                                    gtemp.Moment = "";
                                                                    gtemp.StartAddress = AirPort;
                                                                    gtemp.EndAddress = h.HotelAddress;
                                                                    gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                                    gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                                    //gmrs.Add(gtemp);

                                                                }
                                                                catch
                                                                {
                                                                    trip = trip + "\r\n"
                                                                         + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }

                                            trip = trip
                                                 + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                                 + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                                 + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                                 + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李；";

                                            #endregion
                                        }
                                        //"+1"生成的机票代码
                                        else if (resultRows[n]["Sign"].ToString() == "1")
                                        {
                                            #region trip编辑
                                            //行程
                                            trip = trip
                                                 + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李；";
                                            #endregion
                                        }
                                    }
                                    else if (n > 0)
                                    {
                                        //若前行是原生的，则本行判定为转机
                                        if (resultRows[n - 1]["Sign"].ToString() == "0")
                                        {
                                            #region trip编辑
                                            int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 1;//一般提前提前2小时
                                            if (temp < 0)
                                            {
                                                temp = temp + 24;
                                            }
                                            GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                            GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                            trip = trip
                                             + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                             + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                             + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                             + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";

                                            //若为最后一行，则计算后备等时间
                                            if (n == resultRows.Count() - 1)
                                            {
                                                //根据航班信息推算离开机场的时间
                                                temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                                leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                                leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                                if (i == timeList.Count - 1)//如果本日是行程的最后一天，先增加酒店到机场的距离时间，再在末尾提醒“行程圆满结束” 
                                                {
                                                    trip = trip + "，圆满结束此次访问之行！";
                                                }
                                                else //如果本日不是行程的最后一天，正常提醒
                                                {
                                                    trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                                    trip = trip + "；\r\n" + leaveAirPortTime + "搭乘专车前往酒店，抵达后办理入住；";
                                                }

                                                //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                                int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                                min = min + 10;
                                                if (min > 59)
                                                {
                                                    min = min - 60;
                                                    hour = hour + 1;
                                                }
                                                if (hour > 23)
                                                {
                                                    hour = hour - 24;
                                                }
                                                leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
                                            }
                                            #endregion
                                        }
                                        //若前行是生成的，则本行判定为新出发
                                        else if (resultRows[n - 1]["Sign"].ToString() == "1")
                                        {
                                            #region trip编辑
                                            //根据航班信息推算进入机场的时间
                                            int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
                                            string result = GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
                                            if (result.Contains("2"))
                                            {
                                                temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
                                            }
                                            if (temp < 0)
                                            {
                                                temp = temp + 24;
                                            }
                                            GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                            GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);

                                            //根据航班信息推算离开机场的时间
                                            temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
                                            leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
                                            leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);

                                            //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
                                            if (i > 0)
                                            {
                                                #region 酒店      
                                                foreach (var h in listht)
                                                {
                                                    if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
                                                     && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
                                                    {
                                                        //利用谷歌API计算路线
                                                        if (AirPort != "")
                                                        {
                                                            GoogleMapApiResult g = null;

                                                            if (g != null)
                                                            {
                                                                //计算“酒店到机场”的时间
                                                                string CheckoutHotelTime;

                                                                //处理时间格式
                                                                string hours = "0", mins = "0";
                                                                if (g.Time.Contains("hour"))
                                                                {
                                                                    g.Time = g.Time.Replace("hour", "h");

                                                                }
                                                                else if (g.Time.Contains("hours"))
                                                                {
                                                                    g.Time = g.Time.Replace("hours", "h");
                                                                }

                                                                g.Time = g.Time.Replace("mins", "m");
                                                                if (g.Time.Contains("h"))
                                                                {
                                                                    hours = g.Time.Split('h')[0].Trim();

                                                                }
                                                                else if (!g.Time.Contains("h"))
                                                                {
                                                                    mins = g.Time.Split('m')[0].Trim();
                                                                }

                                                                int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
                                                                int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));

                                                                _min = _min - Convert.ToInt32(mins);
                                                                if (_min < 0)
                                                                {
                                                                    _min = _min + 60;
                                                                    _hour = _hour - 1;
                                                                }
                                                                if (hours != "")
                                                                {
                                                                    _hour = _hour - Convert.ToInt32(hours);
                                                                }
                                                                if (_hour < 0)
                                                                {
                                                                    _hour = _hour + 24;
                                                                }

                                                                CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                trip = trip + "\r\n"
                                                                            + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";
                                                            }
                                                            else
                                                            {
                                                                try
                                                                {
                                                                    JObject Result = GetDirectionByGoogleApi(h.HotelAddress, font_Airport);

                                                                    //计算“抵达酒店办理入住手续”的时间
                                                                    string CheckoutHotelTime;

                                                                    //处理时间格式
                                                                    string Gtime = "", hours = "0", mins = "0";
                                                                    if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                                    {
                                                                        Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                                    }
                                                                    else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                                    {
                                                                        Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                                    }
                                                                    Gtime = Gtime.Replace("mins", "m");

                                                                    if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                                    {
                                                                        hours = Gtime.Split('h')[0].Trim();

                                                                    }
                                                                    else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                                    {
                                                                        mins = Gtime.Split('m')[0].Trim();
                                                                    }


                                                                    int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                                    int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                                    _min = _min - Convert.ToInt32(mins);
                                                                    if (_min < 0)
                                                                    {
                                                                        _min = _min + 60;
                                                                        _hour = _hour - 1;
                                                                    }

                                                                    if (hours != "")
                                                                    {
                                                                        _hour = _hour + Convert.ToInt32(hours);
                                                                    }
                                                                    if (_hour < 0)
                                                                    {
                                                                        _hour = _hour + 24;
                                                                    }
                                                                    CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
                                                                    CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());

                                                                    trip = trip + "\r\n"
                                                                                + CheckoutHotelTime + " 乘车前往机场:（" + g.Distance + "，" + g.Time + "）";

                                                                    GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                                    gtemp.Diid = di.Id;
                                                                    gtemp.Date = "";
                                                                    gtemp.Moment = "";
                                                                    gtemp.StartAddress = AirPort;
                                                                    gtemp.EndAddress = h.HotelAddress;
                                                                    gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                                    gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                                    //gmrs.Add(gtemp);

                                                                }
                                                                catch
                                                                {
                                                                    trip = trip + "\r\n"
                                                                         + "          乘车前往机场:（谷歌接口异常，无法测算的路程时间）";
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }

                                            trip = trip
                                                 + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续："
                                                 + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班，由" + font_City + "飞往" + back_City + "；"
                                                 + "\r\n" + "       （" + font_Airport + "/" + back_Airport + "  机型：" + airModel + "    飞行时间" + (_flightTime) + "）；"
                                                 + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续，之后前往提取行李";

                                            if (i == timeList.Count - 1)//如果本日是行程的最后一天，先增加酒店到机场的距离时间，再在末尾提醒“行程圆满结束” 
                                            {
                                                trip = trip + "，圆满结束此次访问之行！";
                                            }
                                            else //如果本日不是行程的最后一天，正常提醒
                                            {
                                                trip += pushTrip(leaveAirPortTime, back_Airport, city, out leaveAirPortTime);
                                                trip = trip + "；\r\n" + leaveAirPortTime + " 搭乘专车前往酒店，抵达后办理入住；";
                                            }

                                            //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
                                            int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                            int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
                                            min = min + 10;
                                            if (min > 59)
                                            {
                                                min = min - 60;
                                                hour = hour + 1;
                                            }
                                            if (hour > 23)
                                            {
                                                hour = hour - 24;
                                            }
                                            leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                            leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
                                            #endregion
                                        }

                                    }
                                }
                            }



                            #endregion


                            #region 行程和城市赋值
                            if (trip == "" || trip == " " || city == "" || city == " ")
                            {
                                city = CityInDateList.Find(cid => cid.Date == timeList[i]).City;
                                //部分黄热病国家，需要提醒打疫苗
                                string result = GetCountryInfo(getByCity(city)[0].Country);
                                if (result.Contains("3"))
                                {
                                    city += "（此地区为黄热病地区，请注意打疫苗）";
                                }
                                trip = city;
                            }
                            #endregion


                            #region 公务  20210820 贾文滔
                            string OATemp = "";//暂存公务活动

                            //根据团号和日期获取公务数据
                            List<Res_OfficialActivities> listoa = getByDiidAndDate(comb_Diid, timeList[i]);

                            //若listoa存在公务数据，进行排序，再进行导入
                            if (listoa != null && listoa.Count > 0)
                            {
                                //利用datatable存放公务活动数据
                                DataTable OA_DataTable = new DataTable();
                                OA_DataTable.Columns.Add("StartTime", typeof(string)); //activity开始时刻
                                OA_DataTable.Columns.Add("EndTime", typeof(string)); //activity结束时刻
                                OA_DataTable.Columns.Add("Client", typeof(string)); //activity单位
                                OA_DataTable.Columns.Add("Address", typeof(string)); //activity地址
                                OA_DataTable.Columns.Add("Contact", typeof(string)); //activity联系人
                                OA_DataTable.Columns.Add("Tel", typeof(string)); //activity联系人电话
                                OA_DataTable.Columns.Add("Dresscode", typeof(string)); //activity着装要求
                                OA_DataTable.Columns.Add("isTranslate", typeof(bool));//是否需要翻译人员
                                OA_DataTable.Columns.Add("Language", typeof(string));//是否需要翻译人员
                                //处理公务数据
                                for (int b = 0; b < listoa.Count; b++)
                                {
                                    //起止时间
                                    string[] time = new string[2];
                                    if (listoa[b].Time.Contains('—'))
                                    {
                                        time = listoa[b].Time.Split('—');
                                    }
                                    else if (listoa[b].Time.Contains('-'))
                                    {
                                        time = listoa[b].Time.Split('-');
                                    }

                                    //添加数据
                                    if (time.Length >= 2)
                                    {
                                        OA_DataTable.Rows.Add(time[0], time[1], listoa[b].Client, listoa[b].Address, listoa[b].Contact, listoa[b].Tel, listoa[b].Dresscode, listoa[b].IsNeedTrans, listoa[b].language);
                                    }
                                    else
                                    {
                                        //PublicCode.GetAlertMsg(this, GetType(), timeList[i] + "的公务数据有误，请检查");
                                    }

                                }
                                //排序
                                OA_DataTable.DefaultView.Sort = "StartTime asc";
                                OA_DataTable = OA_DataTable.DefaultView.ToTable();


                                //导入信息
                                for (int index = 0; index < OA_DataTable.Rows.Count; index++)
                                {
                                    if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                    {
                                        if (OATemp != "")
                                        {
                                            OATemp = OATemp + "\r\n"
                                                     + OA_DataTable.Rows[index]["StartTime"].ToString()
                                                     + "-"
                                                     + OA_DataTable.Rows[index]["EndTime"].ToString()
                                                         + "  拜访" + OA_DataTable.Rows[index]["Client"].ToString()
                                                         + "，联系人：" + OA_DataTable.Rows[index]["Contact"].ToString()
                                                         + "，电话：" + OA_DataTable.Rows[index]["Tel"].ToString()
                                                         + "，地址：" + OA_DataTable.Rows[index]["Address"].ToString()
                                                         + "，着装要求：" + OA_DataTable.Rows[index]["Dresscode"].ToString()
                                                         + "，是否需要翻译：" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
                                                         + "，议题：-";
                                        }
                                        else
                                        {
                                            OATemp = OA_DataTable.Rows[index]["StartTime"].ToString()
                                                     + "-"
                                                     + OA_DataTable.Rows[index]["EndTime"].ToString()
                                                         + "  拜访" + OA_DataTable.Rows[index]["Client"].ToString()
                                                         + "，联系人：" + OA_DataTable.Rows[index]["Contact"].ToString()
                                                         + "，电话：" + OA_DataTable.Rows[index]["Tel"].ToString()
                                                         + "，地址：" + OA_DataTable.Rows[index]["Address"].ToString()
                                                         + "，着装要求：" + OA_DataTable.Rows[index]["Dresscode"].ToString()
                                                         + "，是否需要翻译：" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
                                                         + "，议题：-";
                                        }
                                    }
                                    else
                                    {
                                        //导入公务
                                        trip = trip + "\r\n"
                                                    + OA_DataTable.Rows[index]["StartTime"].ToString()
                                                    + "-"
                                                    + OA_DataTable.Rows[index]["EndTime"].ToString()
                                                         + "  拜访" + OA_DataTable.Rows[index]["Client"].ToString()
                                                         + "，联系人：" + OA_DataTable.Rows[index]["Contact"].ToString()
                                                         + "，电话：" + OA_DataTable.Rows[index]["Tel"].ToString()
                                                         + "，地址：" + OA_DataTable.Rows[index]["Address"].ToString()
                                                         + "，着装要求：" + OA_DataTable.Rows[index]["Dresscode"].ToString()
                                                         + "，是否需要翻译：" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
                                                         + "，议题：-";
                                    }
                                    //当天第一个公务或许都是从酒店出发，因此可计算酒店到公务地址的距离和时间
                                    if (index == 0)
                                    {
                                        #region 酒店
                                        foreach (var h in listht)
                                        {
                                            if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
                                             && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
                                            {
                                                //利用谷歌API计算路线
                                                GoogleMapApiResult g = null;
                                                if (g != null)
                                                {
                                                    if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                    {
                                                        OATemp = OATemp + "。  （" + g.Distance + "，" + g.Time + "）";
                                                    }
                                                    else
                                                    {
                                                        trip = trip + "。  （" + g.Distance + "，" + g.Time + "）";
                                                    }

                                                }
                                                else
                                                {
                                                    try
                                                    {
                                                        JObject Result = GetDirectionByGoogleApi(h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString());

                                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                        {
                                                            OATemp = OATemp + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                            + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                        }
                                                        else
                                                        {
                                                            trip = trip + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                        + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                        }


                                                        GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                        gtemp.Diid = di.Id;
                                                        gtemp.Date = "";
                                                        gtemp.Moment = "";
                                                        gtemp.StartAddress = h.HotelAddress;
                                                        gtemp.EndAddress = OA_DataTable.Rows[0]["Address"].ToString();
                                                        gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                        gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                        //gmrs.Add(gtemp);
                                                    }
                                                    catch
                                                    {
                                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                        {
                                                            OATemp = OATemp + "。  （谷歌接口异常，无法测算路程时间）";
                                                        }
                                                        else
                                                        {
                                                            trip = trip + "。  （谷歌接口异常，无法测算路程时间）";
                                                        }

                                                    }
                                                }
                                            }
                                        }
                                        #endregion
                                    }
                                    //第二个公务是由中午的餐厅前往公务地址，具有随机性，因此不计算此方向距离时间；但可计算由公务地址回酒店的信息
                                    else
                                    {
                                        #region 酒店
                                        foreach (var h in listht)
                                        {
                                            if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
                                             && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
                                            {
                                                //利用谷歌API计算路线
                                                GoogleMapApiResult g = null;
                                                if (g != null)
                                                {
                                                    if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                    {
                                                        OATemp = OATemp + "。  （" + g.Distance + "，" + g.Time + "）";
                                                    }
                                                    else
                                                    {
                                                        trip = trip + "。  （" + g.Distance + "，" + g.Time + "）";
                                                    }
                                                }
                                                else
                                                {
                                                    try
                                                    {
                                                        JObject Result = GetDirectionByGoogleApi(OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress);
                                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                        {
                                                            OATemp = OATemp + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                            + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                        }
                                                        else
                                                        {
                                                            trip = trip + "。  （" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                        + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";
                                                        }

                                                        GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                        gtemp.Diid = di.Id;
                                                        gtemp.Date = "";
                                                        gtemp.Moment = "";
                                                        gtemp.StartAddress = OA_DataTable.Rows[0]["Address"].ToString();
                                                        gtemp.EndAddress = h.HotelAddress;
                                                        gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                        gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                        //gmrs.Add(gtemp);
                                                    }
                                                    catch
                                                    {
                                                        if (i == 0)//行程第一天的公务放在酒店后面，所以先暂存在一个变量里
                                                        {
                                                            OATemp = OATemp + "。  （谷歌接口异常，无法测算路程时间）";
                                                        }
                                                        else
                                                        {
                                                            trip = trip + "。  （谷歌接口异常，无法测算路程时间）";
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        #endregion
                                    }
                                }
                            }
                            #endregion


                            #region 酒店      
                            foreach (var h in listht)
                            {

                                if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
                                 && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))//不去“》=”的原因是行程最后一天一般不会有酒店
                                {
                                    //利用谷歌API计算路线
                                    if (AirPort != "")
                                    {
                                        GoogleMapApiResult g = null;

                                        if (g != null)
                                        {
                                            trip = trip + "\r\n"
                                                + leaveAirPortTime + " 乘车前往酒店:（" + g.Distance + "，" + g.Time + "）";

                                            //计算“抵达酒店办理入住手续”的时间
                                            string CheckInHotelTime;

                                            //处理时间格式
                                            string hours = "", mins = "";
                                            if (g.Time.Contains("hour"))
                                            {
                                                g.Time = g.Time.Replace("hour", "h");

                                            }
                                            else if (g.Time.Contains("hours"))
                                            {
                                                g.Time = g.Time.Replace("hours", "h");
                                            }

                                            g.Time = g.Time.Replace("mins", "m");
                                            if (g.Time.Contains("h"))
                                            {
                                                hours = g.Time.Split('h')[0].Trim();

                                            }
                                            else if (!g.Time.Contains("h"))
                                            {
                                                mins = g.Time.Split('m')[0].Trim();
                                            }

                                            int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                            int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                            min = min + Convert.ToInt32(mins);
                                            if (min > 59)
                                            {
                                                min = min - 60;
                                                hour = hour + 1;
                                            }
                                            if (hours != "")
                                            {
                                                hour = hour + Convert.ToInt32(hours);
                                            }
                                            if (hour > 23)
                                            {
                                                hour = hour - 24;
                                            }

                                            CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                            CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                            trip = trip + "\r\n"
                                                        + CheckInHotelTime + " 抵达酒店办理入住手续";
                                        }
                                        else
                                        {
                                            try
                                            {
                                                JObject Result = GetDirectionByGoogleApi(AirPort, h.HotelAddress);

                                                trip = trip + "\r\n"
                                                    + leaveAirPortTime + " 乘车前往酒店:（" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + "，"
                                                                                             + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + "）";

                                                //计算“抵达酒店办理入住手续”的时间
                                                string CheckInHotelTime;

                                                //处理时间格式
                                                string Gtime = "", hours = "", mins = "";
                                                if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
                                                {
                                                    Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
                                                }
                                                else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
                                                {
                                                    Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
                                                }
                                                Gtime = Gtime.Replace("mins", "m");

                                                if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
                                                {
                                                    hours = Gtime.Split('h')[0].Trim();

                                                }
                                                else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
                                                {
                                                    mins = Gtime.Split('m')[0].Trim();
                                                }


                                                int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
                                                int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));

                                                if (mins != "")
                                                    min = min + Convert.ToInt32(mins);

                                                if (min > 59)
                                                {
                                                    min = min - 60;
                                                    hour = hour + 1;
                                                }

                                                if (hours != "")
                                                {
                                                    hour = hour + Convert.ToInt32(hours);
                                                }
                                                if (hour > 23)
                                                {
                                                    hour = hour - 24;
                                                }
                                                CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
                                                CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());

                                                trip = trip + "\r\n"
                                                            + CheckInHotelTime + " 抵达酒店办理入住手续";

                                                GoogleMapApiResult gtemp = new GoogleMapApiResult();
                                                gtemp.Diid = di.Id;
                                                gtemp.Date = "";
                                                gtemp.Moment = "";
                                                gtemp.StartAddress = AirPort;
                                                gtemp.EndAddress = h.HotelAddress;
                                                gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                                                gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
                                                //gmrs.Add(gtemp);

                                            }
                                            catch
                                            {
                                                trip = trip + "\r\n"
                                                     + "          （谷歌接口异常，无法测算的路程时间）";
                                            }
                                        }

                                    }

                                    trip = trip + "\r\n"
                                        + "          酒店名称：" + h.HotelName + "\r\n"
                                        + "          酒店地址：" + h.HotelAddress + "\r\n"
                                        + "          酒店电话：" + h.HotelTel + "      酒店传真：" + (h.HotelFax == "" ? "-" : h.HotelFax);

                                    if (i == 0 && !string.IsNullOrEmpty(OATemp))
                                    {
                                        trip = trip + "\r\n" + OATemp;
                                    }
                                }
                            }
                            #endregion


                            #region 当天交通工具赋值
                            //一般行程第一天都是先乘坐飞机后乘坐汽车
                            if (i == 0)
                            {
                                tlTemp.Traffic_First = "飞机";
                                tlTemp.Traffic_Second = "汽车";
                            }
                            else
                            {
                                // 根据车导地接表数据判断交通工具：汽车
                                List<Grp_CarTouristGuideGroundReservations> ListCar = listctg.FindAll(c => Convert.ToDateTime(c.ServiceStartTime) <= Convert.ToDateTime(timeList[i])
                                                                                                    && Convert.ToDateTime(c.ServiceEndTime) >= Convert.ToDateTime(timeList[i]));
                                //交通工具：汽车
                                if (ListCar.Count > 0)
                                {
                                    tlTemp.Traffic_First = "汽车";

                                    //交通工具：飞机
                                    if (airSign == true)
                                    {
                                        tlTemp.Traffic_Second = "飞机";
                                    }
                                    else
                                    {
                                        tlTemp.Traffic_Second = "";
                                    }
                                }
                                else
                                {
                                    tlTemp.Traffic_First = "汽车";

                                    //交通工具：飞机
                                    if (airSign == true)
                                    {
                                        tlTemp.Traffic_Second = "飞机";
                                    }
                                    else
                                    {
                                        tlTemp.Traffic_Second = "";
                                    }
                                }


                            }
                            #endregion

                            tlTemp.Trip = trip;

                            tlTemp.CreateUserId = di.Id;
                            tlTemp.CreateTime = DateTime.Now;
                            //tlTemp.OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd hh:mm:ss");
                            tlTemp.Issel = 1;
                            tlTemp.Diffgroup = 1;
                            tlTemp.IsDel = 0;

                            AddTravelList(tlTemp);
                        }
                    }
                }
                catch (Exception ex)
                {
                    //Response.Write(ex.Message.ToString());
                    lblImport.Text = ex.Message;
                }

                lblImport.Text = "数据录入完成";
            }
        }

        private string pushTrip(string timeStr, string startAddress, string endAddress, out string timeOut)
        {
            startAddress = startAddress.Trim().Replace("（此地区为黄热病地区，请注意打疫苗）", "");
            endAddress = endAddress.Trim().Replace("（此地区为黄热病地区，请注意打疫苗）", "");

            decimal conversion = 1.61M;

            DateTime tripTime = DateTime.Now;
            try
            {
                tripTime = DateTime.Parse(timeStr).AddHours(-1);
            }
            catch (Exception e)
            { }

            endAddress = endAddress.TrimStart('/');
            string CheckoutHotelTime = string.Empty;
            string endCity = string.Empty;
            if (endAddress.Contains("/"))
            {
                endCity = endAddress.Split('/')[1] + "市区";
            }
            else
            {
                endCity = endAddress + "市区";
            }

            string Time = string.Empty;
            string Distance = string.Empty;
            int GetGoogleResult = 0;
            JObject Result = null;
            try
            {
                Result = GetDirectionByGoogleApi(startAddress, endCity);
                Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
                Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();


                if (Time.Contains("hours"))
                {
                    Time = Time.Replace("hours", "小时");
                }
                else if (Time.Contains("hour"))
                {
                    Time = Time.Replace("hour", "小时");
                }
                Time = Time.Replace("mins", "分钟");

                if (Time.Contains("小时"))
                {
                    GetGoogleResult = int.Parse(Regex.Split(Regex.Split(Time, "小时")[1], "分钟")[0]);
                }
                else if (Time.Contains("分钟"))
                {
                    GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]);
                }

                if (Distance.Contains("mi"))
                {
                    var distSp = Regex.Split(Distance, "mi");
                    if (distSp.Length > 0)
                    {
                        Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里";
                    }
                }
                else if (Distance.Contains("km"))
                {
                    Distance = Distance.Replace("km", "公里");
                }

                Time = Time.Replace(" ", "");
                Distance = Distance.Replace(" ", "");
            }
            catch (Exception e)
            {
                Time = "未知！";
                Distance = "未知！";
            }

            string trip = string.Empty;
            if (timeStr.Contains(":"))
            {
                int H = tripTime.Hour;
                int M = tripTime.Minute;

                if (H < 12)
                {
                    tripTime = tripTime.AddMinutes(90);

                    CheckoutHotelTime = tripTime.ToString("HH:mm");

                    trip += $"\r\n{CheckoutHotelTime} 搭乘专车前往市区";

                    trip += $"（{startAddress} - {endCity} 路程{Distance}，耗时{Time}）";

                    if (H <= 13)
                    {
                        tripTime = tripTime.AddMinutes(GetGoogleResult);
                        trip += $"\r\n{tripTime.ToString("HH:mm")} 午餐于当地餐厅;";
                    }


                }
                else if (H == 12 && M <= 30)
                {
                    tripTime = tripTime.AddMinutes(90);

                    CheckoutHotelTime = tripTime.ToString("HH:mm");

                    trip += $"\r\n{CheckoutHotelTime} 搭乘专车前往市区";

                    trip += $"（{startAddress} - {endCity} 路程{Distance}，耗时{Time}）";

                    if (H <= 13)
                    {
                        tripTime = tripTime.AddMinutes(GetGoogleResult);
                        trip += $"\r\n{tripTime.ToString("HH:mm")} 午餐于当地餐厅;";
                    }

                }
                else if (H >= 14)
                {
                    tripTime = tripTime.AddMinutes(90);

                    CheckoutHotelTime = tripTime.ToString("HH:mm");

                    trip += $"\r\n{CheckoutHotelTime} 搭乘专车前往市区;";

                    trip += $"（{startAddress} - {endCity} 路程{Distance}，耗时{Time}）";

                    tripTime = DateTime.Parse(CheckoutHotelTime).AddMinutes(GetGoogleResult);

                    trip += $"\r\n{tripTime.ToString("HH:mm")} 晚餐于当地餐厅;";
                }
            }

            timeOut = tripTime.AddMinutes(60).ToString("HH:mm");

            return trip;
        }


        /// <summary>
        /// 利用谷歌地图API查询国外两地之间距离
        /// </summary>
        /// <param name="Origin">出发地</param>
        /// <param name="Destination">目的地</param>
        /// <returns>返回Json格式</returns>
        public JObject GetDirectionByGoogleApi(string Origin, string Destination)
        {

            string appkey = "AIzaSyBdLf8u8DinXQWVPLEkdrxOJpClXSqEnho";
            string url = "https://maps.googleapis.com/maps/api/directions/json?origin=" + Origin
                       + "&destination=" + Destination + "&key=" + appkey;

            JObject result = null;
            try
            {
                #region 利用HttpWebRequest访问API
                ////创建Web访问对象
                //HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
                //req.Method = "GET";
                //req.ContentType = "application/json";
                ////创建web响应对象
                //HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                ////通过响应内容流创建StreamReader对象，因为StreamReader更高级更快
                //StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
                ////如果有编码问题就用这个方法
                ////string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());
                ////利用StreamReader就可以从响应内容从头读到尾
                //string returnJson = reader.ReadToEnd();

                ////反序列化
                //result = JsonConvert.DeserializeObject(returnJson) as JObject;
                #endregion

                #region 利用HttpClient访问API
                HttpClient myHttpClient = new HttpClient();
                HttpResponseMessage response = myHttpClient.GetAsync(url).Result;
                //var content = response.Content.ReadAsAsync<object>().Result;
                var content = response.Content.ReadAsStringAsync().Result;

                result = JObject.Parse(content);
                #endregion

                return result;
            }
            catch (Exception e)
            {
                string error = e.Message.ToString();
                result = JsonConvert.DeserializeObject(error) as JObject;
                return result;
            }




        }


        /// <summary>
        ///根据机票黑屏代码整理DataTable
        /// </summary>
        /// <param name="diid"></param>
        /// <returns></returns>
        public DataTable GetTableByBlackCode(int diid)
        {
            //黑屏代码信息
            List<Air_TicketBlackCode> listcode = Db.Queryable<Air_TicketBlackCode>().Where(x => x.DiId == diid && x.IsDel == 0).ToList();

            //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间
            //1.3U8391   TU17NOV CTUCAI  0220 0715   T1 T2  330  10H55M
            DataTable dt = new DataTable();
            dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
            dt.Columns.Add("Date", typeof(string));//起飞日期
            dt.Columns.Add("Three", typeof(string));//三字码
            dt.Columns.Add("StartTime", typeof(string));//起飞时刻
            dt.Columns.Add("EndTime", typeof(string));//到达时刻
            dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
            dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
            dt.Columns.Add("AirModel", typeof(string)); //机型
            dt.Columns.Add("FlightTime", typeof(string));//飞行时间
            dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据 
            dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
            dt.Columns.Add("Error", typeof(string));//整理的到达日期
            dt.Columns.Add("Sign", typeof(string));//标识：0表示为原生黑屏代码、1表示“+1”新增的黑屏代码

            //判断是否录入黑屏代码
            if (listcode.Count() == 0 || listcode == null)
            {
                dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null);
            }
            else
            {
                //读取单段黑屏代码
                for (int i = 0; i < listcode.Count; i++)
                {
                    //去除序号
                    string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase);
                    //去除多余空格，方法一Linq扩展方法
                    CodeList = CodeList.Where(str => str != "").ToArray();
                    CodeList = CodeList.Where(str => str != " ").ToArray();

                    //年
                    int year = Convert.ToInt32(DateTime.Now.Year.ToString());

                    //读取单条黑屏代码
                    for (int j = 0; j < CodeList.Count(); j++)
                    {
                        //去除多余空格，方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
                        CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
                        string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                        //string[] Info = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty)
                        //                   .TrimStart().TrimEnd().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                        //去除多余空格
                        Info = Info.Where(str => str != "").ToArray();
                        Info = Info.Where(str => str != " ").ToArray();

                        //判断黑屏代码是否正确拆分; 理应拆成9段
                        if (Info.Count() < 9)
                        {
                            dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null);
                        }
                        else
                        {
                            try
                            {
                                //月                  
                                int month = Convert.ToInt32(GetLonger(Info[1].Substring(4, 3)));
                                //日
                                int day = Convert.ToInt32(Info[1].Substring(2, 2));

                                #region 逐一比较月份,判断是否翻年;逐一比较三字码顶真,判断是否跑错机场
                                if (j > 0)
                                {
                                    string[] Temp = CodeList[j - 1].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty)
                                                  .TrimStart().TrimEnd().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                    Temp = Temp.Where(str => str != "").ToArray();
                                    Temp = Temp.Where(str => str != " ").ToArray();
                                    int monthTemp = Convert.ToInt32(GetLonger(Temp[1].Substring(4, 3)));
                                    // 如果相邻月份之差小于0,则证明次一条年份需+1
                                    if (month - monthTemp < 0)
                                    {
                                        year = year + 1;
                                    }
                                    //如果相邻代码三字码不顶真，提醒
                                    string FootThree = Temp[2].Substring(3, 3);
                                    string HeadThree = Info[2].Substring(0, 3);
                                    if (FootThree != HeadThree)
                                    {
                                        //DelegationInfoService s = new DelegationInfoService();
                                        //UsersService us = new UsersService();
                                        //GroupsTaskAssignmentService gts = new GroupsTaskAssignmentService();

                                        //77	行程
                                        List<Grp_GroupsTaskAssignment> list2 = Db.Queryable<Grp_GroupsTaskAssignment>().Where(x => x.CTId == 77 && x.DIId == diid && x.IsDel == 0).ToList();
                                        foreach (var temp in list2)
                                        {
                                            //if (temp.UId != 21)
                                            //SendAndReturn(us.GetUsersByID(temp.UId).Email,
                                            //    "黑屏代码提醒",
                                            //   s.GetDelegationInfoByID(diid).TeamName + "的机票黑屏代码中，相邻航段的三字码不连续，请查看！");
                                        }

                                        //85	机票预订
                                        List<Grp_GroupsTaskAssignment> list6 = Db.Queryable<Grp_GroupsTaskAssignment>().Where(x => x.CTId == 85 && x.DIId == diid && x.IsDel == 0).ToList();
                                        foreach (var temp in list6)
                                        {
                                            //if (temp.UId != 21)
                                            //SendAndReturn(us.GetUsersByID(temp.UId).Email,
                                            //    "黑屏代码提醒",
                                            //     s.GetDelegationInfoByID(diid).TeamName + "的机票黑屏代码中，相邻航段的三字码不连续，请查看！");
                                        }
                                    }

                                }
                                #endregion


                                #region 判断到达日期是否需要加1
                                if (Info[4].Contains("+"))
                                {
                                    //日期+1
                                    day = day + 1;

                                    //判断是否进入下一月
                                    if (day > Convert.ToInt32(GetDaysByMonth(Info[1].Substring(4, 3), year)))
                                    {
                                        day = day - Convert.ToInt32(GetDaysByMonth(Info[1].Substring(4, 3), year));
                                        month = month + 1;

                                        //判断是否进入下一年
                                        if (month > 12)
                                        {
                                            month = month - 12;
                                            year = year + 1;
                                        }
                                    }

                                    //月份整理格式
                                    string monthTemp = month.ToString();
                                    if (month < 10)
                                    {
                                        monthTemp = "0" + monthTemp;
                                    }
                                    //日期整理格式
                                    string daytemp = day.ToString();
                                    if (day < 10)
                                    {

                                        daytemp = "0" + daytemp;
                                    }

                                    string temp = Info[4].Split('+')[0];

                                    //添加起飞数据
                                    dt.Rows.Add(Info[0],
                                       Info[1],
                                       Info[2],
                                       Info[3],
                                       temp,
                                       Info[5],
                                       Info[6],
                                       Info[7],
                                       Info[8],
                                       year + "-" + GetLonger(Info[1].Substring(4, 3)) + "-" + Info[1].Substring(2, 2),
                                       year + "-" + monthTemp + "-" + daytemp,
                                       "",
                                       "0");
                                    //加1天，添加到达数据
                                    dt.Rows.Add(Info[0],
                                       Info[1].Replace(Info[1].Substring(2, 2), daytemp),
                                       Info[2],
                                       Info[3],
                                       temp,
                                       Info[5],
                                       Info[6],
                                       Info[7],
                                       Info[8],
                                       year + "-" + monthTemp + "-" + daytemp,
                                       year + "-" + monthTemp + "-" + daytemp,
                                       "",
                                       "1");
                                }
                                else
                                {
                                    //月份整理格式
                                    string monthTemp = month.ToString();
                                    if (month < 10)
                                    {
                                        monthTemp = "0" + monthTemp;
                                    }
                                    //日期整理格式
                                    string daytemp = day.ToString();
                                    if (day < 10)
                                    {

                                        daytemp = "0" + daytemp;
                                    }

                                    dt.Rows.Add(Info[0],
                                        Info[1],
                                        Info[2],
                                        Info[3],
                                        Info[4],
                                        Info[5],
                                        Info[6],
                                        Info[7],
                                        Info[8],
                                        year + "-" + monthTemp + "-" + daytemp,
                                        year + "-" + monthTemp + "-" + daytemp,
                                        "",
                                        "0");
                                }
                                #endregion
                            }
                            catch (Exception ex)
                            {
                                string exstr = ex.Message.ToString();
                            }
                        }

                    }

                    //排序
                    dt.DefaultView.Sort = "Day asc";
                    dt = dt.DefaultView.ToTable();
                }
            }

            return dt;
        }


        /// <summary>
        /// 根据星期,月份的缩写,转换成数字或者全称
        /// 根据币种中文名称返回币种代码
        /// 根据数字返回机型型号【2、3开头的就是空客，比如空客320，7开头的就是波音，比如波音777】
        /// 20210903贾文滔
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public string GetLonger(string temp)
        {
            string str = "";
            switch (temp.ToUpper())
            {
                case "美元":
                    str = "USD";
                    break;
                case "日元":
                    str = "JPY";
                    break;
                case "英镑":
                    str = "GBP";
                    break;
                case "欧元":
                    str = "EUR";
                    break;
                case "港币":
                    str = "HKD";
                    break;
                case "MO":
                    str = "星期一";
                    break;
                case "TU":
                    str = "星期二";
                    break;
                case "WE":
                    str = "星期三";
                    break;
                case "TH":
                    str = "星期四";
                    break;
                case "FR":
                    str = "星期五";
                    break;
                case "SA":
                    str = "星期六";
                    break;
                case "SU":
                    str = "星期天";
                    break;
                case "JAN":
                    str = "01";
                    break;
                case "FEB":
                    str = "02";
                    break;
                case "MAR":
                    str = "03";
                    break;
                case "APR":
                    str = "04";
                    break;
                case "MAY":
                    str = "05";
                    break;
                case "JUN":
                    str = "06";
                    break;
                case "JUL":
                    str = "07";
                    break;
                case "AUG":
                    str = "08";
                    break;
                case "SEP":
                    str = "09";
                    break;
                case "OCT":
                    str = "10";
                    break;
                case "NOV":
                    str = "11";
                    break;
                case "DEC":
                    str = "12";
                    break;
                case "MONDAY":
                    str = "星期一";
                    break;
                case "TUESDAY":
                    str = "星期二";
                    break;
                case "WEDNESDAY":
                    str = "星期三";
                    break;
                case "THURSDAY":
                    str = "星期四";
                    break;
                case "FRIDAY":
                    str = "星期五";
                    break;
                case "SATURDAY":
                    str = "星期六";
                    break;
                case "SUNDAY":
                    str = "星期日";
                    break;
                case "01":
                    str = "JAN";
                    break;
                case "02":
                    str = "FEB";
                    break;
                case "03":
                    str = "MAR";
                    break;
                case "04":
                    str = "APR";
                    break;
                case "05":
                    str = "MAY";
                    break;
                case "06":
                    str = "JUN";
                    break;
                case "07":
                    str = "JUL";
                    break;
                case "08":
                    str = "AUG";
                    break;
                case "09":
                    str = "SEP";
                    break;
                case "10":
                    str = "OCT";
                    break;
                case "11":
                    str = "NOV";
                    break;
                case "12":
                    str = "DEC";
                    break;
                case "2":
                    str = "空客A";
                    break;
                case "3":
                    str = "空客A";
                    break;
                case "7":
                    str = "波音";
                    break;
            }

            return str;
        }

        /// <summary>
        /// 1、查询该国家礼拜日是否为周五周六;系统标红礼拜日为这两天
        /// 2、查询该国家是否位于美国或者欧洲;需要提前3小时到机场
        /// 3、查询该国家是否为黄热病地区;系统提醒一下要打疫苗
        /// 20210824 贾文滔
        /// </summary>
        /// <param name="Country">查询国家</param>
        /// <returns>返回结果：1为礼拜日查询;2为欧洲或美国查询;3为黄热病地区查询</returns>
        public string GetCountryInfo(string Country)
        {
            //礼拜日为周5、6的城市地区;系统标红礼拜日为这两天
            string[] CountryOne = {"阿联酋","United Arab Emirates","巴林","Bahrain","卡塔尔","Qatar","沙特阿拉伯","Saudi Arabia","阿曼","Oman","科威特","Kuwait","埃及","Egypt",
                            "约旦","Jordan","伊朗","Iran","伊拉克","Iraq","叙利亚","Syria","黎巴嫩","Lebanon","巴勒斯坦","Palestine","加沙","也门","Yemen"};
            //欧洲或美国;需要提前3小时到机场
            string[] CountryTwo = {"芬兰","瑞典","挪威","冰岛","丹麦","法罗群岛（丹）","爱沙尼亚","拉脱维亚","立陶宛","白俄罗斯","俄罗斯","乌克兰","摩尔多瓦","波兰","捷克","斯洛伐克",
                            "匈牙利","德国","奥地利","瑞士","列支敦士登","英国","爱尔兰","荷兰","比利时","卢森堡","法国","摩纳哥","罗马尼亚","保加利亚","塞尔维亚","马其顿",
                            "阿尔巴尼亚","希腊","斯洛文尼亚","克罗地亚","波斯尼亚和墨塞哥维那","意大利","梵蒂冈","圣马力诺","马耳他","西班牙","葡萄牙","安道尔","美国" };
            //黄热病;系统提醒一下要打疫苗
            string[] CountryThree = {"安哥拉","布隆迪","贝宁","布基纳法索","喀麦隆","中非共和国","乍得","刚果","赤道几内亚","埃塞俄比亚","冈比亚","加蓬","几内亚","几内亚比绍",
                            "加纳","象牙海岸","科特迪瓦","肯尼亚","利比里亚","马里","尼日尔","尼日利亚","塞内加尔","塞拉利昂","苏丹","南苏丹","多哥","乌干达","毛里塔尼亚",
                            "刚果民主共和国","玻利维亚","巴西","厄瓜多尔","苏里南","秘鲁","法属圭亚那","法属圭巴拿马","委内瑞拉","巴拉圭","阿根廷","特立尼达和多巴哥" };
            string result = "";


            if (CountryOne.Contains(Country))
                result += "1";
            if (CountryTwo.Contains(Country))
                result += "2";
            if (CountryThree.Contains(Country))
                result += "3";

            return result;
        }

        /// <summary>
        /// 20210816
        /// 根据datatable生成某一时间段的日期
        /// </summary>
        /// <param name="dt">黑屏代码生成的datatable</param>
        /// <returns></returns>
        public List<string> GetTimeListByDataTable(DataTable dt)
        {
            if (dt.Rows[0]["Day"].ToString() != "")
            {
                DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString());
                DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString());

                List<string> timeList = new List<string>();
                while (datestart <= dateend)
                {
                    timeList.Add(datestart.ToString("yyyy-MM-dd"));
                    datestart = datestart.AddDays(1);
                }

                return timeList;
            }
            return null;
        }


        /// <summary>
        /// 返回网络时间 --北京时间
        /// </summary>
        /// <returns></returns>
        public DateTime GetBeijingTime()
        {
            WebRequest request = null;
            WebResponse response = null;
            WebHeaderCollection headerCollection = null;
            string datetime = string.Empty;
            try
            {
                request = WebRequest.Create("https://www.baidu.com");
                request.Timeout = 3000;
                request.Credentials = CredentialCache.DefaultCredentials;
                response = request.GetResponse();
                headerCollection = response.Headers;
                foreach (var h in headerCollection.AllKeys)
                {
                    if (h == "Date")
                    {
                        datetime = headerCollection[h];
                    }
                }
                return Convert.ToDateTime(datetime);
            }
            catch (Exception)
            {
                return DateTime.Now;
            }
            finally
            {
                if (request != null)
                {
                    request.Abort();
                }
                if (response != null)
                {
                    response.Close();
                }
                if (headerCollection != null)
                {
                    headerCollection.Clear();
                }
            }

        }

        /// <summary>
        /// 根据月份返回天数
        /// </summary>
        /// <param name="temp"></param>
        /// <returns></returns>
        public static string GetDaysByMonth(string Month, int year)
        {
            string str = "";
            //判断是否是闰年
            if (DateTime.IsLeapYear(year) == false)
            {
                switch (Month.ToUpper())
                {
                    case "JAN":
                        str = "31";
                        break;
                    case "FEB":
                        str = "28";
                        break;
                    case "MAR":
                        str = "31";
                        break;
                    case "APR":
                        str = "30";
                        break;
                    case "MAY":
                        str = "31";
                        break;
                    case "JUN":
                        str = "30";
                        break;
                    case "JUL":
                        str = "31";
                        break;
                    case "AUG":
                        str = "31";
                        break;
                    case "SEP":
                        str = "30";
                        break;
                    case "OCT":
                        str = "31";
                        break;
                    case "NOV":
                        str = "30";
                        break;
                    case "DEC":
                        str = "31";
                        break;
                    case "01":
                        str = "31";
                        break;
                    case "02":
                        str = "28";
                        break;
                    case "03":
                        str = "31";
                        break;
                    case "04":
                        str = "30";
                        break;
                    case "05":
                        str = "31";
                        break;
                    case "06":
                        str = "30";
                        break;
                    case "07":
                        str = "31";
                        break;
                    case "08":
                        str = "31";
                        break;
                    case "09":
                        str = "30";
                        break;
                    case "10":
                        str = "31";
                        break;
                    case "11":
                        str = "30";
                        break;
                    case "12":
                        str = "31";
                        break;
                }
            }
            else
            {
                switch (Month.ToUpper())
                {
                    case "JAN":
                        str = "31";
                        break;
                    case "FEB":
                        str = "29";
                        break;
                    case "MAR":
                        str = "31";
                        break;
                    case "APR":
                        str = "30";
                        break;
                    case "MAY":
                        str = "31";
                        break;
                    case "JUN":
                        str = "30";
                        break;
                    case "JUL":
                        str = "31";
                        break;
                    case "AUG":
                        str = "31";
                        break;
                    case "SEP":
                        str = "30";
                        break;
                    case "OCT":
                        str = "31";
                        break;
                    case "NOV":
                        str = "30";
                        break;
                    case "DEC":
                        str = "31";
                        break;
                    case "01":
                        str = "31";
                        break;
                    case "02":
                        str = "29";
                        break;
                    case "03":
                        str = "31";
                        break;
                    case "04":
                        str = "30";
                        break;
                    case "05":
                        str = "31";
                        break;
                    case "06":
                        str = "30";
                        break;
                    case "07":
                        str = "31";
                        break;
                    case "08":
                        str = "31";
                        break;
                    case "09":
                        str = "30";
                        break;
                    case "10":
                        str = "31";
                        break;
                    case "11":
                        str = "30";
                        break;
                    case "12":
                        str = "31";
                        break;
                }

            }


            return str;
        }

        /// <summary>
        /// 城市日期,PublicCode内部类
        /// </summary>
        public class CityInDate
        {
            public int Id { get; set; }
            //城市
            public string City { get; set; }
            //日期
            public string Date { get; set; }
        }


        /// <summary>
        /// 20210823
        /// 根据datatable生成行程里每一天所在的城市
        /// </summary>
        /// <param name="dt">黑屏代码生成的datatable</param>
        /// <returns></returns>
        public List<CityInDate> GetCityByDataTable(DataTable dt)
        {
            //城市日期键值对
            List<CityInDate> list = new List<CityInDate>();
            //ThreeCodeServices tcs = new ThreeCodeServices();

            int id = 0;
            for (int i = 1; i < dt.Rows.Count; i++)
            {


                //i-1行的三字码
                string Pre_citycode = dt.Rows[i - 1]["Three"].ToString();
                if (string.IsNullOrWhiteSpace(Pre_citycode))
                {
                    continue;
                }

                Pre_citycode = Pre_citycode.Replace("/", string.Empty).Substring(3, 3);

                string city = "";

                //查询该三字码所对应城市的数据
                //ThreeCode Pre_TC = tcs.getByThree(Pre_citycode);
                Res_ThreeCode Pre_TC = Db.Queryable<Res_ThreeCode>().First(x => x.Three.ToUpper() == Pre_citycode.ToUpper() && x.IsDel == 0 );

                //验证是否存在三字码
                if (Pre_TC == null)
                    city = "【此三字码" + Pre_citycode + "未收录，请机票同事录入】";
                else
                    city = Pre_TC.City;

                //生成日期
                DateTime datestart = Convert.ToDateTime(dt.Rows[i - 1]["Day"].ToString());
                DateTime dateend = Convert.ToDateTime(dt.Rows[i]["Day"].ToString());

                List<string> timeList = new List<string>();
                while (datestart < dateend)
                {
                    timeList.Add(datestart.ToString("yyyy-MM-dd"));
                    datestart = datestart.AddDays(1);
                }

                if (i == dt.Rows.Count - 1)
                    timeList.Add(dt.Rows[i]["Day"].ToString());

                for (int j = 0; j < timeList.Count; j++)
                {
                    CityInDate cid = new CityInDate() { };
                    cid.Id = id;
                    cid.City = city;
                    cid.Date = timeList[j];
                    list.Add(cid);
                    id++;
                }

            }
            return list;
        }

        Res_ThreeCode getByThree(string three)
        {
            return Db.Queryable<Res_ThreeCode>().First(x => x.Three == three && x.IsDel == 0 );
        }

        Res_AirCompany getByShortCode(string ShortCode)
        {
            //return this.excuteType("select * from AirCompany where Isdel=0 and ShortCode=@ShortCode", new SqlParameter("@ShortCode", ShortCode.ToUpper()));
            return Db.Queryable<Res_AirCompany>().First(x => x.ShortCode.ToUpper() == ShortCode.ToUpper() && x.IsDel == 0);
        }

        public class GoogleMapApiResult
        {
            int id;
            /// <summary>
            /// 标识
            /// </summary>
            public int Id { get => id; set => id = value; }

            int diid;
            /// <summary>
            /// 团组ID
            /// </summary>
            public int Diid { get => diid; set => diid = value; }

            string date;
            /// <summary>
            ///  日期
            /// </summary>
            public string Date { get => date; set => date = value; }

            string moment;
            /// <summary>
            /// 时刻
            /// </summary>
            public string Moment { get => moment; set => moment = value; }

            string startAddress;
            /// <summary>
            /// 出发地址
            /// </summary>
            public string StartAddress { get => startAddress; set => startAddress = value; }

            string endAddress;
            /// <summary>
            /// 到达地址
            /// </summary>
            public string EndAddress { get => endAddress; set => endAddress = value; }
            string time;
            /// <summary>
            /// 耗时
            /// </summary>
            public string Time { get => time; set => time = value; }

            string distance;
            /// <summary>
            /// 距离
            /// </summary>
            public string Distance { get => distance; set => distance = value; }
        }


        List<Res_ThreeCode> getByCity(string city)
        {
            //return this.excuteSql("select * from ThreeCode w" +
            //    "here Isdel=0 and City='" + city + "'");
            return Db.Queryable<Res_ThreeCode>().Where(x => x.City == city && x.IsDel == 0).ToList();
        }

        public List<Res_OfficialActivities> getByDiidAndDate(int diid, string date)
        {
            //return excuteSql("select * from OfficialActivities where Isdel=0" +
            //    " and Diid=@diid and IsSubmitApproval=0 and Date=@Date " +
            //    "order by Date", new SqlParameter("@diid", diid),
            //    new SqlParameter("@Date", date));

            return Db.Queryable<Res_OfficialActivities>().Where(x => x.IsDel == 0 && x.DiId == diid
            && x.Date == date).ToList();
        }

        bool AddTravelList(Grp_TravelList data)
        {
            return Db.Insertable<Grp_TravelList>(data).ExecuteCommand() > 0;
        }

        bool EditTravelList(Grp_TravelList hd)
        {
            //string sql = "update TravelList set Diid=@Diid,Days = @Days,Date = @Date,WeekDay = @WeekDay,Traffic_First = @Traffic_First,"
            //        + "Traffic_Second = @Traffic_Second,Trip = @Trip,OPer = @OPer,OPdate = @OPdate,Isdel = @Isdel where Id = @Id";

            //SqlParameter[] parameter = new SqlParameter[]{
            //    new SqlParameter("@Diid",hd.Diid),
            //    new SqlParameter("@Days",hd.Days),
            //    new SqlParameter("@Date",hd.Date),
            //    new SqlParameter("@WeekDay",hd.WeekDay),
            //    new SqlParameter("@Traffic_First",hd.Traffic_First),
            //    new SqlParameter("@Traffic_Second",hd.Traffic_Second),
            //    new SqlParameter("@Trip",hd.Trip),
            //    new SqlParameter("@OPer",hd.OPer),
            //    new SqlParameter("@OPdate",hd.OPdate),
            //    new SqlParameter("@Isdel",hd.Isdel),
            //    new SqlParameter("@Id",hd.Id)
            //};
            //if (SqlHelper.ExecuteNonQuery(sql, CommandType.Text, parameter) > 0)
            //    return true;
            //return false;

            return Db.Updateable<Grp_TravelList>(hd).ExecuteCommand() > 0;
        }


        bool DelOld(int Diid, int start, int end)
        {
            //if (SqlHelper.ExecuteNonQuery("delete from TravelList where Diid=" + Diid + " and ( Id>=" + start + " and Id<=" + end + ")", CommandType.Text) > 0)
            //    return true;
            //return false;

            return Db.Deleteable<Grp_TravelList>().Where(x => x.Diid == Diid && x.Id >= start && x.Id <= end).ExecuteCommand() > 0;
        }

        /// <summary>
        /// 根据团组编号查询信息
        /// </summary>
        /// <returns>返回空或者对象信息</returns>
        List<Grp_TravelList> GetByDiid(int Diid)
        {
            //调用获取单个对象的方法
            return Db.Queryable<Grp_TravelList>().Where(x => x.Diid == Diid && x.IsDel == 0).ToList();
        }

        public List<Crm_DeleClient> GetByDiidClient(int DIID)
        {
            return Db.Queryable<Crm_DeleClient>().Where(x => x.DiId == DIID && x.IsDel == 0).ToList();
        }

        /// <summary>
        /// 根据大写数字返回小写数字或根据小写数字返回大写数字
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public string GetNum(string num)
        {

            string str = "";
            switch (num)
            {
                case "1":
                    str = "一";
                    break;
                case "2":
                    str = "二";
                    break;
                case "3":
                    str = "三";
                    break;
                case "4":
                    str = "四";
                    break;
                case "5":
                    str = "五";
                    break;
                case "6":
                    str = "六";
                    break;
                case "7":
                    str = "七";
                    break;
                case "8":
                    str = "八";
                    break;
                case "9":
                    str = "九";
                    break;
                case "10":
                    str = "十";
                    break;
                case "11":
                    str = "十一";
                    break;
                case "12":
                    str = "十二";
                    break;
                case "一":
                    str = "1";
                    break;
                case "二":
                    str = "2";
                    break;
                case "三":
                    str = "3";
                    break;
                case "四":
                    str = "4";
                    break;
                case "五":
                    str = "5";
                    break;
                case "六":
                    str = "6";
                    break;
                case "七":
                    str = "7";
                    break;
                case "八":
                    str = "8";
                    break;
                case "九":
                    str = "9";
                    break;
                case "十":
                    str = "10";
                    break;
                case "十一":
                    str = "11";
                    break;
                case "十二":
                    str = "12";
                    break;
            }
            return str;
        }

        public bool Del(int diid)
        {
            return Db.Updateable<Grp_TravelList>().Where(x => x.Diid == diid && x.IsDel == 0).SetColumns(x => new Grp_TravelList { IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd") }).ExecuteCommand() > 0;
        }


        private void comb_Delegation_TextUpdate(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            cb.DataSource = null;
            cb.Items.Clear();
            string s = cb.Text;
            var bindList = soure.Where(item => item.TeamName != null && item.TeamName.Contains(s)).ToList();
            if (bindList.Count >= 1) // 存在符合条件的内容
            {
                this.comb_Delegation.Items.AddRange(bindList.ToArray());
            }
            else
            {
                this.comb_Delegation.Items.Add(new Grp_DelegationInfo { TeamName = "", Id = -1 });
            }
           
            cb.SelectionStart = cb.Text.Length;  // 设置光标位置，若不设置：光标位置始终保持在第一列，造成输入关键词的倒序排列
            cb.Cursor = Cursors.Default; //保持鼠标指针原来状态，有时候鼠标指针会被下拉框覆盖，所以要进行一次设置
            cb.MaxDropDownItems = 8; // 自动弹出下拉框            
        }


        private void comb_Delegation_MouseClick(object sender, MouseEventArgs e)
        {
            comb_Delegation.Text = "";
            comb_Delegation_TextUpdate(sender, e);
            comb_Delegation.DropDownHeight = 200;
            comb_Delegation.DroppedDown = true;
        }
    }
}