From 5c272c606bdf2da3577dbaa5f48d0ee163f1e7d2 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期四, 26 三月 2026 10:35:24 +0800
Subject: [PATCH] 纸张淋膜半成品入库逻辑优化

---
 项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs |   87 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 2 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 ca7c9b5..0afff24 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"
@@ -231,7 +231,7 @@
                             return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃俊鎭�");
                         }
                         //鑾峰彇璺敱淇℃伅
-                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi) && x.Depth==1);
+                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi || stationManger.StationDeviceCode==x.StartPosi) && x.Depth==1);
                         router = routers.FirstOrDefault();
                         if (router == null)
                         {
@@ -251,7 +251,7 @@
                                 }
                                 else
                                 {
-                                    task.CurrentAddress = router.StartPosi;
+                                    task.CurrentAddress = router.StartPosi == "AGV" ? item.SourceAddress : router.StartPosi;
                                     task.NextAddress = router.NextPosi;
                                     task.DeviceCode = router.ChildPosiDeviceCode;
                                 }
@@ -701,6 +701,89 @@
             else
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
         }
+        private static Dictionary<string, int> dict = new Dictionary<string, int>
+        {
+            { "SC01_YL", 0 },
+            { "SC02_YL", 0 },
+            { "SC03_YLDual", 0 },
+            { "SC04_YLDual", 0 },
+            { "SC05_YLDual", 0 }
+        };
+        private readonly static object lockerOldorNew = new object();
+        /// <summary>
+        /// 鍘熸枡搴撲换鍔℃煡璇�
+        /// </summary>
+        /// <param name="deviceNo">璁惧缂栧彿</param>
+        /// <param name="currentAddress">褰撳墠鍦板潃</param>
+        /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+        public Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup= null)
+        {
+            lock (lockerOldorNew)
+            {
+                int OldorNew = dict[deviceNo];
+                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 == 0)
+                    {
+                        dict[deviceNo] = 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
+                    {
+                        dict[deviceNo] = 0;
+                    }
+                    return taskSend;
+                }
+                else
+                {
+                    Dt_Task taskSend = null;
+                    if (OldorNew == 0)
+                    {
+                        dict[deviceNo] = 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
+                    {
+                        dict[deviceNo] = 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