Quellcode durchsuchen

酒店预订相关流程代码更改
酒店预订-->费用审核-->付款申请-->团组报表

leiy vor 9 Monaten
Ursprung
Commit
eb411f724c
21 geänderte Dateien mit 1551 neuen und 1882 gelöschten Zeilen
  1. 2 1
      OASystem/EntitySync/Program.cs
  2. 10 0
      OASystem/OASystem.Api/Controllers/BusinessController.cs
  3. 236 133
      OASystem/OASystem.Api/Controllers/FinancialController.cs
  4. 263 830
      OASystem/OASystem.Api/Controllers/GroupsController.cs
  5. 248 13
      OASystem/OASystem.Api/Controllers/StatisticsController.cs
  6. 0 1
      OASystem/OASystem.Api/Controllers/SystemController.cs
  7. 0 1
      OASystem/OASystem.Api/Program.cs
  8. 1 0
      OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs
  9. 12 0
      OASystem/OASystem.Domain/Dtos/Financial/PostPayRequestByDateRangeDto.cs
  10. 6 101
      OASystem/OASystem.Domain/Dtos/Groups/HotelReservationsDto.cs
  11. 94 0
      OASystem/OASystem.Domain/Dtos/Statistics/MarketingSalesDto.cs
  12. 2 1
      OASystem/OASystem.Domain/Entities/Financial/Fin_ForeignReceivables.cs
  13. 2 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservations.cs
  14. 144 0
      OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservationsContent.cs
  15. 11 0
      OASystem/OASystem.Domain/Result.cs
  16. 5 0
      OASystem/OASystem.Domain/ViewModels/Financial/Fin_DailyFeePaymentView.cs
  17. 146 53
      OASystem/OASystem.Domain/ViewModels/Groups/HotelReservationsByDiIdView.cs
  18. 62 30
      OASystem/OASystem.Domain/ViewModels/Statistics/GroupStatementView.cs
  19. 22 0
      OASystem/OASystem.Domain/ViewModels/Statistics/MonthlyTimeSegment.cs
  20. 201 717
      OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs
  21. 84 1
      OASystem/OASystem.Infrastructure/Repositories/Groups/TeamRateRepository.cs

+ 2 - 1
OASystem/EntitySync/Program.cs

@@ -131,7 +131,8 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Grp_InvertedList), //倒推表 
     //typeof(Grp_InvertedListVisaCountry), //倒推表签证国家 
     //typeof(Grp_VisaFeeInfo),  //签证费用info 
-    typeof(Grp_HotelInquiry),  //酒店询价 
+    //typeof(Grp_HotelInquiry),  //酒店询价 
+    typeof(Grp_HotelReservationsContent),  //酒店费用子表
 
 
 });

+ 10 - 0
OASystem/OASystem.Api/Controllers/BusinessController.cs

@@ -566,6 +566,7 @@ Where c.ConfListId = {0}", ConfId);
         #endregion
 
 
+
         #region 文件删除
         /// <summary>
         ///  文件操作 
@@ -714,5 +715,14 @@ Where c.ConfListId = {0}", ConfId);
 
             return Ok(jw);
         }
+
+
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public IActionResult CodeTest()
+        { 
+            
+            return Ok(JsonView(true, "测试成功!"));
+        }
     }
 }

+ 236 - 133
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -43,6 +43,7 @@ using NPOI.HPSF;
 using System.Data.OleDb;
 using Org.BouncyCastle.Crypto;
 using OfficeOpenXml;
+using Org.BouncyCastle.Asn1.Crmf;
 
 namespace OASystem.API.Controllers
 {
@@ -2127,6 +2128,7 @@ namespace OASystem.API.Controllers
             var countryFeeDatas = _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(it => it.IsDel == 0).ToList();
 
             var hotelDatas = _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DiId)).ToList();
+            var hotelContentDatas = _sqlSugar.Queryable<Grp_HotelReservationsContent>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DiId)).ToList();
             var opDatas = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DiId)).ToList();
             var visaDatas = _sqlSugar.Queryable<Grp_VisaInfo>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DIId)).ToList();
             var ioaDatas = _sqlSugar.Queryable<Grp_InvitationOfficialActivities>().Where(it => it.IsDel == 0 && groupIds.Contains(it.DiId)).ToList();
@@ -2246,46 +2248,101 @@ namespace OASystem.API.Controllers
                             break;
                     }
 
-                    //
+
                     bool status1 = false;
                     if (_groupIds != null)
                     {
                         status1 = _groupIds.Contains(payInfo.Id);
                     }
 
-                    string payeeStr = string.Format(@" {0},开户行:{1},银行卡号:{2} ", string.IsNullOrEmpty(payInfo.Payee) ? "-" : payInfo.Payee,
-                        string.IsNullOrEmpty(payInfo.OtherBankName) ? "-" : payInfo.OtherBankName,
-                        string.IsNullOrEmpty(payInfo.OtherSideNo) ? "-" : payInfo.OtherSideNo);
+                    if (payInfo.CTable == 76) //酒店单独处理
+                    {
+                        var hotelContents = hotelContentDatas.Where(it => it.HrId == payInfo.CId);
+                        List<Group_DailyFeePaymentContentInfolView> childInfos = new List<Group_DailyFeePaymentContentInfolView>();
+                        foreach (var hotelContent in hotelContents)
+                        {
+                            string subPriceName = "";
+                            if (hotelContent.PriceType == 1) subPriceName = "房费";
+                            else if (hotelContent.PriceType == 2) subPriceName = "早餐";
+                            else if (hotelContent.PriceType == 3) subPriceName = "地税";
+                            else if (hotelContent.PriceType == 4) subPriceName = "城市税";
 
+                            if (string.IsNullOrEmpty(subPriceName)) subPriceName = priName;
+                            else subPriceName = $"{priName.Replace("]","")}-{subPriceName}]";
 
-                    decimal _PaymentAmount = (payInfo.PayMoney / 100) * payInfo.PayPercentage;//此次付款金额
-                    decimal _CNYSubTotalAmount = _PaymentAmount * payInfo.DayRate;//此次付款金额
-                    _CNYSubTotalAmount = Convert.ToDecimal(_CNYSubTotalAmount.ToString("#0.00"));
-                    var childInfo = new Group_DailyFeePaymentContentInfolView()
-                    {
-                        IsChecked = status1,
-                        Id = payInfo.Id,
-                        Payee = payeeStr,
-                        RowNumber = rouNumber,
-                        Applicant = userDatas.Find(it => it.Id == payInfo.CreateUserId)?.CnName ?? "",
-                        ApplicantDt = payInfo.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
-                        PayType = setDatas.Find(it => it.Id == payInfo.PayDId)?.Name ?? "",
-                        TransferMark = orbitalPrivateTransfer,
-                        PriceName = priName,
-                        ModuleName = setDatas.Find(it => it.Id == payInfo.CTable)?.Name ?? "",
-                        PayCurrCode = setDatas.Find(it => it.Id == payInfo.PaymentCurrency)?.Name ?? "",
-                        PaymentAmount = _PaymentAmount,
-                        PayRate = payInfo.DayRate,
-                        CNYSubTotalAmount = _CNYSubTotalAmount
-                    };
+                            string payeeStr1 = string.Format(@" {0},开户行:{1},银行卡号:{2} ",
+                            string.IsNullOrEmpty(hotelContent.Payee) ? "-" : hotelContent.Payee,
+                            string.IsNullOrEmpty(hotelContent.OtherBankName) ? "-" : hotelContent.OtherBankName,
+                            string.IsNullOrEmpty(hotelContent.OtherSideNo) ? "-" : hotelContent.OtherSideNo);
+
+                            decimal _PaymentAmount1 = hotelContent.Price;//此次付款金额
+                            decimal _CNYSubTotalAmount1 = _PaymentAmount1 * hotelContent.Rate;//此次付款金额
+                            _CNYSubTotalAmount1 = Convert.ToDecimal(_CNYSubTotalAmount1.ToString("#0.00"));
 
-                    //string remaksDescription = $"【{childInfo.PayType}】【{childInfo.ModuleName}】{rouNumber}、[申请人:{childInfo.Applicant}][收款方:{childInfo.Payee}]{priName},{payInfo.OtherBankName},{payInfo.OtherSideNo}[{payInfo.ConsumptionPatterns}] {childInfo.PayCurrCode} {payInfo.PayMoney.ToString("#0.00")}、CNY:{childInfo.CNYSubTotalAmount.ToString("#0.00")}(团组:{groupInfo.TeamName})";
+                            var childInfo1 = new Group_DailyFeePaymentContentInfolView()
+                            {
+                                IsChecked = status1,
+                                Id = payInfo.Id,
+                                HotelSubId = hotelContent.Id,
+                                Payee = payeeStr1,
+                                RowNumber = rouNumber,
+                                Applicant = userDatas.Find(it => it.Id == payInfo.CreateUserId)?.CnName ?? "",
+                                ApplicantDt = payInfo.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                                PayType = setDatas.Find(it => it.Id == payInfo.PayDId)?.Name ?? "",
+                                TransferMark = orbitalPrivateTransfer,
+                                PriceName = subPriceName,
+                                ModuleName = setDatas.Find(it => it.Id == payInfo.CTable)?.Name ?? "",
+                                PayCurrCode = setDatas.Find(it => it.Id == hotelContent.Currency)?.Name ?? "",
+                                PaymentAmount = _PaymentAmount1,
+                                PayRate = hotelContent.Rate,
+                                CNYSubTotalAmount = _CNYSubTotalAmount1
+                            };
+                            string remaksDescription1 = $"【{childInfo1.PayType}】【{childInfo1.ModuleName}】{rouNumber}、[申请人:{childInfo1.Applicant}]{subPriceName}[收款方:{childInfo1.Payee}] {childInfo1.PayCurrCode} {_PaymentAmount1.ToString("#0.00")}、CNY:{childInfo1.CNYSubTotalAmount.ToString("#0.00")}(团组:{groupInfo.TeamName})";
+
+                            childInfo1.RemaksDescription = remaksDescription1;
+                            childInfos.Add(childInfo1);
+                            rouNumber++;
+                        }
 
