From 867793e0bd4d8e84b8ae98e31d5d722fdb73cee9 Mon Sep 17 00:00:00 2001
From: chenyong <chenyong@hnkhzn.com>
Date: 星期三, 18 六月 2025 19:15:59 +0800
Subject: [PATCH] 更新生产统计,修改大屏库存数据展示

---
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs |  120 +++++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 90 insertions(+), 30 deletions(-)

diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
index 260b51e..19282f0 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1444,20 +1444,7 @@
             var now = DateTime.Now;
             var startOfDay = new DateTime(now.Year, now.Month, now.Day);
             var endOfDay = startOfDay.AddDays(1);
-            var filteredItems = _stockInfoRepository.Db.Queryable<DtStockInfo>()
-                                .Where(x => x.OutboundTime >= startOfDay && x.OutboundTime < endOfDay && x.IsFull)
-                                .Includes(x => x.StockInfoDetails)
-                                .ToList();
-
-            var result = filteredItems
-                .GroupBy(x => x.AreaCode)
-                .Select(g => new GroupedStockInfo
-                {
-                    AreaCode = g.Key,
-                    TotalQuantity = g.Sum(item => item.StockInfoDetails?.Count ?? 0),
-                    Items = g.ToList()
-                })
-                .ToList();
+            var result = _stockInfoRepository.Db.Queryable<DtStockInfo>().ToList();
             return content.OK(data: result);
         }
         catch (Exception ex)
@@ -1546,41 +1533,103 @@
             var now = DateTime.Now;
             var thirtyDaysAgo = now.AddDays(-30);
             var roadwayMappings = new Dictionary<string, string> {
-                    { "JZ", "闈欑疆搴�" },
-                    { "CH", "闄堝寲搴�" },
-                    { "FR", "鍒嗗搴�" },
-                    { "GW", "楂樻俯搴�" },
-                    { "CW", "甯告俯搴�" }
-                };
-
+    { "JZ", "闈欑疆搴�" },
+    { "CH", "闄堝寲搴�" },
+    { "FR", "鍒嗗搴�" },
+    { "GW", "楂樻俯搴�" },
+    { "CW", "甯告俯搴�" }
+};
             var roadwayKeys = roadwayMappings.Keys.ToArray();
+            var taskTypes = new[] { 100, 104, 200, 204 };
 
             var taskHty = _task_HtyRepository.Db.Queryable<Dt_Task_Hty>()
                 .Where(it =>
                     it.CreateDate >= thirtyDaysAgo &&
                     it.CreateDate <= now &&
-                    it.TaskType == 100 &&
+                    taskTypes.Contains(it.TaskType) &&
                     roadwayKeys.Any(rk => it.Roadway.Contains(rk)))
                 .ToList()
                 .Select(t => new {
                     OriginalRoadway = t.Roadway,
-                    MatchedKey = roadwayKeys.FirstOrDefault(rk => t.Roadway.Contains(rk)),
+                    RoadwayKey = roadwayKeys.FirstOrDefault(rk => t.Roadway.Contains(rk)),
+                    TaskType = t.TaskType,
                     CreateDate = t.CreateDate
                 })
-                .Where(t => t.MatchedKey != null)
+                .Where(t => t.RoadwayKey != null)
                 .GroupBy(t => new {
-                    RoadwayKey = t.MatchedKey,
+                    RoadwayKey = t.RoadwayKey,
                     Date = t.CreateDate.Date,
                     Hour = t.CreateDate.Hour
                 })
                 .OrderByDescending(group => group.Key.Date)
                 .ThenByDescending(group => group.Key.Hour)
