From f9e8a2d52fe52fb2389892a46c12d4d262ee9aaf Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期六, 29 十一月 2025 16:53:28 +0800
Subject: [PATCH] 增加提升机可进行一次进俩托物料出入库

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs |  343 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 199 insertions(+), 144 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index b7f0721..cd40f28 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -3,6 +3,7 @@
 using LogLibrary.Log;
 using Mapster;
 using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using SqlSugar;
 using System.Diagnostics.CodeAnalysis;
 using System.Threading.Tasks;
@@ -123,28 +124,25 @@
 
                             task.NextAddress = station.stationChildCode;
 
-                            task.Floor = "1F";
+                            task.Floor = item.Floor;
 
                             task.AGVSign = "";
                         }
                         else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                         {
-                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
+                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
 
-                            if (station != null)
-                            {
-                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
+                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
 
-                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
+                            task.CurrentAddress = item.SourceAddress;
 
-                                task.CurrentAddress = item.SourceAddress;
+                            task.NextAddress = next.stationChildCode;
 
-                                task.NextAddress = next.stationChildCode;
+                            task.Floor = item.Floor;
 
-                                task.Floor = station.stationFloor;
+                            task.AGVSign = "";
 
-                                task.AGVSign = "";
-                            }
+                            task.DoubleTray = item.DoubleTray;
                         }
                         else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
                         {
@@ -180,22 +178,19 @@
                         }
                         else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                         {
-                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
+                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
 
-                            if (station != null)
-                            {
-                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
+                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
 
-                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
+                            task.CurrentAddress = item.SourceAddress;
 
-                                task.CurrentAddress = item.SourceAddress;
+                            task.NextAddress = next.stationChildCode;
 
-                                task.NextAddress = next.stationChildCode;
+                            task.Floor = item.Floor;
 
-                                task.Floor = station.stationFloor;
+                            task.AGVSign = "";
 
-                                task.AGVSign = "";
-                            }
+                            task.DoubleTray = item.DoubleTray;
                         }
                         else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
                         {
@@ -218,7 +213,7 @@
                     {
                         if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.RelocationGroup)
                         {
-                            task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
+                            //task.TaskState = (int)TaskRelocationStatusEnum.RelocationNew;
 
                             task.CurrentAddress = item.SourceAddress;
 
@@ -230,26 +225,22 @@
                         }
                         else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                         {
-                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
+                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
 
-                            if (station != null)
-                            {
-                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
+                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
 
-                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
+                            task.CurrentAddress = item.SourceAddress;
 
-                                task.CurrentAddress = item.SourceAddress;
+                            task.NextAddress = next.stationChildCode;
 
-                                task.NextAddress = next.stationChildCode;
+                            task.Floor = item.Floor;
 
-                                task.Floor = station.stationFloor;
+                            task.AGVSign = "";
 
-                                task.AGVSign = "";
-                            }
+                            task.DoubleTray = item.DoubleTray;
                         }
                         else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
                         {
-                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
 
                             task.TaskState = (int)TaskAGVCarryStatusEnum.CarryNew;
 
@@ -257,7 +248,7 @@
 
                             task.NextAddress = task.TargetAddress;
 
-                            task.Floor = station.stationFloor;
+                            task.Floor = item.Floor;
 
                             task.AGVSign = "";
                         }
@@ -267,23 +258,19 @@
                     {
                         if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                         {
-                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == item.SourceAddress);
+                            var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == item.Floor);
 
-                            if (station != null)
-                            {
-                                var next = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == station.stationFloor);
+                            task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
 
-                                task.TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew;
+                            task.CurrentAddress = item.SourceAddress;
 
-                                task.CurrentAddress = item.SourceAddress;
+                            task.NextAddress = next.stationChildCode;
 
-                                task.NextAddress = next.stationChildCode;
+                            task.Floor = item.Floor;
 
-                                task.Floor = station.stationFloor;
-
-                                task.AGVSign = "";
-                            }
+                            task.AGVSign = "";
                         }
+
                     }
 
                     // 灏嗚浆鎹㈠悗鐨勪换鍔℃坊鍔犲埌浠诲姟鍒楄〃涓�
@@ -487,8 +474,13 @@
                     }
                     if (task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
                     {
-                        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
-                        SendAgvTask(station.stationRemark, task.TaskNum);
+                        string TargetAddress = GetLocation(task.PalletCode);
+                        if (TargetAddress == "")
+                        {
+                            return content.Error($"鏈幏鍙栧嚭搴撶粓鐐硅揣浣嶄俊鎭�");
+                        }
+                        task.NextAddress = TargetAddress;
+                        task.TargetAddress = TargetAddress;
                     }
 
                 }
