yuanrf месяцев назад: 10
Родитель
Сommit
6e69ffcbe1
3 измененных файлов с 753 добавлено и 66 удалено
  1. 8 8
      travelExport/Home.Designer.cs
  2. 681 55
      travelExport/Home.cs
  3. 64 3
      travelExport/Program.cs

+ 8 - 8
travelExport/Home.Designer.cs

@@ -44,31 +44,31 @@
             // 
             // btnImport
             // 
-            this.btnImport.Location = new System.Drawing.Point(13, 200);
+            this.btnImport.Location = new System.Drawing.Point(13, 212);
             this.btnImport.Name = "btnImport";
-            this.btnImport.Size = new System.Drawing.Size(75, 23);
+            this.btnImport.Size = new System.Drawing.Size(119, 23);
             this.btnImport.TabIndex = 1;
-            this.btnImport.Text = "导入数据";
+            this.btnImport.Text = "导入简要行程数据";
             this.btnImport.UseVisualStyleBackColor = true;
             this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
             // 
             // btnOutput
             // 
-            this.btnOutput.Location = new System.Drawing.Point(314, 200);
+            this.btnOutput.Location = new System.Drawing.Point(410, 200);
             this.btnOutput.Name = "btnOutput";
             this.btnOutput.Size = new System.Drawing.Size(75, 23);
             this.btnOutput.TabIndex = 2;
-            this.btnOutput.Text = "简要行程";
+            this.btnOutput.Text = "导出文件";
             this.btnOutput.UseVisualStyleBackColor = true;
             this.btnOutput.Click += new System.EventHandler(this.btnOutput_Click);
             // 
             // btnOutputInfo
             // 
-            this.btnOutputInfo.Location = new System.Drawing.Point(405, 200);
+            this.btnOutputInfo.Location = new System.Drawing.Point(13, 183);
             this.btnOutputInfo.Name = "btnOutputInfo";
-            this.btnOutputInfo.Size = new System.Drawing.Size(75, 23);
+            this.btnOutputInfo.Size = new System.Drawing.Size(120, 23);
             this.btnOutputInfo.TabIndex = 3;
-            this.btnOutputInfo.Text = "详细行程";
+            this.btnOutputInfo.Text = "导入详细行程数据";
             this.btnOutputInfo.UseVisualStyleBackColor = true;
             this.btnOutputInfo.Click += new System.EventHandler(this.btnOutputInfo_Click);
             // 

+ 681 - 55
travelExport/Home.cs

@@ -20,6 +20,7 @@ using Aspose.Words;
 using System.IO;
 using System.Threading;
 using static System.Net.Mime.MediaTypeNames;