-                    string remaksDescription = $"【{childInfo.PayType}】【{childInfo.ModuleName}】{rouNumber}、[申请人:{childInfo.Applicant}]{priName}[收款方:{childInfo.Payee}] {childInfo.PayCurrCode} {_PaymentAmount.ToString("#0.00")}、CNY:{childInfo.CNYSubTotalAmount.ToString("#0.00")}(团组:{groupInfo.TeamName})";
+                        childList.AddRange(childInfos);
 
-                    childInfo.RemaksDescription = remaksDescription;
-                    childList.Add(childInfo);
-                    rouNumber++;
+                    }
+                    else
+                    {
+                        string payeeStr = string.Format(@" {0},开户行:{1},银行卡号:{2} ",
+                            string.IsNullOrEmpty(payInfo.Payee) ? "-" : payInfo.Payee,
+                            string.IsNullOrEmpty(payInfo.OtherBankName) ? "-" : payInfo.OtherBankName,
+                            string.IsNullOrEmpty(payInfo.OtherSideNo) ? "-" : payInfo.OtherSideNo);
+
+
+                        decimal _PaymentAmount = (payInfo.PayMoney / 100) * payInfo.PayPercentage;//此次付款金额
+                        decimal _CNYSubTotalAmount = _PaymentAmount * payInfo.DayRate;//此次付款金额
+                        _CNYSubTotalAmount = Convert.ToDecimal(_CNYSubTotalAmount.ToString("#0.00"));
+                        var childInfo = new Group_DailyFeePaymentContentInfolView()
+                        {
+                            IsChecked = status1,
+                            Id = payInfo.Id,
+                            Payee = payeeStr,
+                            RowNumber = rouNumber,
+                            Applicant = userDatas.Find(it => it.Id == payInfo.CreateUserId)?.CnName ?? "",
+                            ApplicantDt = payInfo.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                            PayType = setDatas.Find(it => it.Id == payInfo.PayDId)?.Name ?? "",
+                            TransferMark = orbitalPrivateTransfer,
+                            PriceName = priName,
+                            ModuleName = setDatas.Find(it => it.Id == payInfo.CTable)?.Name ?? "",
+                            PayCurrCode = setDatas.Find(it => it.Id == payInfo.PaymentCurrency)?.Name ?? "",
+                            PaymentAmount = _PaymentAmount,
+                            PayRate = payInfo.DayRate,
+                            CNYSubTotalAmount = _CNYSubTotalAmount
+                        };
+
+                        string remaksDescription = $"【{childInfo.PayType}】【{childInfo.ModuleName}】{rouNumber}、[申请人:{childInfo.Applicant}]{priName}[收款方:{childInfo.Payee}] {childInfo.PayCurrCode} {_PaymentAmount.ToString("#0.00")}、CNY:{childInfo.CNYSubTotalAmount.ToString("#0.00")}(团组:{groupInfo.TeamName})";
+
+                        childInfo.RemaksDescription = remaksDescription;
+                        childList.Add(childInfo);
+                        rouNumber++;
+                    }
+                    
                 }
 
                 CompanyInfo companyInfo = new CompanyInfo();
@@ -2432,64 +2489,57 @@ namespace OASystem.API.Controllers
 
             #endregion
 
-            try
-            {
-                PaymentRequestCheckedView requestCheckedView = new PaymentRequestCheckedView();
-                List<int> groupIds = new List<int>();
-                List<int> dailyPaymentIds = new List<int>();
+            PaymentRequestCheckedView requestCheckedView = new PaymentRequestCheckedView();
+            List<int> groupIds = new List<int>();
+            List<int> dailyPaymentIds = new List<int>();
 
-                #region 参数处理
-                if (!string.IsNullOrEmpty(dto.GroupIds))
+            #region 参数处理
+            if (!string.IsNullOrEmpty(dto.GroupIds))
+            {
+                if (dto.GroupIds.Contains(","))
                 {
-                    if (dto.GroupIds.Contains(","))
-                    {
-                        groupIds = dto.GroupIds.Split(',').Select(int.Parse).ToList();
-                    }
-                    else
-                    {
-                        groupIds.Add(int.Parse(dto.GroupIds));
-                    }
+                    groupIds = dto.GroupIds.Split(',').Select(int.Parse).ToList();
+                }
+                else
+                {
+                    groupIds.Add(int.Parse(dto.GroupIds));
                 }
+            }
 
-                if (!string.IsNullOrEmpty(dto.DailyPaymentIds))
+            if (!string.IsNullOrEmpty(dto.DailyPaymentIds))
+            {
+                if (dto.DailyPaymentIds.Contains(","))
                 {
-                    if (dto.DailyPaymentIds.Contains(","))
-                    {
-                        dailyPaymentIds = dto.DailyPaymentIds.Split(',').Select(int.Parse).ToList();
-                    }
-                    else
-                    {
-                        dailyPaymentIds.Add(int.Parse(dto.DailyPaymentIds));
-                    }
+                    dailyPaymentIds = dto.DailyPaymentIds.Split(',').Select(int.Parse).ToList();
                 }
-                #endregion
-                requestCheckedView.GroupIds = groupIds;
-                requestCheckedView.DailyPaymentIds = dailyPaymentIds;
-                if (dto.Type == 1)
+                else
                 {
-                    TimeSpan ts = DateTime.Now.AddDays(180) - DateTime.Now; //设置redis 过期时间 半年(180)
-                    var status = await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("paymentRequestCheckedData", JsonConvert.SerializeObject(requestCheckedView), ts);
-                    if (status)
-                    {
-                        return Ok(JsonView(true, "操作成功!"));
-                    }
+                    dailyPaymentIds.Add(int.Parse(dto.DailyPaymentIds));
                 }
-                else if (dto.Type == 2)
+            }
+            #endregion
+            requestCheckedView.GroupIds = groupIds;
+            requestCheckedView.DailyPaymentIds = dailyPaymentIds;
+            if (dto.Type == 1)
+            {
+                TimeSpan ts = DateTime.Now.AddDays(180) - DateTime.Now; //设置redis 过期时间 半年(180)
+                var status = await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("paymentRequestCheckedData", JsonConvert.SerializeObject(requestCheckedView), ts);
+                if (status)
                 {
-                    var status = await RedisRepository.RedisFactory.CreateRedisRepository().KeyDeleteAsync("paymentRequestCheckedData");
-                    if (status)
-                    {
-                        return Ok(JsonView(true, "操作成功!"));
-                    }
+                    return Ok(JsonView(true, "操作成功!"));
                 }
-                return Ok(JsonView(false, "操作失败!"));
             }
-            catch (Exception ex)
+            else if (dto.Type == 2)
             {
-                return Ok(JsonView(false, ex.Message));
+                var status = await RedisRepository.RedisFactory.CreateRedisRepository().KeyDeleteAsync("paymentRequestCheckedData");
+                if (status)
+                {
+                    return Ok(JsonView(true, "操作成功!"));
+                }
             }
-        }
+            return Ok(JsonView(false, "操作失败!"));
 
+        }
 
         /// <summary>
         /// 付款申请 (PageId=51)
@@ -2513,51 +2563,83 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, "结束日期格式不正确!正确格式:yyyy-MM-dd"));
             }
 
