| | |
| | | using Microsoft.AspNetCore.Mvc;
|
| | | using SqlSugar;
|
| | | using WIDESEA_Common.LocationEnum;
|
| | | using WIDESEA_Common.StockEnum;
|
| | | using WIDESEA_Core;
|
| | | using WIDESEA_Model.Models;
|
| | |
|
| | |
| | | /// 按年月统计入站和出站任务数量
|
| | | /// </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
|
| | | {
|
| | |
| | | // 仓库名称映射
|
| | | var roadwayNames = new Dictionary<string, string>
|
| | | {
|
| | | { "FJSC1", "负极卷1号仓库" },
|
| | | { "ZJSC1", "正极卷1号仓库" },
|
| | |
|
| | | { "GWSC1", "高温1号仓库" },
|
| | | { "CWSC1", "常温1号仓库" },
|
| | | { "HCSC1", "分容1号仓库" }
|
| | | { "HCSC1", "分容1号仓库" },
|
| | | { "FJSC1", "负极卷1号仓库" },
|
| | | { "ZJSC1", "正极卷1号仓库" },
|
| | | };
|
| | |
|
| | | // 构建查询
|
| | |
| | | .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
|
| | |
| | | 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
|
| | | });
|
| | | }
|
| | |
| | | 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
|
| | | });
|
| | | }
|
| | |
| | | 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}");
|
| | | }
|
| | | }
|
| | | }
|
| | | } |