From bec4a1b386c740ce4fc53a52b8ec8846ffb5f2bd Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期日, 17 八月 2025 15:53:25 +0800
Subject: [PATCH] 代码优化

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs |  822 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 632 insertions(+), 190 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
index 73bf77f..1fb6714 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
@@ -32,6 +32,7 @@
 using WIDESEAWCS_Core.Caches;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_DTO.Enum;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_ITaskInfoRepository;
@@ -44,10 +45,10 @@
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
 using WIDESEAWCS_SignalR;
+using WIDESEAWCS_TaskInfoRepository;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_Tasks.RGVJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
-using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -55,6 +56,7 @@
     public class CommonRGV_FirstFloorJob : JobBase, IJob
     {
         private readonly ITaskService _taskService;
+        private readonly ITask_HtyRepository _task_HtyRepository;
         private readonly ITaskRepository _taskRepository;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly IRouterService _routerService;
@@ -66,7 +68,7 @@
         private static List<string>? userTokenIds;
         private static List<int>? userIds;
 
-        public CommonRGV_FirstFloorJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, WIDESEAWCS_Core.Caches.ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository)
+        public CommonRGV_FirstFloorJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, WIDESEAWCS_Core.Caches.ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository task_HtyRepository)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -77,6 +79,7 @@
             _noticeService = noticeService;
             _taskRepository = taskRepository;
             _stationManagerRepository = stationManagerRepository;
+            _task_HtyRepository = task_HtyRepository;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -101,30 +104,60 @@
                     }
                     if (FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Fault) && !FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Running))
                     {
-                        Dt_Task? task = GetTask(FirstRgv, FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.InStock));
-                        if (task != null)
+                        if (FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.InStock))
                         {
-                            var IsExecutingTask = DispatchExecutingTask(FirstRgv, task);
-                            if (IsExecutingTask != null)
+                            Dt_Task? task = GetTask(FirstRgv, FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.InStock));
+                            if (task != null)
                             {
-                                RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(IsExecutingTask);
-                                if (rgvTaskCommand != null)
+                                var IsExecutingTask = DispatchExecutingTask(FirstRgv, task);
+                                if (IsExecutingTask != null)
                                 {
-                                    Thread.Sleep(1000);
-                                    bool sendFlag = SendCommand(FirstRgv, rgvTaskCommand);
-                                    if (sendFlag)
+                                    RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(IsExecutingTask);
+                                    if (rgvTaskCommand != null)
                                     {
-                                        IsExecutingTask.RGVName = FirstRgv.DeviceCode;
-                                        _taskRepository.UpdateData(IsExecutingTask);
-                                        _taskService.UpdateTaskStatusToNext(IsExecutingTask.TaskNum);
                                         Thread.Sleep(1000);
+                                        bool sendFlag = SendCommand(FirstRgv, rgvTaskCommand);
+                                        if (sendFlag)
+                                        {
+                                            if (IsExecutingTask.Remark != null)
+                                            {
+                                                IsExecutingTask.RGVName = "RGV02";
+                                                IsExecutingTask.CurrentAddress = IsExecutingTask.Remark;
+                                                IsExecutingTask.Remark = "";
+                                                Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == IsExecutingTask.NextAddress);
+                                                IsExecutingTask.SourceStation = IsExecutingTask.CurrentAddress == "1025" ? 10 : 7;
+                                                if (IsExecutingTask.TaskType == (int)TaskInboundTypeEnum.Inbound)
+                                                {
+                                                    IsExecutingTask.TargetStation = station.stationRemark;
+                                                }
+                                                else
+                                                {
+                                                    IsExecutingTask.TargetStation = station.remark;
+                                                }
+                                                IsExecutingTask.TaskState = (int)TaskInStatusEnum.RGV_TransFer;
+                                                _taskRepository.UpdateData(IsExecutingTask);
+                                                Thread.Sleep(1000);
+                                            }
+                                            else
+                                            {
+                                                IsExecutingTask.RGVName = FirstRgv.DeviceCode;
+                                                _taskRepository.UpdateData(IsExecutingTask);
+                                                _taskService.UpdateTaskStatusToNext(IsExecutingTask.TaskNum);
+                                                Thread.Sleep(1000);
+                                            }
+                                        }
                                     }
                                 }
                             }
                         }
                         else
                         {
-                            var taskNew = DispatchTask(FirstRgv);
+                            Dt_Task taskNew = null;
+                            taskNew = GetTransFerTask(FirstRgv);
+                            if (taskNew == null)
+                            {
+                                taskNew = DispatchTask(FirstRgv);
+                            }
                             if (taskNew != null)
                             {
                                 RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(taskNew);
@@ -134,10 +167,44 @@
                                     bool sendFlag = SendCommand(FirstRgv, rgvTaskCommand);
                                     if (sendFlag)
                                     {
-                                        taskNew.RGVName = FirstRgv.DeviceCode;
-                                        _taskRepository.UpdateData(taskNew);
-                                        _taskService.UpdateTaskStatusToNext(taskNew.TaskNum);
-                                        Thread.Sleep(1000);
+                                        if (taskNew.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)
+                                        {
+                                            taskNew.TaskState = (int)TaskInStatusEnum.RGV_InExecuting;
+                                            _taskRepository.UpdateData(taskNew);
+                                            Thread.Sleep(1000);
+                                        }
+                                        else if (taskNew.TaskState == (int)TaskOutStatusEnum.RGV_TransFerFInish)
+                                        {
+                                            taskNew.TaskState = (int)TaskOutStatusEnum.RGV_OutExecuting;
+                                            _taskRepository.UpdateData(taskNew);
+                                            Thread.Sleep(1000);
+                                        }
+                                        else if (taskNew.Remark != null)
+                                        {
+                                            taskNew.RGVName = "RGV02";
+                                            taskNew.CurrentAddress = taskNew.Remark;
+                                            taskNew.Remark = "";
+                                            taskNew.TaskState = (int)TaskOutStatusEnum.RGV_TransFer;
+                                            Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskNew.NextAddress);
+                                            taskNew.SourceStation = taskNew.CurrentAddress == "1025" ? 10 : 7;
+                                            if (taskNew.TaskType == (int)TaskInboundTypeEnum.Inbound)
+                                            {
+                                                taskNew.TargetStation = station.stationRemark;
+                                            }
+                                            else
+                                            {
+                                                taskNew.TargetStation = station.remark;
+                                            }
+                                            _taskRepository.UpdateData(taskNew);
+                                            Thread.Sleep(1000);
+                                        }
+                                        else
+                                        {
+                                            taskNew.RGVName = FirstRgv.DeviceCode;
+                                            _taskRepository.UpdateData(taskNew);
+                                            _taskService.UpdateTaskStatusToNext(taskNew.TaskNum);
+                                            Thread.Sleep(1000);
+                                        }
                                     }
                                 }
                             }
