From ce1292c9cf37195b6abd2699dfc5d6cb3e143c9b Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期日, 12 四月 2026 23:38:19 +0800
Subject: [PATCH] feat(MES): 添加MES接口相关实体和DTO JS扩展文件至JSX格式并更新配置

---
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs |  287 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 173 insertions(+), 114 deletions(-)

diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs
index 78a21e9..0d6498d 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs
@@ -25,99 +25,129 @@
         [HttpGet("Overview")]
         public async Task<WebResponseContent> Overview()
         {
-            var today = DateTime.Today;
-            var firstDayOfMonth = new DateTime(today.Year, today.Month, 1);
-
-            // 浠婃棩鍏ュ簱鏁�
-            var todayInbound = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= today && t.TaskType >= 500 && t.TaskType < 600)
-                .CountAsync();
-
-            // 浠婃棩鍑哄簱鏁�
-            var todayOutbound = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= today && t.TaskType >= 100 && t.TaskType < 200)
-                .CountAsync();
-
-            // 鏈湀鍏ュ簱鏁�
-            var monthInbound = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= firstDayOfMonth && t.TaskType >= 500 && t.TaskType < 600)
-                .CountAsync();
-
-            // 鏈湀鍑哄簱鏁�
-            var monthOutbound = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= firstDayOfMonth && t.TaskType >= 100 && t.TaskType < 200)
-                .CountAsync();
-
-            // 褰撳墠鎬诲簱瀛�
-            var totalStock = await _db.Queryable<Dt_StockInfo>().CountAsync();
-
-            return WebResponseContent.Instance.OK(null, new
+            try
             {
-                TodayInbound = todayInbound,
-                TodayOutbound = todayOutbound,
-                MonthInbound = monthInbound,
-                MonthOutbound = monthOutbound,
-                TotalStock = totalStock
-            });
+                var today = DateTime.Today;
+                var firstDayOfMonth = new DateTime(today.Year, today.Month, 1);
+
+                // 浠婃棩鍏ュ簱鏁�
+                var todayInbound = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= today && t.TaskType >= 500 && t.TaskType < 600)
+                    .CountAsync();
+
+                // 浠婃棩鍑哄簱鏁�
+                var todayOutbound = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= today && t.TaskType >= 100 && t.TaskType < 200)
+                    .CountAsync();
+
+                // 鏈湀鍏ュ簱鏁�
+                var monthInbound = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= firstDayOfMonth && t.TaskType >= 500 && t.TaskType < 600)
+                    .CountAsync();
+
+                // 鏈湀鍑哄簱鏁�
+                var monthOutbound = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= firstDayOfMonth && t.TaskType >= 100 && t.TaskType < 200)
+                    .CountAsync();
+
+                // 褰撳墠鎬诲簱瀛�
+                var totalStock = await _db.Queryable<Dt_StockInfo>().CountAsync();
+
+                return WebResponseContent.Instance.OK(null, new
+                {
+                    TodayInbound = todayInbound,
+                    TodayOutbound = todayOutbound,
+                    MonthInbound = monthInbound,
+                    MonthOutbound = monthOutbound,
+                    TotalStock = totalStock
+                });
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"鎬昏鏁版嵁鑾峰彇澶辫触: {ex.Message}");
+            }
         }
 
         /// <summary>
         /// 姣忔棩缁熻
         /// </summary>
+        /// <remarks>
+        /// 娉ㄦ剰锛氭暟鎹湪 SQL 灞傝繃婊ゅ悗锛屽湪搴旂敤灞傛寜鏃ユ湡鍒嗙粍銆�
+        /// SqlSugar 鐨� GroupBy 涓嶆敮鎸佸 .Date 杩欐牱鐨勮绠楀垪鐩存帴鐢熸垚 SQL GROUP BY锛�
+        /// 鍥犳閲囩敤姝ゆ柟寮忎互纭繚璺ㄦ暟鎹簱鍏煎鎬с��
+        /// </remarks>
         [HttpGet("DailyStats")]
         public async Task<WebResponseContent> DailyStats([FromQuery] int days = 30)
         {
-            if (days <= 0) days = 30;
-            if (days > 365) days = 365;
+            try
+            {
+                if (days <= 0) days = 30;
+                if (days > 365) days = 365;
 
-            var startDate = DateTime.Today.AddDays(-days + 1);
+                var startDate = DateTime.Today.AddDays(-days + 1);
 
-            var query = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= startDate)
-                .Select(t => new { t.InsertTime, t.TaskType })
-                .ToListAsync();
+                var query = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= startDate)
+                    .Select(t => new { t.InsertTime, t.TaskType })
+                    .ToListAsync();
 
