Browse Source

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

LEIYI 1 week ago
parent
commit
da6e43f6ea

+ 224 - 83
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -21975,6 +21975,7 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
 
                 var stay = "-";
                 var cityPath = "-";
+                var arriveCountry = string.Empty;
 
                 //添加城市路径以及住宿地
 
@@ -21983,6 +21984,41 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
                 var empty = "【未收入该三字码!请机票同事录入】";
                 string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
 
+                #region 配置公务活动时间
+                List<Tuple<int, string, string>> Times = new List<Tuple<int, string, string>>();
+                Times.Add(new Tuple<int, string, string>(9, "9:00", "10:30"));
+                Times.Add(new Tuple<int, string, string>(11, "11:00", "12:00"));
+                Times.Add(new Tuple<int, string, string>(14, "14:00", "15:30"));
+                Times.Add(new Tuple<int, string, string>(16, "16:00", "17:00"));
+
+                List<Tuple<DateTime, List<string>>> fallTimesCheckCountry = new List<Tuple<DateTime, List<string>>>()
+                {
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,6,0,0), new List<string>{"9:00-10:30","11:00-12:00","14:00-15:30","16:00-17:00" }),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,8,30,0), new List<string>{"11:00-12:00","14:00-15:30","16:00-17:00"}),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,11,30,0), new List<string>{"14:00-15:30","16:00-17:00"}),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,13,30,0), new List<string>{"16:30-17:30"}),
+                };
+
+                List<Tuple<DateTime, List<string>>> fallTimesNotCheckCountry = new List<Tuple<DateTime, List<string>>>()
+                {
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,7,0,0), new List<string>{"9:00-10:30","11:00-12:00","14:00-15:30","16:00-17:00" }),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,9,0,0), new List<string>{"11:00-12:00","14:00-15:30","16:00-17:00"}),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,11,30,0), new List<string>{"14:00-15:30","16:00-17:00"}),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,14,30,0), new List<string>{"16:30-17:30"}),
+                };
+
+                List<Tuple<DateTime, List<string>>> takeoffTimes = new List<Tuple<DateTime, List<string>>>()
+                {
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,18,0,0), new List<string>{"9:00-10:30","11:00-12:00", "14:00-15:30","16:00-17:00" }),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,15,30,0), new List<string>{"9:00-10:30", "11:00-12:00", "14:00-15:00","15:00-16:00"}),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,14,00,0), new List<string>{"9:00-10:30", "11:00-12:00",}),
+                    new Tuple<DateTime,  List<string>>(new DateTime(1900,1,1,12,00,0), new List<string>{"09:00-10:00"}),
+                };
+
+
+                #endregion
+                var nextDayNum = 0;
+
                 for (int i = 0; i < timeArr.Count; i++)
                 {
                     stay = "-";
@@ -21995,11 +22031,10 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
 
                     var tbSelect = dtBlack.Select(string.Format("Day = '{0}'", NewData.ToString("yyyy-MM-dd")));
 
-                    List<Tuple<int, string, string>> Times = new List<Tuple<int, string, string>>();
-                    Times.Add(new Tuple<int, string, string>(9, "9:00", "10:30"));
-                    Times.Add(new Tuple<int, string, string>(11, "11:00", "12:00"));
-                    Times.Add(new Tuple<int, string, string>(14, "14:00", "15:30"));
-                    Times.Add(new Tuple<int, string, string>(16, "16:00", "17:00"));
+                    if (nextDayNum > 0)
+                    {
+                        nextDayNum--;
+                    }
 
                     if (tbSelect.Length > 0)
                     {
@@ -22008,19 +22043,28 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
                         bool isTrade = false;
                         string trip = string.Empty;
 
-                        var rowLast = tbSelect.Last();
-                        var rowFirst = tbSelect.First();
-                        var airStartTime = rowFirst["StartTime"].ToString() ?? "0000";
-                        var airEndTime = rowLast["EndTime"].ToString() ?? "0000";
-                        var takeOffTime = DateTime.Parse(timeArr[i]);
-                        var fallToTime = DateTime.Parse(timeArr[i]);
-                        takeOffTime = takeOffTime.AddHours(int.Parse(airStartTime.Substring(0, 2)));
-                        takeOffTime = takeOffTime.AddMinutes(int.Parse(airStartTime.Substring(2, 2)));
-                        fallToTime = fallToTime.AddHours(int.Parse(airEndTime.Substring(0, 2)));
-                        fallToTime = fallToTime.AddMinutes(int.Parse(airEndTime.Substring(2, 2)));
-
                         foreach (var item in tbSelect)
                         {
+                            if (nextDayNum == 0)
+                            {
+                                nextDayNum = Convert.ToInt32(item["Sign"]);
+                            }
+
+                            var airStartTime = item["StartTime"].ToString() ?? "0000";
+                            var airEndTime = item["EndTime"].ToString() ?? "0000";
+                            var takeOffTime = DateTime.Parse(timeArr[i]);
+                            var fallToTime = DateTime.Parse(timeArr[i]);
+                            takeOffTime = takeOffTime.AddHours(int.Parse(airStartTime.Substring(0, 2)));
+                            takeOffTime = takeOffTime.AddMinutes(int.Parse(airStartTime.Substring(2, 2)));
+                            fallToTime = fallToTime.AddHours(int.Parse(airEndTime.Substring(0, 2)));
+                            fallToTime = fallToTime.AddMinutes(int.Parse(airEndTime.Substring(2, 2)));
+
+                            if (nextDayNum > 0)
+                            {
+                                fallToTime = fallToTime.AddDays(nextDayNum);
+                            }
+
+                            trip = string.Empty;
                             var start = string.Empty;
                             var end = string.Empty;
                             var threeCode = item["Three"].ToString() ?? "";
@@ -22075,41 +22119,16 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
                                 };
                             }
 
-
                             //机型判断
                             string airModel = item["AirModel"].ToString();
                             airModel = GeneralMethod.GetLonger(airModel!.Substring(0, 1)) + airModel;
 
                             string flightTime = item["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", "分钟");
-                            }
-
-                            IFormatProvider ifp = new CultureInfo("zh-CN", true);
-                            if (DateTime.TryParseExact(flightTime, "HH小时mm分钟", ifp, DateTimeStyles.None, out DateTime flightDataTime))
-                            {
-                                flightTime = flightDataTime.Hour > 0
-                                    ? flightDataTime.Hour.ToString() + "小时" + (flightDataTime.Minute > 0
-                                    ? flightDataTime.Minute.ToString() + "分钟" : "") : flightDataTime.Minute > 0
-                                    ? flightDataTime.Minute.ToString() + "分钟" : "";
-                            }
-
+                            flightTime = ParseBlackTime(flightTime);
 
                             //航班号
                             string flightcode = item["Fliagtcode"].ToString();