-            if (dto.UserId < 1)
-            {
-                return Ok(JsonView(false, "请传入有效的UserId参数!"));
-            }
+            if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!"));
+            if (dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数!"));
+            if (dto.Rate <= 0) return Ok(JsonView(false, "请传入有效的Rate参数!"));
+            #endregion
 
-            if (dto.Id < 1)
-            {
-                return Ok(JsonView(false, "请传入有效的Id参数!"));
-            }
+            int hotelSubStatus = 0,status = 0;
+            int diid = 0, cTable = 0, currId = 0;
 
-            if (dto.Rate <= 0)
+            if (dto.HotelSubId > 0)
             {
-                return Ok(JsonView(false, "请传入有效的Rate参数!"));
+                //更改酒店子表汇率
+                hotelSubStatus = _sqlSugar.Updateable<Grp_HotelReservationsContent>()
+                                     .SetColumns(it => it.Rate == dto.Rate)
+                                     .Where(it => it.Id == dto.HotelSubId)
+                                     .ExecuteCommand();
+
+                if (hotelSubStatus > 0)
+                {
+                    var hotelSubInfo = _sqlSugar.Queryable<Grp_HotelReservationsContent>().Where(it => it.Id == dto.HotelSubId).First();
+                    if (hotelSubInfo != null)
+                    {
+                        diid = hotelSubInfo.DiId;
+                        currId = hotelSubInfo.Currency;
+                    }
+
+                    //付款申请汇率更改成功;更改团组汇率对应币种
+                    string currCode = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.Id == currId).First()?.Name ?? "";
+                    await _teamRateRep.UpdateGroupRateByDiIdAndCTableId(diid, 76, currCode, dto.Rate);
+                }
             }
-            #endregion
-            try
+
+            if (dto.Id > 0)
             {
-                var status = _sqlSugar.Updateable<Grp_CreditCardPayment>()
-                                      .SetColumns(it => it.DayRate == dto.Rate)
-                                      .Where(it => it.Id == dto.Id)
-                                      .ExecuteCommand();
+                var ccpInfo = _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(it => it.Id == dto.Id).First();
+                decimal cnyMoney = 0.00M;
+                if (ccpInfo != null) {
+                    cnyMoney = ccpInfo.PayMoney * dto.Rate;
+                    diid = ccpInfo.DIId;
+                    cTable = ccpInfo.CTable; 
+                    currId = ccpInfo.PaymentCurrency;
+                }
+
+                status = _sqlSugar.Updateable<Grp_CreditCardPayment>()
+                                  .SetColumns(it => it.DayRate == dto.Rate)
+                                  .SetColumns(it => it.RMBPrice == cnyMoney)
+                                  .Where(it => it.Id == dto.Id)
+                                  .ExecuteCommand();
                 if (status > 0)
                 {
-                    PaymentRequestCheckedView checkedView = new PaymentRequestCheckedView();
-                    var checkedStr = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("paymentRequestCheckedData");
-                    if (checkedStr != null)
+                    //付款申请汇率更改成功;更改团组汇率对应币种
+                    if (cTable != 76)
                     {
-                        checkedView = JsonConvert.DeserializeObject<PaymentRequestCheckedView>(checkedStr.ToString());
+                        string currCode = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.Id == currId).First()?.Name ?? "";
+                        await _teamRateRep.UpdateGroupRateByDiIdAndCTableId(diid, cTable, currCode, dto.Rate);
                     }
+                }
+            }
 
-                    tree_Fin_DailyFeePaymentResult dailyResult = PayRequest_DailyByDateRange(1, checkedView.DailyPaymentIds, dto.beginDt, dto.endDt);
-                    tree_Group_DailyFeePaymentResult groupResult = PayRequest_GroupPaymentByDateRange(1, checkedView.GroupIds, dto.beginDt, dto.endDt);
+            if (hotelSubStatus > 0 || status > 0)
+            {
+                PaymentRequestCheckedView checkedView = new PaymentRequestCheckedView();
+                var checkedStr = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("paymentRequestCheckedData");
+                if (checkedStr != null)
+                {
+                    checkedView = JsonConvert.DeserializeObject<PaymentRequestCheckedView>(checkedStr.ToString());
+                }
 
-                    decimal _gz = dailyResult.gz + groupResult.gz;
-                    decimal _sz = dailyResult.sz + groupResult.sz;
+                tree_Fin_DailyFeePaymentResult dailyResult = PayRequest_DailyByDateRange(1, checkedView.DailyPaymentIds, dto.beginDt, dto.endDt);
+                tree_Group_DailyFeePaymentResult groupResult = PayRequest_GroupPaymentByDateRange(1, checkedView.GroupIds, dto.beginDt, dto.endDt);
 
-                    return Ok(JsonView(true, "操作成功!", new { gz = dailyResult, sz = groupResult }));
-                }
+                decimal _gz = dailyResult.gz + groupResult.gz;
+                decimal _sz = dailyResult.sz + groupResult.sz;
 
-                return Ok(JsonView(false, "该项汇率修改失败!"));
-            }
-            catch (Exception ex)
-            {
-                return Ok(JsonView(false, ex.Message));
+                return Ok(JsonView(true, "操作成功!", new { gz = dailyResult, sz = groupResult }));
             }
+
+            return Ok(JsonView(false, "该项汇率修改失败!"));
         }
 
         /// <summary>
@@ -2570,10 +2652,7 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> PostPayRequestPayChange(PayRequestPayChangeDto dto)
         {
-            if (dto.UserId < 1)
-            {
-                return Ok(JsonView(false, "请传入有效的UserId参数!"));
-            }
+            if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!"));
 
             //if (string.IsNullOrEmpty(dto.GroupIds))
             //{
@@ -2585,34 +2664,37 @@ namespace OASystem.API.Controllers
             //    return Ok(JsonView(false, "请传入有效的DailyPaymentIds参数!"));
             //}
 
-            try
-            {
+           
                 List<int> groupIds = new List<int>();
                 List<int> dailyPaymentIds = new List<int>();
 
                 #region 参数处理
                 if (!string.IsNullOrEmpty(dto.GroupIds))
                 {
-                    if (dto.GroupIds.Contains(","))
-                    {
-                        groupIds = dto.GroupIds.Split(',').Select(int.Parse).ToList();
-                    }
-                    else
-                    {
-                        groupIds.Add(int.Parse(dto.GroupIds));
-                    }
+                    if (dto.GroupIds.Contains(",")) groupIds = dto.GroupIds.Split(',').Select(int.Parse).ToList();
+                    else groupIds.Add(int.Parse(dto.GroupIds));
                 }
 
+                //if (!string.IsNullOrEmpty(dto.HotelSubIds))
+                //{
+                //    if (dto.HotelSubIds.Contains(",")) hotelSubIds = dto.HotelSubIds.Split(',').Select(int.Parse).ToList();
+                //    else hotelSubIds.Add(int.Parse(dto.HotelSubIds));
+                //    if (hotelSubIds.Count > 0)
+                //    {
+                //        foreach (var item in hotelSubIds)
+                //        {
+                //            if (item < 1)
+                //            {
+                //                hotelSubIds.Remove(item);
+                //            }
+                //        }
+                //    }
+                //}
+
                 if (!string.IsNullOrEmpty(dto.DailyPaymentIds))
                 {
-                    if (dto.DailyPaymentIds.Contains(","))
-                    {
-                        dailyPaymentIds = dto.DailyPaymentIds.Split(',').Select(int.Parse).ToList();
-                    }
-                    else
-                    {
-                        dailyPaymentIds.Add(int.Parse(dto.DailyPaymentIds));
-                    }
+                    if (dto.DailyPaymentIds.Contains(",")) dailyPaymentIds = dto.DailyPaymentIds.Split(',').Select(int.Parse).ToList();
+                    else dailyPaymentIds.Add(int.Parse(dto.DailyPaymentIds));
                 }
                 #endregion
 
@@ -2628,9 +2710,36 @@ namespace OASystem.API.Controllers
                     if (groupStatus > 0)
                     {
                         changeStatus = true;
+
+
+                        //更改酒店子表支付状态
+                        var ccps = _sqlSugar.Queryable<Grp_CreditCardPayment>()
+                                               .Where(it => groupIds.Contains(it.Id) && it.CTable == 76)
+                                               .ToList();
+                        List<int> hrIds = ccps.Select(it => it.CId).ToList();
+                        if (hrIds.Count > 0)
+                        {
+                            var hrIspayStatus = _sqlSugar.Updateable<Grp_HotelReservationsContent>()
+                                                       .SetColumns(it => it.IsPay == 1)
+                                                       .Where(it => hrIds.Contains(it.Id))
+                                                       .ExecuteCommand();
+
+                        }
                     }
                 }
 
+                //if (hotelSubIds.Count > 0)
+                //{
+                //    var groupStatus = _sqlSugar.Updateable<Grp_HotelReservationsContent>()
+                //                               .SetColumns(it => it.IsPay == 1)
+                //                               .Where(it => hotelSubIds.Contains(it.Id))
+                //                               .ExecuteCommand();
+                //    if (groupStatus > 0)
+                //    {
+                //        changeStatus = true;
+                //    }
+                //}
+
                 if (dailyPaymentIds.Count > 0)
                 {
                     var dailyPaymentStatus = _sqlSugar.Updateable<Fin_DailyFeePayment>()
@@ -2671,12 +2780,7 @@ namespace OASystem.API.Controllers
                 }
                 _sqlSugar.RollbackTran();
                 return Ok(JsonView(false, "付款状态修改失败!"));
-            }
-            catch (Exception ex)
-            {
-                _sqlSugar.RollbackTran();
-                return Ok(JsonView(false, ex.Message));
-            }
+            
         }
 
         /// <summary>