@@ -201,30 +268,62 @@
                     }
                     if (SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Fault) && !SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Running))
                     {
-                        Dt_Task? task = GetTask(SecondRgv, SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.InStock));
-                        if (task != null)
+                        if (SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.InStock))
                         {
-                            var IsExecutingTask = DispatchExecutingTask(SecondRgv, task);
-                            if (IsExecutingTask != null)
+                            Dt_Task? task = GetTask(SecondRgv, SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.InStock));
+                            if (task != null)
                             {
-                                RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(IsExecutingTask);
-                                if (rgvTaskCommand != null)
+                                var IsExecutingTask = DispatchExecutingTask(SecondRgv, task);
+                                if (IsExecutingTask != null)
                                 {
-                                    Thread.Sleep(1000);
-                                    bool sendFlag = SendCommand(SecondRgv, rgvTaskCommand);
-                                    if (sendFlag)
+                                    RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(IsExecutingTask);
+                                    if (rgvTaskCommand != null)
                                     {
-                                        IsExecutingTask.RGVName = SecondRgv.DeviceCode;
-                                        _taskRepository.UpdateData(IsExecutingTask);
-                                        _taskService.UpdateTaskStatusToNext(IsExecutingTask.TaskNum);
                                         Thread.Sleep(1000);
+                                        bool sendFlag = SendCommand(SecondRgv, rgvTaskCommand);
+                                        if (sendFlag)
+                                        {
+                                            if (IsExecutingTask.Remark != null)
+                                            {
+                                                IsExecutingTask.RGVName = "RGV01";
+                                                IsExecutingTask.CurrentAddress = IsExecutingTask.Remark;
+                                                IsExecutingTask.Remark = "";
+                                                IsExecutingTask.TaskState = (int)TaskInStatusEnum.RGV_TransFer;
+                                                Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == IsExecutingTask.NextAddress);
+                                                IsExecutingTask.SourceStation = IsExecutingTask.CurrentAddress == "1025" ? 10 : 7;
+                                                if (IsExecutingTask.TaskType == (int)TaskInboundTypeEnum.Inbound)
+                                                {
+                                                    IsExecutingTask.TargetStation = station.stationRemark;
+                                                }
+                                                else
+                                                {
+                                                    IsExecutingTask.TargetStation = station.remark;
+                                                }
+
+                                                _taskRepository.UpdateData(IsExecutingTask);
+                                                Thread.Sleep(1000);
+                                            }
+                                            else
+                                            {
+                                                IsExecutingTask.RGVName = SecondRgv.DeviceCode;
+                                                _taskRepository.UpdateData(IsExecutingTask);
+                                                _taskService.UpdateTaskStatusToNext(IsExecutingTask.TaskNum);
+                                                Thread.Sleep(1000);
+                                            }
+                                        }
                                     }
                                 }
                             }
                         }
                         else
                         {
-                            var taskNew = DispatchTask(SecondRgv);
+                            Dt_Task taskNew = null;
+                            taskNew = GetTransFerTask(SecondRgv);
+                            if (taskNew == null)
+                            {
+                                taskNew = DispatchTask(SecondRgv);
+                            }
+
                             if (taskNew != null)
                             {
                                 RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(taskNew);
@@ -234,10 +333,34 @@
                                     bool sendFlag = SendCommand(SecondRgv, rgvTaskCommand);
                                     if (sendFlag)
                                     {
-                                        taskNew.RGVName = SecondRgv.DeviceCode;
-                                        _taskRepository.UpdateData(taskNew);
-                                        _taskService.UpdateTaskStatusToNext(taskNew.TaskNum);
-                                        Thread.Sleep(1000);
+                                        if (taskNew.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)
+                                        {
+                                            taskNew.TaskState = (int)TaskInStatusEnum.RGV_InExecuting;
+                                            _taskRepository.UpdateData(taskNew);
+                                            Thread.Sleep(1000);
+                                        }
+                                        else if (taskNew.TaskState == (int)TaskOutStatusEnum.RGV_TransFerFInish)
+                                        {
+                                            taskNew.TaskState = (int)TaskOutStatusEnum.RGV_OutExecuting;
+                                            _taskRepository.UpdateData(taskNew);
+                                            Thread.Sleep(1000);
+                                        }
+                                        else if (taskNew.Remark != null)
+                                        {
+                                            taskNew.RGVName = "RGV01";
+                                            taskNew.CurrentAddress = taskNew.Remark;
+                                            taskNew.Remark = "";
+                                            taskNew.TaskState = (int)TaskOutStatusEnum.RGV_TransFer;
+                                            _taskRepository.UpdateData(taskNew);
+                                            Thread.Sleep(1000);
+                                        }
+                                        else
+                                        {
+                                            taskNew.RGVName = SecondRgv.DeviceCode;
+                                            _taskRepository.UpdateData(taskNew);
+                                            _taskService.UpdateTaskStatusToNext(taskNew.TaskNum);
+                                            Thread.Sleep(1000);
+                                        }
                                     }
                                 }
                             }
