瀏覽代碼

报批行程++

yuanrf 3 月之前
父節點
當前提交
1cb5e5fe64
共有 2 個文件被更改,包括 309 次插入129 次删除
  1. 269 123
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  2. 40 6
      OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

+ 269 - 123
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -428,7 +428,7 @@ namespace OASystem.API.Controllers
         public async Task<IActionResult> CityByCountry(string countryLabel)
         {
 
-            countryLabel=HttpUtility.UrlDecode(countryLabel);
+            countryLabel = HttpUtility.UrlDecode(countryLabel);
             var countryList = countryLabel.Split(',', StringSplitOptions.RemoveEmptyEntries).ToArray();
             var citys = Array.Empty<string?>();
             if (countryList.Any())
@@ -449,7 +449,7 @@ namespace OASystem.API.Controllers
 
                 citys = cityDatas1.Select(x => x.City).Distinct().ToArray();
             }
-            
+
             return Ok(JsonView(citys));
         }
 
@@ -461,7 +461,7 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpGet("{id}/{tempId}")]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> GroupOrderPreInfo(int id,int tempId = 1404)
+        public async Task<IActionResult> GroupOrderPreInfo(int id, int tempId = 1404)
         {
             return Ok(await _grpOrderPreInfoRep.InfoAsync(id, tempId));
         }
@@ -511,7 +511,7 @@ namespace OASystem.API.Controllers
                 fileNamePrefix = $"{data.Name}_有商邀版";
             }
             else
-            { 
+            {
                 //tempId == 1404 默认下载
                 tempPath += $"前期需客户提供信息_单接送机Temp.xlsx";
                 fileNamePrefix = $"{data.Name}_单接送机";
@@ -534,7 +534,8 @@ namespace OASystem.API.Controllers
                 else if (obj is string[] stringArray)
                 {
                     item.OriginVal = string.Join("、", stringArray);
-                } else if (obj.Equals("-"))
+                }
+                else if (obj.Equals("-"))
                 {
                     item.OriginVal = "";
                 }
@@ -566,7 +567,7 @@ namespace OASystem.API.Controllers
                 designer.SetDataSource("View", data.Items);
             }
 
-                
+
             designer.Process();
 
             if (!Directory.Exists(savePath))
@@ -5637,7 +5638,7 @@ FROM
         /// </summary>
         /// <returns></returns>
         [HttpPost]
-        [ApiLog("Grp_EnterExitCost",OperationEnum.Add)]
+        [ApiLog("Grp_EnterExitCost", OperationEnum.Add)]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> PostEnterExitCostOperate(EnterExitCostOperateDto dto)
         {
@@ -6233,7 +6234,8 @@ FROM
                             totalLabel += $"{subJJC.ToString("#0.00")} 元/人(经济舱)";
                         }
                         //公务舱
-                        if (_EnterExitCosts.SumGWC == 1) {
+                        if (_EnterExitCosts.SumGWC == 1)
+                        {
                             subGWC = otherFeeTotal + _EnterExitCosts.OutsideGWPay;
                             totalLabel += $"{subGWC.ToString("#0.00")} 元/人(公务舱)";
                         }
@@ -8283,7 +8285,7 @@ FROM
                             #endregion
                         }
                         //else dic.Add("SubQT", "七、其他费用合计:  0    元/人");
-                        
+
                         //删除多余行
                         while (table5.Rows.Count > table5Row)
                         {
@@ -9066,7 +9068,7 @@ FROM
                 }
 
                 //默认添加查看、编辑权限(创建人、自己) 
-                await _enterExitCostRep.InitPerm(dto.GroupId,dto.UserId);
+                await _enterExitCostRep.InitPerm(dto.GroupId, dto.UserId);
 
                 var dayDatas = _sqlSugar.Queryable<Grp_DayAndCostDraft>().Where(x => x.IsDel == 0 && x.ParentId == draftId).ToList();
                 var otherDatas = _sqlSugar.Queryable<Grp_DayOtherPriceDraft>().Where(x => x.IsDel == 0 && x.ParentId == draftId).ToList();
@@ -9163,7 +9165,7 @@ FROM
         /// <returns></returns>
         private async Task<List<CurrencyInfo>> EnterExitCostMobileGetCurrencyInit()
         {
-            return await GeneralMethod.EnterExitCostInitRate(); 
+            return await GeneralMethod.EnterExitCostInitRate();
         }
 
         /// <summary>
@@ -9282,7 +9284,7 @@ WHERE
                     item.IsView = true;
                 }
             }