-
                             var aircompany = _sqlSugar.Queryable<Res_AirCompany>().First(x => x.ShortCode.ToUpper() == flightcode!.Substring(0, 2).ToUpper() && x.IsDel == 0);
-
                             var hsEmpty = "【此航司" + flightcode!.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";
                             if (aircompany == null)
                             {
@@ -22121,63 +22140,153 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
                                 };
                             }
 
+                            //航班前公务安排
+                            if (tbSelect.First().Equals(item) && i != 0)
+                            {
+                                foreach (var takeoff in takeoffTimes)
+                                {
+                                    var takeoffItem1 = NewData.AddHours(takeoff.Item1.Hour).AddMinutes(takeoff.Item1.Minute);
+                                    if (DateTime.Compare(takeOffTime, takeoffItem1) > 0)
+                                    {
+                                        foreach (var addTime in takeoff.Item2)
+                                        {
+                                            chiarr.Add(new Grp_ApprovalTravelDetails
+                                            {
+                                                Time = addTime,
+                                                CreateTime = DateTime.Now,
+                                                CreateUserId = dto.Userid,
+                                                ParentId = 0,
+                                                Details = "公务活动"
+                                            });
+                                        }
+
+                                        break;
+                                    }
+                                }
+                            }
+
                             //从成都天府国际机场搭乘四川航空公司3U3961飞往东京
-                            trip += $"从{start_Object.AirPort}搭乘{aircompany.CnName}{flightcode}飞往{end_Object.City}。\r\n({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}  飞行时间{flightTime});\r\n";
+                            //trip += $"从{start_Object.AirPort}搭乘{aircompany.CnName}{flightcode}飞往{end_Object.City}。\r\n({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}  飞行时间{flightTime});\r\n";
+
+                            //乘坐四川航空3U3901次航班由成都飞往加德满都,3小时25分钟
+                            trip += $"乘坐{aircompany.CnName}{flightcode}次航班由{start_Object.City}飞往{end_Object.City},{flightTime}";
 
                             isTrade = Convert.ToBoolean(item["isTransitShipment"]);
 
                             if (isTrade)
                             {
-                                trip += $"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼(中转 行李直达)\r\n";
+                                //trip += $"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼(中转 行李直达)\r\n";
+                                trip += "(转机不出机场)。";
                             }