+using System.Drawing.Drawing2D;
 
 namespace travelExport
 {
@@ -29,7 +30,6 @@ namespace travelExport
         static List<Grp_DelegationInfo> soure = new List<Grp_DelegationInfo>();
         readonly static string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
         const decimal conversion = 1.61M;
-        static bool isInfo = false;
         readonly static string[] excludeArr = new string[] { "[中转]", };
 
         public Home()
@@ -133,28 +133,472 @@ namespace travelExport
             if (!isVPN) {  MessageBoxEx.Show(this, "请打开VPN!"); return ; }
 
             var timeArr =  GetTimeListByDataTable(resultTable);
-            List<Grp_CarTouristGuideGroundReservations> listctg = null;
-            List<Grp_HotelReservations> listht = null;
-            List<Res_OfficialActivities> listgw = null;
-            List< Grp_InvitationOfficialActivities > listgwzl = null;
 
-            if (isInfo) //判断是否未是详细行程
+            //本团行程单数据
+            List<Grp_TravelList> listTravel = db.Grp_TravelList.Where(x => x.Diid == diid && x.IsDel == 0).ToList();
+
+            ChildThreadExceptionHandler wt = new
+                 ChildThreadExceptionHandler((msg) =>
+                 {
+                     if (this.InvokeRequired)
+                     {
+                         this.Invoke(new Action(() =>
+                         {
+                             MessageBoxEx.Show(this, msg);
+                         }));
+                     }
+                     else
+                     {
+                         MessageBoxEx.Show(this, msg);
+                     }
+                 });
+
+            Thread threadExec = new Thread(() =>
             {
-                //本团车导地接信息
-                listctg = db.Grp_CarTouristGuideGroundReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+                try
+                {
+                    using (var sw = db.Database.BeginTransaction())
+                    {
+                        db.Grp_TravelList.RemoveRange(listTravel);
+                        db.SaveChanges();
+
+                        var NewListTravel = new List<Grp_TravelList>();
+                        var index = 0;
+                        var stopCity = string.Empty;
+
+                        foreach (var item in timeArr)
+                        {
+                            string trip = string.Empty;
+                            string weekDay = string.Empty;
+                            DateTime time = DateTime.Now;
+                            if (DateTime.TryParse(item, out time))
+                            {
+                                weekDay = weekdays[(int)time.DayOfWeek];
+                            }
+                            else
+                            {
+                                weekDay = "日期格式不正确!";
+                            }
+
+                            var empty = "【未收入该三字码!请机票同事录入】";
+                            var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
+                            var isMoreTraffic = false;
+                            if (tabSelect.Length > 0)
+                            {
+                                isMoreTraffic = true;
+                                var takeOffTime = DateTime.Parse(item);
+                                var fallToTime = DateTime.Parse(item);
+
+                                Res_ThreeCode start_Object = null;
+                                Res_ThreeCode end_Object = null;
+
+                                bool isTrade = false;
+
+                                foreach (var tabRow in tabSelect)
+                                {
+
+                                    takeOffTime = DateTime.Parse(item);
+                                    fallToTime = DateTime.Parse(item);
+
+                                    var takeOff = tabRow["StartTime"].ToString();
+                                    var fallTo = tabRow["EndTime"].ToString();
+                                   
+                                    takeOffTime = takeOffTime.AddHours(int.Parse(takeOff.Substring(0, 2)));
+                                    takeOffTime = takeOffTime.AddMinutes(int.Parse(takeOff.Substring(2, 2)));
+                                   
+                                    fallToTime = fallToTime.AddHours(int.Parse(fallTo.Substring(0, 2)));
+                                    fallToTime = fallToTime.AddMinutes(int.Parse(fallTo.Substring(2, 2)));
+
+                                    var threeCode = tabRow["Three"].ToString();
+                                    var start = threeCode.Substring(0, 3);
+                                    var end = threeCode.Substring(3, 3);
+                                    stopCity = end;
+                                    start_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == start.ToUpper());
+                                    end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == end.ToUpper());
+                                    if (start_Object == null)
+                                    {
+                                        start_Object = new Res_ThreeCode()
+                                        {
+                                            AirPort = empty,
+                                            AirPort_En = empty,
+                                            City = empty,
+                                            Country = empty,
+                                            Four = empty,
+                                            Three = empty,
+                                        };
+                                    }
+                                    if (end_Object == null)
+                                    {
+                                        end_Object = new Res_ThreeCode()
+                                        {
+                                            AirPort = empty,
+                                            AirPort_En = empty,
+                                            City = empty,
+                                            Country = empty,
+                                            Four = empty,
+                                            Three = empty,
+                                        };
+                                    }
+
+                                    //航班号
+                                    string flightcode = tabRow["Fliagtcode"].ToString();
+
+                                    trip += $"{start_Object.City}/{end_Object.City}\r\n";
+
+                                    if (!isTrade)
+                                    {
+                                        //--提前俩个小时
+                                        trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
+                                    }
+
+                                    var aircompany = db.Res_AirCompany.FirstOrDefault(x => x.ShortCode.ToUpper() == flightcode.Substring(0, 2).ToUpper() && x.IsDel == 0);
+
+                                    var hsEmpty = "【此航司" + flightcode.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";
+                                    if (aircompany == null)
+                                    {
+                                        aircompany = new Res_AirCompany
+                                        {
+                                            CnName = hsEmpty,
+                                            EnName = hsEmpty,
+                                            ShortCode = hsEmpty,
+                                        };
+                                    }
+
+                                    //机型判断
+                                    string airModel = tabRow["AirModel"].ToString();
+                                    airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
+
+                                    string flightTime = tabRow["FlightTime"].ToString();
+                                    if (flightTime.Contains(":"))
+                                    {
+                                        flightTime = flightTime.Replace(":", "小时");
+                                        flightTime += "分钟";
+                                    }
+                                    if (flightTime.Contains("H"))
+                                    {
+                                        flightTime = flightTime.Replace("H", "小时");
+                                    }
+                                    if (flightTime.Contains("M"))
+                                    {
+                                        flightTime = flightTime.Replace("M", "分钟");
+                                    }
+
+                                    trip += $"{takeOffTime.ToString("HH:mm")} 搭乘{aircompany.CnName}{tabRow[0].ToString().Trim()}航班,由{start_Object.City}飞往{end_Object.City};\r\n       ({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}    飞行时间{flightTime});\r\n";
+
+                                    isTrade = Convert.ToBoolean(tabRow["isTransitShipment"]);
+
+                                    if (isTrade)
+                                    {
+                                        trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼";
+                                    }
+                                    else
+                                    {
+                                        trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
+                                    }
+                                }
+
+                                //var airArrive = fallToTime;      //航班落地时间
+                                time = fallToTime.AddHours(1.5); //出机场一个半小时
+
+                                string Time = string.Empty;
+                                string Distance = string.Empty;
+                                int GetGoogleResult = 0;
+                                int GetDistResult = 0;
+                                JObject Result = null;
+                                try
+                                {
+                                    Result = GetDirectionByGoogleApi(end_Object.AirPort, end_Object.City + "市区");
+                                    Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace(" ", "").Trim();
+                                    Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString().Replace(" ", "").Trim();
+
+                                    if (Time.Contains("hours"))
+                                    {
+                                        Time = Time.Replace("hours", "小时");
+                                    }
+                                    if (Time.Contains("hour"))
+                                    {
+                                        Time = Time.Replace("hour", "小时");
+                                    }
+                                    Time = Time.Replace("mins", "分钟");
+
+                                    if (Distance.Contains("mi"))
+                                    {
+                                        var distSp = Regex.Split(Distance, "mi");
+                                        if (distSp.Length > 0)
+                                        {
+                                            Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里";
+                                        }
+                                    }
+                                    if (Distance.Contains("km"))
+                                    {
+                                        Distance = Distance.Replace("km", "公里");
+                                    }
+
+                                    if (Time.Contains("小时"))
+                                    {
+                                        var xs = Regex.Split(Time, "小时");
+                                        var xsValue = int.Parse(xs[0]);
+                                        var fz = Regex.Split(xs[1], "分钟");
+                                        var fzValue = int.Parse(fz[0]);
+                                        GetGoogleResult = xsValue * 60;
+                                        GetGoogleResult += fzValue;
+
+                                    }
+                                    else if (Time.Contains("分钟"))
+                                    {
+                                        GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]);
+                                    }
+                                    if (Distance.Contains("公里"))
+                                    {
+                                        GetDistResult = (int)decimal.Parse(Regex.Split(Distance, "公里")[0]);
+                                    }
+
+                                    if (GetGoogleResult > 0 && GetGoogleResult % 5 != 0)
+                                    {
+                                        while (GetGoogleResult % 5 != 0)
+                                        {
+                                            GetGoogleResult++;
+                                        }
+                                    }
+                                    if (GetDistResult % 5 != 0 && GetDistResult > 0)
+                                    {
+                                        while (GetDistResult % 5 != 0)
+                                        {
+                                            GetDistResult++;
+                                        }
+                                    }
+
+                                    int H = (GetGoogleResult / 60);
+                                    int m = (GetGoogleResult % 60);
+                                    string TimeStr = string.Empty;
+                                    if (H != 0)
+                                    {
+                                        if (H < 10)
+                                        {
+                                            TimeStr += "0" + H + "小时";
+                                        }
+                                        else
+                                        {
+                                            TimeStr += H + "小时";
+                                        }
+                                    }
+                                    if (m < 10)
+                                    {
+                                        TimeStr += "0" + m + "分钟";
+                                    }
+                                    else
+                                    {
+                                        TimeStr += m + "分钟";
+                                    }
+
+                                    Time = TimeStr;
+                                    Distance = GetDistResult.ToString() + "公里";
+                                }
+                                catch (Exception ex)
+                                {
+                                    Time = "未知!";
+                                    Distance = "未知!";
+                                }
+
+                                trip += $"{time.ToString("HH:mm")} 搭乘专车前往市区({end_Object.AirPort} - {end_Object.City}市区 路程{Distance},耗时{Time})";
+
+                                time = time.AddMinutes(GetGoogleResult);  //到达市区时间
+
+                                if (index == timeArr.Count - 1)
+                                {
+                                    NewListTravel.Add(new Grp_TravelList
+                                    {
+                                        CreateTime = DateTime.Now,
+                                        CreateUserId = 0,
+                                        Diid = diid,
+                                        Date = Convert.ToDateTime(item).ToString("M月d日"),
+                                        Trip = trip,
+                                        WeekDay = weekDay,
+                                        Days = index + 1,
+                                        Traffic_First = "飞机",
+                                        Traffic_Second = "汽车",
+                                        Diffgroup = 1,
+                                        Issel = 1,
+                                        IsDel = 0,
+                                    });
+                                    continue;
+                                }
+
+                                if (time.Day != fallToTime.Day)  //超出一天
+                                {
+                                    NewListTravel.Add(new Grp_TravelList
+                                    {
+                                        CreateTime = DateTime.Now,
+                                        CreateUserId = 0,
+                                        Diid = diid,
+                                        Date = Convert.ToDateTime(item).ToString("M月d日"),
+                                        Trip = trip,
+                                        WeekDay = weekDay,
+                                        Days = index + 1,
+                                        Traffic_First = "飞机",
+                                        Traffic_Second = "汽车",
+                                        Diffgroup = 1,
+                                        Issel = 1,
+                                        IsDel = 0,
+                                    });
+                                    continue;
+                                }
+
+                                if (time.Hour < 9)  // && (airArrive < new DateTime(airArrive.Year,airArrive.Month,airArrive.Day,6, 30, 0))
+                                {
+                                    trip += @"
+09:00 公务活动;
+10:30 公务活动;";
+                                }
+                                else if (time.Hour < 10)
+                                {
+                                    trip += @"
+10:30 公务活动;";
+                                }
+
+                                if (time.Hour < 13)
+                                {
+                                    trip += $"\r\n{time.ToString("HH:mm")} 午餐于当地餐厅;";
+                                }
+
+                                if (time < new DateTime(time.Year, time.Month, time.Day, 14, 30, 0))
+                                {
+                                    trip += @"
+14:00 公务活动;
+16:00 公务活动;";
+                                }
+                                else if (time.Hour < 16)
+                                {
+                                    trip += @"
+16:00 公务活动;";
+                                }
+
+                                if (time.Hour < 18)
+                                {
+                                    trip += $"\r\n18:00 晚餐于当地餐厅;";
+                                }
+
+                                //time = time.AddHours(1);
+                                //trip += $"\r\n{time.ToString("HH:mm")} 搭乘专车前往酒店,抵达后办理入住;";
+                            }
+                            else
+                            {
+                                var end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == stopCity.ToUpper());
+                                if (end_Object == null)
+                                {
+                                    end_Object = new Res_ThreeCode()
+                                    {
+                                        AirPort = empty,
+                                        AirPort_En = empty,
+                                        City = empty,
+                                        Country = empty,
+                                        Four = empty,
+                                        Three = empty,
+                                    };
+                                }
+                                trip += $"{end_Object.City}\r\n";
+                                trip += @"08:00 早餐于酒店;
+09:00 公务活动;
+10:30 公务活动;
+12:00 午餐于当地餐厅;
+14:00 公务活动;
+16:00 公务活动;
+18:00 晚餐于当地餐厅;
+19:00 入住酒店休息;";
+                            }
+
+                            string[] traffic = new string[] { "飞机", "汽车" };
+                            if (!isMoreTraffic)
+                            {
+                                traffic = new string[] { "汽车", "" };
+                            }
+
+                            NewListTravel.Add(new Grp_TravelList
+                            {
+                                CreateTime = DateTime.Now,
+                                CreateUserId = 0,
+                                Diid = diid,
+                                Date = Convert.ToDateTime(item).ToString("M月d日"),
+                                Trip = trip,
+                                WeekDay = weekDay,
+                                Days = index + 1,
+                                Traffic_First = traffic[0],
+                                Traffic_Second = traffic[1],
+                                Diffgroup = 1,
+                                Issel = 1,
+                                IsDel = 0,
+                            });
+
+                            index++;
+                        }
 
