wangh 1 éve%!(EXTRA string=óta)
szülő
commit
01708d6d27

+ 539 - 73
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -1,20 +1,19 @@
 using Aspose.Cells;
+using Aspose.Cells.Drawing.Texts;
 using Aspose.Words;
 using Aspose.Words.Tables;
-using Microsoft.AspNetCore.Mvc;
-using NetTaste;
-using Newtonsoft.Json.Serialization;
-using NPOI.OpenXmlFormats.Spreadsheet;
-using NPOI.SS.Formula.Functions;
+using NPOI.Util;
 using OASystem.API.OAMethodLib;
+using OASystem.API.OAMethodLib.File;
 using OASystem.Domain.Dtos.Groups;
-using OASystem.Domain.Entities.Business;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Infrastructure.Repositories.Groups;
-using OASystem.Infrastructure.Tools;
-using System.Web;
+using System.Data;
+using static OASystem.Infrastructure.Repositories.Resource.AirTicketResRepository;
 using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
+using Cell = Aspose.Words.Tables.Cell;
+using Row = Aspose.Words.Tables.Row;
 
 namespace OASystem.API.Controllers
 {
@@ -918,10 +917,15 @@ namespace OASystem.API.Controllers
                 throw;
             }
         }
-
+        Dictionary<string, string> transDic = new Dictionary<string, string>();
+        /// <summary>
+        /// 行程单导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> ItineraryAirTicketRes(AirTicketResDto dto)
+        public async Task<IActionResult> ItineraryAirTicketRes(ItineraryAirTicketResDto dto)
         {
             try
             {
@@ -933,80 +937,542 @@ namespace OASystem.API.Controllers
                 else
                 {
                     List<AirTicketReservationsView> _AirTicketReservations = groupData.Data;
-
-                    //WorkbookDesigner designer = new WorkbookDesigner();
-                    //designer.Workbook = new Workbook(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");
-                    Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");
-                    DocumentBuilder builder = new DocumentBuilder();
-                    foreach (var item in _AirTicketReservations)
+                    if (dto.Language=="CN")
                     {
+                        Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");
+                        DocumentBuilder builder = new DocumentBuilder(doc);
                         int tableIndex = 0;//表格索引
                                            //得到文档中的第一个表格
                         Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);
-                        Paragraph lastParagraph = new Paragraph(doc);
-                        //第一个表格末尾加段落
-                        table.ParentNode.InsertAfter(lastParagraph, table);
-                        //复制第一个表格
-                        Table cloneTable = (Table)table.Clone(true);
-                        //在文档末尾段落后面加入复制的表格
-                        table.ParentNode.InsertAfter(cloneTable, lastParagraph);
-                        Itinerary itinerary = new Itinerary();
-                        itinerary.ClientName = item.ClientName;
-                        itinerary.AirlineCompany = "航空公司";
-                        itinerary.TimeIssue = "2023-5-23 10:09:06";
-                        itinerary.DrawingAgent = "代理人";
-                        itinerary.AgentsAddress = "代理人地址";
-                        itinerary.AgentPhone = "代理人电话";
-                        itinerary.AgentFacsimile = "代理人传真";
-                        string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
-                        DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
-                        List<AirInfo> airInfos = new List<AirInfo>();
-                        for (int i = 0; i < DayArray.Length; i++)
+
+                        foreach (var item in _AirTicketReservations)
                         {
-                            string[] FlightStr = item.FlightsCode.Split('/');
-                            string[] tempstr = DayArray[i]
-                                      .Replace("\r\n", string.Empty)
-                                      .Replace("\\r\\n", string.Empty)
-                                      .TrimStart().TrimEnd()
-                                      .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
-                            AirInfo air = new AirInfo();
-                            string [] city = item.FlightsCity.Split('/');
-                            string cityStr = city[i];
-                            string startCity = cityStr.Substring(0, 2);
-                            Res_ThreeCode startCityThree = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == startCity && a.IsDel == 0);
-                            string endCity = cityStr.Substring(3, 5);
-                            Res_ThreeCode endCityThree = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == endCity && a.IsDel == 0);
-                            air.Destination= startCityThree.City+"-"+endCityThree.City;
-                            air.Flight = FlightStr[i];
-                            air.SeatingClass = item.CTypeName;
+                            #region 处理固定数据
+                            string[] FlightsCode = item.FlightsCode.Split('/');
+                            if (FlightsCode.Length != 0)
+                            {
+                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
+                                if (_AirCompany != null)
+                                {
+                                    table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName;
+                                }
+                                else
+                                {
+                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";
+                                }
+                            }
+                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
+                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
+                            string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
+                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
+                            string name = "";
+                            foreach (string clientName in nameArray)
+                            {
+                                if (!name.Contains(clientName))
+                                {
+                                    name += clientName + ",";
+                                }
+                            }
+                            if (!string.IsNullOrWhiteSpace(name))
+                            {
+                                table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1);
+                            }
+                            else
+                            {
+                                table.Range.Bookmarks["ClientName"].Text = "--";
+                            }
+                            table.Range.Bookmarks["TicketNumber"].Text = "--";
+                            table.Range.Bookmarks["IdentificationCode"].Text = "--";
+                            table.Range.Bookmarks["JointTicket"].Text = "--";
+                            table.Range.Bookmarks["TimeIssue"].Text = "--";
+                            table.Range.Bookmarks["DrawingAgent"].Text = "--";
+                            table.Range.Bookmarks["NavigationCode"].Text = "--";
+                            table.Range.Bookmarks["AgentsAddress"].Text = "--";
+                            table.Range.Bookmarks["AgentPhone"].Text = "--";
+                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";
+
+                            #endregion
+                            #region 循环数据处理
+                            List<AirInfo> airs = new List<AirInfo>();
+                            string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
+                            DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
+                            for (int i = 0; i < FlightsCode.Length; i++)
+                            {
+                                AirInfo air = new AirInfo();
+                                string[] tempstr = DayArray[i]
+                                               .Replace("\r\n", string.Empty)
+                                               .Replace("\\r\\n", string.Empty)
+                                               .TrimStart().TrimEnd()
+                                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
+
+                                Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));
+                                string starCity = "";
+                                if (star_Three != null)
+                                {
+                                    starCity = star_Three.AirPort;
+                                }
+                                Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));
+                                string EndCity = "";
+                                if (End_Three != null)
+                                {
+                                    EndCity = End_Three.AirPort;
+                                }
+                                air.Destination = starCity + "/" + EndCity;
+                                air.Flight = FlightsCode[i];
+                                air.SeatingClass = item.CTypeName;
+                                string dateTime = tempstr[2];
+                                string DateTemp = dateTime.Substring(2, 5).ToUpper();
+                                air.FlightDate = DateTemp;
+                                air.DepartureTime = tempstr[5];
+                                air.LandingTime = tempstr[6];
+                                air.ValidityPeriod = DateTemp + "/" + DateTemp;
+                                air.TicketStatus = "--";
+                                air.Luggage = "--";
+                                air.DepartureTerminal = "--";
+                                air.LandingTerminal = "--";
+                                airs.Add(air);
+                            }
+                            int row = 13;
+                            for (int i = 0; i < airs.Count; i++)
+                            {
+                                if (airs.Count > 2)
+                                {
+                                    for (int j = 0; j < airs.Count - 2; j++)
+                                    {
+                                        var CopyRow = table.Rows[12].Clone(true);
+                                        table.Rows.Add(CopyRow);
+                                    }
+                                }
+                                PropertyInfo[] properties = airs[i].GetType().GetProperties();
+                                int index = 0;
+                                foreach (PropertyInfo property in properties)
+                                {
+                                    string value = property.GetValue(airs[i]).ToString();
+                                    Cell ishcel0 = table.Rows[row].Cells[index];
+                                    Paragraph p = new Paragraph(doc);
+                                    string s = value;
+                                    p.AppendChild(new Run(doc, s));
+                                    ishcel0.AppendChild(p);
+                                    index++;
+                                }
+                                row++;
+
+                            }
+                            #endregion
 