-                            else
-                            {
-                                trip += "\r\n"; //$"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
-                            }
-
-                        }
-
-                        chiarr.Add(new Grp_ApprovalTravelDetails
-                        {
-                            Time = takeOffTime.ToString("HH:mm") + "-" + fallToTime.ToString("HH:mm"),
-                            CreateTime = DateTime.Now,
-                            CreateUserId = dto.Userid,
-                            ParentId = 0,
-                            Details = trip
-                        });
-
-
-                        //添加乘车语句
-                        chiarr.Add(new Grp_ApprovalTravelDetails
-                        {
-                            Time = (fallToTime.AddHours(2.5).ToString("HH:mm") + "-" + fallToTime.AddHours(3).ToString("HH:mm")),
-                            CreateTime = DateTime.Now,
-                            CreateUserId = dto.Userid,
-                            ParentId = 0,
-                            Details = "乘车前往市区(约xx公里,大约需要xx分钟)"
-                        });
+                            //else
+                            //{
+                            //    trip += "\r\n"; //$"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
+                            //}
 
-                        if (i != timeArr.Count - 1)
-                        {
-                            fallToTime = fallToTime.AddHours(2.5);
+                            chiarr.Add(new Grp_ApprovalTravelDetails
+                            {
+                                Time = takeOffTime.ToString("HH:mm") + "-" + fallToTime.ToString("HH:mm"),
+                                CreateTime = DateTime.Now,
+                                CreateUserId = dto.Userid,
+                                ParentId = 0,
+                                Details = trip
+                            });
 
-                            foreach (var item in Times)
+                            //最后一条到达的时间安排公务
+                            if (tbSelect.Last().Equals(item) && i != timeArr.Count - 1)
                             {
-                                //排列公务时间
-                                if (fallToTime.Hour < item.Item1)
+                                bool isCheckCountry = false;
+                                if (end_Object.Country != arriveCountry)
+                                {
+                                    arriveCountry = end_Object.Country;
+                                    isCheckCountry = true;
+                                }
+
+                                if (nextDayNum == 0)
                                 {
-                                    chiarr.Add(new Grp_ApprovalTravelDetails
+                                    //需要入境的情况
+                                    if (isCheckCountry)
+                                    {
+                                        foreach (var fallTime in fallTimesCheckCountry)
+                                        {
+                                            var fallTimeItem1 = NewData.AddHours(fallTime.Item1.Hour).AddMinutes(fallTime.Item1.Minute);
+                                            if (DateTime.Compare(fallToTime, fallTimeItem1) < 0)
+                                            {
+                                                foreach (var addTime in fallTime.Item2)
+                                                {
+                                                    chiarr.Add(new Grp_ApprovalTravelDetails
+                                                    {
+                                                        Time = addTime,
+                                                        CreateTime = DateTime.Now,
+                                                        CreateUserId = dto.Userid,
+                                                        ParentId = 0,
+                                                        Details = "公务活动"
+                                                    });
+                                                }
+
+                                                break;
+                                            }
+                                        }
+                                    }
+                                    else
                                     {
-                                        Time = $"{item.Item2} - {item.Item3}",
-                                        CreateTime = DateTime.Now,
-                                        CreateUserId = dto.Userid,
-                                        ParentId = 0,
-                                        Details = "公务活动"
-                                    });
+                                        foreach (var fallTime in fallTimesNotCheckCountry)
+                                        {
+                                            var fallTimeItem1 = NewData.AddHours(fallTime.Item1.Hour).AddMinutes(fallTime.Item1.Minute);
+                                            if (DateTime.Compare(fallToTime, fallTimeItem1) < 0)
+                                            {
+                                                foreach (var addTime in fallTime.Item2)
+                                                {
+                                                    chiarr.Add(new Grp_ApprovalTravelDetails
+                                                    {
+                                                        Time = addTime,
+                                                        CreateTime = DateTime.Now,
+                                                        CreateUserId = dto.Userid,
+                                                        ParentId = 0,
+                                                        Details = "公务活动"
+                                                    });
+                                                }
+
+                                                break;
+                                            }
+                                        }
+                                    }
                                 }
                             }
                         }
 
+
+                        //添加乘车语句
+                        //chiarr.Add(new Grp_ApprovalTravelDetails
+                        //{
+                        //    Time = (fallToTime.AddHours(2.5).ToString("HH:mm") + "-" + fallToTime.AddHours(3).ToString("HH:mm")),
+                        //    CreateTime = DateTime.Now,
+                        //    CreateUserId = dto.Userid,
+                        //    ParentId = 0,
+                        //    Details = "乘车前往市区(约xx公里,大约需要xx分钟)"
+                        //});
+
+                        //if (i != timeArr.Count - 1)
+                        //{
+                        //    fallToTime = fallToTime.AddHours(2.5);
+
+                        //    foreach (var item in Times)
+                        //    {
+                        //        //排列公务时间
+                        //        if (fallToTime.Hour < item.Item1)
+                        //        {
+                        //            chiarr.Add(new Grp_ApprovalTravelDetails
+                        //            {
+                        //                Time = $"{item.Item2} - {item.Item3}",
+                        //                CreateTime = DateTime.Now,
+                        //                CreateUserId = dto.Userid,
+                        //                ParentId = 0,
+                        //                Details = "公务活动"
+                        //            });
+                        //        }
+                        //    }
+                        //}
+
                         var threeCodeList = _threeCodeRepository.QueryThreeCodeArray(threeCodeStr);
                         var last = threeCodeStr.Last();
                         foreach (var item in threeCodeStr)
