Browse Source

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

yuanrf 1 year ago
parent
commit
7028365b8b

+ 2 - 1
OASystem/EntitySync/Program.cs

@@ -94,6 +94,7 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Fin_DailyFeePaymentContent)  // 财务 - 日付申请详细类
     //typeof(Grp_GroupsTaskAssignment)
     //typeof(Grp_AirTicketReservations)
-    typeof(Grp_GroupCostParameter)
+    //typeof(Grp_GroupCostParameter)
+    typeof(Grp_TeamRate)
 });
 Console.WriteLine("数据库结构同步完成!");

+ 766 - 21
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -1,12 +1,22 @@
-using Microsoft.AspNetCore.Mvc;
-using Newtonsoft.Json.Serialization;
+using Aspose.Cells;
+using Aspose.Cells.Drawing.Texts;
+using Aspose.Words;
+using Aspose.Words.Tables;
+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 TencentCloud.Ocr.V20181119.Models;
+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
 {
@@ -22,14 +32,23 @@ namespace OASystem.API.Controllers
         private readonly DelegationInfoRepository _groupRepository;
         private readonly TaskAssignmentRepository _taskAssignmentRep;
         private readonly AirTicketResRepository _airTicketResRep;
-
-        public GroupsController(IMapper mapper, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository, TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep)
+        private readonly SqlSugarClient _sqlSugar;
+        private string url;
+        private string path;
+        public GroupsController(IMapper mapper,SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository, TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep)
         {
             _mapper = mapper;
             _grpScheduleRep = grpScheduleRep;
             _groupRepository = groupRepository;
             _taskAssignmentRep = taskAssignmentRep;
             _airTicketResRep = airTicketResRep;
+            _sqlSugar = sqlSugar;
+            url = AppSettingsHelper.Get("ExcelBaseUrl");
+            path = AppSettingsHelper.Get("ExcelBasePath");
+            if (!System.IO.Directory.Exists(path))
+            {
+                System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹
+            }
         }
 
         #region 流程管控
@@ -456,7 +475,7 @@ namespace OASystem.API.Controllers
             #region 团组基本信息
 
             Grp_DelegationInfo _delegation = _groupRepository.Query<Grp_DelegationInfo>(s => s.Id == _dto.DiId).First();
-            if (_delegation == null)
+            if (_delegation != null)
             {
                 _view.ClientName = _delegation.ClientName;
                 _view.DiId = _dto.DiId;
@@ -468,16 +487,21 @@ namespace OASystem.API.Controllers
             }
             else
             {
-                return Ok(JsonView(false, "团组Id为空"));
+                return Ok(JsonView(false, "团组信息为空"));
             }
 
             #endregion
 
             #region 费用清单
+            var exp = Expressionable.Create<Grp_CreditCardPayment>();
+            exp.AndIF(_dto.AuditStatus != -1, it => it.IsAuditGM == _dto.AuditStatus);
+            exp.AndIF(_dto.Label != -1, it => it.CTable == _dto.Label);
+
 
             //缺少IF的语法糖 CTable
             List<Grp_CreditCardPayment> entityList = _groupRepository
-                .Query<Grp_CreditCardPayment>(s => s.DIId == _dto.DiId && s.CTable == _dto.Label && s.IsAuditGM == _dto.AuditStatus && s.IsDel == 0 && s.CreateUserId > 0)
+                .Query<Grp_CreditCardPayment>(s => s.DIId == _dto.DiId && s.IsDel == 0 && s.CreateUserId > 0)
+                .Where(exp.ToExpression())
                 .ToList();
 
             List<Grp_CreditCardPaymentDetailView> detailList = new List<Grp_CreditCardPaymentDetailView>();
@@ -500,7 +524,7 @@ namespace OASystem.API.Controllers
             {
                 Grp_CreditCardPaymentDetailView _detail = new Grp_CreditCardPaymentDetailView();
 
-                if (entity.CTable != 85) continue;
+                _detail.Id = entity.Id;
 
                 /*
                  * Bus名称
@@ -580,7 +604,7 @@ namespace OASystem.API.Controllers
                  * 申请人
                  */
                 string operatorName = "无";
-                Sys_Users _opUser = _groupRepository.Query<Sys_Users>(s => s.CreateUserId == entity.CreateUserId).First();
+                Sys_Users _opUser = _groupRepository.Query<Sys_Users>(s => s.Id == entity.CreateUserId).First();
                 if (_opUser != null)
                 {
                     operatorName = _opUser.CnName;
@@ -597,7 +621,7 @@ namespace OASystem.API.Controllers
                     auditOperatorName = "自动审核";
                 else
                 {
-                    Sys_Users _adUser = _groupRepository.Query<Sys_Users>(s => s.CreateUserId == entity.AuditGMOperate).First();
+                    Sys_Users _adUser = _groupRepository.Query<Sys_Users>(s => s.Id == entity.AuditGMOperate).First();
                     if (_adUser != null)
                     {
                         auditOperatorName = _adUser.CnName;
@@ -647,11 +671,7 @@ namespace OASystem.API.Controllers
                     YSFYEUR += CurrPayStr;
                 }
 
-                _detail.TotalStr1 = string.Format(@"应付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", CNY, USD, EUR);
-                _detail.TotalStr2 = string.Format(@"此次付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", PayCNY, PayUSD, PayEUR);
-                _detail.TotalStr3 = string.Format(@"目前剩余尾款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", BalanceCNY, BalanceUSD, BalanceEUR);
-                _detail.TotalStr4 = string.Format(@"已审费用总额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", YSFYCNY, YSFYUSD, YSFYEUR);
-
+                _detail.IsAuditGM = entity.IsAuditGM;
 
                 detailList.Add(_detail);
 
@@ -659,13 +679,18 @@ namespace OASystem.API.Controllers
 
             #endregion
             _view.DetailList = new List<Grp_CreditCardPaymentDetailView>(detailList);
+            _view.TotalStr1 = string.Format(@"应付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", CNY, USD, EUR);
+            _view.TotalStr2 = string.Format(@"此次付款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", PayCNY, PayUSD, PayEUR);
+            _view.TotalStr3 = string.Format(@"目前剩余尾款总金额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", BalanceCNY, BalanceUSD, BalanceEUR);
+            _view.TotalStr4 = string.Format(@"已审费用总额:{0}CNY&nbsp;|&nbsp;{1}USD&nbsp;|&nbsp;{2}EUR", YSFYCNY, YSFYUSD, YSFYEUR);
+
 
             return Ok(JsonView(_view));
         }
 
 
         /// <summary>
-        /// 获取团组费用审核
+        /// 修改团组费用审核状态
         /// </summary>
         /// <param name="paras">参数Json字符串</param>
         /// <returns></returns>
@@ -673,15 +698,32 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> PostAuditGrpCreditCardPayment(Edit_GrpCreditCardPaymentDto _dto)
         {
+            List<string> idList = _dto.CreditIdStr.Split(',').ToList();
             Grp_CreditCardPayment _detail = _mapper.Map<Grp_CreditCardPayment>(_dto);
             DateTime dtNow = DateTime.Now;
-            var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_CreditCardPayment>()
+            _groupRepository.BeginTran();
+            int rst = 0;
+            foreach (var item in idList)
+            {
+                int CreditId = int.Parse(item);
+                var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_CreditCardPayment>()
                 .SetColumns(it => it.IsAuditGM == _dto.AuditCode)
                 .SetColumns(it => it.AuditGMOperate == _dto.User)
                 .SetColumns(it => it.AuditGMDate == dtNow)
-                .Where(s => s.Id == _dto.CreditId)
+                .Where(s => s.Id == CreditId)
                 .ExecuteCommandAsync();
-            if (result > 0)
+                if (result < 1)
+                {
+                    rst = -1;
+                }
+                else
+                {
+                    _groupRepository.RollbackTran();
+                    return Ok(JsonView(false, "保存失败并回滚!"));
+                }
+            }
+            _groupRepository.CommitTran();
+            if (rst == 0)
             {
                 return Ok(JsonView(true, "保存成功!"));
             }
@@ -723,7 +765,7 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> AirTicketResList(AirTicketResListDto dto)
+        public async Task<IActionResult> AirTicketResList(AirTicketResDto dto)
         {
             try
             {
@@ -740,7 +782,710 @@ namespace OASystem.API.Controllers
                 throw;
             }
         }
+        /// <summary>
+        /// 根据id查询费用录入信息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> AirTicketResById(AirTicketResByIdDto dto)
+        {
+            try
+            {
+                Result groupData = await _airTicketResRep.AirTicketResById(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+        /// <summary>
+        /// 机票费用录入操作(Status:1.新增,2.修改)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> OpAirTicketRes(AirTicketResOpDto dto)
+        {
+            try
+            {
+                Result groupData = await _airTicketResRep.OpAirTicketRes(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                return Ok(JsonView(true, groupData.Msg, groupData.Data));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+        /// <summary>
+        /// 机票费用录入,删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> DelAirTicketRes(DelBaseDto dto)
+        {
+            try
+            {
+                var res = await _airTicketResRep.SoftDeleteByIdAsync<Grp_AirTicketReservations>(dto.Id.ToString(), dto.DeleteUserId);
+                if (!res)
+                {
+                    return Ok(JsonView(false, "删除失败"));
+                }
+                return Ok(JsonView(true, "删除成功!"));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
+        /// <summary>
+        /// 导出机票录入报表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> DeriveAirTicketRes(AirTicketResDto dto)
+        {
+            try
+            {
+                Result groupData = await _airTicketResRep.DeriveAirTicketRes(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                else
+                {
+                    List<AirTicketReservationsPayView> AirTicketReservations = groupData.Data.GetType().GetProperty("AirTicketRes").GetValue(groupData.Data);
+                    if (AirTicketReservations.Count != 0)
+                    {
+                        Grp_DelegationInfo DelegationInfo = groupData.Data.GetType().GetProperty("Delegation").GetValue(groupData.Data);
+                        Sys_Users _Users = groupData.Data.GetType().GetProperty("Users").GetValue(groupData.Data);
+                        string diCode = DelegationInfo != null ? DelegationInfo.TourCode : "XXX";
+                        string diName = DelegationInfo != null ? DelegationInfo.TeamName : "XXX";
+                        WorkbookDesigner designer = new WorkbookDesigner();
+                        designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/机票预订费用报表模板.xlsx");
+                        decimal countCost = 0;
+                        foreach (var item in AirTicketReservations)
+                        {
+                            if (item.BankType == "其他")
+                            {
+                                item.BankNo = "--";
+                            }
+                            else
+                            {
+                                item.BankNo = item.BankType + ":" + item.BankNo.Substring(0, 3);
+                            }
+                            item.PrePrice = System.Decimal.Round(item.PrePrice, 2);
+                            item.Price = System.Decimal.Round(item.Price, 2);
+                            countCost += Convert.ToDecimal(item.Price);
+                        }
+                        designer.SetDataSource("Export", AirTicketReservations);
+                        designer.SetDataSource("ExportDiCode", diCode);
+                        designer.SetDataSource("ExportDiName", diName);
+                        designer.SetDataSource("ExportOpUserName", _Users.CnName);
+
+                        designer.SetDataSource("ExportCountCost", countCost + "(" + AirTicketReservations[0].CurrencyStr);
+                        designer.Process();
+                        string fileName = "AirfareStatement/" + diName + "机票费用报表" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
+                        designer.Workbook.Save(AppSettingsHelper.Get("ExcelBasePath") + fileName);
+                        string rst = AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath") + fileName;
+                        return Ok(JsonView(true, "成功", url = rst));
+                    }
+                    else
+                    {
+                        return Ok(JsonView(false, "暂无数据!"));
+                    }
+                }
+
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                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(ItineraryAirTicketResDto dto)
+        {
+            try
+            {
+                Result groupData = await _airTicketResRep.ItineraryAirTicketRes(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                else
+                {
+                    List<AirTicketReservationsView> _AirTicketReservations = groupData.Data;
+                    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);
+
+                        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)
+                                {
+                                    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 = "--";
+                        }
+
+
+                        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));
+                    }
+                    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++;
+
+                            }
+                            #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));
+                    }
+                }
+
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, "程序错误!"));
+                throw;
+            }
+        }
         #endregion
     }
 }

+ 4 - 4
OASystem/OASystem.Api/OAMethodLib/ExcelOutput/Excel_BusConfItemList.cs

@@ -75,17 +75,17 @@ Where bcil.Id={0}
             designer.SetDataSource("ExportListRemark", _entity.Remark);
 
             designer.Process();
-            string fileName = HttpUtility.UrlEncode("") + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
-            designer.Workbook.Save(fileName);
+            string fileName = "ConfItemList/" + HttpUtility.UrlEncode("会务物料清单") + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
+            designer.Workbook.Save(path + fileName);
             designer = null;
 
-            _entity.ExcelPath = path + fileName;
+            _entity.ExcelPath = AppSettingsHelper.Get("ExcelFtpPath") + fileName;
             _busRep._sqlSugar.Updateable<Bus_ConfItemListInfo>()
                 .Where(s => s.Id == _entity.Id)
                 .UpdateColumns(s => s.ExcelPath)
                 .ExecuteCommand();
 
-            string fileUrl = url + path + _entity.ExcelPath;
+            string fileUrl = url + _entity.ExcelPath;
             return fileUrl;
         }
     }

+ 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>

+ 7 - 1
OASystem/OASystem.Api/appsettings.json

@@ -105,7 +105,13 @@
   ],
   "ExcelBaseUrl": "http://132.232.92.186:24/",
   "ExcelBasePath": "C:/Server/File/OA2023/Office/Excel/",
+  "ExcelFtpPath": "Office/Excel/",
   "OfficeBaseUrl": "http://132.232.92.186:24/",
-  "OfficeTempBasePath": "C:/Server/File/OA2023/Office/"
+  "OfficeTempBasePath": "C:/Server/File/OA2023/Office/",
+
+  "WordBaseUrl": "http://132.232.92.186:24/",
+  "WordBasePath": "C:/Server/File/OA2023/Office/Word/",
+  "WordFtpPath": "Office/Word/"
+
 
 }

+ 7 - 0
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -39,6 +39,7 @@ namespace OASystem.Domain.AutoMappers
             #region 数据类型板块
             CreateMap<OperationSetDataTypeDto, Sys_SetDataType>();
             CreateMap<OperationSetDataDto, Sys_SetData>();
+            CreateMap<Sys_SetData, SetDataInfoView>();
             #endregion
             #region 公司板块
             CreateMap<Sys_Company, CompanyView>();
@@ -77,10 +78,16 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<Grp_ScheduleDetailUpdDto, Grp_ScheduleDetailInfo>();
             CreateMap<Grp_ScheduleDetailInsertDto, Grp_ScheduleDetailInfo>();
             CreateMap<TaskAssignmenDto, Grp_GroupsTaskAssignment>();
+            #region 机票费用录入
+            CreateMap<AirTicketResOp, Grp_AirTicketReservations>();
+            CreateMap<CardPayment, Grp_CreditCardPayment>();
             CreateMap<Grp_GroupCostParameter,AirGroupCostParameterView>();
             CreateMap<Edit_GrpCreditCardPaymentDto, Grp_CreditCardPayment>();
             #endregion
 
+
+            #endregion
+
             #region Resource
 
             #region 车公司资料

+ 290 - 3
OASystem/OASystem.Domain/Dtos/Groups/AirTicketResDto.cs

@@ -6,13 +6,300 @@ using System.Threading.Tasks;
 
 namespace OASystem.Domain.Dtos.Groups
 {
+    /// <summary>
+    /// 根据登录用户查询
+    /// </summary>
     public class AirTicketResDto
     {
-        public int UserId { get; set; }
+        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>
+    public class AirTicketResDeriveDto
+    {
+       
+        public int CreateUserId { get; set; } = 0;
+    }
+    public class AirTicketResByIdDto
+    {
+        public int Id { get; set; }
+    }
+    public class AirTicketResOpDto
+    {
+        /// <summary>
+        /// 操作状态
+        /// 1 添加 
+        /// 2 修改 
+        /// </summary>
+        public int Status { get; set; }
+        public AirTicketResOp AirTicketResOpData { get; set; }
+        public CardPayment CardPaymentOpData { get; set; }
 
-    public class AirTicketResListDto
+    }
+    /// <summary>
+    /// 机票费用录入表参数
+    /// </summary>
+    public class AirTicketResOp
     {
-        public int DiId { get; set; }
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public int Id { get; set; }
+
+        public int DiId { get;set; }
+        /// <summary>
+        /// 舱类型
+        /// </summary>
+        public int CType { get; set; }
+        /// <summary>
+        /// 出票前报价
+        /// </summary>
+        public decimal PrePrice { get; set; }
+
+        /// <summary>
+        /// 出票前报价币种
+        /// </summary>
+        public int PreCurrency { get; set; }
+        /// <summary>
+        /// 机票全价
+        /// </summary>
+        public decimal Price { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public int Currency { get; set; }
+        /// <summary>
+        /// 客户人数
+        /// </summary>
+        public int ClientNum { get; set; }
+        /// <summary>
+        /// 客人名称
+        /// </summary>
+        public string ClientName { get; set; }
+        /// <summary>
+        /// 是否值机
+        /// </summary>
+        public int IsCheckIn { get; set; }
+        /// <summary>
+        /// 是否选座
+        /// </summary>
+        public int IsSetSeat { get; set; }
+
+        /// <summary>
+        /// 是否购买行李服务
+        /// </summary>
+        public int IsPackage { get; set; }
+        /// <summary>
+        /// 是否行李直挂
+        /// </summary>
+        public int IsBagHandle { get; set; }
+        /// <summary>
+        /// 是否火车票出票选座
+        /// </summary>
+        public int IsTrain { get; set; }
+        /// <summary>
+        /// 航班号
+        /// </summary>
+        public string FlightsCode { get; set; }
+        /// <summary>
+        /// 城市A-B
+        /// </summary>
+        public string FlightsCity { get; set; }
+        /// /// <summary>
+        /// 内陆段航班描述
+        /// </summary>
+        public string FlightsDescription { get; set; }
+
+        /// <summary>
+        /// 报价说明
+        /// </summary>、
+        public string PriceDescription { get; set; }
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+        public int CreateUserId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+
     }
+    /// <summary>
+    /// C表参数
+    /// </summary>
+    public class CardPayment
+    {
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public int Id { get; set; }
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public int PayDId { get; set; }
+        /// <summary>
+        /// 消费方式
+        /// </summary>
+        public string ConsumptionPatterns { get; set; }
+        /// <summary>
+        /// 消费日期
+        /// </summary>
+        public DateTime ConsumptionDate { get; set; }
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public int CTDId { get; set; }
+        /// <summary>
+        /// 银行卡号
+        /// </summary>
+        public string BankNo { get; set; }
+        /// <summary>
+        /// 持卡人姓名
+        /// </summary>
+        public string CardholderName { get; set; }
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+        /// <summary>
+        /// 付款币种 数据类型Id
+        /// </summary>
+        public int PaymentCurrency { get; set; }
+        ///// <summary>
+        ///// 当天汇率 计算
+        ///// </summary>
+        //public string DayRate { get; set; }
+        /// <summary>
+        /// 公司银行卡号
+        /// </summary>
+        public string CompanyBankNo { get; set; }
+        /// <summary>
+        /// 对方开户行
+        /// </summary>
+        public string OtherBankName { get; set; }
+        /// <summary>
+        /// 对方银行账号
+        /// </summary>
+        public string OtherSideNo { get; set; }
+        /// <summary>
+        /// 对方姓名
+        /// </summary>
+        public string OtherSideName { get; set; }
+        /// <summary>
+        /// 财务操作人 用户Id
+        /// </summary>
+        public string MFOperator { get; set; }
+        /// <summary>
+        /// 财务操作时间
+        /// </summary>
+        public DateTime MFOperatorDate { get; set; }
+        ///// <summary>
+        ///// 部门经理是否审核 0否1是
+        ///// </summary>
+        //public int IsAuditDM { get; set; }
+        ///// <summary>
+        ///// 部门经理审核人 用户Id
+        ///// </summary>
+        //public int AuditDMOperate { get; set; }
+        ///// <summary>
+        ///// 部门经理审核时间
+        ///// </summary>
+        //public DateTime AuditDMDate { get; set; }
+        ///// <summary>
+        ///// 财务部是否审核  0否1是
+        ///// </summary>
+        //public int IsAuditMF { get; set; }
+        ///// <summary>
+        ///// 财务部审核人
+        ///// </summary>
+        //public int AuditMFOperate { get; set; }
+        ///// <summary>
+        ///// 财务部审核时间
+        ///// </summary>
+        //public DateTime AuditMFDate { get; set; }
+        ///// <summary>
+        ///// 总经理是否审核  0否1是
+        ///// </summary>
+        //public int IsAuditGM { get; set; }
+        ///// <summary>
+        ///// 总经理审核人
+        ///// </summary>
+        //public int AuditGMOperate { get; set; }
+        ///// <summary>
+        ///// 总经理审核时间
+        ///// </summary>
+        //public DateTime AuditGMDate { get; set; }
+        ///// <summary> 
+        ///// 是否付款  0否1是 判断进行
+        ///// </summary> 
+        //public int IsPay { get; set; }
+        /// <summary>
+        /// 团组外键编号
+        /// </summary>
+        public int DIId { get; set; }
+        ///// <summary>
+        ///// 指向表外键编号 机票费用录入表Id
+        ///// </summary>
+        //public int CId { get; set; }
+        ///// <summary>
+        ///// 指向标识 设置数据外键编号 固定机票 85
+        ///// </summary>
+        //public int CTable { get; set; }
+        ///// <summary>
+        ///// 此次付款百分比 固定1
+        ///// </summary>
+        //public decimal PayPercentage { get; set; }
+        /// <summary>
+        /// 此次付款金额
+        /// </summary>
+        public decimal PayThenMoney { get; set; }
+        ///// <summary>
+        ///// 上次付款百分比 查询并计算最近一次
+        ///// </summary>
+        //public decimal PayPercentageOld { get; set; }
+        ///// <summary>
+        ///// 上次付款金额 查询上一次
+        ///// </summary>
+        //public decimal PayThenMoneyOld { get; set; }
+        ///// <summary>
+        ///// 上次付款时间 查询上一次
+        ///// </summary>
+        //public DateTime UpdateDate { get; set; }
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string Payee { get; set; }
+        ///// <summary>
+        ///// 人民币费用 换算
+        ///// </summary>
+        //[SugarColumn(IsNullable = true, ColumnDataType = "decimal(10, 2)")]
+        //public decimal RMBPrice { get; set; }
+        /// <summary>
+        /// 费用标识
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+        ///// <summary>
+        ///// 超出预算比例 换算
+        ///// </summary>
+        //[SugarColumn(IsNullable = true, ColumnDataType = "decimal(10, 2)")]
+        //public decimal ExceedBudget { get; set; }
+        /// <summary>
+        /// 创建者Id
+        /// </summary>
+        public int CreateUserId { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+
+    }
+
 }

+ 3 - 3
OASystem/OASystem.Domain/Dtos/Groups/GrpCreditCardPaymentDto.cs

@@ -14,19 +14,19 @@ namespace OASystem.Domain.Dtos.Groups
         public int DiId { get; set; }
 
         /// <summary>
-        /// 费用类型 0-所有, 76-酒店预订,77-行程,79-车导地接,80-签证,81-邀请公务,82-团组客户保险,85-机票预订,98-团组增减款项,285-其他款
+        /// 费用类型 -1 -所有, 76-酒店预订,79-车导地接,80-签证,81-邀请公务,85-机票预订,98-团组增减款
         /// </summary>
         public int Label { get; set; } = 0;
 
         /// <summary>
-        /// 审核状态 0/1/2,未审核/审核通过/审核不通过
+        /// 审核状态 0/1/2,未审核/审核通过/审核不通过 ,-1:所有
         /// </summary>
         public int AuditStatus { get; set; }
     }
 
     public class Edit_GrpCreditCardPaymentDto
     {
-        public int CreditId { get; set; }
+        public string CreditIdStr { get; set; }
         public int AuditCode { get; set; }
         public int User { get; set; }
     }

+ 150 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_TeamRate.cs

@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 团组汇率表
+    /// </summary>
+    [SugarTable("Grp_TeamRate")]
+    public class Grp_TeamRate: EntityBase
+    {
+        /// <summary>
+        /// 团组id
+        /// </summary>
+        [SugarColumn(IsNullable =true,ColumnDataType ="int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 团组指向分类
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int CTable { get; set; }
+        /// <summary>
+        /// 其他汇率名称
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string OtherRate { get; set; }
+
+        /// <summary>
+        /// 其他汇率金额
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string OtherPrice { get; set; }
+
+        /// <summary>
+        /// 美元汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateU { get; set; }
+
+        /// <summary>
+        /// 欧元汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateE { get; set; }
+        /// <summary>
+        /// 日元汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateJ { get; set; }
+        /// <summary>
+        /// 港币汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateH { get; set; }
+        /// <summary>
+        /// 新西兰元汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateN { get; set; }
+        /// <summary>
+        /// 新加坡币汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateS { get; set; }
+        /// <summary>
+        /// 澳大利亚元汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateA { get; set; }
+        /// <summary>
+        /// 加拿大元汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateC { get; set; }
+        /// <summary>
+        /// 泰铢汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateT { get; set; }
+        /// <summary>
+        /// 波兰汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateBL { get; set; }
+        /// <summary>
+        /// 韩币
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateHB { get; set; }
+        /// <summary>
+        /// 斐济币汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateFJD { get; set; }
+        /// <summary>
+        /// 土耳其币汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateTL { get; set; }
+        /// <summary>
+        /// 卢比汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateRP { get; set; }
+        /// <summary>
+        /// 菲律宾汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RatePeso { get; set; }
+        /// <summary>
+        /// 马来西亚汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateMYR { get; set; }
+        /// <summary>
+        /// 捷克币汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateCZK { get; set; }
+        /// <summary>
+        /// 墨西哥币汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateMXN { get; set; }
+        /// <summary>
+        /// 澳门元
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateMOP { get; set; }
+        /// <summary>
+        /// 阿根廷比索
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateARS { get; set; }
+        /// <summary>
+        /// 匈牙利货币
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateHUF { get; set; }
+        /// <summary>
+        /// 俄罗斯卢布
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string RateRUB { get; set; }
+    }
+}

+ 189 - 0
OASystem/OASystem.Domain/ViewModels/Groups/AirTicketReservationsView.cs

@@ -50,4 +50,193 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int GWCRS { get; set; }
     }
+
+    public class AirTicketReservationsPayView
+    {
+        /// <summary>
+        /// 团组号
+        /// </summary>
+        public string TourCode { get; set; }
+        /// <summary>
+        /// 团组名称
+        /// </summary>
+        public string TeamName { get; set; }
+        /// <summary>
+        /// 城市A-B
+        /// </summary>
+        public string FlightsCity { get; set; }
+        /// <summary>
+        /// 航班说明
+        /// </summary>
+        public string FlightsDescription { get; set; }
+        /// <summary>
+        /// 航班号
+        /// </summary>
+        public string FlightsCode { get; set; }
+        /// <summary>
+        /// 舱位
+        /// </summary>
+        public string CTypeName { get; set; }
+        /// <summary>
+        /// 客人姓名
+        /// </summary>
+        public string ClientName { get; set; }
+        /// <summary>
+        /// 舱位人数
+        /// </summary>
+        public int ClientNum { get; set; }
+        /// <summary>
+        /// 单价
+        /// </summary>
+        public decimal PrePrice { get; set; }
+        /// <summary>
+        /// 总价
+        /// </summary>
+        public decimal Price { get; set; }
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string PayType { get; set; }
+        /// <summary>
+        /// 费用表示
+        /// </summary>
+        public string OrbitalPrivateTransfer { get; set; }
+        /// <summary>
+        /// 卡号
+        /// </summary>
+        public string BankNo { get; set; }
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string BankType { get; set; }
+        /// <summary>
+        /// 支付时间
+        /// </summary>
+        public DateTime CreateTime { get; set; }
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string Payee { get; set; }
+        /// <summary>
+        /// 费用说明
+        /// </summary>
+        public string PriceDescription { get; set; }
+        /// <summary>
+        /// 币种
+        /// </summary>
+        public string CurrencyStr { get; set; }
+    }
+
+    /// <summary>
+    /// 导出行程单数据
+    /// </summary>
+    public class Itinerary
+    {
+        /// <summary>
+        /// 航空公司记录编码
+        /// </summary>
+        public string AirlineRecordCode { get; set; } = "--";
+        /// <summary>
+        /// 订座记录编码
+        /// </summary>
+        public string ReservationRecordCode{ get; set; } = "--";
+        /// <summary>
+        /// 旅客姓名
+        /// </summary>
+        public string ClientName{ get; set; } = "--";
+        /// <summary>
+        /// 票号
+        /// </summary>
+        public string TicketNumber{ get; set; } = "--";
+        /// <summary>
+        /// 身份识别代码
+        /// </summary>
+        public string IdentificationCode{ get; set; } = "--";
+        /// <summary>
+        /// 联票
+        /// </summary>
+        public string JointTicket{ get; set; } = "--";
+        /// <summary>
+        /// 出票航空公司
+        /// </summary>
+        public string AirlineCompany{ get; set; } = "--";
+        /// <summary>
+        /// 出票时间
+        /// </summary>
+        public string TimeIssue{ get; set; } = "--";
+        /// <summary>
+        /// 代理人
+        /// </summary>
+        public string DrawingAgent{ get; set; } = "--";
+        /// <summary>
+        /// 航协代码
+        /// </summary>
+        public string NavigationCode{ get; set; } = "--";
+        /// <summary>
+        /// 代理人地址
+        /// </summary>
+        public string AgentsAddress{ get; set; } = "--";
+        /// <summary>
+        /// 代理人电话
+        /// </summary>
+        public string AgentPhone{ get; set; } = "--";
+        /// <summary>
+        /// 代理人传真
+        /// </summary>
+        public string AgentFacsimile{ get; set; } = "--";
+        /// <summary>
+        /// 航班数据
+        /// </summary>
+        public List<AirInfo> AirInfo { get;set; } = new List<AirInfo>();
+    }
+    /// <summary>
+    /// 航班信息
+    /// </summary>
+    public class AirInfo
+    {
+        /// <summary>
+        /// 始发地/到达地
+        /// </summary>
+        public string Destination { get; set; }
+        /// <summary>
+        /// 航班号
+        /// </summary>
+        public string Flight { get; set; }
+        /// <summary>
+        /// 座位等级
+        /// </summary>
+        public string SeatingClass { get; set; }
+        /// <summary>
+        /// 日期
+        /// </summary>
+        public string FlightDate { get; set; }
+        /// <summary>
+        /// 起飞时间
+        /// </summary>
+        public string DepartureTime { get; set; }
+        /// <summary>
+        /// 到达时间
+        /// </summary>
+        public string LandingTime { get; set; }
+        /// <summary>
+        /// 有效期
+        /// </summary>
+        public string ValidityPeriod { get; set; }
+        /// <summary>
+        /// 客票状态
+        /// </summary>
+        public string TicketStatus { get; set; }
+        /// <summary>
+        /// 行李
+        /// </summary>
+        public string Luggage { get; set; }
+        /// <summary>
+        /// 起飞航站楼
+        /// </summary>
+        public string DepartureTerminal { get; set; }
+        /// <summary>
+        /// 到达航站楼
+        /// </summary>
+        public string LandingTerminal { get; set; }
+    }
 }

+ 11 - 4
OASystem/OASystem.Domain/ViewModels/Groups/Grp_CreditCardPaymentView.cs

@@ -47,6 +47,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// 审核列表
         /// </summary>
         public List<Grp_CreditCardPaymentDetailView> DetailList { get; set; }
+
+        public string TotalStr1 { get; set; }
+        public string TotalStr2 { get; set; }
+        public string TotalStr3 { get; set; }
+        public string TotalStr4 { get; set; }
     }
 
     public class Grp_CreditCardPaymentDetailView
@@ -102,14 +107,16 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public string AuditOperatorName { get; set; }
 
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public int IsAuditGM { get; set; }
+
         /// <summary>
         /// 超预算比例
         /// </summary>
         public string OverBudget { get; set; }
 
-        public string TotalStr1 { get; set; }
-        public string TotalStr2 { get; set; }
-        public string TotalStr3 { get; set; }
-        public string TotalStr4 { get; set; }
+        
     }
 }