+                            Paragraph lastParagraph = new Paragraph(doc);
+                            //第一个表格末尾加段落
+                            table.ParentNode.InsertAfter(lastParagraph, table);
+                            //复制第一个表格
+                            Table cloneTable = (Table)table.Clone(true);
+                            //在文档末尾段落后面加入复制的表格
+                            table.ParentNode.InsertAfter(cloneTable, lastParagraph);
+
+                            if (item != _AirTicketReservations[_AirTicketReservations.Count - 1])
+                            {
+                                int rownewsIndex = 13;
+                                for (int i = 0; i < 2; i++)
+                                {
+                                    var CopyRow = table.Rows[12].Clone(true);
+                                    table.Rows.RemoveAt(13);
+                                    table.Rows.Add(CopyRow);
+                                    rownewsIndex++;
+                                }
+                            }
+                            else
+                            {
+                                table.Rows.RemoveAt(12);
+                            }
+                            cloneTable.Rows.RemoveAt(12);
+                        }
+                        if (_AirTicketReservations.Count != 0)
+                        {
+                            string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/');
+                            if (FlightsCode.Length != 0)
+                            {
+                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
+                                if (_AirCompany != null)
+                                {
+                                    table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName;
+                                }
+                                else
+                                {
+                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";
+                                }
+                            }
+                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
+                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
+                            string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
+                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
+                            string name = "";
+                            foreach (string clientName in nameArray)
+                            {
+                                if (!name.Contains(clientName))
+                                {
+                                    name = name + "," + clientName;
+                                }
+                            }
+                            if (!string.IsNullOrWhiteSpace(name))
+                            {
+                                table.Range.Bookmarks["ClientName"].Text = name;
+                            }
+                            else
+                            {
+                                table.Range.Bookmarks["ClientName"].Text = "--";
+                            }
+                            table.Range.Bookmarks["TicketNumber"].Text = "--";
+                            table.Range.Bookmarks["IdentificationCode"].Text = "--";
+                            table.Range.Bookmarks["JointTicket"].Text = "--";
+                            table.Range.Bookmarks["TimeIssue"].Text = "--";
+                            table.Range.Bookmarks["DrawingAgent"].Text = "--";
+                            table.Range.Bookmarks["NavigationCode"].Text = "--";
+                            table.Range.Bookmarks["AgentsAddress"].Text = "--";
+                            table.Range.Bookmarks["AgentPhone"].Text = "--";
+                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";
                         }
