瀏覽代碼

优化费用计算逻辑及代码可读性

- 根据用户选择条件调整费用计算逻辑,避免无效计算。
- 格式化 SQL 查询代码,提升可读性。
- 新增 Word 表格删除逻辑,处理空数据场景。
- 完善费用详情书签数据,增加汇总金额和详情信息。
- 修复 `GroupsController` 返回值逻辑,提供更详细提示。
- 优化字符串处理,去除多余换行符。
- 简化 `CurrencyInfo` 初始化语法,提升代码简洁性。
- 调整汇率计算逻辑,抽取上浮比例变量,便于扩展。
Lyyyi 16 小時之前
父節點
當前提交
0ec46c652f

+ 37 - 19
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -1087,29 +1087,42 @@ namespace OASystem.API.Controllers
                     }
 
                     //数据源
-                    List<Grp_DayAndCost> dac1 = _DayAndCosts.Where(it => it.Type == 1).ToList(); //住宿费
-                    List<Grp_DayAndCost> dac2 = _DayAndCosts.Where(it => it.Type == 2).ToList(); //伙食费
-                    List<Grp_DayAndCost> dac3 = _DayAndCosts.Where(it => it.Type == 3).ToList(); //公杂费
-                    List<Grp_DayAndCost> dac4 = _DayAndCosts.Where(it => it.Type == 4).ToList(); //培训费
+                    //住宿费 伙食费 公杂费 培训费 选中才计算出费用
+
+                    //住宿费 选中赋值
+                    List<Grp_DayAndCost> dac1 = new List<Grp_DayAndCost>(); 
+                    if (_EnterExitCosts.ChoiceThree == 1) dac1 = _DayAndCosts.Where(it => it.Type == 1).ToList(); //住宿费
+
+                    //伙食费 选中赋值
+                    List<Grp_DayAndCost> dac2 = new List<Grp_DayAndCost>();
+                    if (_EnterExitCosts.ChoiceFour == 1) dac1 = _DayAndCosts.Where(it => it.Type == 2).ToList(); //伙食费
+
+                    //公杂费 选中赋值
+                    List<Grp_DayAndCost> dac3 = new List<Grp_DayAndCost>();
+                    if (_EnterExitCosts.ChoiceFour == 1) dac1 = _DayAndCosts.Where(it => it.Type == 3).ToList(); //公杂费
+
+                    //培训费 选中赋值
+                    List<Grp_DayAndCost> dac4 = new List<Grp_DayAndCost>();
+                    if (_EnterExitCosts.ChoiceFour == 1) dac1 = _DayAndCosts.Where(it => it.Type == 4).ToList(); //培训费
 
                     //币种Data
                     var currData = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();
 
                     var DeleClientList = _sqlSugar.Queryable<Grp_TourClientList>()
