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 |  914 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 572 insertions(+), 342 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 d698f98..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"
@@ -14,21 +14,11 @@
  * 
  *----------------------------------------------------------------*/
 #endregion << 鐗� 鏈� 娉� 閲� >>
-
 using AutoMapper;
-using HslCommunication.Enthernet;
 using Newtonsoft.Json;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
+using System.Net.Http.Headers;
 using WIDESEA_DTO.Agv;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.APIEnum;
@@ -37,18 +27,16 @@
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
-using WIDESEAWCS_DTO.BasicInfo;
-using WIDESEAWCS_DTO.System;
+using WIDESEAWCS_Core.LogHelper;
+using WIDESEAWCS_DTO;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
-using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Repository;
 using WIDESEAWCS_QuartzJob.Service;
-using WIDESEAWCS_TaskInfoRepository;
 using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
 
 namespace WIDESEAWCS_TaskInfoService
@@ -79,6 +67,8 @@
         public List<int> TaskInboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 500 && x < 900).ToList();
 
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList();
+
+        public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList();
 
         public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository) : base(BaseDal)
         {
@@ -112,80 +102,83 @@
                 }
             }
         }
-
+        private readonly static object lockerCompleted = new object();
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
         public WebResponseContent TaskCompleted(int taskNum)