-                        //designer.SetDataSource("Export", AirTicketReservations);
-                        //string AirlineRecordCode = "--";//航空公司记录编码
-                        //string ReservationRecordCode = "--";//订座记录编码
-                        //string ClientName = "--";//旅客姓名
-                        //string TicketNumber = "--";//票号
-                        //string IdentificationCode = "--";//身份识别代码
-                        //string JointTicket = "--";//联票
-                        //string AirlineCompany = "--";//出票航空公司
-                        //string TimeIssue = "--";//出票时间
-                        //string DrawingAgent = "--";//代理人
-                        //string NavigationCode = "--";//航协代码
-                        //string AgentsAddress = "--";//代理人地址
-                        //string AgentPhone = "--";//代理人电话
-                        //string AgentFacsimile = "--";//代理人传真
-                        //doc.SetDataSource("AirlineRecordCode", AirlineRecordCode);
-                        //Itinerary itinerary = new Itinerary();
 
 
+                        doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
+                        //保存合并后的文档
+                        string fileName = "AirItinerary/电子客票中文行程单_CN.docx";
+                        string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;
+                        doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);
+
+                        return Ok(JsonView(true, "成功!", rst));
                     }
-                    doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
-                    //保存合并后的文档
-                    string fileName = "AirItinerary/电子客票行程单_CN.docx";
-                    string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;
-                    doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);
+                    else
+                    {
+                        Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_EN.docx");
+                        DocumentBuilder builder = new DocumentBuilder(doc);
+                        int tableIndex = 0;//表格索引
+                                           //得到文档中的第一个表格
+                        Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);
+                       
+                        List<string> texts = new List<string>();
+                        foreach (var item in _AirTicketReservations)
+                        {
+                            string[] FlightsCode = item.FlightsCode.Split('/');
+                            if (FlightsCode.Length != 0)
+                            {
+                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
+                                if (_AirCompany != null)
+                                {
+                                    if (!transDic.ContainsKey(_AirCompany.CnName))
+                                    {
+                                        transDic.Add(_AirCompany.CnName, _AirCompany.EnName);
+                                    }
+                                    
+                                }
+                                else
+                                {
+                                    if (!transDic.ContainsKey("--"))
+                                    {
+                                        transDic.Add("--", "--");
+                                    }
+                                    
+                                }
+                            }
+                            string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
+                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
+                            string name = "";
+                            foreach (string clientName in nameArray)
+                            {
+                                name += clientName+",";
+                            }
+                            if (!texts.Contains(name))
+                            {
+                                texts.Add(name);
+                            }
+                            List<AirInfo> airs = new List<AirInfo>();
+                            string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
+                            DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
+                            for (int i = 0; i < FlightsCode.Length; i++)
+                            {
+                                AirInfo air = new AirInfo();
+                                string[] tempstr = DayArray[i]
+                                               .Replace("\r\n", string.Empty)
+                                               .Replace("\\r\\n", string.Empty)
+                                               .TrimStart().TrimEnd()
+                                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
+
+                                Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));
+                                if (star_Three != null)
+                                {
+                                    if (!transDic.ContainsKey(star_Three.AirPort))
+                                    {
+                                        transDic.Add(star_Three.AirPort, star_Three.AirPort_En);
+                                    }
+                                }
+                                Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));
+                                
+                                if (End_Three != null)
+                                {
+                                    if (!transDic.ContainsKey(End_Three.AirPort))
+                                    {
+                                        transDic.Add(End_Three.AirPort, End_Three.AirPort_En);
+                                    }
+                                    
+                                }
+                                if (!texts.Contains(item.CTypeName))
+                                {
+                                    texts.Add(item.CTypeName);
+                                }
+                            }
+                        }
+                        List<TranslateResult> transData = _airTicketResRep.ReTransBatch(texts, "en");
+                        if (transData.Count > 0)
+                        {
+                            foreach (TranslateResult item in transData)
+                            {
+                                if (!transDic.ContainsKey(item.Query))
+                                {
+
+                                    transDic.Add(item.Query, item.Translation);
+                                }
+                            }
+                        }
+                        foreach (var item in _AirTicketReservations)
+                        {
+                            #region 处理固定数据
+                            string[] FlightsCode = item.FlightsCode.Split('/');
+                            if (FlightsCode.Length != 0)
+                            {
+                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
+                                if (_AirCompany != null)
+                                {
+                                    string str = "--";
+                                    string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value;
+                                    if (!string.IsNullOrEmpty(translateResult))
+                                    {
+                                        str = translateResult;
+                                        str =_airTicketResRep.Processing(str);
+                                    }
+
+                                    table.Range.Bookmarks["AirlineCompany"].Text = str;
+                                }
+                                else
+                                {
+                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";
+                                }
+                            }
+                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
+                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
+                            string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
+                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
+                            string names = "";
+                            foreach (string clientName in nameArray)
+                            {
+                                    names += clientName + ",";
+                            }
+                            if (!string.IsNullOrWhiteSpace(names))
+                            {
+                                string str = "--";
+                                string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value;
+                                if (!string.IsNullOrEmpty(translateResult))
+                                {
+                                    str = translateResult;
+                                    str = _airTicketResRep.Processing(str);
+                                }
+
+                                table.Range.Bookmarks["ClientName"].Text = str;
+                            }
+                            else
+                            {
+                                table.Range.Bookmarks["ClientName"].Text = "--";
+                            }
+                            table.Range.Bookmarks["TicketNumber"].Text = "--";
+                            table.Range.Bookmarks["IdentificationCode"].Text = "--";
+                            table.Range.Bookmarks["JointTicket"].Text = "--";
+                            table.Range.Bookmarks["TimeIssue"].Text = "--";
+                            table.Range.Bookmarks["DrawingAgent"].Text = "--";
+                            table.Range.Bookmarks["NavigationCode"].Text = "--";
+                            table.Range.Bookmarks["AgentsAddress"].Text = "--";
+                            table.Range.Bookmarks["AgentPhone"].Text = "--";
+                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";
+
+                            #endregion
+                            #region 循环数据处理
+                            List<AirInfo> airs = new List<AirInfo>();
+                            string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
+                            DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
+                            for (int i = 0; i < FlightsCode.Length; i++)
+                            {
+                                AirInfo air = new AirInfo();
+                                string[] tempstr = DayArray[i]
+                                               .Replace("\r\n", string.Empty)
+                                               .Replace("\\r\\n", string.Empty)
+                                               .TrimStart().TrimEnd()
+                                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
+
+                                Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));
+                                string starCity = "";
+                                if (star_Three != null)
+                                {
+                                    string str2 = "--";
+                                    string translateResult2 = transDic.Where(s => s.Key == star_Three.AirPort).FirstOrDefault().Value;
+                                    if (!string.IsNullOrEmpty(translateResult2))
+                                    {
+                                        str2 = translateResult2;
+                                        str2 = _airTicketResRep.Processing(str2);
+                                    }
+                                    starCity = str2;
+                                }
+                                Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));
+                                string EndCity = "";
+                                if (End_Three != null)
+                                {
+                                    string str1 = "--";
+                                    string translateResult1 = transDic.Where(s => s.Key == End_Three.AirPort).FirstOrDefault().Value;
+                                    if (!string.IsNullOrEmpty(translateResult1))
+                                    {
+                                        str1 = translateResult1;
+                                        str1= _airTicketResRep.Processing(str1);
+                                    }
+                                    EndCity = str1;
+                                }
+                                air.Destination = starCity + "/" + EndCity;
+                                air.Flight = FlightsCode[i];
+                                string str = "--";
+                                string translateResult = transDic.Where(s => s.Key == item.CTypeName).FirstOrDefault().Value;
+                                if (!string.IsNullOrEmpty(translateResult))
+                                {
+                                    str = translateResult;
+                                    str = _airTicketResRep.Processing(str);
+                                }
+                                air.SeatingClass = str;
+                                string dateTime = tempstr[2];
+                                string DateTemp = dateTime.Substring(2, 5).ToUpper();
+                                air.FlightDate = DateTemp;
+                                air.DepartureTime = tempstr[5];
+                                air.LandingTime = tempstr[6];
+                                air.ValidityPeriod = DateTemp + "/" + DateTemp;
+                                air.TicketStatus = "--";
+                                air.Luggage = "--";
+                                air.DepartureTerminal = "--";
+                                air.LandingTerminal = "--";
+                                airs.Add(air);
+                            }
+                            int row = 13;
+                            for (int i = 0; i < airs.Count; i++)
+                            {
+                                if (airs.Count > 2)
+                                {
+                                    for (int j = 0; j < airs.Count - 2; j++)
+                                    {
+                                        var CopyRow = table.Rows[12].Clone(true);
+                                        table.Rows.Add(CopyRow);
+                                    }
+                                }
+                                PropertyInfo[] properties = airs[i].GetType().GetProperties();
+                                int index = 0;
+                                foreach (PropertyInfo property in properties)
+                                {
+                                    string value = property.GetValue(airs[i]).ToString();
+                                    Cell ishcel0 = table.Rows[row].Cells[index];
+                                    Paragraph p = new Paragraph(doc);
+                                    string s = value;
+                                    p.AppendChild(new Run(doc, s));
+                                    ishcel0.AppendChild(p);
+                                    index++;
+                                }
+                                row++;
 
-                    return Ok(JsonView(false, "程序错误!"));
+                            }
+                            #endregion
+
+                            Paragraph lastParagraph = new Paragraph(doc);
+                            //第一个表格末尾加段落
+                            table.ParentNode.InsertAfter(lastParagraph, table);
+                            //复制第一个表格
+                            Table cloneTable = (Table)table.Clone(true);
+                            //在文档末尾段落后面加入复制的表格
+                            table.ParentNode.InsertAfter(cloneTable, lastParagraph);
+
+                            if (item != _AirTicketReservations[_AirTicketReservations.Count - 1])
+                            {
+                                int rownewsIndex = 13;
+                                for (int i = 0; i < 2; i++)
+                                {
+                                    var CopyRow = table.Rows[12].Clone(true);
+                                    table.Rows.RemoveAt(13);
+                                    table.Rows.Add(CopyRow);
+                                    rownewsIndex++;
+                                }
+                            }
+                            else
+                            {
+                                table.Rows.RemoveAt(12);
+                            }
+                            cloneTable.Rows.RemoveAt(12);
+                        }
+                        if (_AirTicketReservations.Count != 0)
+                        {
+                            string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/');
+                            if (FlightsCode.Length != 0)
+                            {
+                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));
+                                if (_AirCompany != null)
+                                {
+                                    string str = "--";
+                                    string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value;
+                                    if (!string.IsNullOrEmpty(translateResult))
+                                    {
+                                        str = translateResult;
+                                        str = _airTicketResRep.Processing(str);
+                                    }
+
+                                    table.Range.Bookmarks["AirlineCompany"].Text = str;
+                                }
+                                else
+                                {
+                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";
+                                }
+                            }
+                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";
+                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";
+                            string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase);
+                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();
+                            string names = "";
+                            foreach (string clientName in nameArray)
+                            {
+                                names += clientName + ",";
+                            }
+                            if (!string.IsNullOrWhiteSpace(names))
+                            {
+                                string str = "--";
+                                string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value;
+                                if (!string.IsNullOrEmpty(translateResult))
+                                {
+                                    str = translateResult;
+                                    str = _airTicketResRep.Processing(str);
+                                }
+
+                                table.Range.Bookmarks["ClientName"].Text = str;
+                            }
+                            else
+                            {
+                                table.Range.Bookmarks["ClientName"].Text = "--";
+                            }
+                            table.Range.Bookmarks["TicketNumber"].Text = "--";
+                            table.Range.Bookmarks["IdentificationCode"].Text = "--";
+                            table.Range.Bookmarks["JointTicket"].Text = "--";
+                            table.Range.Bookmarks["TimeIssue"].Text = "--";
+                            table.Range.Bookmarks["DrawingAgent"].Text = "--";
+                            table.Range.Bookmarks["NavigationCode"].Text = "--";
+                            table.Range.Bookmarks["AgentsAddress"].Text = "--";
+                            table.Range.Bookmarks["AgentPhone"].Text = "--";
+                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";
+                        }
+
+
+                        doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
+                        //保存合并后的文档
+                        string fileName = "AirItinerary/电子客票英文行程单_EN.docx";
+                        string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;
+                        doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);
+
+                        return Ok(JsonView(true, "成功!", rst));
+                    }
                 }
 
             }