+ 2 - 0
OASystem/OASystem.Domain/ViewModels/System/SetDataView.cs

@@ -30,6 +30,8 @@ namespace OASystem.Domain.ViewModels.System
         /// 分类名称
         /// </summary>
         public string Name { get; set; }
+
+        public string Remark { get; set; }
     }
 
 

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

@@ -14,6 +14,7 @@
     <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.0" />
+    <PackageReference Include="NPOI" Version="2.6.0" />
     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
     <PackageReference Include="SqlSugarCore" Version="5.1.3.32" />
     <PackageReference Include="StackExchange.Redis" Version="2.6.96" />
@@ -23,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>

+ 724 - 23
OASystem/OASystem.Infrastructure/Repositories/Resource/AirTicketResRepository.cs

@@ -1,15 +1,33 @@
 using AutoMapper;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Groups;
+using OASystem.Domain.Dtos.UserDto;
+using OASystem.Domain.Entities.Business;
+using OASystem.Domain.Entities.Customer;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.Resource;
 using OASystem.Domain.ViewModels.Groups;
+using OASystem.Infrastructure.Tools;
+using Org.BouncyCastle.Asn1.Ocsp;
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
+using System.Security.Cryptography;
+using System.Security.Policy;
 using System.Text;
 using System.Threading.Tasks;