@@ -310,16 +433,25 @@
                     {
                         if (commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault))
                         {
-                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV02" && x.TaskNum == commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+
+                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV02" && x.TaskNum == commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum) && ((x.TaskType == (int)TaskInboundTypeEnum.Inbound && (x.TaskState < 230||x.TaskState == (int)TaskInStatusEnum.RGV_TransFer|| x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound)));
                             if (taskSecond != null)
                             {
                                 if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_Indispatch || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InAwaitWMS || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                                 {
                                     if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                                     {
-                                        if (task.TargetStation- taskSecond.SourceStation > 1 && task.TargetStation - taskSecond.TargetStation > 1)
+                                        if (task.TargetStation - taskSecond.SourceStation > 1 && task.TargetStation - taskSecond.TargetStation > 1)
                                         {
-                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
+                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+
+                                            Thread.Sleep(1000);
+
+                                            if (task.Remark != null)
+                                            {
+                                                return GetDispatchExecutingTask(task);
+                                            }
+
                                             return task;
                                         }
                                     }
@@ -330,7 +462,12 @@
                                     {
                                         if (task.TargetStation - taskSecond.TargetStation > 1)
                                         {
-                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
+                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                            Thread.Sleep(1000);
+                                            if (task.Remark != null)
+                                            {
+                                                return GetDispatchExecutingTask(task);
+                                            }
                                             return task;
                                         }
                                     }
@@ -339,17 +476,26 @@
                             }
                             else
                             {
+                                if (commonRGVSecond.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                                {
+                                    RGVTaskFinish(commonRGVSecond, commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                                }
                                 if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 35000)
                                 {
                                     RGVTaskCommand command = new RGVTaskCommand()
                                     {
                                         PickupLocation = (byte)Convert.ToSByte(15),
-                                        TaskNum = Convert.ToInt16(1000),
+                                        TaskNum = Convert.ToInt16(1),
                                         TaskType = (byte)Convert.ToSByte(1)
                                     };
                                     SendCommand(commonRGVSecond, command);
+                                    Thread.Sleep(1000);
+                                    if (!commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running))
+                                    {
+                                        return null;
+                                    }
                                 }
-                                LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
+                                Thread.Sleep(1000);
                                 return task;
                             }
                         }
@@ -361,20 +507,24 @@
                     CommonRGV_FirstFloor? commonRGVFirst = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "RGV01") as CommonRGV_FirstFloor;
                     if (commonRGVFirst != null)
                     {
-                        
                         if (commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault))
                         {
-                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV01" && x.TaskNum == commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV01" && x.TaskNum == commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum) && ((x.TaskType == (int)TaskInboundTypeEnum.Inbound && (x.TaskState < 230 || x.TaskState == (int)TaskInStatusEnum.RGV_TransFer || x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound)));
                             if (taskSecond != null)
                             {
-
                                 if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_Indispatch || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InAwaitWMS || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                                 {
                                     if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                                     {
                                         if (taskSecond.SourceStation - task.TargetStation > 1 && taskSecond.TargetStation - task.TargetStation > 1)
                                         {
-                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
+                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                            Thread.Sleep(1000);
+
+                                            if (task.Remark != null)
+                                            {
+                                                return GetDispatchExecutingTask(task);
+                                            }
                                             return task;
                                         }
                                     }
@@ -383,9 +533,15 @@
                                 {
                                     if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                                     {
-                                        if (taskSecond.TargetStation-task.TargetStation >1 )
+                                        if (taskSecond.TargetStation - task.TargetStation > 1)
                                         {
-                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
+                                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                            Thread.Sleep(1000);
+
+                                            if (task.Remark != null)
+                                            {
+                                                return GetDispatchExecutingTask(task);
+                                            }
                                             return task;
                                         }
                                     }
@@ -394,17 +550,26 @@
                             }
                             else
                             {
+                                if (commonRGVFirst.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                                {
+                                    RGVTaskFinish(commonRGVFirst, commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                                }
                                 if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) < 420000)
                                 {
                                     RGVTaskCommand command = new RGVTaskCommand()
                                     {
                                         PickupLocation = (byte)Convert.ToSByte(26),
-                                        TaskNum = Convert.ToInt16(1000),
+                                        TaskNum = Convert.ToInt16(1),
                                         TaskType = (byte)Convert.ToSByte(1)
                                     };
                                     SendCommand(commonRGVFirst, command);
+                                    Thread.Sleep(1000);
+                                    if (!commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running))
+                                    {
+                                        return null;
+                                    }
                                 }
-                                LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
+                                Thread.Sleep(1000);
                                 return task;
                             }
                         }