-            
+
             return Ok(JsonView(true, "查询成功!", data, total));
         }
 
@@ -10772,7 +10774,8 @@ WHERE
 
             var rateInfos = await EnterExitCostMobileGetCurrencyInit();
 
-            var info = new Grp_EnterExitCostDraft() { 
+            var info = new Grp_EnterExitCostDraft()
+            {
                 DraftName = dto.DraftName,
                 CurrencyRemark = CommonFun.GetCurrencyChinaToString(rateInfos),
                 CreateUserId = dto.CurrUserId
@@ -10780,12 +10783,13 @@ WHERE
 
             _sqlSugar.BeginTran();
             var draftId = await _sqlSugar.Insertable(info).ExecuteReturnIdentityAsync();
-            if (draftId < 1) {
+            if (draftId < 1)
+            {
                 _sqlSugar.RollbackTran();
                 return Ok(JsonView(false, "草稿创建失败!"));
             }
             //添加默认权限
-            await _enterExitCostDraftRep.InitPerm(draftId,dto.CurrUserId);
+            await _enterExitCostDraftRep.InitPerm(draftId, dto.CurrUserId);
             _sqlSugar.CommitTran();
 
             (bool viewPerm, bool assignPerm) = await _enterExitCostDraftRep.PermissionValidationAsync(draftId, dto.CurrUserId);
@@ -11203,7 +11207,7 @@ WHERE
             {
                 bool isView1 = false;
                 if (userIds.Any(x => x == item.Id)) isView1 = true;
-                else if (viewPermissionData.Any(x => x.Id ==dto.CurrUserId) && item.Id == dto.CurrUserId) isView1 = true;
+                else if (viewPermissionData.Any(x => x.Id == dto.CurrUserId) && item.Id == dto.CurrUserId) isView1 = true;
                 perUsersView.Add(new { Id = item.Id, Name = item.Name, IsView = isView1 });
             }
 
@@ -11943,7 +11947,7 @@ WHERE
         {
             int groupId = dto.DiId,
                 currUserId = dto.CurrUserId;
-            if (groupId < 1) return Ok(JsonView(false,"请传入有效的GroupId;"));
+            if (groupId < 1) return Ok(JsonView(false, "请传入有效的GroupId;"));
             if (currUserId < 1) return Ok(JsonView(false, "请传入有效的CurrUserId;"));
 
             var info = await _enterExitCostRep.GetEnterExitCostInfoByDiId(dto);
@@ -12050,7 +12054,7 @@ WHERE
                     {
                         feeName = countryInfo.Country;
                         var city = countryInfo.City;
-                        
+
                         if (!string.IsNullOrEmpty(city) && cityFilter.Any(x => !x.Contains(city)))
                         {
                             feeName += $"-{city}";
@@ -12184,11 +12188,12 @@ WHERE
             #endregion
 
             #region 签证+保险 1362
-            int visaInsIndex = 1; 
+            int visaInsIndex = 1;
             int visaInsItemTypeId = 1362;
             if (infoView.Visa > 0)
             {
-                views.Add(new QuoteSubItemInfo() {
+                views.Add(new QuoteSubItemInfo()
+                {
                     ItemId = visaInsItemTypeId,
                     Index = visaInsIndex,
                     FeeName = $"签证",
@@ -12300,7 +12305,7 @@ WHERE
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> EnterExitCostQuoteItemDel(EnterExitCostQuoteItemDelDto dto)
         {
-            if (dto.Id < 1) return Ok(JsonView(false,MsgTips.Id));
+            if (dto.Id < 1) return Ok(JsonView(false, MsgTips.Id));
             if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
 
             return Ok(await _enterExitCostQuoteRep.ItemDelAsync(dto));
@@ -12319,7 +12324,7 @@ WHERE
             if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
 
 
-            var info = await _enterExitCostQuoteRep.InfoAsync(new EnterExitCostQuoteInfoDto() { Id= dto.Id });
+            var info = await _enterExitCostQuoteRep.InfoAsync(new EnterExitCostQuoteInfoDto() { Id = dto.Id });
             if (info == null) return Ok(JsonView(false, "报价信息未填写!"));
 
             var rates = info.Rates;
@@ -12349,7 +12354,7 @@ WHERE
             designer.SetDataSource("IntTravelTitle", intTravelCosts.ItemName);
             if (intTravelCosts.Infos.Any())
             {
-                var cabClassFilter = new string[] {"经济舱","公务舱","头等舱" };
+                var cabClassFilter = new string[] { "经济舱", "公务舱", "头等舱" };
 
                 string label = string.Empty;
                 var infos = intTravelCosts.Infos.Where(x => cabClassFilter.Contains(x.FeeName)).ToArray();
@@ -19953,10 +19958,10 @@ ORDER by  gctggrc.id DESC
             builder.CellFormat.Borders.LineStyle = Aspose.Words.LineStyle.Single;
             builder.CellFormat.Borders.LineWidth = 1;
             builder.CellFormat.Borders.Color = Color.FromArgb(183, 183, 183);
-            
+
             table.FirstRow.FirstCell.CellFormat.Width = 20; // 单位为百分比
             builder.RowFormat.Height = 40;
-            builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center; 
+            builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
             builder.Font.Name = contentFont;
             builder.Font.Size = 12;
             builder.Font.Bold = true;
@@ -20056,12 +20061,12 @@ ORDER by  gctggrc.id DESC
             doc.FirstSection.HeadersFooters.Add(footer);
 
             Paragraph para = new Paragraph(doc);
-            para.ParagraphFormat.Alignment = ParagraphAlignment.Right; 
+            para.ParagraphFormat.Alignment = ParagraphAlignment.Right;
             footer.AppendChild(para);
 
             builder.MoveTo(para);
 
-            string imagePath = "./Images/FMGJ_Log.png"; 
+            string imagePath = "./Images/FMGJ_Log.png";
             builder.InsertImage(imagePath);
 
             #endregion
@@ -20077,7 +20082,7 @@ ORDER by  gctggrc.id DESC
             return Ok(JsonView(true, "操作成功!", Url));
         }
 
-        private void InvertedListFileDownloadSetRow(DocumentBuilder builder, string fontName, string dateTime,string content,string reamrk)
+        private void InvertedListFileDownloadSetRow(DocumentBuilder builder, string fontName, string dateTime, string content, string reamrk)
         {
             var fontColor = Color.FromArgb(64, 64, 64);
 
@@ -20100,7 +20105,7 @@ ORDER by  gctggrc.id DESC
 
             builder.InsertCell();
             builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
-            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left; 
+            builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
             builder.Font.Size = 9;
             builder.Font.Bold = false;
             builder.Font.Color = fontColor;
@@ -20108,7 +20113,7 @@ ORDER by  gctggrc.id DESC
             builder.EndRow();
         }
 
-        private void InvertedListFileDownloadSetBorders(CellCollection cell,int index)
+        private void InvertedListFileDownloadSetBorders(CellCollection cell, int index)
         {
             cell[index].CellFormat.Borders.Top.LineStyle = Aspose.Words.LineStyle.None;
             cell[index].CellFormat.Borders.Bottom.LineStyle = Aspose.Words.LineStyle.None;
@@ -21557,6 +21562,7 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
 
                 var stay = "-";
                 var cityPath = "-";
+                var arriveCountry = string.Empty;
 
                 //添加城市路径以及住宿地
 
@@ -21565,6 +21571,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 = "-";
@@ -21577,11 +21618,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)
                     {
@@ -21590,19 +21630,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() ?? "";
@@ -21657,109 +21706,174 @@ 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)
                             {
                                 aircompany = new Res_AirCompany
-                            {
+                                {
                                     CnName = hsEmpty,
                                     EnName = hsEmpty,
                                     ShortCode = hsEmpty,
                                 };
                             }
 
-                            //从成都天府国际机场搭乘四川航空公司3U3961飞往东京
-                            trip += $"从{start_Object.AirPort}搭乘{aircompany.CnName}{flightcode}飞往{end_Object.City}。\r\n({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}  飞行时间{flightTime});\r\n";
-
-                            isTrade = Convert.ToBoolean(item["isTransitShipment"]);
-
-                            if (isTrade)
+                            //航班前公务安排
+                            if (tbSelect.First().Equals(item) && i != 0)
                             {
-                                trip += $"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼(中转 行李直达)\r\n";
+                                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;
+                                    }
                                 }
-                            else
-                            {
-                                trip += "\r\n"; //$"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
                             }
 
-                        }
+                            //从成都天府国际机场搭乘四川航空公司3U3961飞往东京
+                            //trip += $"从{start_Object.AirPort}搭乘{aircompany.CnName}{flightcode}飞往{end_Object.City}。\r\n({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}  飞行时间{flightTime});\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
-                        });
+                            //乘坐四川航空3U3901次航班由成都飞往加德满都,3小时25分钟
+                            trip += $"乘坐{aircompany.CnName}{flightcode}次航班由{start_Object.City}飞往{end_Object.City},{flightTime}";
 
+                            isTrade = Convert.ToBoolean(item["isTransitShipment"]);
 
-                        //添加乘车语句
-                        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 (isTrade)
+                            {
+                                //trip += $"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼(中转 行李直达)\r\n";
+                                trip += "(转机不出机场)。";
+                            }
+                            //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)
@@ -21792,7 +21906,7 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
 
                     string week = Day[Convert.ToInt32(NewData.DayOfWeek.ToString("d"))].ToString();
                     Grp_ApprovalTravel appro = new Grp_ApprovalTravel();
-                    appro.Date =  NewData.Month + "月" + NewData.Day + "日(" + week + ")"+ "第" + intToString(i + 1) + "天 ";
+                    appro.Date = NewData.Month + "月" + NewData.Day + "日(" + week + ")" + "第" + intToString(i + 1) + "天 ";
                     appro.Diid = dto.Diid;
                     appro.CreateUserId = dto.Userid;
                     appro.CreateTime = DateTime.Now;
@@ -21864,15 +21978,15 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
             }
 
             //模板路径
-            string tempPath = AppSettingsHelper.Get("WordBasePath")+ "Template/";
+            string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/";
             var fileName = string.Empty;
-            string titleFont = string.Empty,timeFont = string.Empty, contentFont = string.Empty;
+            string titleFont = string.Empty, timeFont = string.Empty, contentFont = string.Empty;
             bool bold = false;
 
             if (dto.FileIndex == 1)
             {
                 fileName = "公务行程导出模板.docx"; //"C:\\Server\\File\\OA2023\\Office\\Word\\Template/公务行程导出模板.docx"
-            } 
+            }
             else if (dto.FileIndex == 2)
             {
                 fileName = "省外办-报批.docx";
@@ -21919,7 +22033,7 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
 
                 var ChiRep = _sqlSugar.Queryable<Grp_ApprovalTravelDetails>().Where(x => x.IsDel == 0 && x.ParentId == item.Id).ToList();
 
-                SetCells(tableOne, doc, SetIndex, 0, textTime,titleFont,bold);
+                SetCells(tableOne, doc, SetIndex, 0, textTime, titleFont, bold);
 
                 SetIndex++;
 
@@ -21944,8 +22058,8 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
                             CenterRowClone = (Aspose.Words.Tables.Row)tableOne.Rows[1].Clone(true);
                             tableOne.AppendChild(CenterRowClone);
                         }
-                        SetCells(tableOne, doc, SetIndex, 0, txtTime,timeFont,bold);
-                        SetCells(tableOne, doc, SetIndex, 1, txtDetail,contentFont, bold);
+                        SetCells(tableOne, doc, SetIndex, 0, txtTime, timeFont, bold);
+                        SetCells(tableOne, doc, SetIndex, 1, txtDetail, contentFont, bold);
                         indexChi++;
                         SetIndex++;
                     }
@@ -21966,13 +22080,45 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
             }
 
             string strFileName = "/Travel/ExportApprovalJourneyWord/" + group.TeamName + fileName;
-            doc.Save(AppSettingsHelper.Get("WordBasePath") + strFileName,Aspose.Words.SaveFormat.Docx);  //"C:\\Server\\File\\OA2023\\Office\\Word" + strFileName
+            doc.Save(AppSettingsHelper.Get("WordBasePath") + strFileName, Aspose.Words.SaveFormat.Docx);  //"C:\\Server\\File\\OA2023\\Office\\Word" + strFileName
             jw.Data = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + strFileName;  //"C:\\Server\\File\\OA2023\\Office\\Word" + strFileName
             jw.Code = 200;
             jw.Msg = "";
             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)
         {
@@ -22012,7 +22158,7 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
             return stringNumberVal;
         }
 
-        private void SetCells(Aspose.Words.Tables.Table table, Document doc, int rows, int cells, string val,string font ,bool bold)
+        private void SetCells(Aspose.Words.Tables.Table table, Document doc, int rows, int cells, string val, string font, bool bold)
         {
             //获取table中的某个单元格,从0开始
             Cell lshCell = table.Rows[rows].Cells[cells];

+ 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>
         /// 根据星期,月份的缩写,转换成数字或者全称
         /// 根据币种中文名称返回币种代码