浏览代码

酒店预订
币种处理

leiy 1 年之前
父节点
当前提交
b390a5d61d

+ 241 - 13
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -11,6 +11,7 @@ using OASystem.Domain.ViewModels.Statistics;
 using OASystem.Infrastructure.Repositories.Groups;
 using OASystem.Infrastructure.Repositories.Groups;
 using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
 using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
 using System;
 using System;
+using OASystem.Domain.Entities.Customer;
 
 
 namespace OASystem.API.Controllers
 namespace OASystem.API.Controllers
 {
 {
@@ -26,6 +27,7 @@ namespace OASystem.API.Controllers
         private readonly SqlSugarClient _sqlSugar;
         private readonly SqlSugarClient _sqlSugar;
         private readonly DelegationInfoRepository _groupRep;
         private readonly DelegationInfoRepository _groupRep;
         private readonly SetDataRepository _setDataRep;
         private readonly SetDataRepository _setDataRep;
+        private readonly TeamRateRepository _teamRateRep;
 
 
         /// <summary>
         /// <summary>
         /// Init
         /// Init
@@ -34,12 +36,13 @@ namespace OASystem.API.Controllers
         /// <param name="sqlSugar"></param>
         /// <param name="sqlSugar"></param>
         /// <param name="groupRep"></param>
         /// <param name="groupRep"></param>
         /// <param name="setDataRep"></param>
         /// <param name="setDataRep"></param>
-        public StatisticsController(IMapper mapper, SqlSugarClient sqlSugar, DelegationInfoRepository groupRep, SetDataRepository setDataRep)
+        public StatisticsController(IMapper mapper, SqlSugarClient sqlSugar, DelegationInfoRepository groupRep, SetDataRepository setDataRep, TeamRateRepository teamRate)
         {
         {
             _mapper = mapper;
             _mapper = mapper;
             _groupRep = groupRep;
             _groupRep = groupRep;
             _setDataRep = setDataRep;
             _setDataRep = setDataRep;
             _sqlSugar = sqlSugar;
             _sqlSugar = sqlSugar;
+            _teamRateRep = teamRate;
         }
         }
 
 
 
 
@@ -132,7 +135,7 @@ namespace OASystem.API.Controllers
         {
         {
             #region  参数验证
             #region  参数验证
             if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
             if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
-            if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));
+            if (_dto.PageId < 1) _dto.PageId = 38; //团组报表页面Id
             if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));
             if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));
 
 
             PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
             PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
@@ -147,9 +150,10 @@ namespace OASystem.API.Controllers
             {
             {
                 GroupStatementDetailsView _view = new GroupStatementDetailsView();
                 GroupStatementDetailsView _view = new GroupStatementDetailsView();
 
 
-                #region 费用类型 币种,转账
+                #region 费用类型 币种,转账,客户信息
 
 
                 List<Sys_SetData> _setDatas = await _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0).ToListAsync();
                 List<Sys_SetData> _setDatas = await _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0).ToListAsync();
+                var _clientDatas = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync();
 
 
                 #endregion
                 #endregion
 
 
@@ -272,19 +276,243 @@ namespace OASystem.API.Controllers
                 GroupExpenditureView _geView = new GroupExpenditureView();
                 GroupExpenditureView _geView = new GroupExpenditureView();
 
 
                 #region 酒店预定费用
                 #region 酒店预定费用