@@ -424,7 +589,7 @@
             try
             {
                 var tasks = _taskService.QueryRGVTask();
-                Dt_Task task;
+                Dt_Task task = new Dt_Task();
                 if (tasks.Count() == 0)
                 {
                     return null;
@@ -436,79 +601,67 @@
                     {
                         if (commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault))
                         {
-                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV02" && x.TaskNum == commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
-                            if (taskSecond != null)
+                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV02" && x.TaskNum == commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum) && ((x.TaskType == (int)TaskInboundTypeEnum.Inbound && (x.TaskState < 230 || x.TaskState == (int)TaskInStatusEnum.RGV_TransFer || x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound)));
+                             if (taskSecond != null)
                             {
-                                if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_Indispatch || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InAwaitWMS || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
-                                {
-                                    //task = tasks.FirstOrDefault(x =>x.SourceStation- taskSecond.TargetStation > 1  && x.TargetStation - taskSecond.SourceStation > 1 && x.SourceStation - taskSecond.SourceStation > 1 && x.TargetStation - taskSecond.TargetStation> 1);
+                                task = GetDispatchTask(tasks, taskSecond);
 
-                                    task = tasks.FirstOrDefault(x =>(x.SourceStation- taskSecond.TargetStation > 1 && x.SourceStation - taskSecond.SourceStation > 1&&x.TaskType==(int)TaskInboundTypeEnum.Inbound) ||(x.SourceStation - taskSecond.TargetStation > 1 && x.TargetStation - taskSecond.SourceStation > 1 && x.SourceStation - taskSecond.SourceStation > 1 && x.TargetStation - taskSecond.TargetStation > 1&&x.TaskType== (int)TaskOutboundTypeEnum.Outbound));
+                                LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                Thread.Sleep(1000);
 
-
-                                    LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
-
-
-                                    return task;
-                                }
-                                else if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
-                                {
-                                    task = tasks.FirstOrDefault(x => x.SourceStation - taskSecond.TargetStation> 1 &&x.TargetStation - taskSecond.TargetStation > 1);
-
-                                    LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
-
-                                    return task;
-                                }
+                                return task;
+                            }
+                        }
+                        var taskNews = tasks.Where(x => (x.TaskType == (int)TaskInboundTypeEnum.Inbound && (Convert.ToInt32(x.SourceAddress) < 1015|| Convert.ToInt32(x.SourceAddress)>1031)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound && (x.Roadway == "SC01" || x.Roadway == "SC02" || x.Roadway == "SC03")) || x.RGVName == "RGV01").ToList();
+                        if (taskNews.Count == 0)
+                        {
+                            return null;
+                        }
+                        if (commonRGVSecond.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                        {
+                            RGVTaskFinish(commonRGVSecond, commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                        }
+                        if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 35000)
+                        {
+                            RGVTaskCommand command = new RGVTaskCommand()
+                            {
+                                PickupLocation = (byte)Convert.ToSByte(15),
+                                TaskNum = Convert.ToInt16(1),
+                                TaskType = (byte)Convert.ToSByte(1)
+                            };
+                            SendCommand(commonRGVSecond, command);
+                            Thread.Sleep(1000);
+                            if (!commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running))
+                            {
                                 return null;
                             }
-                            else
-                            {
-                                if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 35000)
-                                {
-                                    RGVTaskCommand command = new RGVTaskCommand()
-                                    {
-                                        PickupLocation = (byte)Convert.ToSByte(15),
-                                        TaskNum = Convert.ToInt16(1000),
-                                        TaskType = (byte)Convert.ToSByte(1)
-                                    };
-                                    SendCommand(commonRGVSecond, command);
-                                }
-                                if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
-                                {
-                                    LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01"))}銆戙��");
-                                    return tasks.FirstOrDefault(x => x.RGVName == "RGV01");
-                                }
-                                else
-                                {
-                                    LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV02"))}銆戙��");
-                                    return tasks.FirstOrDefault(x => x.RGVName != "RGV02");
-                                }
-                            }
+                        }
+
+                        if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
+                        {
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(taskNews.FirstOrDefault(x => x.RGVName == "RGV01").TaskNum)}銆戙��");
+                            Thread.Sleep(1000);
+                            return taskNews.FirstOrDefault(x => x.RGVName == "RGV01");
                         }
                         else
                         {
-                            if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
-                            {
-                                LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01"))}銆戙��");
-                                return tasks.FirstOrDefault(x => x.RGVName == "RGV01");
-                            }
-                            else
-                            {
-                                LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV02"))}銆戙��");
-                                return tasks.FirstOrDefault(x => x.RGVName != "RGV02");
-                            }
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(taskNews.FirstOrDefault(x => x.RGVName != "RGV02").TaskNum)}銆戙��");
+                            Thread.Sleep(1000);
+                            return taskNews.FirstOrDefault(x => x.RGVName != "RGV02");
                         }
                     }
                     else
                     {
                         if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
                         {
-                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01"))}銆戙��");
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆愭湭鎵惧埌RGV02璁惧淇℃伅銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01").TaskNum)}銆戙��");
+                            Thread.Sleep(1000);
                             return tasks.FirstOrDefault(x => x.RGVName == "RGV01");
                         }
                         else
                         {
-                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV02"))}銆戙��");
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆愭湭鎵惧埌RGV02璁惧淇℃伅銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV02").TaskNum)}銆戙��");
+                            Thread.Sleep(1000);
                             return tasks.FirstOrDefault(x => x.RGVName != "RGV02");
                         }
                     }