+using System.Web;
 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
 {
@@ -21,7 +39,36 @@ namespace OASystem.Infrastructure.Repositories.Resource
             _mapper = mapper;
         }
 
-        public async Task<Result> AirTicketResList(AirTicketResListDto dto)
+        public async Task<Result> AirTicketResById(AirTicketResByIdDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                Grp_AirTicketReservations grp_AirTicket = _sqlSugar.Queryable<Grp_AirTicketReservations>().First(a=>a.Id==dto.Id && a.IsDel==0);
+                if (grp_AirTicket == null)
+                {
+                    return result = new Result() { Code = -1, Msg = "暂无数据" };
+                }
+                else
+                {
+                    Grp_CreditCardPayment grp_CreditCard = _sqlSugar.Queryable<Grp_CreditCardPayment>().First(a => a.CId == grp_AirTicket.Id && a.IsDel == 0);
+                    if (grp_CreditCard == null) { return result = new Result() { Code = -1, Msg = "暂无数据" }; }
+                    return result = new Result() { Code = 0, Msg = "查询成功!",Data=new
+                    {
+                        AirTicket= grp_AirTicket,
+                        CreditCard= grp_CreditCard,
+                    }
+                    };
+                }
+            }
+            catch (Exception)
+            {
+                return result = new Result() { Code = -2, Msg = "未知错误" };
+                throw;
+            }
+        }
+
+        public async Task<Result> AirTicketResList(AirTicketResDto dto)
         {
             Result result = new Result() { Code = -2, Msg = "未知错误" };
 
@@ -153,7 +200,7 @@ namespace OASystem.Infrastructure.Repositories.Resource
                                     break;
                             }
                             string tate = $"{monthAbbreviations}月{day}日";