+                List<GroupHotelFeeView> groupHotelFeeViews = new List<GroupHotelFeeView>();
+
+                string hotelFeeSql = string.Format(@"Select hr.Id As HrId,hr.DiId As HrDiId,hr.City,hr.HotelName,hr.CheckInDate,hr.CheckOutDate,
+                                                     sd1.Name As PaymentCurrency,hr.SingleRoomPrice,hr.SingleRoomCount,hr.DoubleRoomPrice,
+                                                     hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,hr.OtherRoomCount,
+                                                     hr.BreakfastPrice,sd4.Name As BreakfastCurrency,hr.Isoppay,hr.GovernmentRent,
+                                                     sd5.Name As GovernmentRentCurrency,hr.CityTax,sd6.Name As CityTaxCurrency,
+                                                     ccp.PayMoney,ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,
+                                                     sd2.Name As PayWay,sd3.Name As CardType,ccp.IsPay,u.CnName As OpName
+                                                     From Grp_HotelReservations  hr
+                                                     Left Join Grp_CreditCardPayment ccp On hr.Id = ccp.CId
+                                                     Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                     Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                     Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                     Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                     Left Join Sys_SetData sd4 On hr.BreakfastCurrency = sd4.Id
+                                                     Left Join Sys_SetData sd5 On hr.GovernmentRentCurrency = sd5.Id
+                                                     Left Join Sys_SetData sd6 On hr.CityTaxCurrency = sd6.Id
+                                                     Where hr.IsDel = 0 And ccp.IsDel = 0 And ccp.CTable = 76 And ccp.IsAuditGM = 1 And ccp.IsPay = 1
+                                                     And hr.DiId = {0}", _dto.DiId);
+
+                groupHotelFeeViews = await _sqlSugar.SqlQueryable<GroupHotelFeeView>(hotelFeeSql).ToListAsync();
+
+                decimal HotelCNYTotalPrice = 0.00M;
+
+                var teamRateData = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
+                foreach (var item in groupHotelFeeViews)
+                {
+                    HotelCNYTotalPrice += item.CNYPrice;
+
+                    string currencyRateStr = "";
+                    List<string> currencys = new List<string>();
+                    if (!string.IsNullOrEmpty(item.PaymentCurrency)) currencys.Add(item.PaymentCurrency);
+
+                    if (!string.IsNullOrEmpty(item.BreakfastCurrency)) currencys.Add(item.BreakfastCurrency);
+
+                    if (!string.IsNullOrEmpty(item.GovernmentRentCurrency)) currencys.Add(item.GovernmentRentCurrency);
+
+                    if (!string.IsNullOrEmpty(item.PaymentCurrency)) currencys.Add(item.PaymentCurrency);
+
+                    currencyRateStr = await GeneralMethod.PostGroupRateByCTableAndCurrency(teamRateData, 76, currencys);
+
+                    item.CurrencyRateStr = currencyRateStr;
+                }
+
+                _geView.GroupHotelFeeViews = groupHotelFeeViews;
+                _geView.GroupHotelFeeStr = string.Format(@"人名币总费用:{0} CNY", HotelCNYTotalPrice);
+
+                #endregion
+
+                #region 地接费用
+
+                List<GroupCTGGRFeeView> groupCTGGRFeeViews = new List<GroupCTGGRFeeView>();
+
+                string CTGGRFeeSql = string.Format(@"Select ctggr.Id As CTGGRId,ctggr.DiId As CTGGRDiId,ctggr.Area,ctggrc.*,ccp.PayMoney,
+                                                     sd2.name As PaymentCurrency,ccp.PayPercentage,(ccp.PayMoney * ccp.PayPercentage / 100) As AmountPaid,
+                                                     (ccp.PayMoney -(ccp.PayMoney * ccp.PayPercentage / 100)) As BalancePayment,ccp.DayRate,
+                                                     ccp.RMBPrice As CNYPrice,ccp.Payee,ccp.AuditGMDate,
+                                                     ccp.OrbitalPrivateTransfer,sd1.Name As PayWay,ccp.IsPay,u.CnName As OpName
+                                                     From Grp_CarTouristGuideGroundReservations ctggr
+                                                     Left Join ( Select cggrc.CTGGRId,sd1.Name As PriceName,cggrc.Price,sd2.Name As PriceCurrency,
+                                                     				   cggrc.PriceContent
+                                                     			From Grp_CarTouristGuideGroundReservationsContent cggrc
+                                                     			Left Join Sys_SetData sd1 On cggrc.SId = sd1.Id
+                                                     			Left Join Sys_SetData sd2 On cggrc.Currency = sd2.Id
+                                                     			Where cggrc.ISdel = 0 And cggrc.Price != 0.00 
+                                                     			) ctggrc On ctggr.Id = ctggrc.CTGGRId 
+                                                     Left Join Grp_CreditCardPayment ccp On ccp.IsDel = 0  And ccp.CTable = 79 And ctggr.Id = ccp.CId
+                                                     Left Join Sys_SetData sd1 On ccp.PayDId = sd1.Id
+                                                     Left Join Sys_SetData sd2 On ccp.PaymentCurrency = sd2.Id
+                                                     Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                     Where ctggr.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And ctggr.DiId = {0} ",_dto.DiId);
+
+                groupCTGGRFeeViews = await _sqlSugar.SqlQueryable<GroupCTGGRFeeView>(CTGGRFeeSql).ToListAsync();
+
+                string CTGGRFeeStr = "";
+                decimal CTGGRCNYTotalPrice = 0.00M;
+                foreach (var item in groupCTGGRFeeViews)
+                {
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+
+                    CTGGRFeeStr += string.Format(@"{0}总费用:{1} {2}(人名币:{3} CNY 当时支付汇率:{4})\r\n", 
+                        item.Area, item.AmountPaid.ConvertToDecimal1(), item.PaymentCurrency, item.CNYPrice, item.DayRate);
+                    CTGGRCNYTotalPrice += item.CNYPrice;
+                }
+                _geView.GroupCTGGRFeeViews = groupCTGGRFeeViews;
+
+                _geView.GroupCTGGRFeeStr = string.Format(@"{0}人名币总费用:{1} CNY", CTGGRFeeStr,CTGGRCNYTotalPrice);
+                #endregion
+
+                #region 机票预订费用
+
+                List<GroupAirFeeView> groupAirFeeViews = new List<GroupAirFeeView>();
+                string groupAirFeeSql = string.Format(@"Select atr.Id As AirId,atr.DIId As AirDiId,atr.FlightsCode,atr.FlightsCity,sd4.Name As AirTypeName,
+                                                        atr.FlightsDate,atr.FlightsTime,atr.ClientName,atr.ClientNum,ccp.PayMoney,
+                                                        sd1.Name As PayMoneyCurrency,ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.AuditGMDate,
+                                                        ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,sd3.Name As CardType,ccp.IsPay,u.CnName As OpName
+                                                        From Grp_AirTicketReservations atr
+                                                        Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 85 And atr.Id = ccp.CId
+                                                        Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                        Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                        Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                        Left Join Sys_SetData sd4 On atr.CType = sd4.Id
+                                                        Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                        Where atr.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And atr.DiId = {0} ", _dto.DiId);
+                groupAirFeeViews = await _sqlSugar.SqlQueryable<GroupAirFeeView>(groupAirFeeSql).ToListAsync();
+
+                string str = "";
+                decimal AirCNYTotalPrice = 0.00M;
+                decimal JJCCNYTotalPrice = 0.00M, JJCPeopleNum = 0.00M, JJCAveragePrice = 0.00M;
+                decimal GWCCNYTotalPrice = 0.00M, GWCPeopleNum = 0.00M, GWCAveragePrice = 0.00M;
+
+                JJCCNYTotalPrice = groupAirFeeViews.Where(it => it.AirTypeName.Equals("经济舱")).Sum(it => it.CNYPrice);
+                JJCPeopleNum = groupAirFeeViews.Where(it => it.AirTypeName.Equals("经济舱")).Sum(it => it.ClientNum);
+                JJCAveragePrice = (JJCCNYTotalPrice / JJCPeopleNum).ConvertToDecimal1();
+                GWCCNYTotalPrice = groupAirFeeViews.Where(it => it.AirTypeName.Equals("公务舱")).Sum(it => it.CNYPrice);
+                GWCPeopleNum = groupAirFeeViews.Where(it => it.AirTypeName.Equals("公务舱")).Sum(it => it.ClientNum);
+                GWCAveragePrice = (GWCCNYTotalPrice / GWCPeopleNum).ConvertToDecimal1();
+
+                int Index = 0;
+                foreach (var item in groupAirFeeViews)
+                {
+                    string itemClientName = "";
+                    if (!string.IsNullOrEmpty(item.ClientName))
+                    {
+                        string[] clientIds = new string[] { };
+                        if (item.ClientName.Contains(','))
+                        {
+                            clientIds = item.ClientName.Split(',');
+                        }
+                        else
+                        {
+                            clientIds = new string[] { item.ClientName };
+                        }
+                        if (clientIds.Length > 0)
+                        {
+
+                            int[] output = Array.ConvertAll<string, int>(clientIds, delegate (string s) { return int.Parse(s); });
+                            var clients = _clientDatas.Where(it => output.Contains(it.Id)).ToList();
+                            string clientPinYinName = "";
+                            decimal unitCost = 0.00M;
+                            unitCost = (item.PayMoney / item.ClientNum).ConvertToDecimal1();
+                            foreach (var client in clients)
+                            {
+                                Index += 1;
+                                int clienIndex = 1;
+                                itemClientName += string.Format(@"{0}.{1} ;", clienIndex, client);
+                                clientPinYinName += string.Format(@"{0}.{1}出票价为:{2} CNY;", Index,client.Pinyin, unitCost);
+                                clienIndex++;
+                            }
+                        }
+                    }
+                    item.ClientName = itemClientName;
+
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+
+                _geView.GroupAirFeeViews = groupAirFeeViews;
+                if (!string.IsNullOrEmpty(str))
+                {
+                    str = string.Format(@"其中:{0}", str);
+                }
 
 
+                _geView.GroupAirFeeStr = string.Format(@"人名币总费用:{0} CNY\r\n{1}\r\n经济舱均价为:{2}CNY/人;公务舱均价为:{3}CNY/人;", AirCNYTotalPrice, str, JJCAveragePrice, GWCAveragePrice);
                 #endregion
                 #endregion
-          //      Select hr.Id As HrId,hr.DiId As HrDiId,hr.City,hr.HotelName,hr.CheckInDate,hr.CheckOutDate,
-										//ccp.PaymentCurrency,sd1.Name As PaymentCurrencyName,hr.SingleRoomPrice,hr.SingleRoomCount,
-										//hr.DoubleRoomPrice,hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,
-										//hr.OtherRoomCount,hr.GovernmentRent,hr.CityTax,hr.Commission,ccp.PayMoney,ccp.RMBPrice As CNYPrice,
-										//ccp.DayRate,ccp.Payee,
-										//From Grp_HotelReservations  hr
-          //                              Inner Join Grp_CreditCardPayment ccp On hr.Id = ccp.CId
-          //                              Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
-          //                              Where hr.IsDel = 0 And ccp.IsDel = 0 And ccp.CTable = 76 And ccp.IsAuditGM = 1 And ccp.IsPay = 1
-          //                              And hr.DiId = 2337
 
 
+                #region 签证费用
+
+                List<GroupVisaFeeView> groupVisaFeeViews = new List<GroupVisaFeeView>();
+                string groupVisaFeeSql = string.Format(@"Select vi.Id As VisaId,vi.DIId As VisaDiId,vi.VisaClient,ccp.PayMoney,sd1.Name As PayMoneyCurrency,
+                                                         ccp.DayRate,ccp.Payee,ccp.AuditGMDate,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
+                                                         sd3.Name As CardTypeName,ccp.IsPay,u.CnName As OpName
+                                                         From Grp_VisaInfo vi
+                                                         Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 80 And vi.Id = ccp.CId
+                                                         Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                         Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                         Left Join Sys_SetData sd3 On ccp.CTDId = sd3.Id
+                                                         Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                         Where vi.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And vi.DIId = {0}",_dto.DiId);
+
+                groupVisaFeeViews = await _sqlSugar.SqlQueryable<GroupVisaFeeView>(groupVisaFeeSql).ToListAsync();
+
+                decimal VisaCNYTotalPirce = 0.00M;
+
+                foreach (var item in groupVisaFeeViews)
+                {
+                    VisaCNYTotalPirce += item.PayMoney;
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+
+                _geView.GroupVisaFeeViews = groupVisaFeeViews;
+                _geView.GroupVisaFeeStr = string.Format(@"人名币总费用:{0} CNY", VisaCNYTotalPirce.ConvertToDecimal1());
+                #endregion
+
+                #region 邀请/公务活动费用 InvitationalService
+
+                #endregion
+
+                #region 保险费用 insurance
+                List<GroupInsuranceFeeView> groupInsuranceFeeViews = new List<GroupInsuranceFeeView>();
+                string groupInsuranceFeeSql = string.Format(@"Select ic.Id As InsuranceId,ic.Diid As InsuranceDiId,ClientName,ccp.PayMoney,ccp.RMBPrice As CNYPrice,
+                                                              sd1.Name As PayMoneyCurrency,ccp.Payee,ccp.AuditGMDate,ccp.OrbitalPrivateTransfer,
+                                                              sd2.Name As PayWay,ccp.IsPay,u.CnName As OpName
+                                                              From Grp_Customers ic
+                                                              Left Join Grp_CreditCardPayment ccp On ccp.isdel = 0 And ccp.CTable = 82 And ic.Id = ccp.CId
+                                                              Left Join Sys_SetData sd1 On ccp.PaymentCurrency = sd1.Id
+                                                              Left Join Sys_SetData sd2 On ccp.PayDId = sd2.Id
+                                                              Left Join Sys_Users u On ccp.CreateUserId = u.Id
+                                                              Where ic.IsDel = 0 And ccp.IsAuditGM = 1 And ccp.IsPay = 1 And ic.DiId = {0}", _dto.DiId);
+                groupInsuranceFeeViews = await _sqlSugar.SqlQueryable<GroupInsuranceFeeView>(groupInsuranceFeeSql).ToListAsync();
+
+                decimal insuranceCNYTotalPrice = 0.00M;
+                foreach (var item in groupInsuranceFeeViews)
+                {
+                    insuranceCNYTotalPrice += item.CNYPrice;
+
+                    if (!string.IsNullOrEmpty(item.AuditGMDate))
+                    {
+                        item.AuditGMDate = Convert.ToDateTime(item.AuditGMDate).ToString("yyyy-MM-dd HH:mm:ss");
+                    }
+                }
+                _geView.GroupInsuranceFeeViews = groupInsuranceFeeViews;
+                _geView.GroupInsuranceFeeStr = string.Format(@"人名币总费用:{0} CNY", insuranceCNYTotalPrice);
+                #endregion
+
+                #region 其他款项费用 OtherMoney
+
+                #endregion
 
 
                 _view.GroupExpenditure = _geView;
                 _view.GroupExpenditure = _geView;
                 #endregion
                 #endregion

+ 58 - 0
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -1,11 +1,13 @@
 using Microsoft.AspNetCore.Mvc.TagHelpers;
 using Microsoft.AspNetCore.Mvc.TagHelpers;
 using OASystem.API.OAMethodLib.JuHeAPI;
 using OASystem.API.OAMethodLib.JuHeAPI;
 using OASystem.Domain;
 using OASystem.Domain;
+using OASystem.Domain.Dtos.Financial;
 using OASystem.Domain.Entities.District;
 using OASystem.Domain.Entities.District;
 using OASystem.Domain.Entities.Financial;
 using OASystem.Domain.Entities.Financial;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.Entities.System;
 using OASystem.Domain.Entities.System;
+using OASystem.Domain.ViewModels.Financial;
 using OASystem.Domain.ViewModels.JuHeExchangeRate;
 using OASystem.Domain.ViewModels.JuHeExchangeRate;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Infrastructure.Repositories.Groups;
 using OASystem.Infrastructure.Repositories.Groups;
@@ -409,5 +411,61 @@ namespace OASystem.API.OAMethodLib
 
 
         #endregion
         #endregion
         #endregion
         #endregion
+
+        #region 团组汇率
+
+        /// <summary>
+        /// 团组汇率 
+        /// 获取板块 币种 及 汇率
+        /// 76	酒店预订  77	行程          79	车/导游地接
+        /// 80	签证      82	团组客户保险  85	机票预订
+        /// 98	其他款项  285	收款退还
+        /// </summary>
+        /// <param name="teamRateModels"></param>
+        /// <param name="cTable"></param>
+        /// <param name="currencyCode"></param>
+        /// <returns>
+        /// string 
+        /// eg: CNY 1.0000 
+        /// </returns>
+        public static async Task<string> PostGroupRateByCTableAndCurrency(List<TeamRateModelView> teamRateModels,int cTable,List<string> currencyCodes)
+        {
+            string str = "";
+
+
+
+            List<string> currencyRates = new List<string>();
+            TeamRateModelView hotelRateData = teamRateModels.Where(it => it.CTableId == cTable).FirstOrDefault();
+            if (hotelRateData != null)
+            {
+                var hotelRates = hotelRateData.TeamRates;
+
+                foreach (var item in currencyCodes)
+                {
+                    if (!string.IsNullOrEmpty(item))
+                    {
+                        var hotelRateInfo = hotelRates.Where(it => it.CurrencyCode.Equals(item)).FirstOrDefault();
+                        if (hotelRateInfo != null)
+                        {
+                            string str1 = string.Format("{0} {1}\r\n", hotelRateInfo.CurrencyCode, hotelRateInfo.Rate);
+                            currencyRates.Add(str1);
+                        }
+                    }
+                }
+
+                if (currencyRates != null || currencyRates.Count > 0)
+                {
+                    currencyRates = currencyRates.Distinct().ToList();
+                    foreach (var item in currencyRates)
+                    {
+                        str += item;
+                    }
+
+                }
+            }
+            return str;
+        }
+
+        #endregion
     }
     }
 }
 }

+ 602 - 1
OASystem/OASystem.Domain/ViewModels/Statistics/GroupStatementView.cs

@@ -390,11 +390,612 @@ namespace OASystem.Domain.ViewModels.Statistics
     /// 团组支出 View
     /// 团组支出 View
     /// </summary>
     /// </summary>
     public class GroupExpenditureView
     public class GroupExpenditureView
-    { 
+    {
+        /// <summary>
+        /// 酒店费用集合
+        /// </summary>
+        public List<GroupHotelFeeView>? GroupHotelFeeViews { get; set; }
+
+        /// <summary>
+        /// 酒店费用描述
+        /// </summary>
+        public string? GroupHotelFeeStr { get; set; }
+
+        /// <summary>
+        /// 地接费用集合
+        /// </summary>
+        public List<GroupCTGGRFeeView>? GroupCTGGRFeeViews { get; set; }
+
+        /// <summary>
+        /// 地接费用描述
+        /// </summary>
+        public string? GroupCTGGRFeeStr { get; set; }
+
+        /// <summary>
+        /// 机票费用集合
+        /// </summary>
+        public List<GroupAirFeeView>? GroupAirFeeViews { get; set; }
+
+        /// <summary>
+        /// 机票费用描述
+        /// </summary>
+        public string? GroupAirFeeStr { get; set; }
+
+        /// <summary>
+        /// 签证费用集合
+        /// </summary>
+        public List<GroupVisaFeeView>? GroupVisaFeeViews { get; set; }
+
+        /// <summary>
+        /// 签证费用描述
+        /// </summary>
+        public string? GroupVisaFeeStr { get; set; }
+
+        /// <summary>
+        /// 保险费用集合
+        /// </summary>
+        public List<GroupInsuranceFeeView>? GroupInsuranceFeeViews { get; set; }
+
+        /// <summary>
+        /// 保险费用描述
+        /// </summary>
+        public string? GroupInsuranceFeeStr { get; set; }
+    }
+
+    /// <summary>
+    /// 酒店费用View
+    /// </summary>
+    public class GroupHotelFeeView
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        public int HrDiId { get; set; }
+
+        /// <summary>
+        /// 酒店Id
+        /// </summary>
+        public int HrId { get; set; }
+
+        /// <summary>
+        /// 城市
+        /// </summary>
+        public string? City { get; set; }
+
+        /// <summary>
+        /// 酒店名称
+        /// </summary>
+        public string? HotelName { get; set; }
+
+        /// <summary>
+        /// 入住时间
+        /// </summary>
+        public string? CheckInDate { get; set; }
+
+        /// <summary>
+        /// 离店时间
+        /// </summary>
+        public string? CheckOutDate { get; set; }
+
+        /// <summary>
+        /// 支付币种
+        /// </summary>
+        public string? PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 单间价格
+        /// </summary>
+        public decimal SingleRoomPrice { get; set; }
+
+        /// <summary>
+        /// 单间数量
+        /// </summary>
+        public int SingleRoomCount { get; set; }
+
+        /// <summary>
+        /// 双间价格
+        /// </summary>
+        public decimal DoubleRoomPrice { get; set; }
+
+        /// <summary>
+        /// 双间数量
+        /// </summary>
+        public int DoubleRoomCount { get; set; }
+
+        /// <summary>
+        /// 套房价格
+        /// </summary>
+        public decimal SuiteRoomPrice { get; set; }
+
+        /// <summary>
+        /// 套房数量
+        /// </summary>
+        public int SuiteRoomCount { get; set; }
+
+        /// <summary>
+        /// 其他房型价格
+        /// </summary>
+        public decimal OtherRoomPrice { get; set; }
+
+        /// <summary>
+        /// 其他房型数量
+        /// </summary>
+        public int OtherRoomCount { get; set; }
+
+        /// <summary>
+        /// 早餐费用
+        /// </summary>
+        public decimal BreakfastPrice { get; set; }
+
+        /// <summary>
+        /// 早餐币种
+        /// </summary>
+        public string? BreakfastCurrency { get; set; }
+
+        /// <summary>
+        /// 由地接支付
+        /// 0 是 1否
+        /// </summary>
+        public int Isoppay { get; set; }
+
+        /// <summary>
+        /// 地税
+        /// </summary>
+        public decimal GovernmentRent { get; set; }
+
+        /// <summary>
+        /// 地税币种
+        /// </summary>
+        public string? GovernmentRentCurrency { get; set; }
+
+        /// <summary>
+        /// 地税价格
+        /// </summary>
+        public decimal CityTax { get; set; }
+
+        /// <summary>
+        /// 地税币种
+        /// </summary>
+        public string? CityTaxCurrency { get; set; }
+
+        /// <summary>
+        /// 信用卡金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; }
         
         
+        /// <summary>
+        /// 当天汇率
+        /// </summary>
+        public decimal DayRate { get; set; }
+
+        /// <summary>
+        /// 币种汇率
+        /// </summary>
+        public string? CurrencyRateStr { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? OpName { get; set; }
+    }
+
+    /// <summary>
+    /// 地接费用View
+    /// </summary>
+    public class GroupCTGGRFeeView
+    {
+        public int CTGGRDiId { get; set; }
+        public int CTGGRId { get; set; }
+
+        /// <summary>
+        /// 地区
+        /// </summary>
+        public string? Area { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 费用描述
+        /// </summary>
+        public string? PriceContent { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 此次付款百分比
+        /// </summary>
+        public decimal PayPercentage { get; set; }
+
+        /// <summary>
+        /// 已付款金额
+        /// </summary>
+        public decimal AmountPaid { get; set; }
+
+        /// <summary>
+        /// 尾款
+        /// </summary>
+        public decimal BalancePayment { get; set; }
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; }
+
+        /// <summary>
+        /// 付款人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? OpName { get; set; }
+    }
+
+    /// <summary>
+    /// 机票费用View
+    /// </summary>
+    public class GroupAirFeeView 
+    {
+        public int AirId { get; set; }
+        public int AirDiId { get; set; }
+
+        /// <summary>
+        /// 舱位类型
+        /// </summary>
+        public string? AirTypeName { get; set; }
+        /// <summary>
+        /// 航班号
+        /// </summary>
+        public string? FlightsCode { get; set; }
+
+        /// <summary>
+        /// 城市A-B
+        /// </summary>
+        public string? FlightsCity { get; set; }
+
+        /// <summary>
+        /// 航班日期
+        /// </summary>
+        public string? FlightsDate { get; set; }
+
+        /// <summary>
+        /// 航班时间
+        /// </summary>
+        public string? FlightsTime { get; set; }
+
+        /// <summary>
+        /// 客户姓名
+        /// </summary>
+        public string? ClientName { get; set; }
+
+        /// <summary>
+        /// 客户人数
+        /// </summary>
+        public int ClientNum { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// CNY 金额
+        /// </summary>
+        public decimal CNYPrice { get; set; }
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? OpName { get; set; }
+    }
+
+    /// <summary>
+    /// 签证费用View
+    /// </summary>
+    public class GroupVisaFeeView
+    {
+        public int VisaId { get; set; }
+
+        public int VisaDiId { get; set; }
+
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public string? VisaClient { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public string? CardType { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? OpName { get; set; }
+    }
+
+    /// <summary>
+    /// 签证费用View
+    /// </summary>
+    public class GroupInsuranceFeeView
+    {
+        public int InsuranceId { get; set; }
+
+        public int InsuranceDiId { get; set; }
+
+        /// <summary>
+        /// 客户名称
+        /// </summary>
+        public string? ClientName { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? OpName { get; set; }
     }
     }
 
 
+    /// <summary>
+    /// 增减款项View
+    /// </summary>
+    public class GroupDecreaseFeeView
+    {
+        public int DPId { get; set; }
+        public int DPDiId { get; set; }
+
+        /// <summary>
+        /// 费用名称
+        /// </summary>
+        public string? PriceName { get; set; }
+
+        /// <summary>
+        /// 付款金额
+        /// </summary>
+        public decimal PayMoney { get; set; }
+
+        /// <summary>
+        /// 付款币种
+        /// </summary>
+        public string? PayMoneyCurrency { get; set; }
+
+        /// <summary>
+        /// 当时汇率
+        /// </summary>
+        public decimal DayRate { get; set; }
+
+        /// <summary>
+        /// 人名币金额
+        /// </summary>
+        public decimal CNYPrice { get; set; }
+
+        /// <summary>
+        /// 付款时间
+        /// </summary>
+        public string? AuditGMDate { get; set; }
 
 
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        public string? Payee { get; set; }
+
+        /// <summary>
+        /// 费用标识
+        /// -1 未选择 0 公转 1 私转
+        /// </summary>
+        public int OrbitalPrivateTransfer { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        public string? PayWay { get; set; }
+
+        /// <summary>
+        /// 是否支付
+        /// -1 未选择 0 未付款 1 已付款 
+        /// </summary>
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 操作人
+        /// </summary>
+        public string? OpName { get; set; }
+
+    }
     #endregion
     #endregion
 
 
 }
 }

+ 42 - 28
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -908,6 +908,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
             int portType = _dto.PortType;
             int portType = _dto.PortType;
             if (portType == 1 || portType == 2 || portType == 3)
             if (portType == 1 || portType == 2 || portType == 3)
             {
             {
+
                 Grp_HotelReservations _HotelReservations = new Grp_HotelReservations();
                 Grp_HotelReservations _HotelReservations = new Grp_HotelReservations();
                 Grp_CreditCardPayment _CreditCardPayment = new Grp_CreditCardPayment();
                 Grp_CreditCardPayment _CreditCardPayment = new Grp_CreditCardPayment();
 
 
@@ -915,6 +916,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 _HotelReservations = _mapper.Map<Grp_HotelReservations>(_dto);
                 _HotelReservations = _mapper.Map<Grp_HotelReservations>(_dto);
                 _CreditCardPayment = _mapper.Map<Grp_CreditCardPayment>(_dto);
                 _CreditCardPayment = _mapper.Map<Grp_CreditCardPayment>(_dto);
 
 
+                
+
                 _HotelReservations.DiId = _dto.DiId;
                 _HotelReservations.DiId = _dto.DiId;
                 _HotelReservations.CardPriceCurrency = _dto.CTDId;
                 _HotelReservations.CardPriceCurrency = _dto.CTDId;
                 _HotelReservations.CreateUserId = _dto.UserId;
                 _HotelReservations.CreateUserId = _dto.UserId;
@@ -950,36 +953,48 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     }
                     }
                 }
                 }
 
 
-                List<TeamRateModelView> teamRateModelViews = new List<TeamRateModelView>();
-                teamRateModelViews = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
-                if (teamRateModelViews.Count < 0)
+                decimal currencyRate = 0.00M;
+                if (_CreditCardPayment.PayMoney != 0)
                 {
                 {
-                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
-                    return _result;
-                }
-                TeamRateModelView teamRateModels_hotel = new TeamRateModelView();
-                teamRateModels_hotel = teamRateModelViews.Where(it => it.CTableId == 76).FirstOrDefault();
-                if (teamRateModels_hotel == null)
-                {
-                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
-                    return _result;
-                }
+                    if(_CreditCardPayment.PaymentCurrency <= 0)
+                    {
+                        _result.Msg = "请选择付款币种!";
+                        return _result;
+                    }
 
 
-                List<TeamRateDescView> teamRateDescViews = new List<TeamRateDescView>();
-                teamRateDescViews = teamRateModels_hotel.TeamRates;
-                if (teamRateDescViews.Count < 0)
-                {
-                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
-                    return _result;
-                }
-                TeamRateDescView teamRateDescView = new TeamRateDescView();
-                teamRateDescView = teamRateDescViews.Where(it => it.CurrencyCode == paymentCurrencyCode).FirstOrDefault();
-                if (teamRateDescView == null)
-                {
-                    _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
-                    return _result;
+                    List<TeamRateModelView> teamRateModelViews = new List<TeamRateModelView>();
+                    teamRateModelViews = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
+                    if (teamRateModelViews.Count < 0)
+                    {
+                        _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                        return _result;
+                    }
+                    TeamRateModelView teamRateModels_hotel = new TeamRateModelView();
+                    teamRateModels_hotel = teamRateModelViews.Where(it => it.CTableId == 76).FirstOrDefault();
+                    if (teamRateModels_hotel == null)
+                    {
+                        _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                        return _result;
+                    }
+
+                    List<TeamRateDescView> teamRateDescViews = new List<TeamRateDescView>();
+                    teamRateDescViews = teamRateModels_hotel.TeamRates;
+                    if (teamRateDescViews.Count < 0)
+                    {
+                        _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                        return _result;
+                    }
+                    TeamRateDescView teamRateDescView = new TeamRateDescView();
+                    teamRateDescView = teamRateDescViews.Where(it => it.CurrencyCode == paymentCurrencyCode).FirstOrDefault();
+                    if (teamRateDescView == null)
+                    {
+                        _result.Msg = "该团未设置酒店预订模块相关币种汇率!";
+                        return _result;
+                    }
+                    currencyRate = teamRateDescView.Rate;
                 }
                 }
-                _CreditCardPayment.DayRate = teamRateDescView.Rate;
+                
+                _CreditCardPayment.DayRate = currencyRate;
                 _CreditCardPayment.RMBPrice = (_CreditCardPayment.DayRate * _CreditCardPayment.PayMoney).DecimalsKeepTwo();
                 _CreditCardPayment.RMBPrice = (_CreditCardPayment.DayRate * _CreditCardPayment.PayMoney).DecimalsKeepTwo();
 
 
                 //if (_CreditCardPayment.PayDId == 72) //刷卡
                 //if (_CreditCardPayment.PayDId == 72) //刷卡
@@ -988,7 +1003,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 //    _CreditCardPayment.CardholderName = "Zhang Hailin";
                 //    _CreditCardPayment.CardholderName = "Zhang Hailin";
                 //}
                 //}
 
 
-
                 _CreditCardPayment.Remark = _dto.CcpRemark;
                 _CreditCardPayment.Remark = _dto.CcpRemark;
                 #endregion
                 #endregion
 
 

+ 2 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/TourClientListRepository.cs

@@ -447,7 +447,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 return _result;
                 return _result;
             }
             }
             List<TourClientListInfo> _TourClientListInfos = dto.TourClientListInfos;
             List<TourClientListInfo> _TourClientListInfos = dto.TourClientListInfos;
-            if (_TourClientListInfos != null || _TourClientListInfos.Count < 0)
+            if (_TourClientListInfos == null || _TourClientListInfos.Count < 0)
             {
             {
                 _result.Msg = string.Format(@"接团客户名单信息集合为空,不执行批量添加!");
                 _result.Msg = string.Format(@"接团客户名单信息集合为空,不执行批量添加!");
                 return _result;
                 return _result;
@@ -624,7 +624,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         public async Task<Result> _Del(int id, int userId)
         public async Task<Result> _Del(int id, int userId)
         {
         {
 
 
-            if (id < 0) // 1 web 2 Android 3 ios
+            if (id > 0) 
             {
             {
 
 
                 Grp_TourClientList _TourClientList = new Grp_TourClientList()
                 Grp_TourClientList _TourClientList = new Grp_TourClientList()