@@ -520,83 +673,71 @@
                     {
                         if (commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault))
                         {
-                            var taskFirst = _taskRepository.QueryFirst(x => x.RGVName == "RGV01" && x.TaskNum == commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+
+                            var taskFirst = _taskRepository.QueryFirst(x => x.RGVName == "RGV01" && x.TaskNum == commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum) && ((x.TaskType == (int)TaskInboundTypeEnum.Inbound && (x.TaskState < 230 || x.TaskState == (int)TaskInStatusEnum.RGV_TransFer || x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound)));
                             if (taskFirst != null)
                             {
-                                if (taskFirst.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || taskFirst.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || taskFirst.TaskState == (int)TaskInStatusEnum.RGV_Indispatch || taskFirst.TaskState == (int)TaskInStatusEnum.RGV_InAwaitWMS || taskFirst.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
-                                {
-                                    //task = tasks.FirstOrDefault(x =>taskFirst.TargetStation - x.SourceStation > 1 && taskFirst.SourceStation - x.TargetStation > 1 && taskFirst.SourceStation - x.SourceStation > 1 && taskFirst.TargetStation - x.TargetStation > 1);
+                                task = GetDispatchTask(tasks, taskFirst);
 
-                                    task = tasks.FirstOrDefault(x => (x.SourceStation - taskFirst.TargetStation > 1 && x.SourceStation - taskFirst.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - taskFirst.TargetStation > 1 && x.TargetStation - taskFirst.SourceStation > 1 && x.SourceStation - taskFirst.SourceStation > 1 && x.TargetStation - taskFirst.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound));
+                                LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskFirst)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                Thread.Sleep(1000);
 
-                                    LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskFirst)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
-
-                                    return task;
-                                }
-                                else if (taskFirst.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || taskFirst.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
-                                {
-                                    task = tasks.FirstOrDefault(x => taskFirst.TargetStation - x.SourceStation > 1 && taskFirst.TargetStation - x.TargetStation > 1);
-
-                                    LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskFirst)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task)}銆戙��");
-
-                                    return task;
-                                }
+                                return task;
+                            }
+                        }
+                        var taskNews = tasks.Where(x => (x.TaskType == (int)TaskInboundTypeEnum.Inbound && Convert.ToInt32(x.SourceAddress) > 1014 && Convert.ToInt32(x.SourceAddress)<1031) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound && (x.Roadway == "SC04" || x.Roadway == "SC05" || x.Roadway == "SC06")) || x.RGVName == "RGV02").ToList();
+                        if (taskNews.Count == 0)
+                        {
+                            return null;
+                        }
+                        if (commonRGVFirst.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                        {
+                            RGVTaskFinish(commonRGVFirst, commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                        }
+                        if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) < 420000)
+                        {
+                            RGVTaskCommand command = new RGVTaskCommand()
+                            {
+                                PickupLocation = (byte)Convert.ToSByte(26),
+                                TaskNum = Convert.ToInt16(1),
+                                TaskType = (byte)Convert.ToSByte(1)
+                            };
+                            SendCommand(commonRGVFirst, command);
+                            Thread.Sleep(1000);
+                            if (!commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running))
+                            {
                                 return null;
                             }
-                            else
-                            {
-                                if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) < 420000)
-                                {
-                                    RGVTaskCommand command = new RGVTaskCommand()
-                                    {
-                                        PickupLocation = (byte)Convert.ToSByte(26),
-                                        TaskNum = Convert.ToInt16(1000),
-                                        TaskType = (byte)Convert.ToSByte(1)
-                                    };
-                                    SendCommand(commonRGVFirst, command);
-                                }
-                                if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
-                                {
-                                    LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02"))}銆戙��");
+                        }
 
-                                    return tasks.FirstOrDefault(x => x.RGVName == "RGV02");
-                                }
-                                else
-                                {
-                                    LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV01"))}銆戙��");
-
-                                    return tasks.FirstOrDefault(x => x.RGVName != "RGV01");
-                                }
-                            }
+                        if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
+                        {
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(taskNews.FirstOrDefault(x => x.RGVName == "RGV02").TaskNum)}銆戙��");
+                            Thread.Sleep(1000);
+                            return taskNews.FirstOrDefault(x => x.RGVName == "RGV02");
                         }
                         else
                         {
-                            if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
-                            {
-                                LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02"))}銆戙��");
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(taskNews.FirstOrDefault(x => x.RGVName != "RGV01").TaskNum)}銆戙��");
 
-                                return tasks.FirstOrDefault(x => x.RGVName == "RGV02");
-                            }
-                            else
-                            {
-                                LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV01"))}銆戙��");
-
-                                return tasks.FirstOrDefault(x => x.RGVName != "RGV01");
-                            }
+                            Thread.Sleep(1000);
+                            return taskNews.FirstOrDefault(x => x.RGVName != "RGV01");
                         }
                     }
                     else
                     {
                         if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
                         {
-                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02"))}銆戙��");
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆愭湭鎵惧埌RGV01璁惧淇℃伅銆� 杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02").TaskNum)}銆戙��");
 
+                            Thread.Sleep(1000);
                             return tasks.FirstOrDefault(x => x.RGVName == "RGV02");
                         }
                         else
                         {
-                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV01"))}銆戙��");
+                            LogAndWarn("璋冨害浠诲姟鎺у埗", $"銆愭湭鎵惧埌RGV01璁惧淇℃伅銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName != "RGV01").TaskNum)}銆戙��");
 
+                            Thread.Sleep(1000);
                             return tasks.FirstOrDefault(x => x.RGVName != "RGV01");
                         }
                     }
