Browse Source

重构签证费用提示方法,优化费用计算逻辑

在 `GroupsController.cs` 文件中:
- 将 `EntryAndExitTips` 方法替换为 `EnterExitCostVisaTips` 方法。
- 删除注释代码,添加 `EnterExitCostDraftVisaTips` 方法。
- 简化实时汇率提示的实现。

在 `EnterExitCostDraftDto.cs` 文件中:
- 添加 `EnterExitCostDraftVisaTipsDto` 类及其 `DraftId` 属性。

在 `VisaFeeInfoRepository.cs` 文件中:
- 重命名 `EntryAndExitTips` 方法为 `EnterExitCostVisaTips`。
- 添加费用报价系数 `priceCoeff` 并应用于费用计算。
- 更新大公务代办费和小公务代办费的计算。
- 添加 `EnterExitCostDraftVisaTips` 方法,计算出入境费用草稿签证费用提示。
LEIYI 4 months ago
parent
commit
7ea98c7306

+ 38 - 34
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -5357,7 +5357,7 @@ FROM
 
             //默认币种显示
             var reteInfos = await GeneralMethod.EnterExitCostLiveRate();
-            var visaData = await _visaFeeInfoRep.EntryAndExitTips(dto.DiId);
+            var visaData = await _visaFeeInfoRep.EnterExitCostVisaTips(dto.DiId);
             var airData = await _ticketBlackCodeRep.EntryAndExitTips(dto.DiId);
             return Ok(JsonView(true, "查询成功!", new
             {
@@ -7505,7 +7505,6 @@ FROM
         /// <summary>
         /// 团组模块 - 出入境费用-草稿
         /// 实时汇率 tips
-        /// 签证费用 tips
         /// 机票费用 tips
         /// </summary>
         /// <returns></returns>
@@ -7513,7 +7512,6 @@ FROM
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> EnterExitCostDraftCorrelationTips(EnterExitCostDraftCorrelationTipsDto dto)
         {
-            //var visaData = await _visaFeeInfoRep.EntryAndExitTips(dto.DiId);
             //var airData = await _ticketBlackCodeRep.EntryAndExitTips(dto.DiId);
             return Ok(JsonView(true, "查询成功!", new
             {
@@ -7524,6 +7522,41 @@ FROM
             }));
         }
 
+        /// <summary>
+        /// 团组模块 - 出入境费用-草稿
+        /// 签证费用 tips
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> EnterExitCostDraftVisaTips(EnterExitCostDraftVisaTipsDto dto)
+        {
+            if (dto.DraftId < 1) return Ok(JsonView(false,MsgTips.Id));
+
+            var cityIds = await _sqlSugar.Queryable<Grp_DayAndCostDraft>()
+                .Where(x => x.IsDel == 0 && x.ParentId == dto.DraftId)
+                .Select(x => x.NationalTravelFeeId)
+                .Distinct()
+                .ToListAsync();
+
+            if (!cityIds.Any()) return Ok(JsonView(false, "请先录入出入境费用明细!"));
+
+            var countrys = await _sqlSugar.Queryable<Grp_NationalTravelFee>()
+                .Where(x => x.IsDel == 0 && cityIds.Contains(x.Id))
+                .Select(x => x.Country)
+                .Distinct()
+                .ToArrayAsync();
+            if (!countrys.Any()) return Ok(JsonView(false, "请先录入出入境费用明细!"));
+
+            (decimal totalAmt, string remark) = await _visaFeeInfoRep.EnterExitCostDraftVisaTips(countrys);
+
+            return Ok(JsonView(true, "查询成功!", new
+            {
+                totalAmt = totalAmt,
+                remark = remark
+            }));
+        }
+
         /// <summary>
         /// 团组模块 - 出入境费用-草稿 - Info
         /// </summary>
@@ -9114,40 +9147,11 @@ WHERE
 
             if (dto.TipsType == 1)
             {
-                //默认币种显示
-                var _currencyInfos = _currencyInit;
-                var _currencyRate = await _juHeApi.PostItemRateAsync(_currencyInfos.Select(it => it.CurrencyCode!).ToArray());
-                List<dynamic> reteInfos = new List<dynamic>();
-                if (_currencyRate.Count > 0)
-                {
-                    foreach (var item in _currencyInfos)
-                    {
-                        var rateInfo = _currencyRate.Where(it => it.Name.Equals(item.CurrencyName)).FirstOrDefault();
-                        if (rateInfo != null)
-                        {
-                            item.Rate = Convert.ToDecimal((Convert.ToDecimal(rateInfo.FSellPri == null ? 0.00M : rateInfo.FSellPri) / 100.00M).ToString("#0.0000"));
-
-                            decimal rate1 = item.Rate;
-                            rate1 *= 1.03M;
-
-                            decimal rate2 = Convert.ToDecimal(rate1.ToString("#0.00")) + 0.01M;
-
-                            reteInfos.Add(new
-                            {
-                                currCode = item.CurrencyCode,
-                                currName = item.CurrencyName,
-                                rate = rate2,
-                                lastUpdateDt = rateInfo.Date + " " + rateInfo.Time
-                            });
-                        }
-                    }
-                }
-
-                return Ok(JsonView(true, "查询成功!", reteInfos));
+                return Ok(JsonView(true, "查询成功!", await GeneralMethod.EnterExitCostLiveRate()));
             }
             else if (dto.TipsType == 2)
             {
-                var visaData = await _visaFeeInfoRep.EntryAndExitTips(dto.GroupId);
+                var visaData = await _visaFeeInfoRep.EnterExitCostVisaTips(dto.GroupId);
                 return Ok(JsonView(true, "查询成功!", visaData.Data));
 
             }

File diff suppressed because it is too large
+ 1464 - 1474
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs


+ 5 - 0
OASystem/OASystem.Domain/Dtos/Groups/EnterExitCostDraftDto.cs

@@ -267,6 +267,11 @@ namespace OASystem.Domain.Dtos.Groups
 
     public class EnterExitCostDraftCorrelationTipsDto : PortDtoBase { }
 
+    public class EnterExitCostDraftVisaTipsDto : PortDtoBase {
+
+        public int DraftId { get; set; }
+    }
+
     /// <summary>
     /// 出入境费用 - 表格导出 Dto
     /// </summary>

+ 64 - 7
OASystem/OASystem.Infrastructure/Repositories/Groups/VisaFeeInfoRepository.cs

@@ -270,12 +270,12 @@ namespace OASystem.Infrastructure.Repositories.Groups
         }
 
         /// <summary>
-        /// 三公费用签证费用提示
+        /// 出入境费用签证费用提示
         /// </summary>
         /// <param name="portType"></param>
         /// <param name="diId"></param>
         /// <returns></returns>
-        public async Task<Result> EntryAndExitTips(int diId)
+        public async Task<Result> EnterExitCostVisaTips(int diId)
         {
             if (diId < 1) return _result = new Result() { Code = -1, Msg = "请传入有效的DiId参数" };
 
@@ -289,12 +289,14 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             visaData = visaData.Where(it => it.IsChecked == 1).ToList();
             var visaData1 = visaData.GroupBy(it => it.CountryVisaFeeId);
-
+            
+            //费用报价系数
+            decimal priceCoeff = 1.20M; 
             foreach (var kvp in visaData1)
             {
                 var countryData = visaCountryDatas.Find(it => it.Id == kvp.Key);
-                decimal _otherFee = kvp.FirstOrDefault()?.OtherFee ?? 0;
-                decimal _visaFee = Convert.ToDecimal(countryData?.VisaPrice ?? 0.00M);
+                decimal _otherFee = kvp.FirstOrDefault()?.OtherFee * priceCoeff ?? 0;
+                decimal _visaFee = Convert.ToDecimal(countryData?.VisaPrice ?? 0.00M) * priceCoeff;
                 decimal visaFeeTotal = _visaFee + _otherFee;
                 decimal _agencyFee = 0;
                 decimal _GrandBusinessAgencyFee = 0;
@@ -309,7 +311,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         {
                             remark1 += $@"大公务代办费:{item.AgencyFee.ToString("#0.00")}元、";
                             _agencyFee += item.AgencyFee;
-                            _GrandBusinessAgencyFee = item.AgencyFee;
+                            _GrandBusinessAgencyFee = item.AgencyFee * priceCoeff;
                         }
                     }
                     else if (item.OBType == 1)
@@ -318,7 +320,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         {
                             remark1 += $@"小公务代办费:{item.AgencyFee.ToString("#0.00")}元、";
                             _agencyFee += item.AgencyFee;
-                            _PettyBusinessAgencyFee = item.AgencyFee;
+                            _PettyBusinessAgencyFee = item.AgencyFee * priceCoeff;
                         }
                     }
                 }
@@ -351,5 +353,60 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             return _result;
         }