@@ -3013,7 +3117,6 @@ namespace OASystem.API.Controllers
                         {
                             return new Result() { Code = -1, Msg = "暂无团组汇率,请前往设置!", Data = CurrencyRate };
                         }
-
                     }
                     else
                     {

Datei-Diff unterdrückt, da er zu groß ist
+ 263 - 830
OASystem/OASystem.Api/Controllers/GroupsController.cs


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

@@ -217,8 +217,8 @@ namespace OASystem.API.Controllers
                  * 超支费用 
                  */
                 decimal exTotalAmount = 0.00M;
-                string _ecSql = string.Format(@"Select gec.Id As GECId,gec.DiId As GECDiId,gec.PriceName,ccp.PayMoney,sd1.Name As PaymentCurrency,
-													   ccp.RMBPrice As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
+                string _ecSql = string.Format(@"Select gec.Id As GECId,gec.DiId As GECDiId,gec.PriceName,(gec.PriceSum * gec.Coefficient) As PayMoney,sd1.Name As PaymentCurrency,
+													   (gec.PriceSum * gec.Coefficient * ccp.DayRate) As CNYPrice,ccp.DayRate,ccp.Payee,ccp.OrbitalPrivateTransfer,sd2.Name As PayWay,
 													   sd3.Name As CardType,ccp.IsPay,u.CnName As Applicant,gec.CreateTime
 												From OA2023DB.dbo.Fin_GroupExtraCost gec
 												Left Join Grp_CreditCardPayment ccp On gec.Id = ccp.CId
@@ -419,26 +419,65 @@ namespace OASystem.API.Controllers
 
                 groupHotelFeeViews = await _sqlSugar.SqlQueryable<GroupHotelFeeView>(hotelFeeSql).ToListAsync();
 
+                List<int> hotelSubIds = groupHotelFeeViews.Select(it => it.HrId).ToList();
+                List<Grp_HotelReservationsContent> groupHotelContentFeeViews = new List<Grp_HotelReservationsContent>();
+                groupHotelContentFeeViews = await _sqlSugar.Queryable<Grp_HotelReservationsContent>().Where(it => hotelSubIds.Contains(it.HrId)).ToListAsync();
+
                 decimal HotelCNYTotalPrice = 0.00M;
 
                 var teamRateData = await _teamRateRep.PostGroupRateInfoByDiId(_dto.DiId);
                 foreach (var item in groupHotelFeeViews)
                 {
-                    HotelCNYTotalPrice += item.CNYPrice;
+                    var roomData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 1); //房费 
+                    item.RoomPrice = roomData?.Price ?? 0.00M;
+                    item.RoomPriceCurrency = _setDatas.Find(it => it.Id == roomData?.Currency)?.Name;
+                    string feeMark1 = roomData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
+                    item.RoomInfoTips = @$"当时汇率:{roomData?.Rate.ToString("#0.0000")} <br/>
+                                           收款方:{roomData?.Payee}<br/>
+                                           费用标识:{feeMark1} <br/>
+                                           支付方式:{_setDatas.Find(it => it.Id == roomData?.PayDId)?.Name} <br/>
+                                           卡类型:{_setDatas.Find(it => it.Id == roomData?.CTDId)?.Name}";
+                   
+                    var breakfastData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 2); //早餐 
+                    item.BreakfastPrice = breakfastData?.Price ?? 0.00M;
+                    item.BreakfastCurrency = _setDatas.Find(it => it.Id == breakfastData?.Currency)?.Name;
+                    string feeMark2 = breakfastData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
+                    string isFeeMark2 = breakfastData?.IsOppay == 1 ? "是" : "否";
+                    item.BreakfastInfoTips = @$"当时汇率:{breakfastData?.Rate.ToString("#0.0000")} <br/>
+                                                收款方:{breakfastData?.Payee}<br/>
+                                                费用标识:{feeMark2} <br/>
+                                                支付方式:{_setDatas.Find(it => it.Id == roomData?.PayDId)?.Name} <br/>
+                                                卡类型:{_setDatas.Find(it => it.Id == roomData?.CTDId)?.Name} <br/>
+                                                是否由地接支付:{isFeeMark2} <br/>";
+
+                    var landTaxData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 3); //地税 
+                    item.GovernmentRent = landTaxData?.Price ?? 0.00M;
+                    item.GovernmentRentCurrency = _setDatas.Find(it => it.Id == landTaxData?.Currency)?.Name;
+                    string feeMark3 = landTaxData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
+                    string isFeeMark3 = landTaxData?.IsOppay == 1 ? "是" : "否";
+                    item.GovernmentRentTips = @$"当时汇率:{landTaxData?.Rate.ToString("#0.0000")} <br/>
+                                                 收款方:{landTaxData?.Payee}<br/>
+                                                 费用标识:{feeMark3} <br/>
+                                                 支付方式:{_setDatas.Find(it => it.Id == landTaxData?.PayDId)?.Name} <br/>
+                                                 卡类型:{_setDatas.Find(it => it.Id == landTaxData?.CTDId)?.Name} <br/>
+                                                 是否由地接支付:{isFeeMark3} <br/>";
+
+                    var cityTaxData = groupHotelContentFeeViews.Find(it => it.HrId == item.HrId && it.PriceType == 4); //城市税 
+                    item.CityTax = cityTaxData?.Price ?? 0.00M;
+                    item.CityTaxCurrency = _setDatas.Find(it => it.Id == cityTaxData?.Currency)?.Name;
+                    string feeMark4 = cityTaxData?.OrbitalPrivateTransfer == 0 ? "公转" : "私转";
+                    string isFeeMark4 = landTaxData?.IsOppay == 1 ? "是" : "否";
+                    item.CityTaxTips = @$"当时汇率:{cityTaxData?.Rate.ToString("#0.0000")} <br/>
+                                          收款方:{cityTaxData?.Payee}<br/>
+                                          费用标识:{feeMark4} <br/>
+                                          支付方式:{_setDatas.Find(it => it.Id == cityTaxData?.PayDId)?.Name} <br/>
+                                          卡类型:{_setDatas.Find(it => it.Id == cityTaxData?.CTDId)?.Name} <br/>
+                                          是否由地接支付:{isFeeMark4} <br/>";
 
+                    HotelCNYTotalPrice += item.CNYPrice;
                     item.PayMoney = item.PayMoney.ConvertToDecimal1();
                     item.CNYPrice = item.CNYPrice.ConvertToDecimal1();
 
-                    string currencyRateStr = "";
-                    List<string> currencys = new List<string>();
-                    if (!string.IsNullOrEmpty(item.BreakfastCurrency)) currencys.Add(item.BreakfastCurrency);
-                    if (!string.IsNullOrEmpty(item.GovernmentRentCurrency)) currencys.Add(item.GovernmentRentCurrency);
-                    if (!string.IsNullOrEmpty(item.CityTaxCurrency)) currencys.Add(item.CityTaxCurrency);
-                    if (!string.IsNullOrEmpty(item.PaymentCurrency)) currencys.Add(item.PaymentCurrency);
-
-                    currencyRateStr = await GeneralMethod.PostGroupRateByCTableAndCurrency(teamRateData, 76, currencys);
-
-                    item.CurrencyRateStr = currencyRateStr;
                 }
 
                 _geView.GroupHotelFeeViews = groupHotelFeeViews;
@@ -1991,5 +2030,201 @@ namespace OASystem.API.Controllers
 
         #endregion
 
