From 51922d7093b9c8f52417bfdd0fe9aa087d1fb5be Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期五, 01 五月 2026 18:31:01 +0800
Subject: [PATCH] feat: 优化仓库仪表盘界面并添加电池和空托盘统计功能

---
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs |  108 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 96 insertions(+), 12 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 da08436..cffe42d 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Dashboard/DashboardController.cs
@@ -2,6 +2,7 @@
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
 using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.StockEnum;
 using WIDESEA_Core;
 using WIDESEA_Model.Models;
 
@@ -218,7 +219,7 @@
         /// 鎸夊勾鏈堢粺璁″叆绔欏拰鍑虹珯浠诲姟鏁伴噺
         /// </remarks>
         [HttpGet("MonthlyStats"), AllowAnonymous]
-        public async Task<WebResponseContent> MonthlyStats([FromQuery] int months = 12, string Roadway = null)
+        public async Task<WebResponseContent> MonthlyStats(int months, string roadway)
         {
             try
             {
@@ -230,11 +231,12 @@
                 // 浠撳簱鍚嶇О鏄犲皠
                 var roadwayNames = new Dictionary<string, string>
         {
-            { "FJSC1", "璐熸瀬鍗�1鍙蜂粨搴�" },
-            { "ZJSC1", "姝f瀬鍗�1鍙蜂粨搴�" },
+
             { "GWSC1", "楂樻俯1鍙蜂粨搴�" },
             { "CWSC1", "甯告俯1鍙蜂粨搴�" },
-            { "HCSC1", "鍒嗗1鍙蜂粨搴�" }
+            { "HCSC1", "鍒嗗1鍙蜂粨搴�" },
+            { "FJSC1", "璐熸瀬鍗�1鍙蜂粨搴�" },
+            { "ZJSC1", "姝f瀬鍗�1鍙蜂粨搴�" },
         };
 
                 // 鏋勫缓鏌ヨ
@@ -242,9 +244,9 @@
                     .Where(t => t.InsertTime >= startDate);
 
                 // 濡傛灉鎸囧畾浜嗛亾璺紝娣诲姞閬撹矾杩囨护鏉′欢
-                if (!string.IsNullOrEmpty(Roadway))
+                if (!string.IsNullOrEmpty(roadway))
                 {
-                    query = query.Where(t => t.Roadway == Roadway);
+                    query = query.Where(t => t.Roadway == roadway);
                 }
 
                 var monthlyStats = await query
@@ -294,9 +296,9 @@
                             Month = monthKey,
                             Inbound = stat.Inbound,
                             Outbound = stat.Outbound,
-                            Roadway = Roadway,
-                            RoadwayName = !string.IsNullOrEmpty(Roadway) && roadwayNames.ContainsKey(Roadway)
-                                ? roadwayNames[Roadway]
+                            Roadway = roadway,
+                            RoadwayName = !string.IsNullOrEmpty(roadway) && roadwayNames.ContainsKey(roadway)
+                                ? roadwayNames[roadway]
                                 : null
                         });
                     }
@@ -307,9 +309,9 @@
                             Month = monthKey,
                             Inbound = 0,
                             Outbound = 0,
-                            Roadway = Roadway,
-                            RoadwayName = !string.IsNullOrEmpty(Roadway) && roadwayNames.ContainsKey(Roadway)
-                                ? roadwayNames[Roadway]
+                            Roadway = roadway,
+                            RoadwayName = !string.IsNullOrEmpty(roadway) && roadwayNames.ContainsKey(roadway)
+                                ? roadwayNames[roadway]
                                 : null
                         });
                     }
@@ -414,5 +416,87 @@
                 return WebResponseContent.Instance.Error($"鍚勪粨搴撳簱瀛樺垎甯冭幏鍙栧け璐�: {ex.Message}");
             }
         }