+        {
+            try
+            {
+                lock (lockerCompleted)
+                {
+                    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;
+                }
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }   
+
+        /// <summary>
+        /// 浠诲姟閲嶆柊涓嬪彂
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        public WebResponseContent ResendTask(int taskNum)
         {
             try
             {
                 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.浜哄伐瀹屾垚);
+                    if (task.TaskState == (int)TaskStatusEnum.SC_Executing)
+                    {
+                        task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+                    }
+                    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
+                    {
+                        return WebResponseContent.Instance.Error($"姝や换鍔� { taskNum } 鏆傛椂涓嶈兘閲嶆柊涓嬪彂浠诲姟");
+                    }
+                    BaseDal.UpdateData(task);
                 }
-                string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
-                if (string.IsNullOrEmpty(url))
+                else
                 {
-                    _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                    UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                    return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                    return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔℃秷鎭�");
                 }
-                string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
-                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
-                return content;
+                return WebResponseContent.Instance.OK("浠诲姟閲嶆柊涓嬪彂鎴愬姛");  
             }
             catch (Exception ex)
             {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
-        public WebResponseContent AgvCarrying(int row,int startColumn, int endColumn, int startlayer,int targetLayer)
-        {
-            try
-            {
-                List<Dt_Task> tasks = new List<Dt_Task>();
-                for (int i = startColumn; i <= endColumn; i++)
-                {
-                    string column = i.ToString();
-                    if (i<10)
-                    {
-                        column = "0" + i.ToString();
-                    }
-                    string layer = targetLayer.ToString();
-                    if (targetLayer<10)
-                    {
-                        layer = "0"+targetLayer.ToString();
-                    }
-                    Dt_Task task = new Dt_Task()
-                    {
-                        WarehouseId = 7,
-                        TaskNum = DateTime.Now.ToString("yyMMddHHmm").ObjToInt() + i,
-                        PalletCode= DateTime.Now.ToString("yyMMddHHmm") +i,
-                        PalletType=0,
-                        DeviceCode="AGV_CP",
-                        Roadway= "AGV_CP",
-                        TaskType =999,
-                        SourceAddress=string.Format($"AGV_CP-00{row}-0{column}-00{startlayer}-01"),
-                        CurrentAddress=string.Format($"AGV_CP-00{row}-0{column}-00{startlayer}-01"),
-                        TargetAddress= string.Format($"AGV_CP-00{row}-0{column}-00{layer}-01"),
-                        NextAddress= string.Format($"AGV_CP-00{row}-0{column}-00{layer}-01"),
-                        Grade=0,
-                        WMSId=0,
-                        AgvTaskNum = "CP" + DateTime.Now.ToString("yyMMddHHmm").ObjToInt() + i,
-                        TaskState = TaskStatusEnum.New.ObjToInt(),
-                        Remark= "娴嬭瘯绌烘"
-                    };
-                    tasks.Add(task);
-                }
-                BaseDal.AddData(tasks);
-                return WebResponseContent.Instance.OK("");
-            }
-            catch (Exception ex)
-            {
-                return WebResponseContent.Instance.Error(ex.Message);
-            }
 
-        }
         /// <summary>
         /// 鎺ユ敹WMS浠诲姟淇℃伅
         /// </summary>
@@ -211,10 +204,18 @@
                     task.CurrentAddress = item.SourceAddress;
 
                     Dt_Router? router;
-
+                    if (task.TaskType==TaskTypeEnum.Relocation.ObjToInt())
+                    {
+                        task.DeviceCode = task.Roadway;
+                        task.NextAddress = task.TargetAddress;
+                        task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+                        tasks.Add(task);
+                        break;
+                    }
                     TaskTypeGroup taskTypeGroup = item.TaskType.GetTaskTypeGroup();
                     if (string.IsNullOrEmpty(item.AGVArea))
                     {
+                        
                         Dt_StationManger stationManger;
                         //鑾峰彇绔欏彴淇℃伅
                         if (taskTypeGroup == TaskTypeGroup.InboundGroup)
@@ -230,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));
+                        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)
                         {
@@ -239,27 +240,71 @@
 
                         if (routers.Count == 1)
                         {
+                            //鍏ュ簱
                             if (taskTypeGroup == TaskTypeGroup.InboundGroup)
                             {
-                                task.CurrentAddress = router.StartPosi;
-                                task.NextAddress = router.NextPosi;
-                                task.DeviceCode = router.ChildPosiDeviceCode;
+                                if (router.NextPosi == "AGV" && router.StartPosi=="AGV") //鍙夎溅AGV鎼繍鍏ュ簱
+                                {
+                                    task.CurrentAddress = item.SourceAddress;
+                                    task.NextAddress = item.TargetAddress;
+                                    task.DeviceCode = router.ChildPosiDeviceCode;
+                                }
+                                else
+                                {
+                                    task.CurrentAddress = router.StartPosi == "AGV" ? item.SourceAddress : router.StartPosi;
+                                    task.NextAddress = router.NextPosi;
+                                    task.DeviceCode = router.ChildPosiDeviceCode;
+                                }
                             }
-                            else
+                            else //鍑哄簱
                             {
                                 task.DeviceCode = stationManger.StackerCraneCode;
                                 task.NextAddress = router.NextPosi;
+                                task.TaskState = (int)TaskStatusEnum.SC_Execute;
                             }
                         }
                         else
                         {
-                            if (taskTypeGroup == TaskTypeGroup.InboundGroup)
+                            if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL")) //鎴愬搧鐮佸灈浠诲姟鐢熸垚
                             {
                                 task.CurrentAddress = router.StartPosi;
                                 task.NextAddress = "";
                                 task.DeviceCode = router.ChildPosiDeviceCode;
                             }
+                            else if(taskTypeGroup == TaskTypeGroup.InboundGroup && task.Roadway.Contains("YL")) //鍘熸枡鍏ュ簱
+                            {
+                                router = routers.FirstOrDefault(x=>x.ChildPosiDeviceCode==task.Roadway);
+                                task.CurrentAddress = router.StartPosi;
+                                task.NextAddress = router.NextPosi;
+                                task.DeviceCode = router.ChildPosi;
+                            }
                         }
+                    }
+                    else
+                    {
+                        //鎴愬搧鍏ュ簱
+                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && x.StartPosi=="AGV" && x.ChildPosiDeviceCode==item.RoadWay);
+                        if (routers.Count==0)
+                        {
+                            router = _routerRepository.QueryFirst(x => x.InOutType == item.TaskType && x.StartPosi == "AGV");
+                            if (router==null)
+                                return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                            task.NextAddress = router.NextPosi;
+                            task.DeviceCode = router.ChildPosi;
+                        }
+                        else
+                        {
+                            router = routers.FirstOrDefault();
+                            if (routers.Count == 1)
+                            {
+                                task.NextAddress = router.NextPosi;
+                                if (task.Roadway.Contains("StackPlate"))
+                                    task.DeviceCode = router.ChildPosiDeviceCode;
+                                else
+                                    task.DeviceCode = router.ChildPosi;
+                            }
+                        }
+                        
                     }
                     tasks.Add(task);
                 }
@@ -277,17 +322,15 @@
         }
 
         /// <summary>
-        /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
+        /// 鏍规嵁缁堢偣鍦板潃鍚慦MS璇锋眰浠诲姟
         /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
         /// <returns></returns>