+
+        #region 市场部销售额
+
+        /// <summary>
+        ///  市场部销售额
+        /// Init 基础数据(公司/人员/年份/季度/月份)
+        /// </summary>
+        /// <param name="_dto">市场部销售额请求dto</param>
+        /// <returns></returns>
+        [HttpPost("PostMarketingSalesInitData")]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostMarketingSalesInitData(MarketingSalesInitDataDto _dto)
+        {
+            #region  参数验证
+            MarketingSalesInitDataDtoFoalidator validationRules = new MarketingSalesInitDataDtoFoalidator();
+            var validResult = await validationRules.ValidateAsync(_dto);
+            if (!validResult.IsValid)
+            {
+                var errors = new StringBuilder();
+                foreach (var error in validResult.Errors) errors.AppendLine(error.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
+            }
+
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
+            #endregion
+
+
+            var companyData = _sqlSugar.Queryable<Sys_Company>().Where(it => it.IsDel == 0)
+                                       .Select(it => new { id = it.Id, name = it.CompanyName })
+                                       .ToList();
+            List<int> companyIds = companyData.Select(it => it.id).ToList();
+            //查询所有公司的市场部
+            var depData = _sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0 && companyIds.Contains(it.CompanyId) && it.DepName.Contains("市场部"))
+                                   .Select(it => new { it.Id, it.CompanyId, it.DepName })
+                                   .ToList();
+            List<int> depIds = depData.Select(it => it.Id).ToList();
+
+            var jobData = _sqlSugar.Queryable<Sys_JobPost>().Where(it => it.IsDel == 0 && companyIds.Contains(it.CompanyId) && (it.JobName.Contains("经理") || it.JobName.Contains("主管")))
+                                   .Select(it => new { it.Id, it.CompanyId, it.DepId, it.JobName })
+                                   .ToList();
+            List<int> jobIds = jobData.Select(it => it.Id).ToList();
+            //userId = 21 
+            var userData = _sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && (depIds.Contains(it.DepId) || jobIds.Contains(it.JobPostId)))
+                                   .Select(it => new { id = it.Id, companyId = it.CompanyId, name = it.CnName })
+                                   .ToList();
+
+            companyData.Insert(0, new { id = -1, name = "全部" });
+            userData.Insert(0, new { id = -1, companyId = -1, name = "全部" });
+
+            #region 年份
+
+            var dtData = new List<dynamic>();
+            int dt = DateTime.Now.Year;
+            for (int i = dt - 4; i <= dt; i++)
+            {
+                //季度
+                var quarterDatas = new List<dynamic>();
+                quarterDatas.Add(new { name = "第一季度" ,beginDt = $"{i}-01-01",endDt = $"{i}-03-31" });
+                quarterDatas.Add(new { name = "第二季度", beginDt = $"{i}-04-01", endDt = $"{i}-06-30" });
+                quarterDatas.Add(new { name = "第三季度", beginDt = $"{i}-07-01", endDt = $"{i}-09-30" });
+                quarterDatas.Add(new { name = "第四季度", beginDt = $"{i}-10-01", endDt = $"{i}-12-31" });
+
+                //月份
+                var monthDatas = new List<dynamic>();
+
+                for (int m = 1; m < 13; m++)
+                {
+                    MonthlyTimeSegment timeSegment = new MonthlyTimeSegment(i, m);
+                    monthDatas.Add(new { name = $"{ConvertToChinese(m)}", beginDt = timeSegment.Start.ToString("yyyy-MM-dd"), endDt = timeSegment.End.ToString("yyyy-MM-dd") });
+                }
+
+                dtData.Add(new
+                {
+                    year = $"{i}",
+                    yearData = new { beginDt = $"{i}-01-01", endDt = $"{i}-12-31" },
+                    quarterData = quarterDatas,
+                    monthData = monthDatas
+                });
+            }
+
+            #endregion
+
+            return Ok(JsonView(true, "操作成功!", new { companyData = companyData, userData = userData, dtData = dtData }));
+            #endregion
+
+        }
+
+        private static string ConvertToChinese(int month)
+        {
+            if (month < 1 || month > 12)
+                throw new ArgumentOutOfRangeException(nameof(month), "月份必须在1到12之间。");
+
+            var cultureInfo = new System.Globalization.CultureInfo("zh-CN");
+            var dateTimeFormat = cultureInfo.DateTimeFormat;
+            return dateTimeFormat.GetMonthName(month);
+        }
+
+        /// <summary>
+        ///  市场部销售额
+        ///  年度/季度/月度 报表
+        /// </summary>
+        /// <param name="_dto">市场部销售额请求dto</param>
+        /// <returns></returns>
+        [HttpPost("PostMarketingSalesStatistics")]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostMarketingSalesStatistics(MarketingSalesPersonnelListDto _dto)
+        {
+            #region  参数验证
+
+            MarketingSalesPersonnelListDtoFoalidator validationRules = new MarketingSalesPersonnelListDtoFoalidator();
+            var validResult = await validationRules.ValidateAsync(_dto);
+            if (!validResult.IsValid)
+            {
+                var errors = new StringBuilder();
+                foreach (var error in validResult.Errors) errors.AppendLine(error.ErrorMessage);
+                return Ok(JsonView(false, errors.ToString()));
+            }
+
+
+            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+            #region 页面操作权限验证
+            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, MsgTips.CheckAuth));
+            #endregion
+
+
+            var companyData = _sqlSugar.Queryable<Sys_Company>().Where(it => it.IsDel == 0)
+                                       .Select(it => new { id = it.Id, name = it.CompanyName })
+                                       .ToList();
+            List<int> companyIds = companyData.Select(it => it.id).ToList();
+            //查询所有公司的市场部
+            var depData = _sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0 && companyIds.Contains(it.CompanyId) && it.DepName.Contains("市场部"))
+                                   .Select(it => new { it.Id, it.CompanyId, it.DepName })
+                                   .ToList();
+            List<int> depIds = depData.Select(it => it.Id).ToList();
+
+            var jobData = _sqlSugar.Queryable<Sys_JobPost>().Where(it => it.IsDel == 0 && companyIds.Contains(it.CompanyId) && (it.JobName.Contains("经理") || it.JobName.Contains("主管")))
+                                   .Select(it => new { it.Id, it.CompanyId, it.DepId, it.JobName })
+                                   .ToList();
+            List<int> jobIds = jobData.Select(it => it.Id).ToList();
+            //userId = 21 
+            var userData = _sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && (depIds.Contains(it.DepId) || jobIds.Contains(it.JobPostId)))
+                                   .Select(it => new { id = it.Id, companyId = it.CompanyId, name = it.CnName })
+                                   .ToList();
+
+            companyData.Insert(0, new { id = -1, name = "全部" });
+            userData.Insert(0, new { id = -1, companyId = -1, name = "全部" });
+
+            #region 年份
+
+            var dtData = new List<dynamic>();
+            int dt = DateTime.Now.Year;
+            for (int i = dt - 4; i <= dt; i++)
+            {
+                //季度
+                var quarterDatas = new List<dynamic>();
+                quarterDatas.Add(new { name = "第一季度", beginDt = $"{i}-01-01", endDt = $"{i}-03-31" });
+                quarterDatas.Add(new { name = "第二季度", beginDt = $"{i}-04-01", endDt = $"{i}-06-30" });
+                quarterDatas.Add(new { name = "第三季度", beginDt = $"{i}-07-01", endDt = $"{i}-09-30" });
+                quarterDatas.Add(new { name = "第四季度", beginDt = $"{i}-10-01", endDt = $"{i}-12-31" });
+
+                //月份
+                var monthDatas = new List<dynamic>();
+
+                for (int m = 1; m < 13; m++)
+                {
+                    MonthlyTimeSegment timeSegment = new MonthlyTimeSegment(i, m);
+                    monthDatas.Add(new { name = $"{ConvertToChinese(m)}", beginDt = timeSegment.Start.ToString("yyyy-MM-dd"), endDt = timeSegment.End.ToString("yyyy-MM-dd") });
+                }
+
+                dtData.Add(new
+                {
+                    year = $"{i}",
+                    yearData = new { beginDt = $"{i}-01-01", endDt = $"{i}-12-31" },
+                    quarterData = quarterDatas,
+                    monthData = monthDatas
+                });
+            }
+
+            #endregion
+
+
+            return Ok(JsonView(true, "操作成功!", new { companyData = companyData, userData = userData, dtData = dtData }));
+            #endregion
+
+        }
+
+        #endregion
     }
 }

+ 0 - 1
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -706,7 +706,6 @@ namespace OASystem.API.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> QueryDepartmentList(DepartmentDto dto)

+ 0 - 1
OASystem/OASystem.Api/Program.cs