-                //本团酒店信息
-                listht = db.Grp_HotelReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+                        db.Grp_TravelList.AddRange(NewListTravel);
+                        db.SaveChanges();
 
-                //公务出访信息
-                listgw = db.Res_OfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+                        sw.Commit();
+                        wt.Invoke("数据导入完成!");
+                    }
+                }
+                catch (Exception ex)
+                {
+                    wt.Invoke("请等待程序执行!");
+                }
+            });
+            threadExec.Start();
+        }
 
-                //邀请公务资料
-                listgwzl = db.Grp_InvitationOfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+        public async void btnImportInfo()
+        {
+            var diid = -1;
+            try
+            {
+                var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
+                diid = dele.Id;
+            }
+            catch (Exception)
+            {
+                //lblImport.Text = "请正确的选择团组!";
+                //lblImport.ForeColor = Color.Black;
+                MessageBoxEx.Show(this, "请正确的选择团组!", "提示");
+                return;
+            }
 
+            DataTable resultTable = null;
+            try
+            {
+                resultTable = GetTableByBlackCode(diid);
+            }
+            catch (Exception ex)
+            {
+                MessageBoxEx.Show(this, "黑屏代码有误!", "提示");
+                return;
+            }
 
+            if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
+            {
+                string msg = string.Empty;
+                if (resultTable.Rows.Count > 0)
+                {
+                    msg = resultTable.Rows[0]["Error"].ToString();
+                }
+                MessageBoxEx.Show(this, "黑屏代码有误! " + msg, "提示");
+                return;
             }
 
+            var isVPN = await Task.Run(() =>
+            {
+                var isVpn = GetDirectionByGoogleApi("北京", "上海");
+                if (Convert.ToInt32(isVpn["code"]) == -1)
+                {
+                    return false;
+                }
+                return true;
+            });
+
+            if (!isVPN) { MessageBoxEx.Show(this, "请打开VPN!"); return; }
+
+            var timeArr = GetTimeListByDataTable(resultTable);
+
             //本团行程单数据
             List<Grp_TravelList> listTravel = db.Grp_TravelList.Where(x => x.Diid == diid && x.IsDel == 0).ToList();
 
@@ -187,6 +631,18 @@ namespace travelExport
                         var index = 0;
                         var stopCity = string.Empty;
 
+                        //本团车导地接信息
+                        var listctg = db.Grp_CarTouristGuideGroundReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+
+                        //本团酒店信息
+                        var listht = db.Grp_HotelReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+
+                        //公务出访信息
+                        var listgw = db.Res_OfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+
+                        //邀请公务资料
+                        var listgwzl = db.Grp_InvitationOfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
+
                         foreach (var item in timeArr)
                         {
                             string trip = string.Empty;
@@ -213,6 +669,8 @@ namespace travelExport
                                 Res_ThreeCode start_Object = null;
                                 Res_ThreeCode end_Object = null;
 
+                                bool isTrade = false;
+
                                 foreach (var tabRow in tabSelect)
                                 {
 
@@ -221,10 +679,10 @@ namespace travelExport
 
                                     var takeOff = tabRow["StartTime"].ToString();
                                     var fallTo = tabRow["EndTime"].ToString();
-                                   
+
                                     takeOffTime = takeOffTime.AddHours(int.Parse(takeOff.Substring(0, 2)));
                                     takeOffTime = takeOffTime.AddMinutes(int.Parse(takeOff.Substring(2, 2)));
-                                   
+
                                     fallToTime = fallToTime.AddHours(int.Parse(fallTo.Substring(0, 2)));
                                     fallToTime = fallToTime.AddMinutes(int.Parse(fallTo.Substring(2, 2)));
 
@@ -265,7 +723,11 @@ namespace travelExport
                                     trip += $"{start_Object.City}/{end_Object.City}\r\n";
 
                                     //--提前俩个小时
-                                    trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
+                                    if (!isTrade)
+                                    {
+                                        //--提前俩个小时
+                                        trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
+                                    }
 
                                     var aircompany = db.Res_AirCompany.FirstOrDefault(x => x.ShortCode.ToUpper() == flightcode.Substring(0, 2).ToUpper() && x.IsDel == 0);
 
@@ -301,7 +763,16 @@ namespace travelExport
 
                                     trip += $"{takeOffTime.ToString("HH:mm")} 搭乘{aircompany.CnName}{tabRow[0].ToString().Trim()}航班,由{start_Object.City}飞往{end_Object.City};\r\n       ({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}    飞行时间{flightTime});\r\n";
 
-                                    trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
+                                    isTrade = Convert.ToBoolean(tabRow["isTransitShipment"]);
+
+                                    if (isTrade)
+                                    {
+                                        trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼";
+                                    }
+                                    else
+                                    {
+                                        trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
+                                    }
                                 }
 
                                 //var airArrive = fallToTime;      //航班落地时间
@@ -431,16 +902,52 @@ namespace travelExport
                                     continue;
                                 }
 
+                                if (time.Day != fallToTime.Day)  //超出一天
+                                {
+                                    NewListTravel.Add(new Grp_TravelList
+                                    {
+                                        CreateTime = DateTime.Now,
+                                        CreateUserId = 0,
+                                        Diid = diid,
+                                        Date = Convert.ToDateTime(item).ToString("M月d日"),
+                                        Trip = trip,
+                                        WeekDay = weekDay,
+                                        Days = index + 1,
+                                        Traffic_First = "飞机",
+                                        Traffic_Second = "汽车",
+                                        Diffgroup = 1,
+                                        Issel = 1,
+                                        IsDel = 0,
+                                    });
+                                    continue;
+                                }
+
                                 if (time.Hour < 9)  // && (airArrive < new DateTime(airArrive.Year,airArrive.Month,airArrive.Day,6, 30, 0))
                                 {
+                                    var nineTime =  GetTimeGwInfo(ref listgw, new DateTime(time.Year,time.Month,time.Day,09,00,00));
+                                    var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
                                     trip += @"
 09:00 公务活动;
 10:30 公务活动;";
+                                    if (!string.IsNullOrWhiteSpace(nineTime))
+                                    {
+                                        trip = trip.Replace("09:00 公务活动", nineTime);
+                                    }
+                                    if (!string.IsNullOrWhiteSpace(halfPasTen))
+                                    {
+                                        trip = trip.Replace("10:30 公务活动", halfPasTen);
+                                    }
+
                                 }
                                 else if (time.Hour < 10)
                                 {
+                                    var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
                                     trip += @"
 10:30 公务活动;";
+                                    if (!string.IsNullOrWhiteSpace(halfPasTen))
+                                    {
+                                        trip = trip.Replace("10:30 公务活动", halfPasTen);
+                                    }
                                 }
 
                                 if (time.Hour < 13)
@@ -450,14 +957,29 @@ namespace travelExport
 
                                 if (time < new DateTime(time.Year, time.Month, time.Day, 14, 30, 0))
                                 {
+                                    var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00));
+                                    var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
                                     trip += @"
 14:00 公务活动;
 16:00 公务活动;";