-                            item.FlightDescription +=depData.AirPort + " " + arrData.AirPort + "  (" + tate + ")\r\n";
+                            item.FlightDescription += depData.AirPort + " " + arrData.AirPort + "  (" + tate + ")\r\n";
                         }
                         catch (Exception)
                         {
@@ -162,15 +209,15 @@ namespace OASystem.Infrastructure.Repositories.Resource
                     }
                 }
                 //团组成本预算表查询
-                Grp_GroupCostParameter _GroupCostParameter = _sqlSugar.Queryable<Grp_GroupCostParameter>().First(a=>a.DiId==dto.DiId);
+                Grp_GroupCostParameter _GroupCostParameter = _sqlSugar.Queryable<Grp_GroupCostParameter>().First(a => a.DiId == dto.DiId);
 
                 AirGroupCostParameterView _AirgroupCostParameter = _mapper.Map<AirGroupCostParameterView>(_GroupCostParameter);
-               
+
                 var data = new
                 {
                     DelegationInfo = _DelegationInfo,
                     AirTicketReservations = _AirTicketReservations,
-                    AirGroupCostParameter= _AirgroupCostParameter
+                    AirGroupCostParameter = _AirgroupCostParameter
                 };
                 return result = new Result() { Code = 0, Msg = "查询成功!", Data = data };
             }