-            var result = query
-                .GroupBy(t => t.InsertTime.Date)
-                .Select(g => new
-                {
-                    Date = g.Key.ToString("yyyy-MM-dd"),
-                    Inbound = g.Count(t => t.TaskType >= 500 && t.TaskType < 600),
-                    Outbound = g.Count(t => t.TaskType >= 100 && t.TaskType < 200)
-                })
-                .OrderBy(x => x.Date)
-                .ToList();
+                var result = query
+                    .GroupBy(t => t.InsertTime.Date)
+                    .Select(g => new
+                    {
+                        Date = g.Key.ToString("yyyy-MM-dd"),
+                        Inbound = g.Count(t => t.TaskType >= 500 && t.TaskType < 600),
+                        Outbound = g.Count(t => t.TaskType >= 100 && t.TaskType < 200)
+                    })
+                    .OrderBy(x => x.Date)
+                    .ToList();
 
-            return WebResponseContent.Instance.OK(null, result);
+                return WebResponseContent.Instance.OK(null, result);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"姣忔棩缁熻鑾峰彇澶辫触: {ex.Message}");
+            }
         }
 
         /// <summary>
         /// 姣忓懆缁熻
         /// </summary>
+        /// <remarks>
+        /// 娉ㄦ剰锛氭暟鎹湪 SQL 灞傝繃婊ゅ悗锛屽湪搴旂敤灞傛寜 ISO 8601 鍛ㄩ敭鍒嗙粍銆�
+        /// 鍛ㄩ敭涓� "YYYY-Www" 鏍煎紡锛屾棤娉曠洿鎺ュ湪 SQL 灞傜敤 GROUP BY 瀹炵幇銆�
+        /// </remarks>
         [HttpGet("WeeklyStats")]
         public async Task<WebResponseContent> WeeklyStats([FromQuery] int weeks = 12)
         {
-            if (weeks <= 0) weeks = 12;
+            try
+            {
+                if (weeks <= 0) weeks = 12;
 
-            var startDate = DateTime.Today.AddDays(-weeks * 7);
+                var startDate = DateTime.Today.AddDays(-weeks * 7);
 
-            var query = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= startDate)
-                .Select(t => new { t.InsertTime, t.TaskType })
-                .ToListAsync();
+                var query = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= startDate)
+                    .Select(t => new { t.InsertTime, t.TaskType })
+                    .ToListAsync();
 
-            var result = query
-                .GroupBy(t => GetWeekKey(t.InsertTime))
-                .Select(g => new
-                {
-                    Week = g.Key,
-                    Inbound = g.Count(t => t.TaskType >= 500 && t.TaskType < 600),
-                    Outbound = g.Count(t => t.TaskType >= 100 && t.TaskType < 200)
-                })
-                .OrderBy(x => x.Week)
-                .ToList();
+                var result = query
+                    .GroupBy(t => GetWeekKey(t.InsertTime))
+                    .Select(g => new
+                    {
+                        Week = g.Key,
+                        Inbound = g.Count(t => t.TaskType >= 500 && t.TaskType < 600),
+                        Outbound = g.Count(t => t.TaskType >= 100 && t.TaskType < 200)
+                    })
+                    .OrderBy(x => x.Week)
+                    .ToList();
 
-            return WebResponseContent.Instance.OK(null, result);
+                return WebResponseContent.Instance.OK(null, result);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"姣忓懆缁熻鑾峰彇澶辫触: {ex.Message}");
+            }
         }
 
         private string GetWeekKey(DateTime date)