-                                                  .LeftJoin<Crm_DeleClient>((tcl, dc) => tcl.ClientId == dc.Id && dc.IsDel == 0)
-                                                  .LeftJoin<Crm_CustomerCompany>((tcl, dc, cc) => dc.CrmCompanyId == cc.Id && dc.IsDel == 0)
-                                                  .Where((tcl, dc, cc) => tcl.IsDel == 0 && tcl.DiId == dto.DiId)
-                                                  .Select((tcl, dc, cc) => new ClientAirInfo
-                                                  {
-                                                      LastName = dc.LastName,
-                                                      FirstName = dc.FirstName,
-                                                      Sex = dc.Sex,
-                                                      Birthday = dc.BirthDay,
-                                                      Company = cc.CompanyFullName,
-                                                      Job = dc.Job,
-                                                      AirType = tcl.ShippingSpaceTypeId
-                                                  })
-                                                  .ToList();
+                        .LeftJoin<Crm_DeleClient>((tcl, dc) => tcl.ClientId == dc.Id && dc.IsDel == 0)
+                        .LeftJoin<Crm_CustomerCompany>((tcl, dc, cc) => dc.CrmCompanyId == cc.Id && dc.IsDel == 0)
+                        .Where((tcl, dc, cc) => tcl.IsDel == 0 && tcl.DiId == dto.DiId)
+                        .Select((tcl, dc, cc) => new ClientAirInfo
+                        {
+                            LastName = dc.LastName,
+                            FirstName = dc.FirstName,
+                            Sex = dc.Sex,
+                            Birthday = dc.BirthDay,
+                            Company = cc.CompanyFullName,
+                            Job = dc.Job,
+                            AirType = tcl.ShippingSpaceTypeId
+                        })
+                        .ToList();
                     if (DeleClientList.Count < 1)
                     {
                         return Ok(JsonView(false, "暂无团组成员,请先填写团组成员!!!"));
@@ -1124,7 +1137,6 @@ namespace OASystem.API.Controllers
                     var _ClientNames = DeleClientList.Select(x => x.Name).ToList();
                     var _GroupClient = DeleClientList.GroupBy(x => x.Company).ToList();
 
-
                     Dictionary<string, string> bookmarkArr = null;
 
                     string tempPath = AppSettingsHelper.Get("WordBasePath") + $"ForeignReceivables/Temp/汇款通知.docx";
@@ -1209,6 +1221,7 @@ namespace OASystem.API.Controllers
                             Aspose.Words.Tables.Table ChildTable2 = (Aspose.Words.Tables.Table)FirstTable.GetChild(NodeType.Table, 2, true);
 
                             int rowIndex = 0;
+                            if (dac1.Count <= 0 && ChildTable != null) ChildTable.Remove(); //删除表格
                             foreach (var item in dac1)
                             {
                                 if (string.IsNullOrWhiteSpace(item.Place))
@@ -1258,7 +1271,9 @@ namespace OASystem.API.Controllers
 
                             }
                             placeArr.Clear();
+
                             rowIndex = 0;
+                            if (dac2.Count <= 0 && ChildTable1 != null) ChildTable1.Remove(); //删除表格
                             foreach (var item in dac2)
                             {
                                 if (string.IsNullOrWhiteSpace(item.Place))
@@ -1308,7 +1323,9 @@ namespace OASystem.API.Controllers
 
                             }
                             placeArr.Clear();
+
                             rowIndex = 0;
+                            if (dac2.Count <= 0 && ChildTable2 != null) ChildTable2.Remove(); //删除表格
                             foreach (var item in dac3)
                             {
                                 if (string.IsNullOrWhiteSpace(item.Place))
@@ -1357,6 +1374,7 @@ namespace OASystem.API.Controllers
 
                             }
                             placeArr.Clear();
+                            
                             TeableBookmarkArr.Add("zsinfo", zsinfo); //住宿费详情
                             TeableBookmarkArr.Add("hs", dac2.Sum(x => Convert.ToDecimal(x.SubTotal)).ToString("#0.00") + " 元"); //伙食费
                             TeableBookmarkArr.Add("hsinfo", hsinfo); //伙食费详情

+ 3 - 3
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -512,8 +512,8 @@ namespace OASystem.API.Controllers
                 return Ok(okObjectResult.Value);
             }
 
-            return Ok(result);
-            //return Ok(JsonView(true, $"操作成功!共为 {validGroupIds.Count} 个团组添加了 {successCount} 条确认记录"));
+            //return Ok(result);
+            return Ok(JsonView(true, $"操作成功!共为 {validGroupIds.Count} 个团组添加了 {successCount} 条确认记录"));
         }
 
         /// <summary>
@@ -1327,7 +1327,7 @@ namespace OASystem.API.Controllers
                     }
                 }
 
-                x.OperatorLabel = operatorNames.ToString().TrimEnd('\n', '\r');
+                x.OperatorLabel = operatorNames.ToString().TrimEnd('\n', '\r'); 
 
                 // 设置背景颜色为红色
                 // C表没数据并且没点提醒确认按钮(无成本费用按钮)的团组该行显示红色

+ 11 - 7
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -4333,12 +4333,11 @@ namespace OASystem.API.OAMethodLib
             //默认币种显示
             List<CurrencyInfo> currencyInfos = new List<CurrencyInfo>()
                 {
-                    new CurrencyInfo (){ CurrencyCode="USD",CurrencyName = "美元",Rate = 7.5000M },
-                    new CurrencyInfo (){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 8.0000M },
-                    new CurrencyInfo (){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 9.5000M },
-                    new CurrencyInfo (){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0500M },
-                    new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.9500M },
-
+                    new(){ CurrencyCode="USD",CurrencyName = "美元",Rate = 7.5000M },
+                    new(){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 8.0000M },
+                    new(){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 9.5000M },
+                    new(){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0500M },
+                    new(){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.9500M }
                 };
 
             var currencyRate = await _juHeApi.PostItemRateAsync(currencyInfos.Select(it => it.CurrencyCode!).ToArray());
@@ -4351,7 +4350,12 @@ namespace OASystem.API.OAMethodLib
                     {
                         item.Rate = Convert.ToDecimal((Convert.ToDecimal(rateInfo.FSellPri == null ? 0.00M : rateInfo.FSellPri) / 100.00M).ToString("#0.0000"));
 
-                        decimal rate1 = item.Rate * 1.0350M;
+                        //currency == usd  上浮比例 1.0300
+                        decimal increaseRate = 1.0350M;
+
+                        //if (item.CurrencyCode.ToUpper().equals("USD")) increaseRate = 1.0300M;
+
+                        decimal rate1 = item.Rate * increaseRate;
                         //rate1 += 0.01M;
 
                         reteInfos.Add(new