@@ -605,6 +746,191 @@
             catch (Exception ex)
             {
                 WriteInfo("璋冨害浠诲姟寮傚父鏃ュ織", ex.Message+Environment.NewLine+ex.StackTrace);
+                return null;
+            }
+        }
+
+        public Dt_Task GetTransFerTask(CommonRGV_FirstFloor commonRGV)
+        {
+            try
+            {
+                var tasks = _taskRepository.QueryData(x => x.Floor == "1F" && (x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish || x.TaskState == (int)TaskOutStatusEnum.RGV_TransFerFInish));
+                Dt_Task task = new Dt_Task();
+                if (tasks.Count() == 0)
+                {
+                    return null;
+                }
+                if (commonRGV.DeviceCode == "RGV01")
+                {
+                    CommonRGV_FirstFloor? commonRGVSecond = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "RGV02") as CommonRGV_FirstFloor;
+                    if (commonRGVSecond != null)
+                    {
+                        if (commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault))
+                        {
+
+                            var taskSecond = _taskRepository.QueryFirst(x => x.RGVName == "RGV02" && x.TaskNum == commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum) && ((x.TaskType == (int)TaskInboundTypeEnum.Inbound && (x.TaskState < 230 || x.TaskState == (int)TaskInStatusEnum.RGV_TransFer || x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound)));
+                            if (taskSecond != null)
+                            {
+                                if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                                {
+                                    task = tasks.FirstOrDefault(x => ((x.SourceStation - taskSecond.TargetStation > 1 && x.SourceStation - taskSecond.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - taskSecond.TargetStation > 1 && x.TargetStation - taskSecond.SourceStation > 1 && x.SourceStation - taskSecond.SourceStation > 1 && x.TargetStation - taskSecond.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound)) && x.RGVName == "RGV01");
+
+
+                                    LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+
+                                    Thread.Sleep(1000);
+                                    return task;
+                                }
+                                else if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                                {
+                                    task = tasks.FirstOrDefault(x => x.SourceStation - taskSecond.TargetStation > 1 && x.TargetStation - taskSecond.TargetStation > 1 && x.RGVName == "RGV01");
+
+                                    LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGV.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVSecond.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskSecond)}銆憑commonRGVSecond.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                    Thread.Sleep(1000);
+                                    return task;
+                                }
+                                return null;
+                            }
+                            else
+                            {
+                                if (commonRGVSecond.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                                {
+                                    RGVTaskFinish(commonRGVSecond, commonRGVSecond.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                                }
+                                if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 35000)
+                                {
+                                    RGVTaskCommand command = new RGVTaskCommand()
+                                    {
+                                        PickupLocation = (byte)Convert.ToSByte(15),
+                                        TaskNum = Convert.ToInt16(1),
+                                        TaskType = (byte)Convert.ToSByte(1)
+                                    };
+                                    SendCommand(commonRGVSecond, command);
+                                    Thread.Sleep(1000);
+                                    if (!commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running))
+                                    {
+                                        return null;
+                                    }
+                                }
+
+                                if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
+                                {
+                                    LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01").TaskNum)}銆戙��");
+                                    Thread.Sleep(1000);
+                                    return tasks.FirstOrDefault(x => x.RGVName == "RGV01");
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
+                            {
+                                LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01").TaskNum)}銆戙��");
+                                Thread.Sleep(1000);
+                                return tasks.FirstOrDefault(x => x.RGVName == "RGV01");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (tasks.FirstOrDefault(x => x.RGVName == "RGV01") != null)
+                        {
+                            LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆愭湭鎵惧埌RGV02璁惧淇℃伅銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV01").TaskNum)}銆戙��");
+                            Thread.Sleep(1000);
+                            return tasks.FirstOrDefault(x => x.RGVName == "RGV01");
+                        }
+                    }
+                    return null;
+                }
+                else
+                {
+                    CommonRGV_FirstFloor? commonRGVFirst = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "RGV01") as CommonRGV_FirstFloor;
+                    if (commonRGVFirst != null)
+                    {
+                        if (commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault))
+                        {
+
+                            var taskFirst = _taskRepository.QueryFirst(x => x.RGVName == "RGV01" && x.TaskNum == commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum) && ((x.TaskType == (int)TaskInboundTypeEnum.Inbound && (x.TaskState < 230 || x.TaskState == (int)TaskInStatusEnum.RGV_TransFer || x.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)) || (x.TaskType == (int)TaskOutboundTypeEnum.Outbound)));
+                            if (taskFirst != null)
+                            {
+                                if (taskFirst.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || taskFirst.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || taskFirst.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                                {
+
+                                    task = tasks.FirstOrDefault(x => ((x.SourceStation - taskFirst.TargetStation > 1 && x.SourceStation - taskFirst.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - taskFirst.TargetStation > 1 && x.TargetStation - taskFirst.SourceStation > 1 && x.SourceStation - taskFirst.SourceStation > 1 && x.TargetStation - taskFirst.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound)) && x.RGVName == "RGV02");
+
+
+                                    LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskFirst)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                    Thread.Sleep(1000);
+
+                                    return task;
+                                }
+                                else if (taskFirst.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || taskFirst.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                                {
+                                    task = tasks.FirstOrDefault(x => taskFirst.TargetStation - x.SourceStation > 1 && taskFirst.TargetStation - x.TargetStation > 1 && x.RGVName == "RGV02");
+
+                                    LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戙�恵commonRGVFirst.DeviceCode}銆戜换鍔°�恵JsonConvert.SerializeObject(taskFirst)}銆憑commonRGVFirst.DeviceCode}杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(task.TaskNum)}銆戙��");
+                                    Thread.Sleep(1000);
+                                    return task;
+                                }
+                                return null;
+                            }
+                            else
+                            {
+                                if (commonRGVFirst.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                                {
+                                    RGVTaskFinish(commonRGVFirst, commonRGVFirst.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                                }
+                                if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) < 420000)
+                                {
+                                    RGVTaskCommand command = new RGVTaskCommand()
+                                    {
+                                        PickupLocation = (byte)Convert.ToSByte(26),
+                                        TaskNum = Convert.ToInt16(1),
+                                        TaskType = (byte)Convert.ToSByte(1)
+                                    };
+                                    SendCommand(commonRGVFirst, command);
+                                    Thread.Sleep(1000);
+                                    if (!commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running))
+                                    {
+                                        return null;
+                                    }
+                                }
+
+                                if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
+                                {
+                                    LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02").TaskNum)}銆戙��");
+
+                                    Thread.Sleep(1000);
+                                    return tasks.FirstOrDefault(x => x.RGVName == "RGV02");
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
+                            {
+                                LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Automatic)}銆戜綔涓氱姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running)}銆戣澶囩姸鎬侊細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Fault)}銆戞槸鍚︽湁璐э細銆恵commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock)}銆戣繑鍥炰换鍔★細銆恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02").TaskNum)}銆戙��");
+                                Thread.Sleep(1000);
+                                return tasks.FirstOrDefault(x => x.RGVName == "RGV02");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (tasks.FirstOrDefault(x => x.RGVName == "RGV02") != null)
+                        {
+                            LogAndWarn("涓浆璋冨害浠诲姟鎺у埗", $"銆愭湭鎵惧埌RGV01璁惧淇℃伅銆� 杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(tasks.FirstOrDefault(x => x.RGVName == "RGV02").TaskNum)}銆戙��");
+
+                            Thread.Sleep(1000);
+                            return tasks.FirstOrDefault(x => x.RGVName == "RGV02");
+                        }
+                    }
+                    return null;
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteInfo("璋冨害浠诲姟寮傚父鏃ュ織", ex.Message + Environment.NewLine + ex.StackTrace);
                 return null;
             }
         }