-        public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string materielBoxCode = "")
+        public WebResponseContent RequestPlateOutTask(string targetAddress)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == sourceAddress);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == targetAddress);
                 if (stationManger == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙颁俊鎭�");
@@ -297,17 +340,158 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
                 }
-                string responseStr = "";
-                if (!string.IsNullOrEmpty(materielBoxCode))
+                string responseStr = HttpHelper.Get($"{address}/api/Task/PlateOutbound?stationCode={targetAddress}");
+                
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+
+                content = responseContent;
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        // <summary>
+        /// 璇锋眰鍏ュ簱浠诲姟
+        /// </summary>
+        /// <param name="palletCode">鎵樼洏鍙�</param>
+        /// <param name="sourceAddress">璧峰鍦板潃</param>
+        /// /// <param name="roadWay">宸烽亾</param>
+        /// <returns></returns>
+        public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress,int taskNum=0)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address))
                 {
-                    responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={stationManger.StackerCraneCode}&palletCode={palletCode}&materielBoxCode={materielBoxCode}");
+                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+                }
+                string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}&taskNum{taskNum}");
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+                if (responseContent != null && responseContent.Status && responseContent.Data != null)
+                {
+                    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
+                    if (taskDTO != null)
+                    {
+                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+                    }
                 }
                 else
                 {
-                    responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={stationManger.StackerCraneCode}&palletCode={palletCode}");
+                    content = responseContent;
                 }
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
+
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        // <summary>
+        /// 鍏ュ簱鐢宠
+        /// </summary>
+        public WebResponseContent YLPurchaseBoxing(string palletCode, decimal weight = 0, decimal thickness = 0, decimal wide = 0,string stationCode="")
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address))
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+                }
+                string responseStr = HttpHelper.Get($"{address}/api/Task/YLPurchaseBoxing?palletCode={palletCode}&weight={weight}&thickness={thickness}&wide={wide}&stationCode={stationCode}");
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+
+                content = responseContent;
+
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        // <summary>
+        /// 璇锋眰鎴愬搧鍏ュ簱宸烽亾
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent AssignCPRoadwayNo()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address))
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+                }
+                string responseStr = HttpHelper.Get($"{address}/api/Task/AssignCPRoadwayNo");
+                
+                if (!responseStr.IsNullOrEmpty())
+                {
+                    content.OK("鎴愬姛", responseStr);
+                }
+
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+
+        // <summary>
+        /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent AssignYLRoadwayNo(string palletCode, int wide = 0, int thickness = 0, int weight = 0)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address))
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+                }
+                string responseStr = HttpHelper.Get($"{address}/api/Task/AssignYLRoadwayNo?palletCode={palletCode}&wide={wide}&thickness={thickness}&weight={weight}");
+
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+
+                content = responseContent;
+
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        // <summary>
+        /// 璇锋眰鍏ュ簱浠诲姟
+        /// </summary>
+        /// <param name="palletCode">鎵樼洏鍙�</param>
+        /// <param name="sourceAddress">璧峰鍦板潃</param>
+        /// /// <param name="roadWay">宸烽亾</param>
+        /// <returns></returns>
+        public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress,string roadWay="", int taskType=630)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address))
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+                }
+                string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}");
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+                if (responseContent.Status && responseContent.Data != null)
                 {
                     WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
                     if (taskDTO != null)
@@ -315,56 +499,10 @@
                         content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                     }
                 }
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="palletCode"></param>
-        /// <param name="sourceAddress"></param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType=630)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                //string address = AppSettings.Get("WMSApiAddress");
-                //if (string.IsNullOrEmpty(address))
-                //{
-                //    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                //}
-                //string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
-                //WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                //if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                //{
-                //    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
-                //    if (taskDTO != null)
-                //    {
-                WMSTaskDTO? taskDTO = new WMSTaskDTO()
+                else
                 {
-                    Id = 1,
-                    TaskNum = DateTime.Now.ToString("mmss").ObjToInt(),
-                    PalletCode="",
-                    RoadWay= roadWay ?? "",
-                    TaskType= taskType,
-                    PalletType=1,
-                    TaskStatus=TaskStatusEnum.New.ObjToInt(),
-                    SourceAddress= sourceAddress,
-                    TargetAddress="",
-                    WarehouseId=1,
-                    Grade=0,
-                };
-                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-                //    }
-                //}
-
+                    content = responseContent;
+                }
             }
             catch (Exception ex)
             {
@@ -372,52 +510,7 @@
             }
             return content;
         }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="palletCode"></param>
