From 734f49c3f74e4a46cfb5892ce60dbf1bb86e74ab Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期二, 22 七月 2025 19:14:39 +0800
Subject: [PATCH] 出入库流程

---
 WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs |  287 +++++++++++++++++++++-----------------------------------
 1 files changed, 109 insertions(+), 178 deletions(-)

diff --git a/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs b/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
index 070f4fa..e03037e 100644
--- a/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
+++ b/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -1,27 +1,10 @@
-锘縰sing Autofac.Core;
-using Microsoft.AspNetCore.Components.Routing;
-using Microsoft.AspNetCore.Hosting;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
-using Quartz;
-using System;
-using System.Collections.Generic;
+锘縰sing Quartz;
 using System.Diagnostics.CodeAnalysis;
-using System.Diagnostics.Eventing.Reader;
-using System.Linq;
-using System.Reflection.Metadata;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEA_Common.Log;
 using WIDESEAWCS_Common.TaskEnum;
-using WIDESEAWCS_Core;
-using WIDESEAWCS_Core.Enums;
-using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
-using WIDESEAWCS_QuartzJob.DeviceBase;
-using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
@@ -36,20 +19,17 @@
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskRepository _taskRepository;
         private readonly IRouterService _routerService;
-        private readonly IPlatformStationService _PlatformStationService;
 
-        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IPlatformStationService platformStation)
+        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskRepository = taskRepository;
             _routerService = routerService;
-            _PlatformStationService= platformStation;
         }
 
         public Task Execute(IJobExecutionContext context)
         {
-
             try
             {
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
@@ -75,7 +55,8 @@
                                     bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                     if (sendFlag)
                                     {
-                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                        commonStackerCrane.LastTaskType = task.TaskType;
+                                        //_taskService.UpdateTaskStatusToNext(task.TaskNum);
                                     }
                                 }
                             }
@@ -85,7 +66,7 @@
             }
             catch (Exception ex)
             {
-                //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
+                Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
             }
             return Task.CompletedTask;
         }
@@ -102,7 +83,8 @@
             {
                 if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                 {
-                    _taskService.StackCraneTaskCompleted(e.TaskNum);
+                    //Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                   // _taskService.StackCraneTaskCompleted(e.TaskNum);
                     commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                 }
             }
@@ -116,49 +98,51 @@
         private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
         {
             Dt_Task task;
-            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
-
-            if (task != null && task.TaskType== (int)TaskOutboundTypeEnum.Outbound)
+            if (commonStackerCrane.LastTaskType == null)
             {
-                string[] targetCodes = task.SourceAddress.Split("-");
-                if (targetCodes[4] == "02")
+                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
+            }
+            else
+            {
+                if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                 {
-
-                    Dt_Task taskst = OutTaskMovelibrary(task);
-                    if (taskst != null)
-                    {
-                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation) 
-                        {
-                            return taskst;
-                        }
-                        else
-                        {
-                            if(taskst.TargetAddress== "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
-                            {
-                                return taskst;
-                            }
-                            else
-                            {
-                                if (OutTaskStationIsOccupied(taskst) != null)
-                                {
-                                    return taskst;
-                                }
-                            }
-                                
-                        }
-                        
-                    }
                     task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+                    if (task == null)
+                    {
+                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+                    }
                 }
                 else
                 {
-                    if (OutTaskStationIsOccupied(task) != null)
+                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
+                    if (task == null)
                     {
-                        return task;
+                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
+                    }
+                }
+            }
+
+            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+                if (OutTaskStationIsOccupied(task) != null || true)
+                {
+                    return task;
+                }
+                else
+                {
+                    List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList();
+                    List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes);
+                    foreach (var item in tasks)
+                    {
+                        if (OutTaskStationIsOccupied(task) != null)
+                        {
+                            return task;
+                        }
                     }
                     task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                 }
             }
+
             return task;
         }
 
@@ -169,77 +153,31 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            if(task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+            Dt_Router? router = _routerService.QueryNextRoutes(task.DeviceCode, task.NextAddress).FirstOrDefault();
+            if (router != null)
             {
-                string plcAddress = _PlatformStationService.GetOutSCName(task.Roadway,task.Station_storey);
-                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1002");
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                 if (device != null)
                 {
+                    if (device.DeviceCode == "YMCTSJ" || task.DeviceCode == "CSJCSC01") return task;
                     CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
-                    DeviceProDTO? deviceProDTO = GetDeviceProDTO(conveyorLine, plcAddress, "Free");
-                    if (deviceProDTO != null)
+                    if (conveyorLine.IsOccupied(router.ChildPosi))//鍑哄簱绔欏彴鏈鍗犵敤
                     {
-                        bool B_Event_Test = GetLine(conveyorLine, deviceProDTO.DeviceProAddress);        //鍒ゆ柇杈撻�佺嚎鏄惁鍏佽鏀捐揣淇″彿
-                        if (B_Event_Test)
-                        {
-                            return task;
-                        }
+                        return task;
                     }
                 }
                 else
                 {
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵task.SourceAddress}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵router.ChildPosiDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
                 }
+            }
+            else
+            {
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鏍¢獙绔欏彴");
             }
             return null;
         }
 