@@ -366,7 +366,6 @@ app.Lifetime.ApplicationStopped.Register(() =>
 
 #endregion
 
-
 #region SignalR
 
 app.MapHub<ChatHub>("/ChatHub", options =>

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

@@ -148,6 +148,7 @@ namespace OASystem.Domain.AutoMappers
             CreateMap<Grp_HotelReservations, HotelReservationsByIdView>();
             CreateMap<Grp_CreditCardPayment, Grp_CreditCardView>();
             CreateMap<OpHotelReservationsData, Grp_HotelReservations>();
+            CreateMap<HotelReservationsContnetDetailsView, Grp_HotelReservationsContent>();
             CreateMap<OpHotelReservationsData, Grp_CreditCardPayment>();
             #endregion
 

+ 12 - 0
OASystem/OASystem.Domain/Dtos/Financial/PostPayRequestByDateRangeDto.cs

@@ -22,6 +22,12 @@ namespace OASystem.Domain.Dtos.Financial
     {
         public int UserId { get; set; }
         public int Id { get; set; }
+
+        /// <summary>
+        /// 酒店子表Id
+        /// </summary>
+        public int HotelSubId { get; set; }
+
         public decimal Rate { get; set; }
     }
 
@@ -35,6 +41,12 @@ namespace OASystem.Domain.Dtos.Financial
         /// </summary>
         public string GroupIds { get; set; }
 
+        ///// <summary>
+        ///// 酒店子表费用 Id集合 多个英文逗号隔开 
+        ///// 1,2,3,4,5
+        ///// </summary>
+        //public string HotelSubIds { get; set; }
+
         /// <summary>
         /// 日付相关费用 id集合 多个英文逗号隔开 
         /// 1,2,3,4,5

+ 6 - 101
OASystem/OASystem.Domain/Dtos/Groups/HotelReservationsDto.cs

@@ -1,4 +1,5 @@
 using FluentValidation;
+using OASystem.Domain.ViewModels.Groups;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -59,11 +60,6 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public int GTId { get; set; }
 
-        /// <summary>
-        /// 信用卡类型 (设置数据外键编号)
-        /// </summary>
-        public int CTDId { get; set; }
-
         /// <summary>
         /// 入住卷号
         /// </summary>
@@ -175,110 +171,19 @@ namespace OASystem.Domain.Dtos.Groups
         public int OtherRoomCount { get; set; }
 
         /// <summary>
-        /// 信用卡金额
+        /// 信用卡金额/项费用总计合费用
         /// </summary>
         public decimal CardPrice { get; set; }
 
         /// <summary>
-        /// 是否由地接支付
-        /// 0 否 1 是
-        /// </summary>
-        public int Isoppay { get; set; }
-
-        /// <summary>
-        /// 早餐价格
-        /// </summary>
-        public decimal BreakfastPrice { get; set; }
-
-        /// <summary>
-        /// 早餐币种 (设置数据外键编号)
-        /// </summary>
-        public int BreakfastCurrency { get; set; }
-
-        /// <summary>
-        /// 地税
-        /// </summary>
-        public decimal GovernmentRent { get; set; }
-
-        /// <summary> 
-        /// 地税币种 (设置数据外键编号)
-        /// </summary>
-        public int GovernmentRentCurrency { get; set; }
-
-        /// <summary>
-        /// 城市税
-        /// </summary>
-        public decimal CityTax { get; set; }
-
-        /// <summary>
-        /// 城市税币种 (设置数据外键编号)
-        /// </summary>
-        public int CityTaxCurrency { get; set; }
-
-        /// <summary>
-        /// 支付方式 (设置数据外键编号)
-        /// </summary>
-        public int PayDId { get; set; }
-
-        /// <summary>
-        /// 消费方式
-        /// </summary>
-        public string? ConsumptionPatterns { get; set; }
-
-        /// <summary>
-        /// 消费日期
-        /// </summary>
-        public string? ConsumptionDate { get; set; }
-
-        /// <summary>
-        /// 付款金额
-        /// </summary>
-        public decimal PayMoney { get; set; }
-
-        /// <summary>
-        /// 付款币种 (设置数据外键编号)
-        /// </summary>
-        public int PaymentCurrency { get; set; }
-
-        /// <summary>
-        /// 银行卡号
-        /// </summary>
-        public string? BankNo { get; set; }
-        /// <summary>
-        /// 持卡人姓名
-        /// </summary>
-        public string? CardholderName { 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>
-        /// 收款方
-        /// </summary>
-        public string? Payee { get; set; }
+        public int CardPriceCurrency { get; set; }
 
         /// <summary>
-        /// 费用标识 (设置数据外键编号)
-        /// 可不选
+        /// 子表信息
         /// </summary>
-        public int OrbitalPrivateTransfer { get; set; } = -1;
+        public List<HotelReservationsContnetDetailsView> Contents { get; set; }
 
         /// <summary>
         /// C表付款信息 备注

+ 94 - 0
OASystem/OASystem.Domain/Dtos/Statistics/MarketingSalesDto.cs

@@ -0,0 +1,94 @@
+using FluentValidation;
+using OASystem.Domain.Dtos.System;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Globalization;
+
+namespace OASystem.Domain.Dtos.Statistics
+{
+    public class MarketingSalesUserPageFuncDtoBase
+    {
+        /// <summary>
+        /// 请求端口分类
+        /// 1 Web 2 Android 3 IOS
+        /// </summary>
+        public int PortType { get; set; } = 1;
+
+        /// <summary>
+        /// 用户Id
+        /// </summary>
+        public int UserId { get; set; }
+
+        /// <summary>
+        /// 页面Id
+        /// </summary>
+        public int PageId { get; set; } = 180;
+    }
+
+    public class MarketingSalesUserPageFuncDtoBaseFoalidator : AbstractValidator<MarketingSalesUserPageFuncDtoBase>
+    {
+        public MarketingSalesUserPageFuncDtoBaseFoalidator()
+        {
+            RuleFor(it => it.PortType).InclusiveBetween(1,3).WithMessage(MsgTips.Port);
+            RuleFor(it => it.UserId).GreaterThan(1).WithMessage(MsgTips.UserId);
+            RuleFor(it => it.PageId).GreaterThan(1).WithMessage(MsgTips.PageId);
+        }
+    }
+
+    /// <summary>
+    /// 市场部销售额 Dto
+    /// </summary>
+    public class MarketingSalesDto { }
+
+    /// <summary>
+    /// 市场部销售额 
+    /// 市场部人员列表
+    /// Dto
+    /// </summary>
+    public class MarketingSalesInitDataDto : MarketingSalesUserPageFuncDtoBase { }
+    public class MarketingSalesInitDataDtoFoalidator : AbstractValidator<MarketingSalesInitDataDto>
+    {
+        public MarketingSalesInitDataDtoFoalidator() 
+        {
+            Include(new MarketingSalesUserPageFuncDtoBaseFoalidator());
+        }
+    }
+
+    /// <summary>
+    ///  市场部销售额
+    ///  年度/季度/月度 报表
+    /// </summary>
+    public class MarketingSalesStatistics : MarketingSalesUserPageFuncDtoBase 
+    {
+        /// <summary>
+        /// 公司Id
+        /// </summary>
+        public int CompanyId { get; set; }
+
+        /// <summary>
+        /// 接团人Id
+        /// </summary>
+        public int GroupPickupUserId  { get; set; }
+
+        public string BeginDt { get; set; }
+
+        public string EndDt { get; set; }
+
+    }
+    public class MarketingSalesStatisticsDtoFoalidator : AbstractValidator<MarketingSalesStatistics>
+    {
+        public MarketingSalesStatisticsDtoFoalidator()
+        {
+            Include(new MarketingSalesUserPageFuncDtoBaseFoalidator());
+            RuleFor(it => it.BeginDt)
+                .Must(dateString => DateTime.TryParse(dateString, out _))
+                .WithMessage("请输入有效开始的日期");
+            RuleFor(it => it.EndDt)
+                .Must(dateString => DateTime.TryParse(dateString, out _))
+                .WithMessage("请输入有效结束的日期");
+        }
+    }
+}

+ 2 - 1
OASystem/OASystem.Domain/Entities/Financial/Fin_ForeignReceivables.cs

@@ -87,7 +87,8 @@ namespace OASystem.Domain.Entities.Financial
 
         /// <summary>
         /// 添加方式   
-        /// 0 - 账单模块   1 - 成本预算模块
+        /// 0 - 账单模块   1 - 成本预算模块 2 - 分摊费用 3 - 其他费用
+        /// TODO:增加费用类型
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int AddingWay { get; set; }

+ 2 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservations.cs

@@ -171,6 +171,8 @@ namespace OASystem.Domain.Entities.Groups
         public decimal CardPrice { get; set; }
         /// <summary>
         /// 信用卡刷卡类型
+        /// 之前存卡类型
+        /// 现在存币种
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int CardPriceCurrency { get; set; }

+ 144 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservationsContent.cs

@@ -0,0 +1,144 @@
+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_HotelReservationsContent")]
+    public class Grp_HotelReservationsContent:EntityBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        [SugarColumn(IsNullable = true,ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 酒店费用录入主表Id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int HrId { get; set; }
+
+        /// <summary>
+        /// 费用类型
+        /// 1:房费
+        /// 2:早餐
+        /// 3:地税
+        /// 4:城市税
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PriceType { get; set; }
+
+        /// <summary>
+        /// 费用
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal Price { get; set; }
+
+        /// <summary>
+        /// 币种
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Currency { get; set; }
+
+        /// <summary>
+        /// 汇率
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,4)")]
+        public decimal Rate { get; set; }
+
+        /// <summary>
+        /// 由地接支付
+        /// 0 否 1是
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsOppay { get; set; }
+
+        /// <summary>
+        /// 支付方式
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int PayDId { get; set; }
+
+        /// <summary>
+        /// 消费方式
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string ConsumptionPatterns { get; set; }
+        /// <summary>
+        /// 消费日期
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(30)")]
+        public string ConsumptionDate { get; set; }
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int CTDId { get; set; }
+        /// <summary>
+        /// 银行卡号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string BankNo { get; set; }
+        /// <summary>
+        /// 持卡人姓名
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string CardholderName { get; set; }
+        ///// <summary>
+        ///// 付款金额
+        ///// </summary>
+        //[SugarColumn(IsNullable = true, ColumnDataType = "decimal(10, 2)")]
+        //public decimal PayMoney { get; set; }
+        ///// <summary>
+        ///// 付款币种 数据类型Id
+        ///// </summary>
+        //[SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        //public int PaymentCurrency { get; set; }
+
+        /// <summary>
+        /// 公司银行卡号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string CompanyBankNo { get; set; }
+        /// <summary>
+        /// 对方开户行
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string OtherBankName { get; set; }
+        /// <summary>
+        /// 对方银行账号
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string OtherSideNo { get; set; }
+        /// <summary>
+        /// 对方姓名
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(125)")]
+        public string OtherSideName { get; set; }
+
+        /// <summary> 
+        /// 是否付款  0 否 1 是
+        /// </summary> 
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int IsPay { get; set; }
+
+        /// <summary>
+        /// 收款方
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        public string Payee { get; set; }
+        /// <summary>
+        /// 费用标识
+        /// 0 公转 1 私转
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int OrbitalPrivateTransfer { get; set; }
+
+    }
+}

+ 11 - 0
OASystem/OASystem.Domain/Result.cs

@@ -61,6 +61,17 @@ namespace OASystem.Domain
         /// UserId错误消息提示
         /// </summary>
         public static string UserId = "请检查UserId是否正确!";
+
+
+        /// <summary>
+        /// PageId错误消息提示
+        /// </summary>
+        public static string PageId = "请检查PageId是否正确!";
+
+        /// <summary>
+        /// CheckAuth 错误消息提示
+        /// </summary>
+        public static string CheckAuth = "您没有查看权限!";
     }
 
    

+ 5 - 0
OASystem/OASystem.Domain/ViewModels/Financial/Fin_DailyFeePaymentView.cs

@@ -426,6 +426,11 @@ namespace OASystem.Domain.ViewModels.Financial
 
         public int Id { get; set; }
 
+        /// <summary>
+        /// 酒店费用子类 Id
+        /// </summary>
+        public int HotelSubId { get; set; } = -1;
+
         /// <summary>
         /// 支付方式
         /// </summary>

+ 146 - 53
OASystem/OASystem.Domain/ViewModels/Groups/HotelReservationsByDiIdView.cs

@@ -115,11 +115,6 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public int GTId { get; set; }
 
-        /// <summary>
-        /// 卡类型 (设置数据外键编号)
-        /// </summary>
-        public int CTDId { get; set; }
-
         /// <summary>
         /// 入住卷号
         /// </summary>
@@ -236,109 +231,207 @@ namespace OASystem.Domain.ViewModels.Groups
         public decimal CardPrice { get; set; }
 
         /// <summary>
-        /// 是否由地接支付
-        /// 0 否 1 是
+        /// 信用卡币种
         /// </summary>
-        public int Isoppay { get; set; }
+        public int CardPriceCurrency { get; set; }
+
+        ///// <summary>
+        ///// 是否由地接支付
+        ///// 0 否 1 是
+        ///// </summary>
+        //public int Isoppay { get; set; }
+
+        ///// <summary>
+        ///// 早餐价格
+        ///// </summary>
+        //public decimal BreakfastPrice { get; set; }
+
+        ///// <summary>
+        ///// 早餐币种 (设置数据外键编号)
+        ///// </summary>
+        //public int BreakfastCurrency { get; set; }
+
+        ///// <summary>
+        ///// 地税
+        ///// </summary>
+        //public decimal GovernmentRent { get; set; }
+
+        ///// <summary> 
+        ///// 地税币种 (设置数据外键编号)
+        ///// </summary>
+        //public int GovernmentRentCurrency { get; set; }
+
+        ///// <summary>
+        ///// 城市税
+        ///// </summary>
+        //public decimal CityTax { get; set; }
+
+        ///// <summary>
+        ///// 城市税币种 (设置数据外键编号)
+        ///// </summary>
+        //public int CityTaxCurrency { get; set; }
+
+        ///// <summary>
+        ///// 支付方式 (设置数据外键编号)
+        ///// </summary>
+        //public int PayDId { get; set; }
+
+        ///// <summary>
+        ///// 消费方式
+        ///// </summary>
+        //public string? ConsumptionPatterns { get; set; }
+
+        ///// <summary>
+        ///// 消费日期
+        ///// </summary>
+        //public string? ConsumptionDate { get; set; }
 
         /// <summary>
-        /// 早餐价格
+        /// 付款金额
         /// </summary>
-        public decimal BreakfastPrice { get; set; }
+        public decimal PayMoney { get; set; }
 
         /// <summary>
-        /// 早餐币种 (设置数据外键编号)
+        /// 付款币种 (设置数据外键编号)
         /// </summary>
-        public int BreakfastCurrency { get; set; }
+        public int PaymentCurrency { get; set; }
+
+        ///// <summary>
+        ///// 银行卡号
+        ///// </summary>
+        //public string? BankNo { get; set; }
+        ///// <summary>
+        ///// 持卡人姓名
+        ///// </summary>
+        //public string? CardholderName { 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>
+        ///// 收款方
+        ///// </summary>
+        //public string? Payee { get; set; }
+
+        ///// <summary>
+        ///// 费用标识 (设置数据外键编号)
+        ///// </summary>
+        //public int OrbitalPrivateTransfer { get; set; }
 
         /// <summary>
-        /// 地税
+        /// C表付款信息 备注
         /// </summary>
-        public decimal GovernmentRent { get; set; }
+        public string? CcpRemark { get; set; }
+         
+        public List<HotelReservationsContnetDetailsView>  Contents { get; set; }
+    }
 
