Browse Source

冲突合并

jiangjc 1 year ago
parent
commit
841bb4cddd

+ 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("数据库结构同步完成!");

+ 261 - 4
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -1,5 +1,11 @@
-using Microsoft.AspNetCore.Mvc;
+using Aspose.Cells;
+using Aspose.Words;
+using Aspose.Words.Tables;
+using Microsoft.AspNetCore.Mvc;
+using NetTaste;
 using Newtonsoft.Json.Serialization;
+using NPOI.OpenXmlFormats.Spreadsheet;
+using NPOI.SS.Formula.Functions;
 using OASystem.API.OAMethodLib;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Business;
@@ -7,6 +13,8 @@ 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 static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
 
 namespace OASystem.API.Controllers
@@ -23,14 +31,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 流程管控
@@ -695,6 +712,10 @@ namespace OASystem.API.Controllers
                 .Where(s => s.Id == CreditId)
                 .ExecuteCommandAsync();
                 if (result < 1)
+                {
+                    rst = -1;
+                }
+                else
                 {
                     _groupRepository.RollbackTran();
                     return Ok(JsonView(false, "保存失败并回滚!"));
@@ -743,7 +764,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
             {
@@ -760,7 +781,243 @@ 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;
+            }
+        }
+
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> ItineraryAirTicketRes(AirTicketResDto dto)
+        {
+            try
+            {
+                Result groupData = await _airTicketResRep.ItineraryAirTicketRes(dto);
+                if (groupData.Code != 0)
+                {
+                    return Ok(JsonView(false, groupData.Msg));
+                }
+                else
+                {
+                    List<AirTicketReservationsView> _AirTicketReservations = groupData.Data;
+
+                    //WorkbookDesigner designer = new WorkbookDesigner();
+                    //designer.Workbook = new Workbook(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");
+                    Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");
+                    DocumentBuilder builder = new DocumentBuilder();
+                    foreach (var item in _AirTicketReservations)
+                    {
+                        int tableIndex = 0;//表格索引
+                                           //得到文档中的第一个表格
+                        Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);
+                        Paragraph lastParagraph = new Paragraph(doc);
+                        //第一个表格末尾加段落
+                        table.ParentNode.InsertAfter(lastParagraph, table);
+                        //复制第一个表格
+                        Table cloneTable = (Table)table.Clone(true);
+                        //在文档末尾段落后面加入复制的表格
+                        table.ParentNode.InsertAfter(cloneTable, lastParagraph);
+                        Itinerary itinerary = new Itinerary();
+                        itinerary.ClientName = item.ClientName;
+                        itinerary.AirlineCompany = "航空公司";
+                        itinerary.TimeIssue = "2023-5-23 10:09:06";
+                        itinerary.DrawingAgent = "代理人";
+                        itinerary.AgentsAddress = "代理人地址";
+                        itinerary.AgentPhone = "代理人电话";
+                        itinerary.AgentFacsimile = "代理人传真";
+                        string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);
+                        DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();
+                        List<AirInfo> airInfos = new List<AirInfo>();
+                        for (int i = 0; i < DayArray.Length; i++)
+                        {
+                            string[] FlightStr = item.FlightsCode.Split('/');
+                            string[] tempstr = DayArray[i]
+                                      .Replace("\r\n", string.Empty)
+                                      .Replace("\\r\\n", string.Empty)
+                                      .TrimStart().TrimEnd()
+                                      .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
+                            AirInfo air = new AirInfo();
+                            string [] city = item.FlightsCity.Split('/');
+                            string cityStr = city[i];
+                            string startCity = cityStr.Substring(0, 2);
+                            Res_ThreeCode startCityThree = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == startCity && a.IsDel == 0);
+                            string endCity = cityStr.Substring(3, 5);
+                            Res_ThreeCode endCityThree = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == endCity && a.IsDel == 0);
+                            air.Destination= startCityThree.City+"-"+endCityThree.City;
+                            air.Flight = FlightStr[i];
+                            air.SeatingClass = item.CTypeName;
+
+                        }
+                        //designer.SetDataSource("Export", AirTicketReservations);
+                        //string AirlineRecordCode = "--";//航空公司记录编码
+                        //string ReservationRecordCode = "--";//订座记录编码
+                        //string ClientName = "--";//旅客姓名
+                        //string TicketNumber = "--";//票号
+                        //string IdentificationCode = "--";//身份识别代码
+                        //string JointTicket = "--";//联票
+                        //string AirlineCompany = "--";//出票航空公司
+                        //string TimeIssue = "--";//出票时间
+                        //string DrawingAgent = "--";//代理人
+                        //string NavigationCode = "--";//航协代码
+                        //string AgentsAddress = "--";//代理人地址
+                        //string AgentPhone = "--";//代理人电话
+                        //string AgentFacsimile = "--";//代理人传真
+                        //doc.SetDataSource("AirlineRecordCode", AirlineRecordCode);
+                        //Itinerary itinerary = new Itinerary();
+
+
+                    }
+                    doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
+                    //保存合并后的文档
+                    string fileName = "AirItinerary/电子客票行程单_CN.docx";
+                    string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;
+                    doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);
+
+                    return Ok(JsonView(false, "程序错误!"));
+                }
+
+            }
+            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;
         }
     }

+ 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 车公司资料

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

@@ -6,13 +6,295 @@ 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;
     }
+   
+    /// <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; }
+
+    }
+
 }

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

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

+ 1 - 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" />

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

@@ -1,15 +1,31 @@
 using AutoMapper;
+
+using MySqlX.XDevAPI.Relational;
+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;
 
 namespace OASystem.Infrastructure.Repositories.Resource
 {
@@ -21,7 +37,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 +198,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 +207,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 +231,454 @@ 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)
                 {
-                    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 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)
+                    {
+                        return result = new Result() { Code = -1, Msg = "该客户已存在,请勿重复添加!" };
+                    }
+                    else//不存在,可添加
                     {
-                        DiId += item.DIId + ",";
+                       
+                        id = await AddAsyncReturnId(grp_AirTicket);
+                        if (id == 0)
+                        {
+                            result = new Result() { Code = -1, Msg = "添加失败!" };
+
+                        }
+                        else
+                        {
+                            result = new Result() { Code = 0, 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)
+                    if (result.Code==0)
                     {
-                        return result = new Result() { Code = -1, Msg = "查询失败!" };
+                        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表操作
                     }
-                    List<GroupNameView> grp_NameView = new List<GroupNameView>();
-                    foreach (var item in grp_Delegations)
+                    else
                     {
-                        GroupNameView groupNameView = new GroupNameView();
-                        groupNameView.Id = item.Id;
-                        groupNameView.GroupName = item.TeamName;
-                        grp_NameView.Add(groupNameView);
+                        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(AirTicketResDto 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;
+            }
         }
+       
     }
 }