+                                    if (!string.IsNullOrWhiteSpace(twoPointsPM))
+                                    {
+                                        trip = trip.Replace("14:00 公务活动", twoPointsPM);
+                                    }
+                                    if (!string.IsNullOrWhiteSpace(fourPointsPM))
+                                    {
+                                        trip = trip.Replace("16:00 公务活动", fourPointsPM);
+                                    }
                                 }
                                 else if (time.Hour < 16)
                                 {
+                                    var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
                                     trip += @"
 16:00 公务活动;";
+                                    if (!string.IsNullOrWhiteSpace(fourPointsPM))
+                                    {
+                                        trip = trip.Replace("16:00 公务活动", fourPointsPM);
+                                    }
                                 }
 
                                 if (time.Hour < 18)
@@ -492,6 +1014,27 @@ namespace travelExport
 16:00 公务活动;
 18:00 晚餐于当地餐厅;
 19:00 入住酒店休息;";
+
+                                var nineTime = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 09, 00, 00));
+                                var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
+                                var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00));
+                                var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
+                                if (!string.IsNullOrWhiteSpace(nineTime))
+                                {
+                                    trip = trip.Replace("09:00 公务活动", nineTime);
+                                }
+                                if (!string.IsNullOrWhiteSpace(halfPasTen))
+                                {
+                                    trip = trip.Replace("10:30 公务活动", halfPasTen);
+                                }
+                                if (!string.IsNullOrWhiteSpace(twoPointsPM))
+                                {
+                                    trip = trip.Replace("14:00 公务活动", twoPointsPM);
+                                }
+                                if (!string.IsNullOrWhiteSpace(fourPointsPM))
+                                {
+                                    trip = trip.Replace("16:00 公务活动", fourPointsPM);
+                                }
                             }
 
                             string[] traffic = new string[] { "飞机", "汽车" };
