From b0b5deb5825684bca5b3fa7c2ab59f60ce0e799f Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期二, 07 四月 2026 16:36:57 +0800
Subject: [PATCH] fix: 修复移库任务号重复问题,优化策略优先处理正常任务,避免任务堵塞

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  146 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 139 insertions(+), 7 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 4408ee1..14d38a2 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -60,6 +60,7 @@
         private readonly ILocationInfoService _locationInfoService;
         private readonly IWarehouseService _warehouseService;
         private readonly IRoadWayinfoService _roadWayinfoService;
+        private readonly ITask_HtyService _task_HtyService;
         private Timer _timer;
         public IRepository<Dt_Task> Repository => BaseDal;
 
@@ -74,7 +75,7 @@
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
 
         public TaskService(ILogger<TaskService> logger, IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, ILocationInfoService locationInfoService,
-            IWarehouseService warehouseService, IRoadWayinfoService roadWayinfoService) : base(BaseDal)
+            IWarehouseService warehouseService, IRoadWayinfoService roadWayinfoService, ITask_HtyService task_HtyService) : base(BaseDal)
         {
             _logger = logger;
             _mapper = mapper;
@@ -82,8 +83,8 @@
             _stockInfoService = stockInfoService;
             _locationInfoService = locationInfoService;
             _warehouseService = warehouseService;
-            _roadWayinfoService=roadWayinfoService;
-
+            _roadWayinfoService = roadWayinfoService;
+            _task_HtyService = task_HtyService;
         }
         public string MES_InReporttask = WIDESEA_Core.Helper.AppSettings.Configuration["MES_InReporttask"]; //鍏ュ簱鍙嶉淇℃伅
         public string MES_OutReporttask = WIDESEA_Core.Helper.AppSettings.Configuration["MES_OutReporttask"];   //鍑哄簱鍙嶉淇℃伅
@@ -96,7 +97,7 @@
 
         public WebResponseContent CESTEXT()
         {
-            WriteLog.Write_Log("鎺ユ敹MES鍏ュ簱浠诲姟涓嬪彂", $"浠诲姟鎺ユ敹鍙傛暟", "鎴愬姛", $"鍙傛暟锛�234jkljsldafjlasdf");
+
             return WebResponseContent.Instance.OK();
         }
 
@@ -192,7 +193,7 @@
             {
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == wCSTask.TaskNum && x.PalletCode == wCSTask.PalletCode);
                 if (task == null)
-                    return webResponse.Error("鏈壘鍒颁换鍔′俊鎭�");
+                    return webResponse.Error("鏈壘鍒颁换鍔′俊鎭�", 404);
                 return TaskCompletedtask(task, wCSTask.TaskType);
             }
             catch (Exception ex)
@@ -503,6 +504,8 @@
                         MES_parameter mES_Parameter = AbnormalStorageLocation(task.PalletCode, task.SourceAddress, task.TargetAddress);
                         if (mES_Parameter.Result == "Y")
                         {
+                            Dt_Task dtOutWit=BaseDal.QueryData(x=>x.PalletCode==task.PalletCode && x.TaskStatus== (int)OutTaskStatusEnum.OutWait).FirstOrDefault();
+
                             Dt_LocationInfo OriginalLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == task.SourceAddress).FirstOrDefault();
                             Dt_LocationInfo NewLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == task.TargetAddress).FirstOrDefault();
                             Dt_StockInfo dt_StockInfo = _stockInfoService.Repository.QueryData(x => x.LocationCode == task.SourceAddress).FirstOrDefault();
@@ -510,15 +513,27 @@
                             List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>();
 
                             OriginalLocation.LocationStatus = (int)LocationStatusEnum.Free;
-                            NewLocation.LocationStatus = (int)LocationStatusEnum.InStock;
+                            NewLocation.LocationStatus = dtOutWit != null? (int)LocationStatusEnum.Lock:(int)LocationStatusEnum.InStock;
                             dt_StockInfo.LocationCode = NewLocation.LocationCode;
-                            dt_StockInfo.StockStatus = (int)StockStatusEmun.宸插叆搴�;
+                            dt_StockInfo.StockStatus = dtOutWit != null? (int)StockStatusEmun.鍑哄簱涓�:(int)StockStatusEmun.宸插叆搴�;
                             task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
+
+                            if(dtOutWit != null)
+                            {
+                                dtOutWit.TaskStatus = (int)OutTaskStatusEnum.OutNew;
+                                dtOutWit.SourceAddress = NewLocation.LocationCode;
+                                dtOutWit.CurrentAddress = NewLocation.LocationCode;
+                            }
+                            
+
+
 
                             dt_Locations.Add(OriginalLocation);
                             dt_Locations.Add(NewLocation);
 
                             _unitOfWorkManage.BeginTran();
+                            if(dtOutWit!=null) BaseDal.UpdateData(dtOutWit);
+
                             _locationInfoService.UpdateData(dt_Locations);
                             _stockInfoService.UpdateData(dt_StockInfo);
                             BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