-        /// <summary> 
-        /// 地税币种 (设置数据外键编号)
-        /// </summary>
-        public int GovernmentRentCurrency { get; set; }
+    public class HotelReservationsContnetDetailsView
+    {
+        public int Id { get; set; }
+
+        public int DiId { get; set; }
+
+        public int HrId { get; set; }
 
         /// <summary>
-        /// 城市税
+        /// 费用类型
+        /// 1:房费
+        /// 2:早餐
+        /// 3:地税
+        /// 4:城市税
         /// </summary>
-        public decimal CityTax { get; set; }
+        public int PriceType { get; set; }
 
         /// <summary>
-        /// 城市税币种 (设置数据外键编号)
+        /// 费用
         /// </summary>
-        public int CityTaxCurrency { get; set; }
+        public decimal Price { get; set; }
 
         /// <summary>
-        /// 支付方式 (设置数据外键编号)
+        /// 币种
         /// </summary>
-        public int PayDId { get; set; }
+        public int Currency { get; set; }
 
         /// <summary>
-        /// 消费方式
+        /// 汇率
         /// </summary>
-        public string? ConsumptionPatterns { get; set; }
+        public decimal Rate { get; set; }
 
         /// <summary>
-        /// 消费日期
+        /// 由地接支付
+        /// 0 否 1是
         /// </summary>
-        public string? ConsumptionDate { get; set; }
+        public int IsOppay { get; set; }
 
         /// <summary>
-        /// 付款金额
+        /// 支付方式
         /// </summary>
-        public decimal PayMoney { get; set; }
+        public int PayDId { get; set; } = 1;
 
         /// <summary>
-        /// 付款币种 (设置数据外键编号)
+        /// 消费方式
         /// </summary>
-        public int PaymentCurrency { get; set; }
-
+        public string ConsumptionPatterns { get; set; }
+        /// <summary>
+        /// 消费日期
+        /// </summary>
+        public string ConsumptionDate { get; set; }
+        /// <summary>
+        /// 卡类型
+        /// </summary>
+        public int CTDId { get; set; }
         /// <summary>
         /// 银行卡号
         /// </summary>
-        public string? BankNo { get; set; }
+        public string BankNo { get; set; }
         /// <summary>
         /// 持卡人姓名
         /// </summary>
-        public string? CardholderName { get; set; }
-
+        public string CardholderName { get; set; }
         /// <summary>
-        /// 公司银行
+        /// 公司银行
         /// </summary>
-        public string? CompanyBankNo { get; set; }
-
+        public string CompanyBankNo { get; set; }
         /// <summary>
         /// 对方开户行
         /// </summary>
-        public string? OtherBankName { get; set; }
-
+        public string OtherBankName { get; set; }
         /// <summary>
         /// 对方银行账号
         /// </summary>
-        public string? OtherSideNo { get; set; }
-
+        public string OtherSideNo { get; set; }
         /// <summary>
         /// 对方姓名
         /// </summary>
-        public string? OtherSideName { get; set; }
+        public string OtherSideName { get; set; }
 
         /// <summary>
         /// 收款方
         /// </summary>
-        public string? Payee { get; set; }
-
-        /// <summary>
-        /// 费用标识 (设置数据外键编号)
-        /// </summary>
-        public int OrbitalPrivateTransfer { get; set; }
-
+        public string Payee { get; set; }
         /// <summary>
-        /// C表付款信息 备注
+        /// 费用标识
+        /// 0 公转 1 私转
         /// </summary>
-        public string? CcpRemark { get; set; }
+        public int OrbitalPrivateTransfer { get; set; } = 0;
     }
 
     /// <summary>