@@ -22391,6 +22500,38 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
             return Ok(jw);
         }
 
+        private string ParseBlackTime(string time)
+        {
+            // 匹配可能只有分钟的情况
+            string pattern = @"(?:(\d+)H)?(?:(\d+)M)?";
+            System.Text.RegularExpressions.Match match = Regex.Match(time, pattern);
+
+            if (match.Success)
+            {
+                string hours = match.Groups[1].Value;
+                string minutes = match.Groups[2].Value;
+
+                // 如果小时部分为空,则只显示分钟
+                if (string.IsNullOrEmpty(hours))
+                {
+                    return $"{minutes}分钟";
+                }
+                // 如果分钟部分为空,则只显示小时
+                else if (string.IsNullOrEmpty(minutes))
+                {
+                    return $"{hours}小时";
+                }
+                // 否则显示完整格式
+                else
+                {
+                    return $"{hours}小时{minutes}分钟";
+                }
+            }
+            else
+            {
+                return "未知时长";
+            }
+        }
 
         private string intToString(int numberVal)
         {

+ 40 - 6
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -2027,7 +2027,7 @@ namespace OASystem.API.OAMethodLib
             return dt;
         }
 
-        private readonly static string[] excludeArr = new string[] { "[中转]", "[转机]" };
+        private readonly static string[] excludeArr = new string[] { "[中转]", "[转机]", "[国内]" };
 
         /// <summary>
         ///根据机票黑屏代码整理DataTable
@@ -2180,11 +2180,13 @@ namespace OASystem.API.OAMethodLib
 
             //添加转机标识
             dt.Columns.Add("isTransitShipment", typeof(bool));
+            //添加国内段标识
+            dt.Columns.Add("isDomesticSection", typeof(bool));
 
             //判断是否录入黑屏代码
             if (blackCode == null)
             {
-                dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null, false);
+                dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null, false, false);
             }
             else
             {
@@ -2214,7 +2216,7 @@ namespace OASystem.API.OAMethodLib
                             return !excludeArr.Contains(x);
                         }).Count() != 9)
                         {
-                            dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null, false);
+                            dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null, false,false);
                             //MessageBoxEx.Show("第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误, 请联系机票同事核对");
                             return dt;
                         }
@@ -2232,7 +2234,18 @@ namespace OASystem.API.OAMethodLib
                                 var time = new DateTime(DateTime.Now.Year, month, day); //
 
                                 var isExist = Info.Contains("[中转]");
-                               
+                                if (!isExist)
+                                {
+                                    isExist = Info.Contains("[转机]");
+                                }
+
+                                var isDomesticSection = Info.Contains("[国内]");
+
+                                if (isDomesticSection)
+                                {
+                                    continue;
+                                }
+
                                 dt.Rows.Add(Info[0],
                                        Info[1],
                                        Info[2],
@@ -2245,8 +2258,9 @@ namespace OASystem.API.OAMethodLib
                                        time.ToString("yyyy-MM-dd"),
                                        time.ToString("yyyy-MM-dd"),
                                        "",
-                                       "0",
-                                       isExist
+                                       ExtractNumberAfterPlus(Info[4]),
+                                       isExist,
+                                       isDomesticSection
                                        );
 
                             }
@@ -2267,6 +2281,26 @@ namespace OASystem.API.OAMethodLib
             return dt;
         }
 
+        private static int ExtractNumberAfterPlus(string input)
+        {
+            int value = 0;
+
+            if (string.IsNullOrEmpty(input))
+            {
+                return value;
+            }
+
+            string pattern = @"\+\d+"; // 匹配“+”及其后的数字
+            Match match = Regex.Match(input, pattern);
+
+            if (match.Success)
+            {
+                int.TryParse(match.Value.Substring(1), out value); // 去掉“+”符号,只保留数字部分
+            }
+
+            return value;
+        }
+
         /// <summary>
         /// 根据星期,月份的缩写,转换成数字或者全称
         /// 根据币种中文名称返回币种代码