@@ -186,41 +233,695 @@ namespace OASystem.Infrastructure.Repositories.Resource
             Result result = new Result() { Code = -2, Msg = "未知错误" };
             try
             {
+                #region 团组下拉框
+
+                
                 List<Grp_GroupsTaskAssignment> grp_GroupsTaskAssignment = Query<Grp_GroupsTaskAssignment>(a => a.IsDel == 0 && a.UId == dto.UserId && a.CTId == 85).ToList();
-                if (grp_GroupsTaskAssignment.Count != 0)
+
+                string DiId = "";
+                foreach (var item in grp_GroupsTaskAssignment)
+                {
+                    DiId += item.DIId + ",";
+                }
+                DiId = DiId.Substring(0, DiId.Length - 1);
+                string sql = string.Format(@"select * from Grp_DelegationInfo where Id in({0}) and IsDel={1}", DiId, 0);
+                List<Grp_DelegationInfo> grp_Delegations = _sqlSugar.SqlQueryable<Grp_DelegationInfo>(sql).ToList();
+                if (grp_Delegations.Count == 0)
+                {
+                    return result = new Result() { Code = -1, Msg = "查询失败!" };
+                }
+                List<GroupNameView> grp_NameView = new List<GroupNameView>();
+                foreach (var item in grp_Delegations)
+                {
+                    GroupNameView groupNameView = new GroupNameView();
+                    groupNameView.Id = item.Id;
+                    groupNameView.GroupName = item.TeamName;
+                    grp_NameView.Add(groupNameView);
+                }
+                #endregion
+
+                #region 其他下拉框查询
+                //舱位类型
+                List<Sys_SetData> TicketClass = _sqlSugar.Queryable<Sys_SetData>().Where(a=>a.STid==44 && a.IsDel==0).ToList();
+                List<SetDataInfoView> _TicketClassa = _mapper.Map<List<SetDataInfoView>>(TicketClass);
+                //支付方式
+                List<Sys_SetData> Payment = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 14 && a.IsDel == 0).ToList();
+                List<SetDataInfoView> _Payment = _mapper.Map<List<SetDataInfoView>>(Payment);
+                //卡类型
+                List<Sys_SetData> CardType = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 15 && a.IsDel == 0).ToList();
+                List<SetDataInfoView> _CardType = _mapper.Map<List<SetDataInfoView>>(CardType);
+                //合作方资料
+                List<Res_AirTicketAgent> _AirTicketAgents = _sqlSugar.Queryable<Res_AirTicketAgent>().Where(a=>a.IsDel == 0).ToList();
+
+                #endregion
+                var data = new
+                {
+                    TicketClass = _TicketClassa,
+                    Payment = _Payment,
+                    CardType = _CardType,
+                    GroupName = grp_NameView,
+                    AirTicketAgents= _AirTicketAgents
+                };
+                return result = new Result() { Code = 0, Msg = "查询成功!", Data=data };
+            }
+            catch (Exception ex)
+            {
+                return result = new Result() { Code = -2, Msg = "程序错误" };
+                throw;
+            }
+        }
+
+        public async Task<Result> OpAirTicketRes(AirTicketResOpDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                BeginTran();
+                int id = 0;
+                Grp_AirTicketReservations grp_AirTicket = _mapper.Map<Grp_AirTicketReservations>(dto.AirTicketResOpData);
+                if (dto.Status==1)
                 {
-                    string DiId = "";
-                    foreach (var item in grp_GroupsTaskAssignment)
+                    string selectSql = string.Format(@"select * from Grp_AirTicketReservations where ClientName='{0}' and IsDel={1}"
+                                                     , dto.AirTicketResOpData.ClientName, 0);
+                    var DeleClient = await _sqlSugar.SqlQueryable<Grp_AirTicketReservations>(selectSql).FirstAsync();//查询是否存在
+                    if (DeleClient != null)
                     {
-                        DiId += item.DIId + ",";
+                        return result = new Result() { Code = -1, Msg = "该客户已存在,请勿重复添加!" };
                     }
-                    DiId = DiId.Substring(0, DiId.Length - 1);
-                    string sql = string.Format(@"select * from Grp_DelegationInfo where Id in({0}) and IsDel={1}", DiId, 0);
-                    List<Grp_DelegationInfo> grp_Delegations = _sqlSugar.SqlQueryable<Grp_DelegationInfo>(sql).ToList();
-                    if (grp_Delegations.Count == 0)
+                    else//不存在,可添加
                     {
-                        return result = new Result() { Code = -1, Msg = "查询失败!" };
+                       
+                        id = await AddAsyncReturnId(grp_AirTicket);
+                        if (id == 0)
+                        {
+                            result = new Result() { Code = -1, Msg = "添加失败!" };
+
+                        }
+                        else
+                        {
+                            result = new Result() { Code = 0, Msg = "添加成功!" };
+                        }
+                        
                     }
-                    List<GroupNameView> grp_NameView = new List<GroupNameView>();
-                    foreach (var item in grp_Delegations)
+                    if (result.Code==0)
                     {
-                        GroupNameView groupNameView = new GroupNameView();
-                        groupNameView.Id = item.Id;
-                        groupNameView.GroupName = item.TeamName;
-                        grp_NameView.Add(groupNameView);
+                        Grp_CreditCardPayment grp_CreditCard = _mapper.Map<Grp_CreditCardPayment>(dto.CardPaymentOpData);
+                        //换算
+                        Grp_TeamRate _TeamRate = _sqlSugar.Queryable<Grp_TeamRate>().First(a => a.DiId == grp_AirTicket.DIId && a.IsDel == 0 && a.CTable==85);
+                        if (_TeamRate!=null)
+                        {
+                            if (grp_CreditCard.PaymentCurrency == 49)
+                            {
+                                grp_CreditCard.DayRate = _TeamRate.RateU;
+                                grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney * Convert.ToDecimal(_TeamRate.RateU);
+                                //ccp.PayMoney = ccp.PayMoney * float.Parse(tr.RateU); 
+                            }
+                            else if (grp_CreditCard.PaymentCurrency == 51)
+                            {
+                                grp_CreditCard.DayRate = _TeamRate.RateE;
+                                grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney * Convert.ToDecimal(_TeamRate.RateE);
+                                //ccp.PayMoney = ccp.PayMoney * float.Parse(tr.RateE); 
+                            }
+                            else
+                            {
+                                grp_CreditCard.DayRate = "1";
+                                grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney;
+                            }
+                        }
+                        else
+                        {
+                            grp_CreditCard.DayRate = "1";
+                            grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney;
+                        }
+                        
+                        //判断是否超出成本
+                        Grp_GroupCostParameter _GroupCostParameter = _sqlSugar.Queryable<Grp_GroupCostParameter>().First(a => a.DiId == grp_AirTicket.DIId && a.IsDel==0);
+                        if (grp_AirTicket.CType==460)//经济舱
+                        {
+                            if((Convert.ToDecimal(_GroupCostParameter.JJCCB)* Convert.ToDecimal(grp_AirTicket.ClientNum))> grp_CreditCard.RMBPrice)
+                            {
+                                grp_CreditCard.ExceedBudget = 0;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 3;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 0;
+                                grp_CreditCard.AuditGMDate = DateTime.Now;
+                                grp_CreditCard.IsPay = 1;
+                            }
+                            else
+                            {
+                                var a = grp_CreditCard.RMBPrice - Convert.ToDecimal(_GroupCostParameter.JJCCB);
+                                var b = a / Convert.ToDecimal(_GroupCostParameter.JJCCB) * Convert.ToDecimal(grp_AirTicket.ClientNum);
+                                grp_CreditCard.ExceedBudget = b;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 0;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 21;
+                                grp_CreditCard.AuditGMDate =new DateTime();
+                                grp_CreditCard.IsPay = 1;
+                            }
+                            
+                        }
+                        else if(grp_AirTicket.CType==458)
+                        {
+                            if ((Convert.ToDecimal(_GroupCostParameter.GWCB) * Convert.ToDecimal(grp_AirTicket.ClientNum)) > grp_CreditCard.RMBPrice)
+                            {
+                                grp_CreditCard.ExceedBudget = 0;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 3;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 21;
+                                grp_CreditCard.AuditGMDate = DateTime.Now;
+                                grp_CreditCard.IsPay = 1;
+                            }
+                            else
+                            {
+                                var a = grp_CreditCard.RMBPrice - Convert.ToDecimal(_GroupCostParameter.GWCB);
+                                var b = a / Convert.ToDecimal(_GroupCostParameter.GWCB) * Convert.ToDecimal(grp_AirTicket.ClientNum);
+                                grp_CreditCard.ExceedBudget = b;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 0;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 21;
+                                grp_CreditCard.AuditGMDate = new DateTime();
+                                grp_CreditCard.IsPay = 1;
+                            }
+                        }
+                       
+
+                        grp_CreditCard.CId = id;
+                        grp_CreditCard.CTable = 85;
+                        grp_CreditCard.PayPercentage = 100;
+                        //查询上一次付款信息
+                        Grp_CreditCardPayment _CreditCardPayment = _sqlSugar.Queryable<Grp_CreditCardPayment>().OrderByDescending(x=>x.CreateUserId).First(a => a.DIId == grp_AirTicket.DIId && a.IsDel == 0 && a.IsPay==1);
+                        if (_CreditCardPayment != null)
+                        {
+                            grp_CreditCard.PayPercentageOld = _CreditCardPayment.PayPercentageOld;// 上次付款百分比 查询并计算最近一次
+                            grp_CreditCard.PayThenMoneyOld = _CreditCardPayment.PayMoney;// 上次付款金额 查询上一次
+                            grp_CreditCard.UpdateDate = _CreditCardPayment.UpdateDate;// 上次付款时间 查询上一次
+                        }
+                        else
+                        {
+                            grp_CreditCard.PayPercentageOld =0;// 上次付款百分比 查询并计算最近一次
+                            grp_CreditCard.PayThenMoneyOld =0;// 上次付款金额 查询上一次
+                            grp_CreditCard.UpdateDate =new DateTime();// 上次付款时间 查询上一次
+                        }
+                        
+                        id = await _sqlSugar.Insertable(grp_CreditCard).ExecuteReturnIdentityAsync();
+                        if (id == 0)
+                        {
+                            RollbackTran();
+                            return result = new Result() { Code = -1, Msg = "添加失败!" };
+                            
+                        }
+                        CommitTran();
+                        return result = new Result() { Code = 0, Msg = "添加成功!" };
+                        //C表操作
+                    }
+                    else
+                    {
+                        RollbackTran();
+                        return result = new Result() { Code = -1, Msg = "添加失败!" };
+                        
                     }
-                    return result = new Result() { Code = 0, Msg = "查询成功!", Data = grp_NameView };
                 }
-                else
+                else if (dto.Status==2) 
                 {
-                    return result = new Result() { Code = -1, Msg = "暂无可操作团组" };
+                    id = dto.AirTicketResOpData.Id;
+
+                    bool res = await UpdateAsync(a => a.Id == dto.AirTicketResOpData.Id, a => new Grp_AirTicketReservations
+                    {
+                        CType = dto.AirTicketResOpData.CType,
+                        PrePrice = dto.AirTicketResOpData.PrePrice,
+                        PreCurrency = dto.AirTicketResOpData.PreCurrency,
+                        Price = dto.AirTicketResOpData.Price,
+                        Currency = dto.AirTicketResOpData.Currency,
+                        ClientNum = dto.AirTicketResOpData.ClientNum,
+                        ClientName = dto.AirTicketResOpData.ClientName,
+                        IsCheckIn = dto.AirTicketResOpData.IsCheckIn,
+                        IsSetSeat = dto.AirTicketResOpData.IsSetSeat,
+                        IsPackage = dto.AirTicketResOpData.IsPackage,
+                        IsBagHandle = dto.AirTicketResOpData.IsBagHandle,
+                        IsTrain = dto.AirTicketResOpData.IsTrain,
+                        FlightsCode = dto.AirTicketResOpData.FlightsCode,
+                        FlightsCity = dto.AirTicketResOpData.FlightsCity,
+                        FlightsDescription = dto.AirTicketResOpData.FlightsDescription,
+                        PriceDescription = dto.AirTicketResOpData.PriceDescription,
+                        Remark = dto.AirTicketResOpData.Remark,
+                    });
+                    if (!res)
+                    {
+                        result = new Result() { Code = -1, Msg = "修改失败!" };
+                    }
+                    else { result = new Result() { Code = 0, Msg = "修改成功!" }; }
+                    
+                    if (result.Code==0)
+                    {
+                        //C表操作
+                        Grp_CreditCardPayment grp_CreditCard = _mapper.Map<Grp_CreditCardPayment>(dto.CardPaymentOpData);
+
+                        //换算
+                        Grp_TeamRate _TeamRate = _sqlSugar.Queryable<Grp_TeamRate>().First(a => a.DiId == grp_AirTicket.DIId && a.IsDel == 0 && a.CTable == 85);
+                        if (_TeamRate != null)
+                        {
+                            if (grp_CreditCard.PaymentCurrency == 49)
+                            {
+                                grp_CreditCard.DayRate = _TeamRate.RateU;
+                                grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney * Convert.ToDecimal(_TeamRate.RateU);
+                                //ccp.PayMoney = ccp.PayMoney * float.Parse(tr.RateU); 
+                            }
+                            else if (grp_CreditCard.PaymentCurrency == 51)
+                            {
+                                grp_CreditCard.DayRate = _TeamRate.RateE;
+                                grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney * Convert.ToDecimal(_TeamRate.RateE);
+                                //ccp.PayMoney = ccp.PayMoney * float.Parse(tr.RateE); 
+                            }
+                            else
+                            {
+                                grp_CreditCard.DayRate = "1";
+                                grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney;
+                            }
+                        }
+                        else
+                        {
+                            grp_CreditCard.DayRate = "1";
+                            grp_CreditCard.RMBPrice = grp_CreditCard.PayMoney;
+                        }
+                        //grp_CreditCard.PayMoney = grp_CreditCard.PayMoney;
+                        //判断是否超出成本
+                        Grp_GroupCostParameter _GroupCostParameter = _sqlSugar.Queryable<Grp_GroupCostParameter>().First(a => a.DiId == grp_AirTicket.DIId && a.IsDel == 0);
+                        if (grp_AirTicket.CType == 460)//经济舱
+                        {
+                            if ((Convert.ToDecimal(_GroupCostParameter.JJCCB) * Convert.ToDecimal(grp_AirTicket.ClientNum)) > grp_CreditCard.RMBPrice)
+                            {
+                                grp_CreditCard.ExceedBudget = 0;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 3;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 0;
+                                grp_CreditCard.AuditGMDate = DateTime.Now;
+                                grp_CreditCard.IsPay = 1;
+                            }
+                            else
+                            {
+                                var a = grp_CreditCard.RMBPrice - Convert.ToDecimal(_GroupCostParameter.JJCCB);
+                                var b = a / Convert.ToDecimal(_GroupCostParameter.JJCCB) * Convert.ToDecimal(grp_AirTicket.ClientNum);
+                                grp_CreditCard.ExceedBudget = b;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 0;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 21;
+                                grp_CreditCard.AuditGMDate = new DateTime();
+                                grp_CreditCard.IsPay = 1;
+                            }
+
+                        }
+                        else if (grp_AirTicket.CType == 458)
+                        {
+                            if ((Convert.ToDecimal(_GroupCostParameter.GWCCB) * Convert.ToDecimal(grp_AirTicket.ClientNum)) > grp_CreditCard.RMBPrice)
+                            {
+                                grp_CreditCard.ExceedBudget = 0;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 3;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 21;
+                                grp_CreditCard.AuditGMDate = DateTime.Now;
+                                grp_CreditCard.IsPay = 1;
+                            }
+                            else
+                            {
+                                var a = grp_CreditCard.RMBPrice - Convert.ToDecimal(_GroupCostParameter.GWCB);
+                                var b = a / Convert.ToDecimal(_GroupCostParameter.GWCB) * Convert.ToDecimal(grp_AirTicket.ClientNum);
+                                grp_CreditCard.ExceedBudget = b;// 超出预算比例 换算
+                                grp_CreditCard.IsAuditGM = 0;//3 为自动审核
+                                grp_CreditCard.AuditGMOperate = 21;
+                                grp_CreditCard.AuditGMDate = new DateTime();
+                                grp_CreditCard.IsPay = 1;
+                            }
+                        }
+
+
+                        grp_CreditCard.CId = id;
+                        grp_CreditCard.CTable = 85;
+                        grp_CreditCard.PayPercentage = 100;
+                        //查询上一次付款信息
+                        Grp_CreditCardPayment _CreditCardPayment = _sqlSugar.Queryable<Grp_CreditCardPayment>().OrderByDescending(x => x.CreateUserId).First(a => a.DIId == grp_AirTicket.DIId && a.IsDel == 0 && a.IsPay == 1);
+                        if (_CreditCardPayment != null)
+                        {
+                            grp_CreditCard.PayPercentageOld = _CreditCardPayment.PayPercentageOld;// 上次付款百分比 查询并计算最近一次
+                            grp_CreditCard.PayThenMoneyOld = _CreditCardPayment.PayMoney;// 上次付款金额 查询上一次
+                            grp_CreditCard.UpdateDate = _CreditCardPayment.UpdateDate;// 上次付款时间 查询上一次
+                        }
+                        else
+                        {
+                            grp_CreditCard.PayPercentageOld = 0;// 上次付款百分比 查询并计算最近一次
+                            grp_CreditCard.PayThenMoneyOld = 0;// 上次付款金额 查询上一次
+                            grp_CreditCard.UpdateDate = new DateTime();// 上次付款时间 查询上一次
+                        }
+                        int CTable=await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.Id == dto.CardPaymentOpData.Id).SetColumns(a => new Grp_CreditCardPayment
+                        {
+                            PayDId = grp_CreditCard.PayDId,
+                            ConsumptionPatterns = grp_CreditCard.ConsumptionPatterns,
+                            ConsumptionDate = grp_CreditCard.ConsumptionDate,
+                            CTDId = grp_CreditCard.CTDId,
+                            BankNo = grp_CreditCard.BankNo,
+                            CardholderName = grp_CreditCard.CardholderName,
+                            PayMoney = grp_CreditCard.PayMoney,
+                            PaymentCurrency = grp_CreditCard.PaymentCurrency,
+                            DayRate = grp_CreditCard.DayRate,
+                            CompanyBankNo = grp_CreditCard.CompanyBankNo,
+                            OtherBankName = grp_CreditCard.OtherBankName,
+                            OtherSideNo = grp_CreditCard.OtherSideNo,
+                            OtherSideName = grp_CreditCard.OtherSideName,
+                            IsAuditGM = grp_CreditCard.IsAuditGM,
+                            AuditGMOperate = grp_CreditCard.AuditGMOperate,
+                            AuditGMDate = grp_CreditCard.AuditGMDate,
+                            IsPay = grp_CreditCard.IsPay,
+                            PayPercentage = grp_CreditCard.PayPercentage,
+                            PayThenMoney = grp_CreditCard.PayThenMoney,
+                            PayPercentageOld = grp_CreditCard.PayPercentageOld,
+                            PayThenMoneyOld = grp_CreditCard.PayThenMoneyOld,
+                            UpdateDate = grp_CreditCard.UpdateDate,
+                            Payee = grp_CreditCard.Payee,
+                            RMBPrice = grp_CreditCard.RMBPrice,
+                            OrbitalPrivateTransfer = grp_CreditCard.OrbitalPrivateTransfer,
+                            ExceedBudget = grp_CreditCard.ExceedBudget
+                        }).ExecuteCommandAsync();
+                        if (CTable == 0)
+                        {
+                            RollbackTran();
+                            return result = new Result() { Code = -1, Msg = "修改失败!" };
+
+                        }
+                        else
+                        {
+                            result = new Result() { Code = 0, Msg = "修改成功!" };
+                        }
+                    }
+                    else
+                    {
+                        result = new Result() { Code = -1, Msg = "修改失败!" };
+                        RollbackTran();
+                    }
                 }