@@ -133,31 +163,43 @@
         /// <summary>
         /// 姣忔湀缁熻
         /// </summary>
+        /// <remarks>
+        /// 娉ㄦ剰锛氭暟鎹湪 SQL 灞傝繃婊ゅ悗锛屽湪搴旂敤灞傛寜骞存湀鍒嗙粍銆�
+        /// SqlSugar 鐨� GroupBy 涓嶆敮鎸佸尶鍚嶅璞� (Year, Month) 鐩存帴鏄犲皠鍒� SQL GROUP BY锛�
+        /// 鍥犳閲囩敤姝ゆ柟寮忎互纭繚璺ㄦ暟鎹簱鍏煎鎬с��
+        /// </remarks>
         [HttpGet("MonthlyStats")]
         public async Task<WebResponseContent> MonthlyStats([FromQuery] int months = 12)
         {
-            if (months <= 0) months = 12;
+            try
+            {
+                if (months <= 0) months = 12;
 
-            var startDate = DateTime.Today.AddMonths(-months + 1);
-            startDate = new DateTime(startDate.Year, startDate.Month, 1);
+                var startDate = DateTime.Today.AddMonths(-months + 1);
+                startDate = new DateTime(startDate.Year, startDate.Month, 1);
 
-            var query = await _db.Queryable<Dt_Task_Hty>()
-                .Where(t => t.InsertTime >= startDate)
-                .Select(t => new { t.InsertTime, t.TaskType })
-                .ToListAsync();
+                var query = await _db.Queryable<Dt_Task_Hty>()
+                    .Where(t => t.InsertTime >= startDate)
+                    .Select(t => new { t.InsertTime, t.TaskType })
+                    .ToListAsync();
 
-            var result = query
-                .GroupBy(t => new { t.InsertTime.Year, t.InsertTime.Month })
-                .Select(g => new
-                {
-                    Month = $"{g.Key.Year}-{g.Key.Month:D2}",
-                    Inbound = g.Count(t => t.TaskType >= 500 && t.TaskType < 600),
-                    Outbound = g.Count(t => t.TaskType >= 100 && t.TaskType < 200)
-                })
-                .OrderBy(x => x.Month)
-                .ToList();
+                var result = query
+                    .GroupBy(t => new { t.InsertTime.Year, t.InsertTime.Month })
+                    .Select(g => new
+                    {
+                        Month = $"{g.Key.Year}-{g.Key.Month:D2}",
+                        Inbound = g.Count(t => t.TaskType >= 500 && t.TaskType < 600),
+                        Outbound = g.Count(t => t.TaskType >= 100 && t.TaskType < 200)
+                    })
+                    .OrderBy(x => x.Month)
+                    .ToList();
 
-            return WebResponseContent.Instance.OK(null, result);
+                return WebResponseContent.Instance.OK(null, result);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"姣忔湀缁熻鑾峰彇澶辫触: {ex.Message}");
+            }
         }
 
         /// <summary>
@@ -166,47 +208,64 @@
         [HttpGet("StockAgeDistribution")]
         public async Task<WebResponseContent> StockAgeDistribution()
         {
-            var now = DateTime.Now;
-
-            // 浣跨敤 SQL 鐩存帴鍒嗙粍缁熻锛岄伩鍏嶅姞杞芥墍鏈夋暟鎹埌鍐呭瓨
-            var result = new[]
+            try
             {
-                new { Range = "7澶╁唴", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, now) <= 7).CountAsync() },
-                new { Range = "7-30澶�", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, now) > 7 && SqlFunc.DateDiff(DateType.Day, s.CreateDate, now) <= 30).CountAsync() },
-                new { Range = "30-90澶�", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, now) > 30 && SqlFunc.DateDiff(DateType.Day, s.CreateDate, now) <= 90).CountAsync() },
-                new { Range = "90澶╀互涓�", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, now) > 90).CountAsync() }
-            };
+                var today = DateTime.Today;
 