+ 13 - 10
OASystem/OASystem.Api/OAMethodLib/File/AsposeHelper.cs

@@ -1,5 +1,7 @@
 using Aspose.Cells;
 using Aspose.Words;
+using Aspose.Words.Tables;
+using System.Collections;
 using System.Collections.Generic;
 using System.Data;
 using System.IO;
@@ -24,17 +26,17 @@ namespace OASystem.API.OAMethodLib.File
         /// <param name="dic">数据源 key 对应 value</param>
         /// <param name="listDt">需要循环的数据DataTable  多个注意DataTableName </param>
         /// <returns>返回的文档路径</returns>
-        public static string ExpertWordToModel(string tempFileName, string saveFolderName, string saveFilName, Dictionary<string,object> dic,
+        public static string ExpertWordToModel(string tempFileName, string saveFolderName, string saveFilName, Dictionary<string, object> dic,
             List<DataTable>? listDt)
         {
             try
             {
                 removeWatermark();//加载监听,用于去除水印
 
-                List<string> fieldNames=new List<string>();  //字段名字符串数组
+                List<string> fieldNames = new List<string>();  //字段名字符串数组
                 List<object> fieldValues = new List<object>(); //字段值数组
 
-                foreach (string key in dic.Keys) 
+                foreach (string key in dic.Keys)
                 {
                     fieldNames.Add(key);
                     fieldValues.Add(dic[key]);
@@ -45,7 +47,7 @@ namespace OASystem.API.OAMethodLib.File
                 Document doc = new Document(tempPath);
                 doc.MailMerge.Execute(fieldNames.ToArray(), fieldValues.ToArray());
                 //将我们获得的DataTable类型的数据:EduDataTable放入doc方法中做处理
-                if (listDt != null && listDt.Count > 0) 
+                if (listDt != null && listDt.Count > 0)
                 {
                     foreach (DataTable dt in listDt)
                     {
@@ -55,7 +57,7 @@ namespace OASystem.API.OAMethodLib.File
                         }
                     }
                 }
-                
+
                 //合并模版,相当于页面的渲染
                 doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
                 //"OfficeTempBasePath": "C:/Server/File/OA2023/Office/"
@@ -70,7 +72,7 @@ namespace OASystem.API.OAMethodLib.File
                 string saveFilePath = string.Format("{0}/{1}", path, saveFilName);
 
                 //保存合并后的文档
-                doc.Save(saveFilePath); 
+                doc.Save(saveFilePath);
                 saveFilePath = saveFilePath.Replace("C:/Server/File/OA2023/", AppSettingsHelper.Get("OfficeBaseUrl")); //返回下载地址
                 return saveFilePath; //返回下载地址
             }
@@ -79,7 +81,7 @@ namespace OASystem.API.OAMethodLib.File
                 return ex.Message;
             }
         }