@@ -501,45 +493,21 @@
                     {
                         #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
 
-                        //var taskDto = new RequestTaskDto()
-                        //{
-                        //    Position = task.NextAddress,
-                        //    PalletCode = task.PalletCode,
-                        //};
-
-                        //// 鑾峰彇WMSip鍦板潃
-                        //var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
-                        //var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
-                        //var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue;
-                        //if (wmsBasez == null || requestLocation == null)
-                        //{
-                        //    throw new InvalidOperationException("WMS IP 鏈厤缃�");
-                        //}
-                        //var wmsIpAddrss = wmsBasez + requestLocation;
-
-                        //// 鍙戦�佽姹傚苟绛夊緟鍝嶅簲
-                        //var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
-                        //if (abc == null)
-                        //    return content.Error();
-                        //// 鍙嶅簭鍒楀寲鍝嶅簲鍐呭
-                        //content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
-
-                        //LogFactory.WriteError($"鑾峰彇璐т綅", $"鑾峰彇璐т綅,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙凤細銆恵task.PalletCode}銆戣繑鍥炲弬鏁般�恵JsonConvert.SerializeObject(content)}銆�");
-
-                        //// 妫�鏌ョ姸鎬佸苟杩斿洖
-                        //if (!content.Status)
-                        //{
-                        //    return content;
-                        //}
-
-                        //// 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
-                        //var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+                        string TargetAddress= GetLocation(task.PalletCode);
+                        if (TargetAddress == null)
+                        {
+                            return content.Error($"鏈幏鍙栧叆搴撶粓鐐硅揣浣嶄俊鎭�");
+                        }
 
                         task.CurrentAddress = task.NextAddress;
-                        task.NextAddress = task.TargetAddress;
-                        task.TargetAddress = task.NextAddress;
+                        task.NextAddress = TargetAddress;
+                        task.TargetAddress = TargetAddress;
 
                         #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+                    }
+                    else if (task.TaskState == (int)TaskInStatusEnum.Line_InExecuting)
+                    {
+                        UpdateStartLocationInfo(task);
                     }
                     else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish)
                     {
@@ -578,6 +546,26 @@
                         _taskHtyRepository.AddData(task_Hty);
                     }
                 }
+                else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.RelocationGroup)
+                {
+                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
+
+                    task.TaskState = nextStatus;
+
+                    if (task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationFinish|| task.TaskState == (int)TaskRelocationStatusEnum.AGV_RelocationFinish)
+                    {
+                        CompletedTask(task.TaskNum);
+
+                        task.ModifyDate = DateTime.Now;
+                        task.Modifier = "System";
+
+                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                        task_Hty.TaskId = 0;
+
+                        BaseDal.DeleteData(task);
+                        _taskHtyRepository.AddData(task_Hty);
+                    }
+                }
                 else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.AcrossFloorGroup)
                 {
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskAcrossFloorStatusEnum>();
@@ -601,73 +589,19 @@
 
                     if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarryFinish)
                     {
-                        Dt_StationManager stationManager = new Dt_StationManager();
-                        string TaskTemplate = string.Empty;
-                        if (task.Floor == "1F")
+                        if (task.DoubleTray != 1)
                         {
-                            stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "2F");
-                            TaskTemplate = "BBB";
+                            RequestAcrossFloor(task,0);
                         }
                         else
                         {
-                            stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "1F");
-                            TaskTemplate = "CCC";
+                            var taskDouble = BaseDal.QueryFirst(x => x.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarryFinish);
+                            if (taskDouble != null)
+                            {
+                                RequestAcrossFloor(task,1);
+                                RequestAcrossFloor(taskDouble,1);
+                            }
                         }
-
-                        var taskDto = new RequestAcrossFloorTaskDto()
-                        {
-                            NextAddress = task.NextAddress,
-                            PalletCode = task.PalletCode,
-                            TaskNum = task.TaskNum
-                        };
-
-                        // 鑾峰彇WMSip鍦板潃
-                        var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
-                        var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
-                        var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.AcrossFloorTask).FirstOrDefault()?.ConfigValue;
-                        if (wmsBasez == null || requestLocation == null)
-                        {
-                            throw new InvalidOperationException("WMS IP 鏈厤缃�");
-                        }
-                        var wmsIpAddrss = wmsBasez + requestLocation;
-
-                        var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
-                        if (abc == null)
-                            return content.Error();
-                        content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
-
-                        if (!content.Status)
-                        {
-                            return content;
-                        }
-
-                        // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
-                        var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
-
-                        Dt_Task taskNew = _mapper.Map<Dt_Task>(taskDTO);
-                        task.Creater = "WMS";
-
-                        taskNew.CurrentAddress = stationManager.stationChildCode;
-
-                        taskNew.NextAddress = task.TargetAddress;
-
-                        taskNew.Floor = stationManager.stationFloor;
-
-                        taskNew.AGVSign = "";
-
-                        task.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarryFinish;
-                        task.ModifyDate = DateTime.Now;
-                        task.Modifier = "System";
-
-                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
-                        task_Hty.TaskId = 0;
-
-                        BaseDal.DeleteData(task);
-                        _taskHtyRepository.AddData(task_Hty);
-
-                        BaseDal.AddData(taskNew);
-
-                        SendAgvTask(TaskTemplate, taskNew.TaskNum);
                     }
                 }
                 else
