From 531c6e89dc07bb6997e6249a6cd9f53a9bd474a5 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 23 三月 2026 10:31:54 +0800
Subject: [PATCH] 出库逻辑变更

---
 项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs |   81 ++++++++++++++++++++++++++++++++++++++--
 1 files changed, 77 insertions(+), 4 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index ccfabbc..b2b9f9c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -243,7 +243,7 @@
                             //鍏ュ簱
                             if (taskTypeGroup == TaskTypeGroup.InboundGroup)
                             {
-                                if (router.NextPosi == "AGV" && router.StartPosi=="AGV")
+                                if (router.NextPosi == "AGV" && router.StartPosi=="AGV") //鍙夎溅AGV鎼繍鍏ュ簱
                                 {
                                     task.CurrentAddress = item.SourceAddress;
                                     task.NextAddress = item.TargetAddress;
@@ -265,8 +265,7 @@
                         }
                         else
                         {
-                            //鎴愬搧鐮佸灈浠诲姟鐢熸垚
-                            if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL"))
+                            if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL")) //鎴愬搧鐮佸灈浠诲姟鐢熸垚
                             {
                                 task.CurrentAddress = router.StartPosi;
                                 task.NextAddress = "";
@@ -299,7 +298,10 @@
                             if (routers.Count == 1)
                             {
                                 task.NextAddress = router.NextPosi;
-                                task.DeviceCode = router.ChildPosi;
+                                if (task.Roadway.Contains("StackPlate"))
+                                    task.DeviceCode = router.ChildPosiDeviceCode;
+                                else
+                                    task.DeviceCode = router.ChildPosi;
                             }
                         }
                         
@@ -699,6 +701,77 @@
             else
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
         }
+        private static int OldorNew = 0;
+        /// <summary>
+        /// 鍘熸枡搴撲换鍔℃煡璇�
+        /// </summary>
+        /// <param name="deviceNo">璁惧缂栧彿</param>
+        /// <param name="currentAddress">褰撳墠鍦板潃</param>
+        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+        public Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup= null)
+        {
+            if (taskTypeGroup == null)
+            {
+                Dt_Task taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt(), TaskOrderBy);
+                if (taskSend == null)
+                {
+                    OldorNew = 1;
+                    List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+                            .ThenBy(t => t.Grade)
+                            .ThenBy(t => t.TaskNum)
+                            .ToList();
+                    if (specificTasks.Any())
+                    {
+                        //鏍规嵁鏃堕棿绛涙煡涓ユ牸鎺掑簭
+                        Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+                            .ThenBy(t => t.Grade)
+                            .ThenBy(t => t.TaskNum)
+                            .FirstOrDefault();
+                        Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
+                        if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
+                        {
+                            taskSend = taskCheckSend;
+                        }
+                    }
+                }
+                else
+                {
+                    OldorNew = 0;
+                }
+                return taskSend;
+            }
+            else
+            {
+                Dt_Task taskSend = null;
+                if (OldorNew == 0)
+                {
+                    OldorNew = 1;
+                    List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+                            .ThenBy(t => t.Grade)
+                            .ThenBy(t => t.TaskNum)
+                            .ToList();
+                    if (specificTasks.Any())
+                    {
+                        //鏍规嵁鏃堕棿绛涙煡涓ユ牸鎺掑簭
+                        Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+                            .ThenBy(t => t.Grade)
+                            .ThenBy(t => t.TaskNum)
+                            .FirstOrDefault();
+                        Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
+                        if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
+                        {
+                            taskSend = taskCheckSend;
+                        }
+                    }
+                }
+                else
+                {
+                    OldorNew = 0;
+                    taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+                }
+                return taskSend;
+            }
+        }
 
         /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍏ュ簱绫诲瀷鐨勬柊澧炵殑浠诲姟

--
Gitblit v1.9.3