-                .Select(group => new {
-                    Hour = $"{group.Key.Date:yyyy/M/d} {group.Key.Hour}:00",
-                    Count = group.Count(),
-                    Roadway = roadwayMappings[group.Key.RoadwayKey] // 鏄犲皠涓轰腑鏂囧悕绉�
+                .Select(group => new TaskHourData
+                {
+                    Hour = $"{group.Key.Date:yyyy/M/d} {(group.Key.Hour == 23 ? "23:00-24:00" : $"{group.Key.Hour}:00-{group.Key.Hour + 1}:00")}",
+                    Roadway = roadwayMappings[group.Key.RoadwayKey],
+                    TaskType100Count = group.Count(t => t.TaskType == 100),
+                    TaskType104Count = group.Count(t => t.TaskType == 104),
+                    TaskType200Count = group.Count(t => t.TaskType == 200),
+                    TaskType204Count = group.Count(t => t.TaskType == 204)
                 })
                 .ToList();
+
+            // 鎸夋棩鏈熷拰搴撲綅鍒嗙粍锛屾壘鍑烘瘡澶╃殑鏈�鍚庝竴涓皬鏃�
+            var dailyLastHours = taskHty
+                .GroupBy(item => new {
+                    Date = DateTime.Parse(item.Hour.Split(' ')[0]),
+                    item.Roadway
+                })
+                .Select(group => new {
+                    Date = group.Key.Date,
+                    Roadway = group.Key.Roadway,
+                    LastHour = group.Max(item => int.Parse(item.Hour.Split(' ')[1].Split(':')[0]))
+                })
+                .ToList();
+
+            // 鐢熸垚姹囨�绘暟鎹紙璋冩暣Hour鏍煎紡涓�"鏃ユ湡+鏃ユ眹鎬�"锛�
+            var summaryItems = dailyLastHours
+                .Select(dailyLastHour => {
+                    // 鎵惧埌璇ユ棩鏈熻搴撲綅鐨勬墍鏈夊皬鏃舵暟鎹�
+                    var dailyItems = taskHty
+                        .Where(item =>
+                            DateTime.Parse(item.Hour.Split(' ')[0]) == dailyLastHour.Date &&
+                            item.Roadway == dailyLastHour.Roadway)
+                        .ToList();
+
+                    return new TaskHourData
+                    {
+                        Hour = $"{dailyLastHour.Date:yyyy/M/d}鏃ユ眹鎬�", // 淇敼Hour鏍煎紡
+                        Roadway = dailyLastHour.Roadway,
+                        TaskType100Count = dailyItems.Sum(item => item.TaskType100Count),
+                        TaskType104Count = dailyItems.Sum(item => item.TaskType104Count),
+                        TaskType200Count = dailyItems.Sum(item => item.TaskType200Count),
+                        TaskType204Count = dailyItems.Sum(item => item.TaskType204Count),
+                        IsSummary = true
+                    };
+                })
+                .ToList();
+
+            // 灏嗘眹鎬绘暟鎹坊鍔犲埌缁撴灉涓�
+            taskHty = taskHty.Concat(summaryItems).ToList();
+
+            // 璋冩暣鎺掑簭閫昏緫锛氬厛鎸夋棩鏈熼檷搴忥紝鍐嶆寜鏄惁姹囨�伙紙姹囨�诲湪鍓嶏級锛屾渶鍚庢寜灏忔椂闄嶅簭
+            taskHty = taskHty
+                .OrderByDescending(item => {
+                    var datePart = item.Hour.Contains("鏃ユ眹鎬�")
+                ? item.Hour.Split("鏃ユ眹鎬�")[0]
+                : item.Hour.Split(' ')[0];
+                    return DateTime.Parse(datePart);
+                })
+            .ThenByDescending(item => item.IsSummary) // 姹囨�绘暟鎹帓鍦ㄥ墠闈�
+            .ThenByDescending(item => {
+                if (!item.IsSummary && item.Hour.Contains(' '))
+                {
+                    return int.Parse(item.Hour.Split(' ')[1].Split(':')[0]);
+                }
+                return 0;
+            })
+            .ToList();
             return content.OK1(total1: taskHty.Count, data: taskHty);
         }
         catch (Exception ex)
@@ -1588,4 +1637,15 @@
             return content.Error(ex.Message);
         }
     }
-    }
\ No newline at end of file
+}
+
+internal class TaskHourData
+{
+    public string Hour { get; set; }
+    public string Roadway { get; set; }
+    public int TaskType100Count { get; set; }
+    public int TaskType104Count { get; set; }
+    public int TaskType200Count { get; set; }
+    public int TaskType204Count { get; set; }
+    public bool IsSummary { get; set; } = false;
+}
\ No newline at end of file

--
Gitblit v1.9.3