+        /// <summary>
+        /// 鏌ヨ鍚勪粨搴撶數姹�/鏈夎揣鏁伴噺鍜岀┖鎵樼洏鏁伴噺
+        /// </summary>
+        /// <remarks>
+        /// 浠撳簱ID瑙勫垯锛�1=楂樻俯搴�, 2=甯告俯搴�, 3=鍖栨垚搴�, 6/7=鏋佸嵎搴�
+        /// <br/>
+        /// 缁熻瑙勫垯锛�
+        /// <br/>
+        /// - 楂樻俯/甯告俯/鍖栨垚搴擄細缁熻 鐢垫睜鏁伴噺(StockStatus=6) 鍜� 绌烘墭鐩樻暟閲�(StockStatus=22)
+        /// <br/>
+        /// - 鏋佸嵎搴�(6/7)锛氱粺璁� 鏈夎揣鏁伴噺(StockStatus鈮�22) 鍜� 绌烘墭鐩樻暟閲�(StockStatus=22)
+        /// <br/>
+        /// 閫氳繃杩斿洖鏁版嵁涓殑 StockStatus 鍜� Count 鍙互杩涗竴姝ユ煡璇㈡槑缁嗙數姹犮��
+        /// </remarks>
+        [HttpGet("StockAndTrayCount"), AllowAnonymous]
+        public async Task<WebResponseContent> StockAndTrayCount()
+        {
+            try
+            {
+                var warehouseIds = new[] { 1, 2, 3, 6, 7 };
+
+                var warehouseNames = new Dictionary<int, string>
+        {
+            { 1, "楂樻俯搴�" },
+            { 2, "甯告俯搴�" },
+            { 3, "鍖栨垚搴�" },
+            { 6, "鏋佸嵎搴�" },
+            { 7, "鏋佸嵎搴�" }
+        };
+
+                var result = new List<object>();
+
+                foreach (var warehouseId in warehouseIds)
+                {
+                    var warehouseName = warehouseNames.GetValueOrDefault(warehouseId, $"浠撳簱{warehouseId}");
+
+                    if (warehouseId == 6 || warehouseId == 7)
+                    {
+                        var totalCount = await _db.Queryable<Dt_StockInfo>()
+                            .Where(s => s.WarehouseId == warehouseId)
+                            .CountAsync();
+
+                        var emptyTrayCount = await _db.Queryable<Dt_StockInfo>()
+                            .Where(s => s.WarehouseId == warehouseId && s.StockStatus == (int)StockStatusEmun.绌烘墭鐩樺簱瀛�)
+                            .CountAsync();
+
+                        result.Add(new
+                        {
+                            WarehouseId = warehouseId,
+                            WarehouseName = warehouseName,
+                            HasGoodsCount = totalCount - emptyTrayCount,
+                            EmptyTrayCount = emptyTrayCount,
+                        });
+                    }
+                    else
+                    {
+                        var batteryCount = await _db.Queryable<Dt_StockInfo>()
+                            .Where(s => s.WarehouseId == warehouseId && s.StockStatus == (int)StockStatusEmun.鍏ュ簱瀹屾垚)
+                            .LeftJoin<Dt_StockInfoDetail>((s, d) => s.Id == d.StockId)
+                            .CountAsync();
+
+                        var emptyTrayCount = await _db.Queryable<Dt_StockInfo>()
+                            .Where(s => s.WarehouseId == warehouseId && s.StockStatus == (int)StockStatusEmun.绌烘墭鐩樺簱瀛�)
+                            .CountAsync();
+
+                        result.Add(new
+                        {
+                            WarehouseId = warehouseId,
+                            WarehouseName = warehouseName,
+                            BatteryCount = batteryCount,
+                            EmptyTrayCount = emptyTrayCount,
+                        });
+                    }
+                }
+
+                return WebResponseContent.Instance.OK(null, result);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"鐢垫睜鍜岀┖鎵樼洏鏁伴噺鏌ヨ澶辫触: {ex.Message}");
+            }
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3