From 4f2fb79143f0545e96f114c92e1da733b2d9716a Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期六, 07 二月 2026 21:31:05 +0800
Subject: [PATCH] 1

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs |  198 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 197 insertions(+), 1 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs"
index 73bd716..abf3b4c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs"
@@ -1,4 +1,6 @@
-锘縰sing WIDESEA_Core.BaseRepository;
+锘縰sing WIDESEA_Common.TaskEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_ITaskInfoService;
 using WIDESEA_Model.Models;
@@ -10,4 +12,198 @@
     public Task_HtyService(IRepository<Dt_Task_Hty> BaseDal) : base(BaseDal)
     {
     }
+    public WebResponseContent GetInOutTypeStats()
+    {
+        // 鏌ヨ鎵�鏈変换鍔℃暟鎹�
+        var allTasks = BaseDal.QueryData()
+            .Select(x => new
+            {
+                TaskType = (TaskTypeEnum)x.TaskType,
+                Roadway = x.Roadway,
+                x.WarehouseId
+            })
+            .ToList();
+
+        // 濡傛灉娌℃湁鏁版嵁锛岃繑鍥炵┖鍒楄〃
+        if (allTasks == null || !allTasks.Any())
+        {
+            return WebResponseContent.Instance.OK("鏈壘鍒颁换浣曚换鍔℃暟鎹�", new List<object>());
+        }
+
+        // 璁$畻鍚勪粨搴撶殑浠诲姟绫诲瀷鍒嗗竷
+        var result = allTasks
+            .GroupBy(x => x.Roadway == "1" || x.Roadway == "2" ? 1 : 2) // Roadway "1"鍜�"2"灞炰簬WarehouseId=1锛屽叾浠栧睘浜�2
+            .Select(g => new
+            {
+                WarehouseId = g.Key,
+                Stats = g.Where(t => Enum.IsDefined(typeof(TaskTypeEnum), t.TaskType))
+                        .GroupBy(t => t.TaskType)
+                        .Select(typeGroup => new
+                        {
+                            Type = typeGroup.Key.GetDescription(),
+                            Count = typeGroup.Count(),
+                            Percentage = (int)(Math.Round((double)typeGroup.Count() / g.Count() * 100, 2))
+                        })
+                        .OrderByDescending(x => x.Count)
+                        .ToList(),
+                TotalCount = g.Count()
+            })
+            .ToList();
+
+        return WebResponseContent.Instance.OK("鎴愬姛", result);
+    }
+    public WebResponseContent GetWarehouseOperationStatistics()
+    {
+        /// <summary>
+        /// 鍘熸枡浠擄紝鎬诲嚭鍏ュ簱浠诲姟鏁伴噺锛屼粖鏃ュ叆搴擄紝浠婃棩鍑哄簱锛屾垚鍝佷粨锛屾�诲嚭鍏ュ簱鏁伴噺锛屼粖鏃ュ叆搴擄紝浠婃棩鍑哄簱锛�
+        /// </summary>
+
+        // 鑾峰彇浠婂ぉ鐨勬棩鏈燂紙涓嶈�冭檻鏃堕棿閮ㄥ垎锛�
+        var today = DateTime.Today;
+        var tomorrow = today.AddDays(1);
+
+        // 鏌ヨ鎵�鏈変换鍔℃暟鎹紝鍖呭惈鍒涘缓鏃堕棿
+        var allTasks = BaseDal.QueryData()
+            .Select(x => new
+            {
+                TaskType = (TaskTypeEnum)x.TaskType,
+                Roadway = x.Roadway,
+                x.WarehouseId,
+                CreateTime = x.CreateDate
+            })
+            .ToList();
+
+        // 濡傛灉娌℃湁鏁版嵁锛岃繑鍥為粯璁ゅ��
+        if (allTasks == null || !allTasks.Any())
+        {
+            var emptyResult = new
+            {
+                RawMaterialWarehouse = new
+                {
+                    TotalTasks = 0,
+                    TodayInbound = 0,
+                    TodayOutbound = 0
+                },
+                FinishedProductWarehouse = new
+                {
+                    TotalTasks = 0,
+                    TodayInbound = 0,
+                    TodayOutbound = 0
+                },
+                Summary = new
+                {
+                    TotalAllTasks = 0,
+                    TotalInbound = 0,
+                    TotalOutbound = 0
+                }
+            };
+            return WebResponseContent.Instance.OK("鏈壘鍒颁换浣曚换鍔℃暟鎹�", emptyResult);
+        }
+
+        // 瀹氫箟鍑哄叆搴撲换鍔$被鍨�
+        var inboundTypes = new[] { TaskTypeEnum.Inbound };
+        var outboundTypes = new[] { TaskTypeEnum.Outbound };
+
+        // 杩囨护鍑烘湁鏁堢殑浠诲姟鏁版嵁
+        var validTasks = allTasks.Where(t => Enum.IsDefined(typeof(TaskTypeEnum), t.TaskType)).ToList();
+
+        // 璁$畻鍘熸枡浠擄紙WarehouseId = 1锛夌殑缁熻
+        var rawMaterialTasks = validTasks.Where(t =>
+            t.Roadway == "1" || t.Roadway == "2" || t.WarehouseId == 1).ToList();
+
+        var rawMaterialStats = new
+        {
+            TotalTasks = rawMaterialTasks.Count,
+            TodayInbound = rawMaterialTasks.Count(t =>
+                inboundTypes.Contains(t.TaskType) &&
+                t.CreateTime >= today && t.CreateTime < tomorrow),
+            TodayOutbound = rawMaterialTasks.Count(t =>
+                outboundTypes.Contains(t.TaskType) &&
+                t.CreateTime >= today && t.CreateTime < tomorrow)
+        };
+
+        // 璁$畻鎴愬搧浠擄紙WarehouseId = 2锛夌殑缁熻
+        var finishedProductTasks = validTasks.Where(t =>
+            (t.Roadway != "1" && t.Roadway != "2") || t.WarehouseId == 2).ToList();
+
+        var finishedProductStats = new
+        {
+            TotalTasks = finishedProductTasks.Count,
+            TodayInbound = finishedProductTasks.Count(t =>
+                inboundTypes.Contains(t.TaskType) &&
+                t.CreateTime >= today && t.CreateTime < tomorrow),
+            TodayOutbound = finishedProductTasks.Count(t =>
+                outboundTypes.Contains(t.TaskType) &&
+                t.CreateTime >= today && t.CreateTime < tomorrow)
+        };
+
+        // 璁$畻鎬荤殑鍏ュ簱鍜屽嚭搴撴暟閲忥紙鎵�鏈変粨搴擄紝鎵�鏈夋椂闂达級
+        var totalInbound = validTasks.Count(t => inboundTypes.Contains(t.TaskType));
+        var totalOutbound = validTasks.Count(t => outboundTypes.Contains(t.TaskType));
+
+        // 鏋勫缓杩斿洖缁撴灉
+        var result = new
+        {
+            RawMaterialWarehouse = rawMaterialStats,
+            FinishedProductWarehouse = finishedProductStats,
+            Summary = new
+            {
+                TotalAllTasks = validTasks.Count,
+                TotalInbound = totalInbound,       // 鎬诲叡鍏ュ簱鏁伴噺
+                TotalOutbound = totalOutbound      // 鎬诲叡鍑哄簱鏁伴噺
+            }
+        };
+
+        return WebResponseContent.Instance.OK("鎴愬姛", result);
+    }
+    public WebResponseContent GetTodayInOutStats()
+    {
+        // 鑾峰彇浠婂ぉ鍜�7澶╁墠鐨勬棩鏈�
+        var today = DateTime.Now.Date;
+        var sevenDaysAgo = today.AddDays(-6); // 鍖呭惈浠婂ぉ鍏�7澶�
+
+        // 鏌ヨ7澶╁唴鍏ㄥぉ鏁版嵁锛�0:00-24:00锛�
+        var query = BaseDal.QueryData(x =>
+            x.CreateDate >= sevenDaysAgo &&
+            x.CreateDate < today.AddDays(1) // 鍖呭惈浠婂ぉ鍏ㄥぉ
+        );
+
+        var tasks = query.Select(x => new
+        {
+            TaskType = (TaskTypeEnum)x.TaskType,
+            CreateDate = x.CreateDate
+        }).ToList();
+
+        if (!tasks.Any())
+        {
+            return WebResponseContent.Instance.OK("鏈壘鍒颁换浣曚换鍔℃暟鎹�", new List<object>());
+        }
+
+        // 缁熻姣忓ぉ鍑哄叆搴撴暟閲�
+        var dailyStats = new List<object>();
+
+        for (int i = 0; i < 7; i++)
+        {
+            var currentDate = sevenDaysAgo.AddDays(i);
+            var nextDate = currentDate.AddDays(1); // 涓嬩竴澶╃殑0:00
+
+            var dayTasks = tasks.Where(t =>
+                t.CreateDate >= currentDate &&
+                t.CreateDate < nextDate
+            ).ToList();
+
+            var stats = new
+            {
+                Date = currentDate.ToString("yyyy-MM-dd"),
+                InboundCount = dayTasks.Count(t => t.TaskType == TaskTypeEnum.Inbound),
+                OutboundCount = dayTasks.Count(t => t.TaskType == TaskTypeEnum.Outbound),
+                TotalCount = dayTasks.Count
+            };
+
+            dailyStats.Add(stats);
+        }
+
+        return WebResponseContent.Instance.OK("鎴愬姛", dailyStats);
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3