@@ -710,6 +644,120 @@
                 content = WebResponseContent.Instance.Error(ex.Message);
             }
             return content;
+        }
+
+        public WebResponseContent RequestAcrossFloor(Dt_Task task,int DoubleTray)
+        {
+            WebResponseContent content = new WebResponseContent();
+            Dt_StationManager stationManager = new Dt_StationManager();
+            string TaskTemplate = string.Empty;
+            if (task.Floor == "1F")
+            {
+                stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "2F");
+                TaskTemplate = "BBB";
+            }
+            else
+            {
+                stationManager = _stationManagerRepository.QueryFirst(x => x.stationType == 5 && x.stationFloor == "1F");
+                TaskTemplate = "CCC";
+            }
+
+            var taskDto = new RequestAcrossFloorTaskDto()
+            {
+                NextAddress = task.NextAddress,
+                PalletCode = task.PalletCode,
+                TaskNum = task.TaskNum
+            };
+
+            // 鑾峰彇WMSip鍦板潃
+            var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+            var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
+            var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.AcrossFloorTask).FirstOrDefault()?.ConfigValue;
+            if (wmsBasez == null || requestLocation == null)
+            {
+                throw new InvalidOperationException("WMS IP 鏈厤缃�");
+            }
+            var wmsIpAddrss = wmsBasez + requestLocation;
+
+            var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result;
+            if (abc == null)
+                return content.Error();
+            content = JsonConvert.DeserializeObject<WebResponseContent>(abc);
+
+            if (!content.Status)
+            {
+                return content;
+            }
+
+            // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁
+            var taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
+
+            Dt_Task taskNew = _mapper.Map<Dt_Task>(taskDTO);
+            task.Creater = "WMS";
+
+            taskNew.CurrentAddress = stationManager.stationChildCode;
+
+            taskNew.NextAddress = taskDTO.TargetAddress;
+
+            taskNew.Floor = stationManager.stationFloor;
+
+            taskNew.AGVSign = "";
+
+            taskNew.DoubleTray = DoubleTray;
+
+            task.TaskState = (int)TaskAcrossFloorStatusEnum.FirstCarryFinish;
+            task.ModifyDate = DateTime.Now;
+            task.Modifier = "System";
+
+            Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+            task_Hty.TaskId = 0;
+
+            BaseDal.DeleteData(task);
+            _taskHtyRepository.AddData(task_Hty);
+
+            BaseDal.AddData(taskNew);
+
+            return SendAgvTask(TaskTemplate, taskNew.TaskNum);
+        }
+
+        public string GetLocation(string palletCode)
+        {
+            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
+            var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestLocation)?.ConfigValue;
+            if (wmsBase == null || updateTask == null)
+            {
+                throw new InvalidOperationException("WMS IP 鏈厤缃�");
+            }
+            var wmsIpAddress = wmsBase + updateTask;
+            var keys = new Dictionary<string, object>()
+            {
+                {"palletCode", palletCode}
+            };
+            var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
+            WebResponseContent? content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+            if (content.Status)
+            {
+                return content.Data.ToString();
+            }
+            else
+            {
+                return string.Empty;
+            }
+        }
+
+        public void UpdateStartLocationInfo(Dt_Task task)
+        {
+            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
+            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
+            var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateStartLocationInfo)?.ConfigValue;
+            if (wmsBase == null || updateTask == null)
+            {
+                throw new InvalidOperationException("WMS IP 鏈厤缃�");
+            }
+            var wmsIpAddress = wmsBase + updateTask;
+
+            var result = HttpHelper.PostAsync(wmsIpAddress, task.ToJsonString()).Result;
         }
 
         public void CompletedTask(int taskNum)
@@ -759,6 +807,8 @@
                     task.ModifyDate = DateTime.Now;
                     task.Modifier = "System";
                     BaseDal.UpdateData(task);
+
+                    UpdateStartLocationInfo(task);
 
                     content.OK(data: task);
 
@@ -908,6 +958,11 @@
             return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew);
         }
 
+        public Dt_Task QueryExecutingTask(string deviceNo)
+        {
+            return BaseDal.QueryFirst(x => x.Roadway == deviceNo &&( x.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting || x.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting || x.TaskState == (int)TaskInStatusEnum.SC_InExecuting));
+        }
+
 
         private string GetIpAddress(string baseIp, string name)
         {

--
Gitblit v1.9.3