From bfcd7f5b405e431a5c07fe3fa77d74c892d4e66b Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期四, 19 三月 2026 15:52:42 +0800
Subject: [PATCH] fix: 修复出入库冲突拦截,系统位置与实际位置的映射和修复
---
项目代码/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