-        
+
         /// <summary>
         /// 加载监听,用于去除水印
         /// </summary>
@@ -104,12 +106,12 @@ namespace OASystem.API.OAMethodLib.File
         {
             try
             {
-                string tempPath = string.Format("{0}/Excel/Template/{1}",AppSettingsHelper.Get("OfficeTempBasePath"), tempFileName);
+                string tempPath = string.Format("{0}/Excel/Template/{1}", AppSettingsHelper.Get("OfficeTempBasePath"), tempFileName);
 
                 //载入模板
                 Workbook wbook = new Workbook(tempPath);
                 //默认第一个工作表
-                Worksheet wSheet = wbook.Worksheets[0]; 
+                Worksheet wSheet = wbook.Worksheets[0];
                 WorkbookDesigner designer = new WorkbookDesigner(wbook);
 
                 //数据源 多个
@@ -133,7 +135,7 @@ namespace OASystem.API.OAMethodLib.File
                         designer.SetDataSource(item.Key, item.Value);
                     }
                 }
-               
+
                 designer.Process();
 
                 string path = string.Format("{0}/Excel/{1}", AppSettingsHelper.Get("OfficeTempBasePath"), saveFolderName);
@@ -201,5 +203,6 @@ namespace OASystem.API.OAMethodLib.File
         }
 
         #endregion
