wanshenmean
3 天以前 71be45c250688b0e76a59f93cd80e85ba37e3de7
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;
@@ -415,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}");
            }
        }
    }
}