Kaynağa Gözat

团组利润统计优化,增加日付金额及数据过滤

优化SQL查询,新增DailyAmout字段统计日付团组金额,调整视图模型并在“世运会”团组中计入日付金额。增加团组名称及成本为0的过滤,提升统计准确性。调整部分注释和代码格式。
Lyyyi 1 hafta önce
ebeveyn
işleme
7a9b92b2c3

+ 30 - 14
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -7886,7 +7886,7 @@ WHERE
         {
             var view = new CorporateProfitInfosView();
 
-            //已审核SQL
+            #region 已审核SQL
             //            string sql = string.Format(@"SELECT 
             //  ROW_NUMBER() OVER(ORDER BY di.VisitDate Asc)  AS 'RowIndex', 
             //  di.Id,
@@ -8034,6 +8034,7 @@ WHERE
             //  di.IsDel = 0
             //  AND di.IsBid = 0
             //  AND di.VisitDate BETWEEN '{0}' AND '{1}'", beginDt, endDt);
+            #endregion
 
             //含未审核SQL
             string sql = string.Format(@"SELECT
@@ -8178,19 +8179,35 @@ WHERE
       dp.IsDel = 0 -- AND ccp.IsAuditGM = 1
       AND ccp.IsAuditGM != 2
       AND dp.Diid = di.Id
-  ) AS 'OtherAmount'
+  ) AS 'OtherAmount',
+  (
+    SELECT
+      SUM(dfp.SumPrice)
+    FROM
+      Fin_DailyFeePayment dfp
+    WHERE
+      dfp.IsDel = 0 
+      AND dfp.GroupId = di.Id
+  ) AS 'DailyAmout'
 FROM
   OA2023DB.dbo.Grp_DelegationInfo di
   LEFT JOIN Sys_SetData ss ON di.TeamDid = ss.Id
 WHERE
   di.IsDel = 0
-  AND di.IsBid = 0
+  -- AND di.IsBid = 0
   AND di.VisitDate BETWEEN '{0}' AND '{1}'", beginDt, endDt);
 
             var groupItems = await _sqlSugar.SqlQueryable<CorporateProfitInfo>(sql).ToArrayAsync();
 
             if (groupItems.Any())
             {
+                // 排除 投标、延期、取消 等团组名称包含的关键词 并且 团组成本费用为0 排除在外
+                var excludeKeywords = new List<string> { "测试", "延期", "投标", "取消" };
+                groupItems = groupItems.Where(g =>
+                    !excludeKeywords.Any(keyword => g.TeamName.Contains(keyword)) &&
+                    g.CostTotal != 0
+                ).ToArray();
+
                 var groupIds = groupItems.Select(x => x.Id).ToArray();
 
                 var feeCountInfos = await CorporateProfitFeeCount(groupIds);
@@ -8427,13 +8444,13 @@ WHERE
             var dailyItems = data.DailyItems;
 
             var priceTypeIds = new List<int>() {
-                686, //686 信用卡还款
-                687, //687 张总私人费用
-                688, //688 代报销社保生育补贴
-                688, //688 代报销社保生育补贴
-                306, //306 人事行政费用-张总家用类
-                325, //325 会展部备用金
-                689, //689 团组签证保险
+                686, // 686 信用卡还款
+                687, // 687 张总私人费用
+                688, // 688 代报销社保生育补贴
+                688, // 688 代报销社保生育补贴
+                306, // 306 人事行政费用-张总家用类
+                325, // 325 会展部备用金
+                689, // 689 团组签证保险
             };
 
             var companyDailyItems = dailyItems
@@ -8445,9 +8462,9 @@ WHERE
 
             //业务类型
             var groupTypeIds = new List<int>() {
-                    38,   //  政府团
-                    39,   //  企业团
-                    40,   //  散客团
+                    38,   // 政府团
+                    39,   // 企业团
+                    40,   // 散客团
                     1048  // 高校团
                 };
             var inforTypeIds = new List<int>() {
@@ -8493,7 +8510,6 @@ WHERE
                 designer.Workbook = new Workbook(tempPath);
                 designer.SetDataSource("ReceivablesTemp", datas);
 
-                //
                 designer.SetDataSource("ReceivableProfitTotal", groupReceivableTotal.ToString("#0.00"));
                 designer.SetDataSource("NotReceivableProfitTotal", notGroupReceivableTotal.ToString("#0.00"));
 

+ 11 - 1
OASystem/OASystem.Domain/ViewModels/Statistics/CorporateProfitViews.cs

@@ -96,6 +96,10 @@ namespace OASystem.Domain.ViewModels.Statistics
         /// </summary>
         public decimal OtherAmount { get; set; }
         /// <summary>
+        /// 日付团组相关金额
+        /// </summary>
+        public decimal DailyAmout { get; set; }
+        /// <summary>
         /// 收款合计
         /// </summary>
         public decimal CollectionTotal
@@ -112,7 +116,13 @@ namespace OASystem.Domain.ViewModels.Statistics
         {
             get
             {
-                return HotelAmount + LocalGuideAmount + AirTicketAmount + VisaAmount + OAAmount + InsureAmount + OtherAmount;
+                var baseAmount = HotelAmount + LocalGuideAmount + AirTicketAmount + VisaAmount + OAAmount + InsureAmount + OtherAmount;
+                if (TeamName.Contains("世运会"))
+                {
+                    baseAmount += DailyAmout;
+                }
+
+                return baseAmount;
             }
         }
         /// <summary>