+        /// <summary>
+        /// 出入境费用草稿签证费用提示
+        /// </summary>
+        /// <param name="portType"></param>
+        /// <param name="diId"></param>
+        /// <returns></returns>
+        public async Task<(decimal,string)> EnterExitCostDraftVisaTips(string[] countrys)
+        {
+            var visaCountryDatas = await _sqlSugar.Queryable<Res_CountryFeeCost>().Where(it => countrys.Contains(it.VisaCountry)).ToListAsync();
+
+            string remark = "";
+            decimal feeTotal = 0.00M;
+
+            //费用报价系数
+            decimal priceCoeff = 1.20M;
+            foreach (var kvp in visaCountryDatas)
+            {
+                var countryName = kvp?.VisaCountry ?? "";
+                //免签
+                if (kvp.IsVisaExemption == 0)
+                {
+                    remark += $@"{countryName}:免签;";
+                    continue;
+                }
+
+                decimal visaFee = Convert.ToDecimal(kvp?.VisaPrice ?? 0.00M) * priceCoeff;
+                
+
+                decimal gbAgencyFee = kvp.GrandBusinessAgencyFee;
+                decimal pbAgencyFee = kvp.PettyBusinessAgencyFee;
+
+                string remark1 = $"签证费:{visaFee.ToString("#0.00")}元、";
+                if (gbAgencyFee > 0.00M)
+                {
+                    remark1 += $@"大公务代办费:{gbAgencyFee.ToString("#0.00")}元、";
+                    gbAgencyFee *=  priceCoeff;
+                }
+
+                if (pbAgencyFee > 0.00M)
+                {
+                    remark1 += $@"小公务代办费:{pbAgencyFee.ToString("#0.00")}元、";
+                    pbAgencyFee *= priceCoeff;
+                }
+
+                if (remark1.Length > 0) remark1 = remark1.Substring(0, remark1.Length - 1);
+                decimal visaFeeTotal = visaFee + gbAgencyFee + pbAgencyFee;
+
+                remark += $@"{countryName}:签证总费用:{visaFeeTotal}元/人 其中({remark1});";
+
+                feeTotal += visaFeeTotal;
+
+            }
+
+            return (feeTotal,remark);
+        }
     }
 }