+
     }
 }

+ 2 - 1
OASystem/OASystem.Api/OAMethodLib/YouDaoAPI/YouDaoApiTools.cs

@@ -18,7 +18,7 @@ namespace OASystem.API.OAMethodLib.YouDaoAPI
         {
             var data = await GetReTrans(txt);
             string str = "";
-            if (data==null && data.Code != 0)
+            if (data == null && data.Code != 0)
                 str = txt;
             else
                 str = data.Data;
@@ -176,5 +176,6 @@ namespace OASystem.API.OAMethodLib.YouDaoAPI
             return (int)intResult;
         }
         #endregion
+
     }
 }

+ 6 - 1
OASystem/OASystem.Api/OASystem.API.csproj

@@ -20,7 +20,6 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Aspose.Words" Version="21.8.0" />
     <PackageReference Include="Aspose.Cells" Version="23.4.0" />
     <PackageReference Include="Autofac" Version="6.4.0" />
     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
@@ -44,6 +43,12 @@
     <ProjectReference Include="..\OASystem.RedisRepository\OASystem.RedisRepository.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Reference Include="Aspose.Words">
+      <HintPath>..\package\Aspose.Words.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
   <ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
 
 </Project>

+ 6 - 1
OASystem/OASystem.Domain/Dtos/Groups/AirTicketResDto.cs

