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 |  134 ++++++++++++++++++++++++++++++++++++++------
 1 files changed, 114 insertions(+), 20 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 a80095d..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"
@@ -102,6 +102,7 @@
                 }
             }
         }
+        private readonly static object lockerCompleted = new object();
         /// <summary>
         /// 浠诲姟瀹屾垚
         /// </summary>
@@ -109,22 +110,25 @@
         {
             try
             {
-                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
-                if (task != null)
+                lock (lockerCompleted)
                 {
-                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
-                    BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                    Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                    if (task != null)
+                    {
+                        task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                    }
+                    string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
+                    if (string.IsNullOrEmpty(url))
+                    {
+                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                        UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                        return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                    }
+                    string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
+                    WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
+                    return content;
                 }
-                string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
-                if (string.IsNullOrEmpty(url))
-                {
-                    _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                    UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                    return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                }
-                string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
-                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
-                return content;
             }
             catch (Exception ex)
             {
@@ -151,6 +155,11 @@
                     else if(task.TaskState == (int)TaskStatusEnum.AGV_Executing)
                     {
                         task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+                       
+                    }else if(task.TaskState == (int)TaskStatusEnum.AGV_Exception)
+                    {
+                        task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+                        task.Remark = "";
                     }
                     else
                     {
@@ -222,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)
                         {
@@ -234,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;
@@ -242,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;
                                 }
@@ -256,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 = "";
@@ -290,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;
                             }
                         }
                         
@@ -690,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