+                CommitTran();
             }
             catch (Exception ex)
             {
+                RollbackTran();
                 return result = new Result() { Code = -2, Msg = "程序错误" };
                 throw;
             }
+            return result;
         }
+
+        /// <summary>
+        /// 导出机票费用报表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<Result> DeriveAirTicketRes(AirTicketResDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                string sql = string.Format(@"select d.TourCode,d.TeamName,a.FlightsCity,a.FlightsCode,a.FlightsDescription,(select Name from Sys_SetData where Id=a.cType) as 'CTypeName',a.ClientName,a.ClientNum,
+                                a.PrePrice,a.Price,(select Name from Sys_SetData where Id=c.PayDId) as 'PayType', case when 
+                                c.OrbitalPrivateTransfer=0 then '公转' when c.OrbitalPrivateTransfer=1 then '私转' end as OrbitalPrivateTransfer,c.BankNo,c.CreateTime,
+                                c.Payee,a.PriceDescription,(select Name from Sys_SetData where Id=a.Currency) as 'CurrencyStr',(select Name from Sys_SetData where Id=c.CTDId) as BankType
+                                from Grp_AirTicketReservations a,Grp_CreditCardPayment c ,Grp_DelegationInfo d where  a.id=c.CId and d.Id=a.DIId  and a.isdel=0
+                                and a.DIId={0} Order By a.CreateTime desc", dto.DiId, 0);
+                List<AirTicketReservationsPayView>  _AirTicketReservations = _sqlSugar.SqlQueryable<AirTicketReservationsPayView>(sql).ToList();
+                if (_AirTicketReservations.Count != 0)
+                {
+                    Grp_DelegationInfo grp_Delegation =_sqlSugar.Queryable<Grp_DelegationInfo>().First(a => a.Id ==dto.DiId && a.IsDel==0);
+                    Sys_Users _Users= _sqlSugar.Queryable<Sys_Users>().First(a => a.Id ==dto.UserId && a.IsDel == 0);
+                    return result = new Result() { Code = 0, Msg = "成功", Data = new { Delegation = grp_Delegation, AirTicketRes = _AirTicketReservations, Users=_Users } };
+                }
+                else
+                {
+                    return result = new Result() { Code = -1, Msg = "暂无数据", Data = null };
+                }
+            }
+            catch (Exception)
+            {
+                return result = new Result() { Code = -2, Msg = "未知错误" };
+            }
+        }
+
+        public async Task<Result> ItineraryAirTicketRes(ItineraryAirTicketResDto dto)
+        {
+            Result result = new Result() { Code = -2, Msg = "未知错误" };
+            try
+            {
+                string sql = string.Format(@"select a.*,c.IsAuditGM,(select Name from Sys_SetData where Id=a.cType) as 'CTypeName',(select Name from 
+                                                Sys_SetData where Id=a.PreCurrency) as 'PreCurrencyStr',(select Name from Sys_SetData where Id=a.Currency)
+                                                as 'CurrencyStr' from Grp_AirTicketReservations a,Grp_CreditCardPayment c where  a.id=c.CId  and a.isdel={1}
+                                                and a.DIId={0} Order By a.CreateTime desc", dto.DiId, 0);
+                List<AirTicketReservationsView> _AirTicketReservations = _sqlSugar.SqlQueryable<AirTicketReservationsView>(sql).ToList();
+                if (_AirTicketReservations.Count==0)
+                {
+                    return result = new Result() { Code = -1, Msg = "暂无数据", Data = null };
+                }
+                else
+                {
+                    return result = new Result() { Code = 0, Msg = "查询成功", Data = _AirTicketReservations };
+                }
+            }
+            catch (Exception)
+            {
+                return result = new Result() { Code = -2, Msg = "未知错误" };
+                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