leiy 8 månader sedan
förälder
incheckning
a72dac380d
1 ändrade filer med 151 tillägg och 27 borttagningar
  1. 151 27
      OASystem/OASystem.Api/Controllers/StatisticsController.cs

+ 151 - 27
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -23,6 +23,8 @@ using TypeInfo = OASystem.Domain.ViewModels.Statistics.TypeInfo;
 using System.Net.NetworkInformation;
 using System.ComponentModel.Design;
 using NetTaste;
+using OASystem.Domain.ViewModels.QiYeWeChat;
+using NPOI.POIFS.Crypt.Dsig;
 
 namespace OASystem.API.Controllers
 {
@@ -2184,9 +2186,9 @@ namespace OASystem.API.Controllers
         /// </summary>
         /// <param name="_dto">市场部销售额请求dto</param>
         /// <returns></returns>
-        [HttpPost("PostMarketingSalesStatistics")]
+        [HttpPost("PostMarketingSalesStatistics_Year")]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> PostMarketingSalesStatistics(MarketingSalesStatisticsDto _dto)
+        public async Task<IActionResult> PostMarketingSalesStatistics_Year(MarketingSalesStatisticsDto _dto)
         {
             #region  参数验证
 
@@ -2209,34 +2211,122 @@ namespace OASystem.API.Controllers
 
             #endregion
 
-            //TODO:sugar 报错
-            //Invalid attempt to call FieldCount when reader is closed
-            //Invalid operation.The connection is closed.
-            //今年销售额
             string beginDt = $"{_dto.BeginDt} 00:00:00",endDt = $"{_dto.EndDt} 23:59:59";
-            var paras = new SugarParameter[]{
-                new SugarParameter("@companyId", _dto.CompanyId),
-                new SugarParameter("@groupPickupUserId", _dto.GroupPickupUserId),
-                new SugarParameter("@beginDt", beginDt),
-                new SugarParameter("@endDt", endDt),
-                new SugarParameter("@thisSales", null, true),
-                new SugarParameter("@lastSales", null, true),
-                new SugarParameter("@yoy", null, true)
-            };
-            var dt = await _sqlSugar.Ado.UseStoredProcedure().GetDataTableAsync("CalculateSales", paras);
+            
+            return Ok(JsonView(true, "操作成功!", await GroupSales(_dto.CompanyId, _dto.GroupPickupUserId, beginDt, endDt)));
+        }
 
+        /// <summary>
+        /// 计算团组销售额
+        /// </summary>
+        /// <param name="companyId"></param>
+        /// <param name="groupPickupUserId"></param>
+        /// <param name="beginDt"></param>
+        /// <param name="endDt"></param>
+        /// <returns></returns>
+        private async Task<SalesYOYView> GroupSales(int companyId, int groupPickupUserId, string beginDt, string endDt)
+        {
             decimal thisSales = 0.00M, lastSales = 0.00M, yoy = 0.00M;
-            if (dt.Rows.Count > 0)
+            string userSqlWhere = "";
+            if (companyId > 0) userSqlWhere += string.Format($" And CompanyId={companyId}");
+            if (groupPickupUserId > 0) userSqlWhere += string.Format($" And Id={groupPickupUserId}");
+            string sql = string.Format($@"SELECT
+  SUM(Sales) AS Sales
+FROM
+  (
+    SELECT
+      YEAR(di.VisitDate) AS [Year],
+      (
+        SELECT
+          SUM(ItemSumPrice * Rate)
+        FROM
+          Fin_ForeignReceivables
+        WHERE
+          IsDel = 0
+          AND AddingWay IN (0, 1, 2)
+          AND di.Id = Diid
+      ) AS Sales
+    FROM
+      Grp_DelegationInfo di
+    WHERE
+      di.IsDel = 0
+      AND di.JietuanOperator IN (
+        SELECT
+          Id
+        FROM
+          Sys_Users
+        WITH
+          (NoLock)
+        WHERE
+          IsDel = 0 {userSqlWhere} 
+      )
+      AND di.VisitDate BETWEEN '{beginDt}' AND '{endDt}'
+  ) temp");
+
+            var salesData = await _sqlSugar.SqlQueryable<SalesView>(sql).FirstAsync();
+
+            thisSales = salesData?.Sales ?? 0.00M;
+
+            string lastBeginDt = Convert.ToDateTime(beginDt).AddYears(-1).ToString("yyyy-MM-dd HH:mm:ss"),
+                   lastEndDt = Convert.ToDateTime(endDt).AddYears(-1).ToString("yyyy-MM-dd HH:mm:ss");
+            string lastSql = string.Format($@"SELECT
+  SUM(Sales) AS Sales
+FROM
+  (
+    SELECT
+      YEAR(di.VisitDate) AS [Year],
+      (
+        SELECT
+          SUM(ItemSumPrice * Rate)
+        FROM
+          Fin_ForeignReceivables
+        WHERE
+          IsDel = 0
+          AND AddingWay IN (0, 1, 2)
+          AND di.Id = Diid
+      ) AS Sales
+    FROM
+      Grp_DelegationInfo di
+    WHERE
+      di.IsDel = 0
+      AND di.JietuanOperator IN (
+        SELECT
+          Id
+        FROM
+          Sys_Users
+        WITH
+          (NoLock)
+        WHERE
+          IsDel = 0 {userSqlWhere} 
+      )
+      AND di.VisitDate BETWEEN '{lastBeginDt}' AND '{lastEndDt}'
+  ) temp");
+
+            var salesData1 = await _sqlSugar.SqlQueryable<SalesView>(lastSql).FirstAsync();
+            lastSales = salesData1?.Sales ?? 0.00M;
+
+            if (lastSales != 0 && thisSales != 0) yoy = (thisSales - lastSales) / lastSales;
+
+            var _view = new SalesYOYView
             {
-                thisSales = decimal.Parse( dt.Rows[0]["ThisSales"].ToString() ?? "0.00");
-                lastSales = decimal.Parse(dt.Rows[0]["LastSales"].ToString() ?? "0.00");
-                yoy = decimal.Parse(dt.Rows[0]["YOY"].ToString() ?? "0.00");
-            }
+                thisSales = thisSales.ToString("#0.00"),
+                lastSales = lastSales.ToString("#0.00"),
+                yoy = yoy.ToString("#0.00")
+
+            };
+            return _view;
+        }
+
+        private class SalesView
+        {
+            public decimal Sales { get; set; }
+        }
 
-            return Ok(JsonView(true, "操作成功!", new { 
-                thisYearSales = decimal.Parse(thisSales.ToString("#0.00")), 
-                lastYearSales = decimal.Parse(lastSales.ToString("#0.00")),
-                yoy = decimal.Parse(yoy.ToString("#0.00")) }));
+        private class SalesYOYView
+        {
+            public string thisSales { get; set; }
+            public string lastSales { get; set; }
+            public string yoy { get; set; }
         }
 
 
@@ -2376,9 +2466,43 @@ Order By Count Desc");
             }
             else return Ok(JsonView(false, "StatisticsType不在可取范围!"));
 
-            var data = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql).ToListAsync();
+            if (_dto.PortType == 1)
+            {
+                string sql1 = string.Format(@$"Select 
+	sd.[Name],
+	Count(*) As [Count]
+From Grp_DelegationInfo di
+Left Join Sys_SetData sd On di.TeamDid = sd.Id
+Where di.Isdel = 0 
+And VisitDate Between '{beginDt}' And  '{endDt}'
+Group By [Name]
+Order By Count Desc");
 
-            return Ok(JsonView(true, "操作成功!", data, data.Count));
+
+                var customerTypeData = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql1).ToListAsync();
+
+                string sql2 = string.Format(@$"Select 
+	sd.[Name],
+	Count(*) As [Count]
+From Grp_DelegationInfo di
+Left Join Sys_SetData sd On di.TeamLevSId = sd.Id
+Where di.Isdel = 0 
+And VisitDate Between '{beginDt}' And  '{endDt}'
+Group By [Name]
+Order By Count Desc");
+                var clientGradeData = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql2).ToListAsync();
+                return Ok(JsonView(true, "操作成功!", new {
+                    customerTypeData= customerTypeData,
+                    clientGradeData = clientGradeData
+                }));
+
+            }
+            else if (_dto.PortType == 2 || _dto.PortType == 3)
+            {
+                var data = await _sqlSugar.SqlQueryable<MarketingSalesGroupStatisticsView>(sql).ToListAsync();
+                return Ok(JsonView(true, "操作成功!", data, data.Count));
+            }
+            else return Ok(JsonView(false, MsgTips.Port));
         }
 
         /// <summary>