@@ -500,44 +1043,22 @@ namespace travelExport
                                 traffic = new string[] { "汽车", "" };
                             }
 
-                            if (isInfo)
+                            var htTime = DateTime.Now;
+                            var htTimeOut = DateTime.Now;
+                            foreach (var h in listht)
                             {
-                                var htTime = DateTime.Now;
-                                var htTimeOut = DateTime.Now;
-                                var gwTime = DateTime.Now;
-                                foreach (var h in listht)
+                                if (DateTime.TryParse(h.CheckInDate, out htTime) && DateTime.TryParse(h.CheckOutDate, out htTimeOut))
                                 {
-                                    if (DateTime.TryParse(h.CheckInDate, out htTime) && DateTime.TryParse(h.CheckOutDate, out htTimeOut))
+                                    if (htTime <= Convert.ToDateTime(item)
+                                     && htTimeOut > Convert.ToDateTime(item))
                                     {
-                                        if (htTime <= Convert.ToDateTime(item)
-                                         && htTimeOut > Convert.ToDateTime(item))
-                                        {
-                                            trip += "00:00 乘车前往酒店";
-                                            trip += "00:00 抵达酒店办理入住手续";
-
-                                            trip = trip + "\r\n"
-                                            + "          酒店名称:" + h.HotelName + "\r\n"
-                                            + "          酒店地址:" + h.HotelAddress + "\r\n"
-                                            + "          酒店电话:" + h.HotelTel + "      酒店传真:" +   (string.IsNullOrWhiteSpace(h.HotelFax) ? "-" : h.HotelFax);
-                                        }
-                                    }
-                                }
+                                        trip += "\r\n00:00 乘车前往酒店";
+                                        trip += "\r\n00:00 抵达酒店办理入住手续";
 
-                                foreach (var g in listgw)
-                                {
-                                    if (DateTime.TryParse(g.Date, out gwTime))
-                                    {
-                                        var timeThis = Convert.ToDateTime(item);
-                                        if (DateTime.Compare(timeThis, gwTime) == 0)
-                                        {
-                                            var tp = g.Time;
-                                            Regex rgNumber = new Regex("[0-9]+");
-                                            var HHMM =  rgNumber.Split(tp);
-                                            if (HHMM.Length > 0)
-                                            {
-                                               
-                                            }
-                                        }
+                                        trip = trip + "\r\n"
+                                        + "        酒店名称:" + h.HotelName + "\r\n"
+                                        + "        酒店地址:" + h.HotelAddress + "\r\n"
+                                        + "        酒店电话:" + h.HotelTel + "      酒店传真:" + (string.IsNullOrWhiteSpace(h.HotelFax) ? "-" : h.HotelFax);
                                     }
                                 }
                             }