@@ -668,5 +683,122 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+    
+        
+
+
+        //浠诲姟鑾峰彇
+        public List<Dt_Task> GetaskQueue(string deviceId)
+        {
+            return BaseDal.QueryData(x => x.Roadway == deviceId
+                           && (x.TaskStatus == (int)InTaskStatusEnum.PLC_InFinish
+                               || x.TaskStatus == (int)OutTaskStatusEnum.OutNew)
+                           && x.NumberSsuances == 0)
+               .OrderBy(x => x.Remark == null ? 0 : 1)
+               .ToList();
+            //return BaseDal.QueryData(x => x.Roadway == deviceId && (x.TaskStatus == (int)InTaskStatusEnum.PLC_InFinish || x.TaskStatus == (int)OutTaskStatusEnum.OutNew) && x.NumberSsuances==0);
+        }
+
+        //鑾峰彇褰撳墠鍫嗗灈鏈烘墽琛岀殑浠诲姟
+        public bool CurrentTaskProgress(string deviceId)
+        {
+           int taskcount=BaseDal.QueryData(x => x.Roadway == deviceId && (x.TaskStatus == (int)InTaskStatusEnum.SC_IntExecuting || x.TaskStatus == (int)OutTaskStatusEnum.SC_OutExecuting || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationExecuting)).Count();
+            if (taskcount == 0) return false;
+            return true;
+        }
+
+        //鑾峰彇鍫嗗灈鏈哄畬鎴愶紝涓嬪彂杈撻�佺嚎鐨勪换鍔�
+        public static List<string> OutSCList = new List<string>() { "1109", "1105", "1210", "1212", "1214" };
+        public List<Dt_Task> GetaskQueuePLC()
+        {
+            return BaseDal.QueryData(x => x.TaskStatus == (int)OutTaskStatusEnum.SC_OutFinish && OutSCList.Contains(x.CurrentAddress));
+        }
+
+        //鑾峰彇鏄惁鏈夌Щ搴撶殑浠诲姟
+        public Dt_Task GeRelocationTaskQueue(string LocationCode)
+        {
+            return BaseDal.QueryData(x => x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew && x.CurrentAddress == LocationCode).FirstOrDefault();
+        }
+
+        public Dt_Task GeOutCuTaskQueue(string LocationCode)
+        {
+            return BaseDal.QueryData(x => x.TaskStatus == (int)OutTaskStatusEnum.OutNew && x.SourceAddress == LocationCode).FirstOrDefault();
+        }
+
+        public bool RelocationTaskProgress(string deviceId)
+        {
+            int taskcount = BaseDal.QueryData(x => x.Roadway == deviceId && (x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationExecuting || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew) ).Count();
+            if (taskcount == 0) return false;
+            return true;
+        }
+
+        //浠撳簱瀹归噺鐘舵��
+        public WebResponseContent GetWarehouseCapacity()
+        {
+            return _locationInfoService.GetWarehouseCapacity();
+        }
+
+        //鍑哄叆搴撶被鍨嬪垎甯�
+        public WebResponseContent GetInOutTypeStats()
+        {
+            return _task_HtyService.GetInOutTypeStats();
+        }
+        //娴侀噺鎯呭喌缁熻
+
+        public WebResponseContent GetTodayTrafficStats()
+        {
+            return _task_HtyService.GetTodayInOutStats();
+        }
+        //褰撳墠杩涜鐨勪换鍔�
+        public WebResponseContent GetCurrentTasks()
+        {
+            // 鏌ヨ鎵�浠ヨ繑鍥濼askNum锛孴askType锛孋reateDate锛孴askStatus锛�
+            var tasks = BaseDal.QueryData()
+                        .Select(t => new
+                        {
+                            WarehouseId = t.Roadway == "1" || t.Roadway == "2" ? 1 : 2,
+                            PalletType = t.PalletType,
+                            TaskNum = t.TaskId,
+                            TaskType = t.TaskType,
+                            CreateDate = t.CreateDate,
+                            TaskStatus = t.TaskStatus,
+                            TargetAddress = t.TargetAddress
+                        })
+                        .ToList();
+            return WebResponseContent.Instance.OK("鎴愬姛", tasks);
+        }
+        //鎬讳綋杩涘害
+        public WebResponseContent GetWarehouseOperationStatistics()
+        {
+            /// <summary>
+            /// 鍘熸枡浠擄紝鎬诲嚭鍏ュ簱浠诲姟鏁伴噺锛屼粖鏃ュ叆搴擄紝浠婃棩鍑哄簱锛屼粖鏃ュ緟瀹屾垚锛屼粖鏃ュ紓甯镐换鍔★紝鎴愬搧浠擄紝鎬诲嚭鍏ュ簱鏁伴噺锛屼粖鏃ュ叆搴擄紝浠婃棩鍑哄簱锛屼粖鏃ュ緟瀹屾垚
+            /// </summary>
+            return _task_HtyService.GetWarehouseOperationStatistics();
+        }
+
+        public WebResponseContent GetTaskDestination(string targetAddress)
+        {
+            WebResponseContent content = new WebResponseContent();
+            // 鍙傛暟鏍¢獙
+            if (string.IsNullOrWhiteSpace(targetAddress))
+            {
+                return content.Error("鐩爣鍦板潃涓嶈兘涓虹┖");
+            }
+            try
+            {
+                // 鏌ヨ鏁版嵁
+                var queryResult = BaseDal.QueryData(x => x.TargetAddress == targetAddress);
+                // 鍒ゆ柇鏌ヨ缁撴灉
+                if (queryResult == null || !queryResult.Any())
+                {
+                    return content.Error($"鏈壘鍒扮洰鏍囧湴鍧�涓篬{targetAddress}]鐨勪换鍔�");
+                }
+                return content.OK($"鏈夌洰鏍囧湴鍧�涓篬{targetAddress}]鐨勪换鍔★紝璇锋嫤鎴�");
+            }
+            catch (Exception ex)
+            {
+                return content.Error($"鑾峰彇浠诲姟鐩殑鍦板け璐�: {ex.Message}");
+            }
+        }
     }
 }

--
Gitblit v1.9.3