@@ -14,7 +14,12 @@ namespace OASystem.Domain.Dtos.Groups
         public int DiId { get; set; } = 0;
         public int UserId { get; set; } = 0;
     }
-   
+   public class ItineraryAirTicketResDto
+    {
+        public int DiId { get; set; } = 0;
+        public int UserId { get; set; } = 0;
+        public string Language { get; set; }
+    }
     /// <summary>
     /// 根据团组Id及
     /// </summary>

+ 6 - 0
OASystem/OASystem.Infrastructure/OASystem.Infrastructure.csproj

@@ -24,4 +24,10 @@
     <ProjectReference Include="..\OASystem.Domain\OASystem.Domain.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Reference Include="Aspose.Words">
+      <HintPath>..\package\Aspose.Words.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
 </Project>

+ 247 - 4
OASystem/OASystem.Infrastructure/Repositories/Resource/AirTicketResRepository.cs

@@ -1,6 +1,4 @@
 using AutoMapper;
-
-using MySqlX.XDevAPI.Relational;
 using Newtonsoft.Json.Linq;
 using Newtonsoft.Json;
 using OASystem.Domain;
@@ -26,6 +24,10 @@ using System.Xml.Linq;
 using System.Net;
 using NPOI.XWPF.UserModel;
 using NPOI.OpenXmlFormats.Wordprocessing;
+using System.Collections;
+using Aspose.Words.Tables;
+using Aspose.Words;
+using System.Reflection;
 
 namespace OASystem.Infrastructure.Repositories.Resource
 {
@@ -654,7 +656,7 @@ namespace OASystem.Infrastructure.Repositories.Resource
             }
         }
 
-        public async Task<Result> ItineraryAirTicketRes(AirTicketResDto dto)
+        public async Task<Result> ItineraryAirTicketRes(ItineraryAirTicketResDto dto)
         {
             Result result = new Result() { Code = -2, Msg = "未知错误" };
             try
@@ -679,6 +681,247 @@ namespace OASystem.Infrastructure.Repositories.Resource
                 throw;
             }
         }