@@ -576,7 +1097,6 @@ namespace travelExport
             threadExec.Start();
         }
 
-
         private delegate void ChildThreadExceptionHandler(string message);
 
         private void btnOutput_Click(object sender, EventArgs e)
@@ -897,7 +1417,7 @@ namespace travelExport
                                 //日
                                 int day = Convert.ToInt32(Info[1].Substring(2, 2));
 
-                                var time = new DateTime(DateTime.Now.Year, month, day);
+                                var time = new DateTime(2023, month, day); //
 
                                 var isExist = Info.Contains("[中转]");
 
@@ -1178,7 +1698,7 @@ namespace travelExport
 
         private void btnOutputInfo_Click(object sender, EventArgs e)
         {
-
+            btnImportInfo();
         }
 
         /// <summary>
@@ -1385,6 +1905,88 @@ namespace travelExport
             return rt;
         }
 
+
+        string GetTimeGwInfo(ref List<Res_OfficialActivities> listgw, DateTime gwTime)
+        {
+            List<Res_OfficialActivitiesFormat> formatResGw = listgw.Select(x => new Res_OfficialActivitiesFormat
+            {
+                Address = x.Address,
+                Attendees = x.Attendees,
+                Client = x.Client,
+                Contact = x.Contact,
+                Date = x.Date,
+                DiId = x.DiId,
+                CreateTime = x.CreateTime,
+                CreateUserId = x.CreateUserId,
+                DeleteTime = x.DeleteTime,
+                DeleteUserId = x.DeleteUserId,
+                Dresscode = x.Dresscode,
+                Id = x.Id,
+                IsDel = x.IsDel,
+                IsNeedTrans = x.IsNeedTrans,
+                IsPay = x.IsPay,
+                IsSubmitApproval = x.IsSubmitApproval,
+                Job = x.Job,
+                language = x.language,
+                OfficialForm = x.OfficialForm,
+                Remark = x.Remark,
+                Setting = x.Setting,
+                Tel = x.Tel,
+                Time = x.Time,
+                Translators = x.Translators,
+                Trip = x.Trip,
+                Type = x.Type,
+            }).ToList();
+
+            string info = string.Empty;
+
+            List<Res_OfficialActivitiesFormat> dayArr = new List<Res_OfficialActivitiesFormat>();
+
+            foreach (var g in formatResGw)
+            {
+                var parseTime = g.GetDateTime;
+                if (parseTime.Year == gwTime.Year && parseTime.Month == gwTime.Month && parseTime.Day == gwTime.Day)
+                {
+                    dayArr.Add(g);
+                }
+            }
+
+            var isFindTimeGw = false;
+            foreach (var g in dayArr)
+            {
+                var thisData = g.GetDateTime;
+                if (thisData.Hour == gwTime.Hour && thisData.Minute == gwTime.Hour)
+                {
+                    isFindTimeGw = true;
+                    info += $"{thisData.ToString("HH:mm")} 拜访{g.Client},联系人{g.Contact},电话{g.Tel}, 地址{g.Address}" +
+                   $"着装要求{g.Dresscode},是否需要翻译{(g.IsNeedTrans == null || g.IsNeedTrans == 0 ? "不需要翻译人员" : "需要翻译人员翻译语种为" + g.language)},议题:- ";
+                    listgw.Remove(listgw.Find(x => x.Id == g.Id));
+                    break;
+                }
+            }
+
+            //查询时间最接近的
+            if (!isFindTimeGw)
+            {
+                var g = dayArr.OrderBy(x =>
+                {
+                    return (x.GetDateTime - gwTime).Duration();
+                }).FirstOrDefault();
+                
+                if (g != null)
+                {
+                    var thisData = g.GetDateTime;
+                    if ((thisData - gwTime) <  new TimeSpan(1,30,0))
+                    {
+                        info += $"{thisData.ToString("HH:mm")} 拜访{g.Client},联系人{g.Contact},电话{g.Tel}, 地址{g.Address}" +
+                    $"着装要求{g.Dresscode},是否需要翻译{(g.IsNeedTrans == null || g.IsNeedTrans == 0 ? "不需要翻译人员" : "需要翻译人员翻译语种为" + g.language)},议题:- ";
+                        listgw.Remove(listgw.Find(x => x.Id == g.Id));
+                    }
+                }
+            }
+
+            return info;
+        }
     }
 
     public class GoogleApiFormat