-        /// <param name="sourceAddress"></param>
-        /// <param name="roadway"></param>
-        /// <returns></returns>
-        //public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string roadway)
-        //{
-        //    WebResponseContent content = new WebResponseContent();
-        //    try
-        //    {
-        //        string address = AppSettings.Get("WMSApiAddress");
-        //        if (string.IsNullOrEmpty(address))
-        //        {
-        //            return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-        //        }
-        //        string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={roadway}&palletCode={palletCode}");
-        //        WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-        //        if (responseContent != null && responseContent.Status && responseContent.Data != null)
-        //        {
-        //            WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
-        //            if (taskDTO != null)
-        //            {
-        //                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-        //            }
-        //        }
-
-        //    }
-        //    catch (Exception ex)
-        //    {
-        //        content = WebResponseContent.Instance.Error(ex.Message);
-        //    }
-        //    return content;
-        //}
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="sourceAddress"></param>
-        /// <param name="palletCode"></param>
-        /// <param name="heightType"></param>
-        /// <param name="roadways"></param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress,  int heightType, List<string> roadways)
+        public WebResponseContent MESBoxCodeNotice(string boxCode)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -427,32 +520,65 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
                 }
-                string responseStr = HttpHelper.Post($"{address}/api/Task/DeviceRequestInboundTaskByRoadways?stationCode={sourceAddress}&palletCode={palletCode}&heightType={heightType}", roadways.Serialize());
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
+                string responseStr = HttpHelper.Get($"{address}/api/Mes/MESBoxCodeNotice?boxCode={boxCode}");
+                return content.OK(responseStr);
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鍒ゆ柇鍏佽鏀捐揣
+        /// </summary>
+        /// <returns></returns>
+        public string MESAvgArriveNotice(RequestAGVArriveDTO requestAGVArriveDTO)
+        {
+            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.MESAvgArriveNotice.ToString());
+
+            string response = Post(apiInfo.ApiAddress, JsonConvert.SerializeObject(requestAGVArriveDTO));
+
+            return response;
+        }
+        public static string Post(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using (HttpContent httpContent = new StringContent(requestJson))
                 {
-                    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
-                    if (taskDTO != null)
+                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
+
+                    using HttpClient httpClient = new HttpClient();
+                    httpClient.Timeout = new TimeSpan(0, 0, 30);
+                    string LoginToken = AppSettings.Get("MESLoginToken");
+                    headers = new Dictionary<string, string>
                     {
-                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+                        //姝e紡
+                        { "LoginToken", LoginToken }
+                    };
+                    if (headers != null)
+                    {
+                        foreach (var header in headers)
+                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                     }
+                    HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result;
+                    result = responseMessage.Content.ReadAsStringAsync().Result;
                 }
-
+                return result;
             }
-            catch (Exception ex)
+            catch (Exception e)
             {
-                content = WebResponseContent.Instance.Error(ex.Message);
+                throw new Exception(e.Message);
             }
-            return content;
+            finally
+            {
+                Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
+            }
         }
-
-        /// <summary>
-        /// 鍒嗛厤宸烽亾
-        /// </summary>
-        /// <param name="taskNum"></param>
-        /// <param name="roadwayNos"></param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSAssignRoadway(int taskNum, List<string> roadwayNos)
+        public WebResponseContent CPEmptyInbound(string palletCode,string SourceAddress)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -462,107 +588,9 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
                 }
-                string responseStr = HttpHelper.Post($"{address}/api/Task/AssignRoadway?taskNum={taskNum}", roadwayNos.Serialize());
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    return responseContent;
-                }
+                var result = HttpHelper.Get($"{address}/api/Task/EmptyBackTask?barCode={palletCode}&startPoint={SourceAddress}");
 
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="roadwayNos"></param>
-        /// <param name="palletCode"></param>
-        /// <param name="heightType"></param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSAssignRoadway(List<string> roadwayNos, string palletCode, int heightType)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Post($"{address}/api/Task/AssignRoadwayByHeightAndCode?palletCode={palletCode}&heightType={heightType}", roadwayNos.Serialize());
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    return responseContent;
-                }
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 鍒嗛厤宸烽亾
-        /// </summary>
-        /// <param name="roadwayNos"></param>
-        /// <param name="taskNum"></param>
-        /// <param name="heightType"></param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSAssignRoadway(List<string> roadwayNos, int taskNum, int heightType)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Post($"{address}/api/Task/AssignRoadway?taskNum={taskNum}&heightType={heightType}", roadwayNos.Serialize());
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    return responseContent;
-                }
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 鍒嗛厤宸烽亾
-        /// </summary>
-        /// <param name="roadwayNos"></param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSAssignRoadway(List<string> roadwayNos)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Post($"{address}/api/Task/SingleAssignRoadway", roadwayNos.Serialize());
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    return responseContent;
-                }
-
+                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
             }
             catch (Exception ex)
             {
@@ -591,20 +619,45 @@
 
             return "";
         }