-        /// <summary>
-        /// 鍑哄簱浠诲姟鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴揗ove the library
-        /// </summary>
-        /// <param name="task">浠诲姟瀹炰綋</param>
-        /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
-        private Dt_Task? OutTaskMovelibrary([NotNull] Dt_Task task)
-        {
-            try
-            {
-                string[] targetCodes = task.SourceAddress.Split("-");
-                if (targetCodes[1] == "001")
-                {
-                    targetCodes[1] = "002";
-
-                }
-                else if (targetCodes[1] == "004")
-                {
-                    targetCodes[1] = "003";
-                }
-                targetCodes[4] = "01";
-                string SourceAddress = string.Join("-", targetCodes); //缁勮娴呭簱浣嶅湴鍧�
-                Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //鎵炬祬搴撲綅鏄惁鏈変换鍔�
-                if (tasks != null)
-                {
-                    return tasks;
-                }
-                else
-                {
-                    //鍚憌ms鐢宠鍒ゆ柇娴呭簱浣嶆槸鍚︽湁璐э紝鏄惁闇�瑕佽繘琛岀Щ搴�
-                    Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
-                    if (taskst != null)
-                    {
-                        return taskst;
-                    }
-                }
-            }
-            catch (Exception ex)
-            {
-
-                throw;
-            }
-            return null;
-        }
-
-
-        
         /// <summary>
         /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
         /// </summary>
@@ -249,31 +187,28 @@
         public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task)
         {
             StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
-            stackerCraneTaskCommand.Barcode = ""; /*task.PalletCode;*/
+
+            stackerCraneTaskCommand.Barcode = task.PalletCode;
             stackerCraneTaskCommand.TaskNum = task.TaskNum;
             stackerCraneTaskCommand.WorkType = 1;
-            stackerCraneTaskCommand.TrayType = (short)task.PalletCodequantity;   //寰呮敼鍔�
+            stackerCraneTaskCommand.TrayType = 1;
             if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
             {
-                string[] targetCodest = task.SourceAddress.Split("-");
-                if (targetCodest.Length == 5)
+                //List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
+                //if (routers.Count > 0)
+                //{
+                string[] startCodes = task.CurrentAddress.Split("-");
+
+                stackerCraneTaskCommand.StartRow = Convert.ToInt16(startCodes[0]);
+                stackerCraneTaskCommand.StartColumn = Convert.ToInt16(startCodes[1]);
+                stackerCraneTaskCommand.StartLayer = Convert.ToInt16(startCodes[2]);
+
+                string[] targetCodes = task.NextAddress.Split("-");
+                if (targetCodes.Length == 3)
                 {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(targetCodest[1]);
-                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(targetCodest[2]);
-                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(targetCodest[3]);
-                }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱璧风偣閿欒锛岃捣鐐癸細銆恵task.SourceAddress}銆�");
-                    return null;
-                }
-                string[] targetCodes = task.TargetAddress.Split("-");
-                if (targetCodes.Length == 5)
-                {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
+                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                 }
                 else
                 {
@@ -281,44 +216,52 @@
                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
                     return null;
                 }
+                //}
+                //else
+                //{
+                //    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
+                //    return null;
+                //}
             }
             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
-                string[] sourceCodes = task.SourceAddress.Split("-");
-                if (sourceCodes.Length == 5)
+                //List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
+                //if (routers.Count > 0)
                 {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
-                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
-                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
+                    string[] targetCodes = task.NextAddress.Split("-");
+
+                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+
+                    string[] sourceCodes = task.CurrentAddress.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        //鏁版嵁閰嶇疆閿欒
+                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                        return null;
+                    }
                 }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
-                    return null;
-                }
-                string[] sourceCodest = task.TargetAddress.Split("-");
-                if (sourceCodest.Length == 5)
-                {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(sourceCodest[1]);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(sourceCodest[2]);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(sourceCodest[3]);
-                }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.TargetAddress}銆�");
-                    return null;
-                }
+                //else
+                //{
+                //    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
+                //    return null;
+                //}
             }
             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
             {
                 string[] targetCodes = task.NextAddress.Split("-");
-                if (targetCodes.Length == 5)
+                if (targetCodes.Length == 3)
                 {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
+                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                 }
                 else
                 {
@@ -327,11 +270,11 @@
                     return null;
                 }
                 string[] sourceCodes = task.CurrentAddress.Split("-");
-                if (sourceCodes.Length == 5)
+                if (sourceCodes.Length == 3)
                 {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
-                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
-                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
+                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                 }
                 else
                 {
@@ -341,18 +284,6 @@
                 }
             }
             return stackerCraneTaskCommand;
-        }
-
-
-        //鏍瑰湴鍧�璇诲彇杈撻�佺嚎淇℃伅
-        public bool GetLine(CommonConveyorLine conveyorLine, string DeviceProDataBlock)
-        {
-            return conveyorLine.Communicator.Read<bool>(DeviceProDataBlock);
-        }
-        //鑾峰彇杈撻�佺嚎瀹炰緥
-        public DeviceProDTO? GetDeviceProDTO(CommonConveyorLine conveyorLine, string SCAddress, string Interactivet)
-        {
-            return conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet);
         }
     }
 }

--
Gitblit v1.9.3