+ 62 - 30
OASystem/OASystem.Domain/ViewModels/Statistics/GroupStatementView.cs

@@ -584,10 +584,7 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// </summary>
         public string? CheckOutDate { get; set; }
 
-        /// <summary>
-        /// 支付币种
-        /// </summary>
-        public string? PaymentCurrency { get; set; }
+
 
         /// <summary>
         /// 单间价格
@@ -629,6 +626,21 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// </summary>
         public int OtherRoomCount { get; set; }
 
+        /// <summary>
+        /// 房间费用
+        /// </summary>
+        public decimal RoomPrice { get; set; }
+
+        /// <summary>
+        /// 房间费用币种
+        /// </summary>
+        public string RoomPriceCurrency { get; set; }
+
+        /// <summary>
+        /// 房间费用提示信息
+        /// </summary>
+        public string RoomInfoTips { get; set; }
+
         /// <summary>
         /// 早餐费用
         /// </summary>
@@ -640,10 +652,15 @@ namespace OASystem.Domain.ViewModels.Statistics
         public string? BreakfastCurrency { get; set; }
 
         /// <summary>
-        /// 由地接支付
-        /// 0 是 1否
+        /// 早餐提示消息
         /// </summary>
-        public int Isoppay { get; set; }
+        public string BreakfastInfoTips { get; set; }
+
+        ///// <summary>
+        ///// 由地接支付
+        ///// 0 是 1否
+        ///// </summary>
+        //public int Isoppay { get; set; }
 
         /// <summary>
         /// 地税
@@ -655,6 +672,11 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// </summary>
         public string? GovernmentRentCurrency { get; set; }
 
+        /// <summary>
+        /// 地税提示消息
+        /// </summary>
+        public string GovernmentRentTips { get; set; }
+
         /// <summary>
         /// 城市价格
         /// </summary>
@@ -666,45 +688,55 @@ namespace OASystem.Domain.ViewModels.Statistics
         public string? CityTaxCurrency { get; set; }
 
         /// <summary>
-        /// 信用卡金额
+        /// 城市税提示信息
         /// </summary>
-        public decimal PayMoney { get; set; } = 0.00M;
+        public string? CityTaxTips { get; set; }
 
         /// <summary>
-        /// 人民币金额
+        /// 信用卡金额
         /// </summary>
-        public decimal CNYPrice { get; set; } = 0.00M;
+        public decimal PayMoney { get; set; } = 0.00M;
 
         /// <summary>
-        /// 当天汇率
+        /// 信用卡金额币种
         /// </summary>
-        public decimal DayRate { get; set; } = 0.0000M;
+        public string? PaymentCurrency { get; set; }
 
         /// <summary>
-        /// 币种汇率
+        /// 人民币金额
         /// </summary>
-        public string? CurrencyRateStr { get; set; }
+        public decimal CNYPrice { get; set; } = 0.00M;
 
-        /// <summary>
-        /// 收款方
-        /// </summary>
-        public string? Payee { get; set; }
+        ///// <summary>
+        ///// 当天汇率
+        ///// </summary>
+        //public decimal DayRate { get; set; } = 0.0000M;
 
-        /// <summary>
-        /// 费用标识
-        /// -1 未选择 0 公转 1 私转
-        /// </summary>
-        public int OrbitalPrivateTransfer { get; set; }
+        ///// <summary>
+        ///// 币种汇率
+        ///// </summary>
+        //public string? CurrencyRateStr { get; set; }
 
         /// <summary>
-        /// 支付方式
+        /// 收款方
         /// </summary>
-        public string? PayWay { get; set; }
+        public string? Payee { get; set; }
 
-        /// <summary>
-        /// 卡类型
-        /// </summary>
-        public string? CardType { 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>
         /// 是否支付

+ 22 - 0
OASystem/OASystem.Domain/ViewModels/Statistics/MonthlyTimeSegment.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.ViewModels.Statistics
+{
+    public class MonthlyTimeSegment
+    {
+        public DateTime Start { get; private set; }
+        public DateTime End { get; private set; }
+
+        public MonthlyTimeSegment(int year, int month)
+        {
+            DateTime startOfMonth = new DateTime(year, month, 1);
+            DateTime endOfMonth = startOfMonth.AddMonths(1).AddDays(-1);
+            Start = startOfMonth;
+            End = endOfMonth;
+        }
+    }
+}

Datei-Diff unterdrückt, da er zu groß ist
+ 201 - 717
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs


+ 84 - 1
OASystem/OASystem.Infrastructure/Repositories/Groups/TeamRateRepository.cs

@@ -1,4 +1,5 @@
 using Newtonsoft.Json;
+using NPOI.SS.Formula.PTG;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Financial;
 using OASystem.Domain.Dtos.Groups;
@@ -393,6 +394,29 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                         .ExecuteCommandAsync();
                             if (res > 0)
                             {
+                                //团组汇率更改成功;更改C表对应汇率 及rmb金额
+                                var ccpInfos = _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(it => it.IsDel == 0 && it.DIId == dto.DiId && it.CTable == item.CTable).ToList();
+                                var currData = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();
+                                if (ccpInfos.Count > 0)
+                                {
+                                    foreach (var ccpInfo in ccpInfos)
+                                    {
+                                        string currCode = currData.Find(it => it.Id == ccpInfo.PaymentCurrency)?.Name ?? "";
+                                        decimal thisRate = item.teamRates.Find(it => it.CurrencyCode.Equals(currCode))?.Rate ?? 0.00M;
+                                        if (thisRate > 0.00M)
+                                        {
+                                            ccpInfo.DayRate = thisRate;
+                                            ccpInfo.RMBPrice = ccpInfo.PayMoney * thisRate;
+                                        }
+                                    }
+
+                                    var ccpStatus = _sqlSugar.Updateable(ccpInfos)
+                                                             .UpdateColumns(it => new { it.DayRate, it.RMBPrice })
+                                                             .WhereColumns(it => it.Id)
+                                                             .ExecuteCommand();
+                                }
+                                
+
                                 updateCount++;
                             }
                         }
@@ -402,7 +426,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             result.Msg = "操作失败!";
                             break;
                         }
-
                     }
 
                     if (res > 0)
@@ -473,6 +496,66 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
         }
 
+        /// <summary>
+        /// 更改团组对应模块 对应币种汇率
+        /// </summary>
+        /// <param name="diId">团组Id</param>
+        /// <param name="cTableId">团组模块</param>
+        /// <param name="currCode">币种code</param>
+        /// <param name="currRate">币种汇率</param>
+        /// <returns></returns>
+        public async Task<bool> UpdateGroupRateByDiIdAndCTableId(int diId, int cTableId, string currCode, decimal currRate)
+        {
+            if (diId < 1) return false;
+            if (cTableId < 1) return false;
+
+            var _info = await PostGroupTeamRateByDiIdAndCTableId(1, diId, cTableId);
+            TeamRateUpdateDto OPDto = new TeamRateUpdateDto();
+            OPDto.DiId = diId;
+            var teamRates = new List<TeamRateUpdateInfo>();
+            if (_info == null) 
+            {
+                var currData = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66 && it.Name.Equals(currCode)).First();
+                teamRates.Add(
+                    new TeamRateUpdateInfo()
+                    {
+                        Id = 0,
+                        CTable = cTableId,
+                        teamRates = new List<TeamRateDescView> 
+                        {
+                            new TeamRateDescView() 
+                            {
+                                CurrencyName = currData?.Remark,
+                                CurrencyCode = currCode,
+                                Rate = currRate
+                            }
+                        }
+                    }
+                );
+            }
+            else
+            {
+                var rateCurrInfo = new TeamRateUpdateInfo();
+                rateCurrInfo.CTable = cTableId;
+                var currInfos = new List<TeamRateDescView>();
+                foreach (var item in _info.TeamRates)
+                {
+                    var currInfo = new TeamRateDescView();
+                    currInfo.CurrencyName = item.CurrencyName;
+                    currInfo.CurrencyCode = item.CurrencyCode;
+                    if (item.CurrencyCode.Equals(currCode)) currInfo.Rate = currRate;
+                    else currInfo.Rate = item.Rate;
+                    currInfos.Add(currInfo);
+                }
+                rateCurrInfo.teamRates = currInfos;
+                teamRates.Add(rateCurrInfo);
+            }
+            OPDto.teamRateUpdateInfos = teamRates;
+            await PostGroupRateUpdate(OPDto);
+
+            return true;
+        }
+
         /// <summary>
         /// 团组汇率币种拆分
         /// 团组币种按指定格式拆分 返回集合