-
         /// <summary>
-        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
+        /// 鍚慦MS鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鏉$爜
         /// </summary>
-        /// <param name="taskNum"></param>
-        /// <param name="roadwayNo"></param>
-        /// <param name="heightType"></param>
+        /// <param name="taskNum">浠诲姟鍙�</param>
         /// <returns></returns>
         /// <exception cref="Exception"></exception>
-        public string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType)
+        public WebResponseContent RequestInBoundPalletCode(int taskNum,string barCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
+                string responseStr = HttpHelper.Get($"{address}/api/Task/InBoundPalletCode?taskNum={taskNum}&barCode={barCode}");
+                WebResponseContent responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("鏈敹鍒拌繑鍥炲弬鏁�");
+                if (!responseContent.Status)
+                {
+                    return responseContent;
+                }
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+            
+        }
+        /// <summary>
+        /// 鍚慦MS鐢宠鍑哄簱AGV缁堢偣
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public string? RequestTargetAddress(int taskNum)
         {
             string address = AppSettings.Get("WMSApiAddress");
             if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
-            string responseStr = HttpHelper.Get($"{address}/api/Task/AssignInboundTaskLocationByHeight?taskNum={taskNum}&roadwayNo={roadwayNo}&heightType={heightType}");
+            string responseStr = HttpHelper.Get($"{address}/api/Task/AssignOutTargetAddress?taskNum={taskNum}");
 
             WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
             if (responseContent != null && responseContent.Status && responseContent.Data != null)
@@ -629,6 +682,8 @@
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+            if (taskTypeGroup.Value == TaskTypeGroup.RelocationGroup)
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             return null;
         }
 
@@ -645,6 +700,89 @@
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             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>
@@ -703,7 +841,7 @@
                 task.ModifyDate = DateTime.Now;
                 BaseDal.UpdateData(task);
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
+                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, task.ExceptionMessage);
 
                 content = WebResponseContent.Instance.OK();
             }
@@ -745,7 +883,7 @@
 
                 BaseDal.UpdateData(task);
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
+                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
 
                 content = WebResponseContent.Instance.OK();
             }
@@ -786,7 +924,7 @@
 
                 BaseDal.UpdateData(task);
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
+                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
 
                 content = WebResponseContent.Instance.OK();
             }
@@ -797,35 +935,7 @@
             return content;
         }
 
-        public WebResponseContent SendSecureReplyToAgv(int taskNum)
-        {
-            try
-            {
-                Dt_Task WaitToTask = BaseDal.QueryFirst(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && x.TaskNum == taskNum);
-                AgvSecureReplyDTO replyDTO = new AgvSecureReplyDTO()
-                {
-                    ReqCode = Guid.NewGuid().ToString().Replace("-", ""), //WaitToTask.TaskNum.ToString(),
-                    taskCode = WaitToTask.AgvTaskNum,
-                };
-                WebResponseContent content = AgvSecureReply(replyDTO);
-                if (content.Status)
-                {
-                    WaitToTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
-                }
-                else
-                {
-                    WaitToTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
-                    WaitToTask.ExceptionMessage = content.Message;
-                }
-                UpdateData(WaitToTask);
-
-                return WebResponseContent.Instance.OK();
-            }
-            catch (Exception ex)
-            {
-                return WebResponseContent.Instance.Error(ex.Message);
-            }
-        }
+        
         /// <summary>
         /// //鍒ゆ柇绉诲簱璐т綅浠诲姟鏄惁宸插瓨鍦紝濡傚瓨鍦ㄥ厛鎵ц
         /// </summary>