@@ -618,24 +944,10 @@
         {
             if (commonRGV != null)
             {
+                WriteInfo("RGV浠诲姟瀹屾垚", $"{commonRGV.DeviceName}瀹屾垚浠诲姟鍙穥TaskNum}");
                 var task = _taskRepository.QueryFirst(x => x.TaskNum == TaskNum);
                 if (task != null)
                 {
-                    if (task.TaskState == (int)TaskInStatusEnum.InRetuen)
-                    {
-                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
-                        if (stationManager != null)
-                        {
-                            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
-                            if (device != null)
-                            {
-                                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
-                                commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(4));
-
-                                var content = _taskService.RGVTaskCompleted(TaskNum);
-                            }
-                        }
-                    }
                     if (task.TaskState == (int)TaskInStatusEnum.RGV_Indispatch)
                     {
                         Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
@@ -648,17 +960,29 @@
                                 Thread.Sleep(100);
                                 DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault();
 
-                                var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 7);
+                                var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 10);
 
                                 string Barcode = Encoding.UTF8.GetString(x);
 
-                                if (Barcode == null || Barcode == "")
+                                short y = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, stationManager.stationChildCode);
+                                var structs = BitConverter.GetBytes(y).ToArray().ToBoolArray();
+
+                                if (Barcode == null || Barcode == "" || Barcode.Trim().Contains("\0")|| structs[5])
                                 {
-                                    conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
+                                    WriteInfo("鍏ュ簱寮傚父淇℃伅", $"鎵樼洏鍙枫�恵Barcode}銆戞灏恒�恵structs[5]}銆戜换鍔″彿銆恵TaskNum}銆�");
                                     commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, Convert.ToSByte(stationManager.stationRemark));
                                     commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(task.TaskNum));
-                                    task.TaskState = (int)TaskInStatusEnum.InRetuen;
-                                    _taskRepository.UpdateData(task);
+                                    commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(4));
+
+                                    task.ModifyDate = DateTime.Now;
+                                    task.Modifier = "System";
+
+                                    Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
+                                    task_Hty.TaskId = 0;
+                                    task_Hty.OperateType = (int)OperateTypeEnum.寮傚父閫�鍥�;
+
+                                    _taskRepository.DeleteData(task);
+                                    _task_HtyRepository.AddData(task_Hty);
                                     return;
                                 }
                                 var content = _taskService.RGVTaskCompleted(TaskNum, Barcode);
@@ -677,10 +1001,9 @@
                                 {
                                     CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                                     Thread.Sleep(100);
-                                    var Barcode = conveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.ConveyorLineBarcode, stationManager.stationChildCode);
                                     conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, Convert.ToInt16(stationManager.stationNextChildCode), stationManager.stationChildCode);
                                     Thread.Sleep(100);
-                                    conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, Convert.ToInt16(1000), stationManager.stationChildCode);
+                                    conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, Convert.ToInt16(1), stationManager.stationChildCode);
                                     Thread.Sleep(100);
                                     conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(2), stationManager.stationChildCode);
                                 }
@@ -706,6 +1029,91 @@
             return null;
         }
 