-       
+
+        public List<TranslateResult> ReTransBatch(List<string> list, string aimlanguage)
+        {
+
+            List<TranslateResult> reultStr = new List<TranslateResult>();
+            if (list.Count < 0)
+            {
+                return reultStr;
+            }
+            //待翻译内容,必须是UTF-8编码
+            string q = "";
+            string Qtext = "";
+            foreach (var item in list)
+            {
+                q += item;
+
+                Qtext += "q=" + item + "&";
+            }
+
+            if (Qtext.Length > 0)
+            {
+                Qtext = Qtext.Substring(0, Qtext.Length - 1);
+            }
+
+            Dictionary<String, String> dic = new Dictionary<String, String>();
+
+            string url = "https://openapi.youdao.com/v2/api";
+
+            //应用ID
+            string appKey = "0fe3bc01e109ed36";
+            //应用应用密钥
+            string appSecret = "1f2x9TrqJfSBEJ8iH9GEFGgTyaYGjEry";
+            //UUID
+            string salt = DateTime.Now.Millisecond.ToString();
+            //源语言
+            dic.Add("from", "zh-CHS");
+            //目标语言
+            dic.Add("to", aimlanguage);
+            //签名类型
+            dic.Add("signType", "v3");
+            //时间戳
+            string curtime = ((GetBeijingTime().ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();
+            dic.Add("curtime", curtime);
+            string signStr = appKey + Truncate(q) + salt + curtime + appSecret; ;
+            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
+
+
+            dic.Add("q", Qtext);
+            dic.Add("appKey", appKey);
+            dic.Add("salt", salt);
+            dic.Add("sign", sign);
+            string jsonStr = "";
+
+            try
+            {
+                //Thread.Sleep(500);
+                jsonStr = TransSync(url, dic);
+
+                JObject trans = (JObject)JsonConvert.DeserializeObject(jsonStr);
+                string errorCode = trans["errorCode"].ToString();
+                if (errorCode == "0")
+                {
+                    reultStr = JsonConvert.DeserializeObject<List<TranslateResult>>(trans["translateResults"].ToString());
+                }
+
+                return reultStr;
+            }
+            catch (Exception ex)
+            {
+                string msg = ex.Message;
+                return reultStr;
+            }
+        }
+        public string Processing(string str)//处理这段英文的方法
+        {
+
+            if (string.IsNullOrEmpty(str)) { return ""; }
+
+            string[] strArray = new string[] { };
+
+            if (str.Contains(" ")) strArray = str.Split(" ".ToCharArray());
+            else if (str.Contains(",")) strArray = str.Split(",".ToCharArray());
+            else if (str.Contains(" ") && str.Contains(",")) strArray = str.Split(",".ToCharArray());
+            else strArray = new string[] { str };
+
+            string result = string.Empty;//定义一个空字符串
+
+            foreach (string s in strArray)//循环处理数组里面每一个字符串
+            {
+                //result += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s) + " ";
+                result += s.Substring(0, 1).ToUpper() + s.Substring(1) + " ";
+                //.Substring(0, 1).ToUpper()把循环到的字符串第一个字母截取并转换为大写,并用s.Substring(1)得到循环到的字符串除第一个字符后的所有字符拼装到首字母后面。
+            }
+            return result;
+        }
+        protected string TransSync(string url, Dictionary<String, String> dic)
+        {
+            string result = "";
+            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
+            req.Method = "POST";
+            req.ContentType = "application/x-www-form-urlencoded";
+
+            StringBuilder builder = new StringBuilder();
+            int i = 0;
+            foreach (var item in dic)
+            {
+                if (i > 0)
+                    builder.Append("&");
+                if (item.Key == "q")
+                {
+                    builder.AppendFormat(item.Value);
+                }
+                else
+                {
+                    builder.AppendFormat("{0}={1}", item.Key, item.Value);
+                }
+
+
+                i++;
+            }
+            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
+            req.ContentLength = data.Length;
+            using (Stream reqStream = req.GetRequestStream())
+            {
+                reqStream.Write(data, 0, data.Length);
+                reqStream.Close();
+            }
+            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
+            if (resp.ContentType.ToLower().Equals("audio/mp3"))
+            {
+                SaveBinaryFile(resp, "合成的音频存储路径");
+            }
+            else
+            {
+                Stream stream = resp.GetResponseStream();
+                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
+                {
+                    result = reader.ReadToEnd();
+                }
+            }
+            return result;
+        }
+        private static bool SaveBinaryFile(WebResponse response, string FileName)
+        {
+            string FilePath = FileName + DateTime.Now.Millisecond.ToString() + ".mp3";
+            bool Value = true;
+            byte[] buffer = new byte[1024];
+
+            try
+            {
+                if (File.Exists(FilePath))
+                    File.Delete(FilePath);
+                Stream outStream =File.Create(FilePath);
+                Stream inStream = response.GetResponseStream();
+
+                int l;
+                do
+                {
+                    l = inStream.Read(buffer, 0, buffer.Length);
+                    if (l > 0)
+                        outStream.Write(buffer, 0, l);
+                }
+                while (l > 0);
+
+                outStream.Close();
+                inStream.Close();
+            }
+            catch
+            {
+                Value = false;
+            }
+            return Value;
+        }
+        protected static string ComputeHash(string input, HashAlgorithm algorithm)
+        {
+            Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
+            Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
+            return BitConverter.ToString(hashedBytes).Replace("-", "");
+        }
+        protected static string Truncate(string q)
+        {
+            if (q == null)
+            {
+                return null;
+            }
+            int len = q.Length;
+            return len <= 20 ? q : (q.Substring(0, 10) + len + q.Substring(len - 10, 10));
+        }
+        public static DateTime GetBeijingTime()
+        {
+            WebRequest request = null;
+            WebResponse response = null;
+            WebHeaderCollection headerCollection = null;
+            string datetime = string.Empty;
+            try
+            {
+                request = WebRequest.Create("https://www.baidu.com");
+                request.Timeout = 3000;
+                request.Credentials = CredentialCache.DefaultCredentials;
+                response = request.GetResponse();
+                headerCollection = response.Headers;
+                foreach (var h in headerCollection.AllKeys)
+                {
+                    if (h == "Date")
+                    {
+                        datetime = headerCollection[h];
+                    }
+                }
+                return Convert.ToDateTime(datetime);
+            }
+            catch (Exception)
+            {
+                return DateTime.Now;
+            }
+            finally
+            {
+                if (request != null)
+                {
+                    request.Abort();
+                }
+                if (response != null)
+                {
+                    response.Close();
+                }
+                if (headerCollection != null)
+                {
+                    headerCollection.Clear();
+                }
+            }
+
+        }
+        public class TranslateResult
+        {
+            public string Query { get; set; }
+
+            public string Translation { get; set; }
+
+            public string Type { get; set; }
+
+            public string VerifyResult { get; set; }
+        
     }
 }
+}

BIN
OASystem/package/Aspose.Words.dll