@@ -855,5 +965,125 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        public Dt_Task QueryBarCodeAGVFinishTask(int TaskNum, string currentAddress)
+        {
+            return BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.AGV_Finish && x.CurrentAddress == currentAddress && x.TaskNum == TaskNum, TaskOrderBy);
+        }
+
+        public Dt_Task QueryExecutingTaskByBarcode(int TaskNum, string nextAddress)
+        {
+            return BaseDal.QueryFirst(x => x.TaskNum == TaskNum && x.NextAddress == nextAddress && x.TaskState == (int)TaskStatusEnum.Line_Executing, TaskOrderBy);
+        }
+
+        public Dt_Task QueryLineExecuteTaskByBarcode(int TaskNum, string nextAddress)
+        {
+            return BaseDal.QueryFirst(x => x.TaskNum == TaskNum && x.CurrentAddress == nextAddress && x.TaskState == (int)TaskStatusEnum.Line_Execute, TaskOrderBy);
+        }
+
+        public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task, Dt_StationManger stationManger = null)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                TaskStatusEnum nextStatus = new TaskStatusEnum();
+                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                {
+                    if (task.TaskState == (int)TaskStatusEnum.SC_Executing)
+                    {
+                        Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == stationManger.StationCode && x.ChildPosi == stationManger.StationDeviceCode);
+                        if (router == null)
+                        {
+                            UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
+                            return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
+                        }
+                        task.CurrentAddress = task.NextAddress;
+                        task.NextAddress = router.NextPosi;
+                        task.TaskState = (int)TaskStatusEnum.Line_Executing;
+                        nextStatus = TaskStatusEnum.Line_Executing;
+                    }
+                    else if (task.TaskState == (int)TaskStatusEnum.SC_Execute)
+                    {
+                        task.TaskState = (int)TaskStatusEnum.SC_Executing;
+                        nextStatus = TaskStatusEnum.SC_Executing;
+                    }
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
+                {
+                    if (task.TaskState == (int)TaskStatusEnum.Line_Executing)
+                    {
+                        #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+                        string? local = RequestAssignLocation(task.TaskNum, task.Roadway);
+                        //string? local = "SC03_YLDual-002-090-001-01";
+                        if (!string.IsNullOrEmpty(local))
+                        {
+                            task.CurrentAddress = stationManger.StackerCraneStationCode;
+                            task.TargetAddress = local;
+                            task.NextAddress = local;
+                            task.DeviceCode = stationManger.StackerCraneCode;
+                            task.TaskState = (int)TaskStatusEnum.SC_Execute;
+                            nextStatus = TaskStatusEnum.SC_Execute;
+                            content.OK($"鑾峰彇璐т綅鍙穥local}");
+                        }
+                        else
+                        {
+                            return content.Error($"璇锋眰鍏ュ簱璐т綅澶辫触");
+                        }
+                        #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+                    }
+                    else if (task.TaskState == (int)TaskStatusEnum.AGV_Finish)
+                    {
+                        content = AssignYLRoadwayNo(task.PalletCode);
+                        if (!content.Status)
+                        {
+                            return content.Error($"璇锋眰鍏ュ簱澶辫触锛歿content.Message}");
+                        }
+                        //string roadWay = "SC03_YLDual";
+                        string roadWay = content.Data.ToString();
+
+                        List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosiDeviceCode == roadWay);
+                        Dt_Router router = routers.FirstOrDefault();
+                        if (router == null)
+                        {
+                            return content.Error($"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                        }
+
+                        task.Roadway = roadWay;
+                        task.NextAddress = router.NextPosi;
+                        task.TaskState = (int)TaskStatusEnum.Line_Execute;
+                        nextStatus = TaskStatusEnum.Line_Execute;
+                    }
+                    else if (task.TaskState == (int)TaskStatusEnum.Line_Execute)
+                    {
+                        task.TaskState = (int)TaskStatusEnum.Line_Executing;
+                        nextStatus = TaskStatusEnum.Line_Executing;
+                    }
+                    else if (task.TaskState == (int)TaskStatusEnum.SC_Execute)
+                    {
+                        task.TaskState = (int)TaskStatusEnum.SC_Executing;
+                        nextStatus = TaskStatusEnum.SC_Executing;
+                    }
+                }
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+                {
+                    task.TaskState = (int)TaskStatusEnum.SC_Executing;
+                    nextStatus = TaskStatusEnum.SC_Executing;
+                }
+                else
+                {
+                    throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
+                }
+                task.ModifyDate = DateTime.Now;
+                task.Modifier = "System";
+                //BaseDal.UpdateData(task);
+                UpdateTask(task, nextStatus);
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }

--
Gitblit v1.9.3