+        public Dt_Task? GetDispatchTask(List<Dt_Task> tasks, Dt_Task oldtask)
+        {
+            Dt_Task y = tasks.Where(x => x.Remark != null&& ((x.SourceStation - oldtask.TargetStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - oldtask.TargetStation > 1 && x.TargetStation - oldtask.SourceStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TargetStation - oldtask.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound))).FirstOrDefault();
+            if (y == null)
+            {
+                LogAndWarn("鏌ヨ浠诲姟", $" 杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(oldtask)}銆戙��");
+                if (oldtask.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || oldtask.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || oldtask.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                {
+
+                    return tasks.FirstOrDefault(x => (x.SourceStation - oldtask.TargetStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - oldtask.TargetStation > 1 && x.TargetStation - oldtask.SourceStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TargetStation - oldtask.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound));
+                }
+                else if ((oldtask.CurrentAddress == "1025" || oldtask.CurrentAddress == "1026") && (oldtask.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || oldtask.TaskState == (int)TaskInStatusEnum.RGV_InExecuting))
+                {
+                    return tasks.FirstOrDefault(x => (x.SourceStation - oldtask.TargetStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - oldtask.TargetStation > 1 && x.TargetStation - oldtask.SourceStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TargetStation - oldtask.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound));
+                }
+                else if (oldtask.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || oldtask.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                {
+                    return tasks.FirstOrDefault(x => x.SourceStation - oldtask.TargetStation > 1 && x.TargetStation - oldtask.TargetStation > 1);
+                }
+                
+                return null;
+            }
+            else
+            {
+                var stationManager = _stationManagerRepository.QueryData(x => x.stationType == 15);
+                if (stationManager.Count() > 0)
+                {
+                    string next = null;
+                    foreach (var item in stationManager)
+                    {
+                        var x = _taskRepository.QueryFirst(x => x.NextAddress == item.stationChildCode || x.CurrentAddress == item.stationChildCode);
+                        if (x == null)
+                        {
+                            next = item.stationChildCode;
+                            break;
+                        }
+                    }
+                    if (next != null)
+                    {
+                        y.Remark = next;
+                        _taskRepository.UpdateData(y);
+                        LogAndWarn("涓浆浠诲姟", $" 杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(y)}銆戙��");
+                        return y;
+                    }
+                }
+                if (oldtask.TaskState == (int)TaskOutStatusEnum.RGV_Outdispatch || oldtask.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || oldtask.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                {
+
+                    return tasks.FirstOrDefault(x => (x.SourceStation - oldtask.TargetStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TaskType == (int)TaskInboundTypeEnum.Inbound) || (x.SourceStation - oldtask.TargetStation > 1 && x.TargetStation - oldtask.SourceStation > 1 && x.SourceStation - oldtask.SourceStation > 1 && x.TargetStation - oldtask.TargetStation > 1 && x.TaskType == (int)TaskOutboundTypeEnum.Outbound));
+                }
+                else if (oldtask.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || oldtask.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                {
+                    return tasks.FirstOrDefault(x => x.SourceStation - oldtask.TargetStation > 1 && x.TargetStation - oldtask.TargetStation > 1);
+                }
+                return null;
+            }
+        }
+
+        public Dt_Task? GetDispatchExecutingTask(Dt_Task oldtask)
+        {
+            var stationManager = _stationManagerRepository.QueryData(x => x.stationType == 15);
+            if (stationManager.Count() > 0)
+            {
+                string next = null;
+                foreach (var item in stationManager)
+                {
+                    var x = _taskRepository.QueryFirst(x => x.NextAddress == item.stationChildCode || x.CurrentAddress == item.stationChildCode);
+                    if (x == null)
+                    {
+                        next = item.stationChildCode;
+                        break;
+                    }
+                }
+                if (next != null)
+                {
+                    oldtask.Remark = next;
+                    _taskRepository.UpdateData(oldtask);
+                    LogAndWarn("涓浆浠诲姟GetDispatchExecutingTask", $" 杩斿洖浠诲姟锛氥�恵JsonConvert.SerializeObject(oldtask)}銆戙��");
+                    return oldtask;
+                }
+            }
+
+            return null;
+        }
+
         /// <summary>
         /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
         /// </summary>
@@ -719,19 +1127,34 @@
             rgvTaskCommand.TaskNum = Convert.ToInt16(task.TaskNum);
             if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
             {
-                //rgvTaskCommand.TaskType = (byte)Convert.ToSByte(16);
-                //rgvTaskCommand.TaskType = (byte)Convert.ToSByte(64);   閫�鍥�
                 if (task.TaskState == (int)TaskInStatusEnum.InNew)
                 {
                     Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
                     rgvTaskCommand.TaskType = (byte)Convert.ToSByte(3);
                     rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
                 }
+                else if (task.TaskState == (int)TaskInStatusEnum.RGV_TransFerFInish)
+                {
+                    Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.CurrentAddress);
+                    Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(5);
+                    rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManagerStart.stationRemark);
+                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManagerEnd.stationRemark);
+                }
                 else if (task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
                 {
-                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
-                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
-                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                    if (task.Remark != null && (task.Roadway == "SC01" || task.Roadway == "SC06"))
+                    {
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.Remark);
+                        rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
+                        rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                    }
+                    else
+                    {
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                        rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
+                        rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                    }   
                 }
                 else
                 {
@@ -743,9 +1166,28 @@
 
                 if (task.TaskState == (int)TaskOutStatusEnum.Line_OutFinish)
                 {
-                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.CurrentAddress);
-                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(3);
-                    rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                    if (task.Remark != null && (task.Roadway == "SC01" || task.Roadway == "SC06"))
+                    {
+                        Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.CurrentAddress);
+                        Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.Remark);
+                        rgvTaskCommand.TaskType = (byte)Convert.ToSByte(5);
+                        rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManagerStart.stationRemark);
+                        rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManagerEnd.stationRemark);
+                    }
+                    else
+                    {
+                        Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.CurrentAddress);
+                        rgvTaskCommand.TaskType = (byte)Convert.ToSByte(3);
+                        rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                    }   
+                }
+                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_TransFerFInish)
+                {
+                    Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.CurrentAddress);
+                    Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(5);
+                    rgvTaskCommand.PickupLocation = (byte)Convert.ToSByte(stationManagerStart.stationRemark);
+                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManagerEnd.stationRemark);
                 }
                 else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish)
                 {

--
Gitblit v1.9.3