@@ -1397,6 +1999,30 @@ namespace travelExport
 
     }
 
+    public class Res_OfficialActivitiesFormat : Res_OfficialActivities
+    {
+        public DateTime GetDateTime
+        {
+            get
+            {
+                DateTime.TryParse(this.Date, out DateTime Data);
+                if (this.Date.Contains("T16:"))
+                {
+                    Data =  Data.AddDays(1);
+                }
+                Regex rg = new Regex("[0-9]+");
+                var gwTimeHHMM = this.Time;
+                var gwTimeHHMMMatch = rg.Matches(gwTimeHHMM);
+                if (gwTimeHHMMMatch.Count > 1)
+                {
+                    Data = Data.AddHours(int.Parse(gwTimeHHMMMatch[0].Value));
+                    Data = Data.AddMinutes(int.Parse(gwTimeHHMMMatch[1].Value));
+                }
+                return Data;
+            }
+        }
+    }
+
 }
 
 

+ 64 - 3
travelExport/Program.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 
@@ -8,15 +9,75 @@ namespace travelExport
 {
     internal static class Program
     {
+        static Home home = null;
         /// <summary>
         /// 应用程序的主入口点。
         /// </summary>
         [STAThread]
         static void Main()
         {
-            Application.EnableVisualStyles();
-            Application.SetCompatibleTextRenderingDefault(false);
-            Application.Run(new Home());
+            try
+            {
+                //设置应用程序处理异常方式:ThreadException处理
+                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
+                //处理UI线程异常
+                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
+                //处理非UI线程异常
+                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
+
+                Application.EnableVisualStyles();
+                Application.SetCompatibleTextRenderingDefault(false);
+
+                home = new Home();
+                Application.Run(home);
+
+            }
+            catch (Exception ex)
+            {
+                string str = GetExceptionMsg(ex, string.Empty);
+                MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+
+        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
+        {
+            string str = GetExceptionMsg(e.Exception, e.ToString());
+            MessageBoxEx.Show(home, str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            //LogManager.WriteLog(str);
+        }
+
+        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+        {
+            string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
+            MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            //LogManager.WriteLog(str);
+        }
+
+        /// <summary>
+        /// 生成自定义异常消息
+        /// </summary>
+        /// <param name="ex">异常对象</param>
+        /// <param name="backStr">备用异常消息:当ex为null时有效</param>
+        /// <returns>异常字符串文本</returns>
+        static string GetExceptionMsg(Exception ex, string backStr)
+        {
+            StringBuilder sb = new StringBuilder();
+            sb.AppendLine("****************************异常文本****************************");
+            sb.AppendLine("**************************请联系管理员****************************");
+            sb.AppendLine("【出现时间】:" + DateTime.Now.ToString());
+            if (ex != null)
+            {
+                sb.AppendLine("【异常类型】:" + ex.GetType().Name);
+                sb.AppendLine("【异常信息】:" + ex.Message);
+                //sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
+            }
+            else
+            {
+                sb.AppendLine("【未处理异常】:" + backStr);
+            }
+            sb.AppendLine("***************************************************************");
+            return sb.ToString();
         }
     }
 }