-            return WebResponseContent.Instance.OK(null, result);
+                // 浣跨敤 SQL 鐩存帴鍒嗙粍缁熻锛岄伩鍏嶅姞杞芥墍鏈夋暟鎹埌鍐呭瓨
+                var result = new[]
+                {
+                    new { Range = "7澶╁唴", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, today) <= 7).CountAsync() },
+                    new { Range = "7-30澶�", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, today) > 7 && SqlFunc.DateDiff(DateType.Day, s.CreateDate, today) <= 30).CountAsync() },
+                    new { Range = "30-90澶�", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, today) > 30 && SqlFunc.DateDiff(DateType.Day, s.CreateDate, today) <= 90).CountAsync() },
+                    new { Range = "90澶╀互涓�", Count = await _db.Queryable<Dt_StockInfo>().Where(s => SqlFunc.DateDiff(DateType.Day, s.CreateDate, today) > 90).CountAsync() }
+                };
+
+                return WebResponseContent.Instance.OK(null, result);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"搴撳瓨搴撻緞鍒嗗竷鑾峰彇澶辫触: {ex.Message}");
+            }
         }
 
         /// <summary>
         /// 鍚勪粨搴撳簱瀛樺垎甯�
         /// </summary>
+        /// <remarks>
+        /// 浣跨敤 SQL GROUP BY 鍦ㄦ暟鎹簱灞傞潰鑱氬悎锛岄伩鍏嶅姞杞藉叏閮ㄥ簱瀛樿褰曞埌鍐呭瓨銆�
+        /// </remarks>
         [HttpGet("StockByWarehouse")]
         public async Task<WebResponseContent> StockByWarehouse()
         {
-            // 鍏堟煡璇粨搴撳悕绉�
-            var warehouses = await _db.Queryable<Dt_Warehouse>()
-                .Select(w => new { w.WarehouseId, w.WarehouseName })
-                .ToListAsync();
-            var warehouseDict = warehouses.ToDictionary(w => w.WarehouseId, w => w.WarehouseName);
+            try
+            {
+                // 鏌ヨ浠撳簱鍚嶇О
+                var warehouses = await _db.Queryable<Dt_Warehouse>()
+                    .Select(w => new { w.WarehouseId, w.WarehouseName })
+                    .ToListAsync();
+                var warehouseDict = warehouses.ToDictionary(w => w.WarehouseId, w => w.WarehouseName);
 
-            // 鏌ヨ搴撳瓨鏁版嵁骞跺湪鍐呭瓨涓垎缁�
-            var stocks = await _db.Queryable<Dt_StockInfo>()
-                .Select(s => new { s.WarehouseId })
-                .ToListAsync();
+                // 浣跨敤 SQL GROUP BY 鍦ㄦ暟鎹簱灞傞潰鑱氬悎锛屼粎杩斿洖鑱氬悎缁撴灉
+                var stockGroups = await _db.Queryable<Dt_StockInfo>()
+                    .GroupBy(s => s.WarehouseId)
+                    .Select(s => new { s.WarehouseId, Count = SqlFunc.AggregateCount(s.Id) })
+                    .ToListAsync();
 
-            var result = stocks
-                .GroupBy(s => s.WarehouseId)
-                .Select(g => new
-                {
-                    Warehouse = warehouseDict.TryGetValue(g.Key, out var name) ? name : $"浠撳簱{g.Key}",
-                    Count = g.Count()
-                })
-                .ToList();
+                var result = stockGroups
+                    .Select(g => new
+                    {
+                        Warehouse = warehouseDict.TryGetValue(g.WarehouseId, out var name) ? name : $"浠撳簱{g.WarehouseId}",
+                        Count = g.Count
+                    })
+                    .ToList();
 
-            return WebResponseContent.Instance.OK(null, result);
+                return WebResponseContent.Instance.OK(null, result);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"鍚勪粨搴撳簱瀛樺垎甯冭幏鍙栧け璐�: {ex.Message}");
+            }
         }
     }
 }

--
Gitblit v1.9.3