From f23e0326aa05a1c5b47d4aec4c06e73d0d86b8e7 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期二, 29 七月 2025 17:43:15 +0800
Subject: [PATCH] 代码提交

---
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs |  903 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 903 insertions(+), 0 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"
new file mode 100644
index 0000000..52840da
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
@@ -0,0 +1,903 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_Tasks.ConveyorLineJob
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ * 
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using AutoMapper;
+using HslCommunication;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using Quartz;
+using SixLabors.ImageSharp.Drawing;
+using System.Diagnostics.CodeAnalysis;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_BasicInfoRepository;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.HttpContextUser;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_IBasicInfoService;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.BasicInfo;
+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_SignalR;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.RGVJob;
+using WIDESEAWCS_Tasks.StackerCraneJob;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class CommonRGV_FirstFloorJob : JobBase, IJob
+    {
+        private readonly ITaskService _taskService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly IRouterService _routerService;
+        private readonly IDt_StationManagerService _stationManagerService;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
+        private readonly IMapper _mapper;
+        private readonly ICacheService _cacheService;
+        private readonly INoticeService _noticeService;
+        private static List<string>? userTokenIds;
+        private static List<int>? userIds;
+
+        public CommonRGV_FirstFloorJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IDt_StationManagerService stationManagerService, IMapper mapper, ICacheService cacheService, INoticeService noticeService, ITaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository)
+        {
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _routerService = routerService;
+            _stationManagerService = stationManagerService;
+            _mapper = mapper;
+            _cacheService = cacheService;
+            _noticeService = noticeService;
+            _taskRepository = taskRepository;
+            _stationManagerRepository = stationManagerRepository;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            Console.WriteLine(DateTime.Now.ToString() + "锛岀嚎绋婭D锛�" + Thread.CurrentThread.ManagedThreadId);
+            try
+            {
+                //鐢ㄨ繖绉嶆柟寮忚兘纭繚绫诲瀷杞崲涓嶄細鏈夐棶棰�
+                //bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+
+                //if (flag && value != null && value is CommonRGV_FirstFloor device)
+                //{
+                IDevice? commonRGVFirst = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "RGV01");
+                IDevice? commonRGVSecond = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "RGV02");
+
+                #region  RGV01璋冨害
+                if (commonRGVFirst != null && commonRGVFirst is CommonRGV_FirstFloor FirstRgv)//杩欐牱鑳界湅鍑烘潵浼犲弬鍒板簳鍝噷鏈夐棶棰�
+                {
+                    if (FirstRgv.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                    {
+                        RGVTaskFinish(FirstRgv, FirstRgv.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                    }
+                    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)
+                        {
+                            var IsExecutingTask = DispatchExecutingTask(FirstRgv, task);
+                            if (IsExecutingTask != null)
+                            {
+                                RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(task);
+                                if (rgvTaskCommand != null)
+                                {
+                                    Thread.Sleep(1000);
+                                    bool sendFlag = SendCommand(FirstRgv, rgvTaskCommand);
+                                    if (sendFlag)
+                                    {
+                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                    }
+                                }
+                            }
+                        }
+                        else
+                        {
+                            var taskNew = DispatchTask(FirstRgv);
+                            if (taskNew != null)
+                            {
+                                RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(taskNew);
+                                if (rgvTaskCommand != null)
+                                {
+                                    Thread.Sleep(1000);
+                                    bool sendFlag = SendCommand(FirstRgv, rgvTaskCommand);
+                                    if (sendFlag)
+                                    {
+                                        _taskService.UpdateTaskStatusToNext(taskNew.TaskNum);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+
+                    var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
+                    if (tokenInfos != null && tokenInfos.Any())
+                    {
+                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
+                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
+                        string RGVAutoStatus(bool AutoStatus) => AutoStatus switch
+                        {
+                            true => "鑱旀満妯″紡",
+                            false => "鍗曟満妯″紡",
+                        };
+                        string RGVWorkStatus(bool WorkStatus) => WorkStatus switch
+                        {
+                            true => "杩愯涓�",
+                            false => "寰呮満",
+                        };
+                        string RGVStatus(bool Status) => Status switch
+                        {
+                            true => "鏁呴殰",
+                            false => "姝e父",
+                        };
+                        object obj = new
+                        {
+                            Automatic = RGVAutoStatus(FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Automatic)),
+                            Fault = RGVStatus(FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Fault)),
+                            Running = RGVWorkStatus(FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Running)),
+                            LevelPoint = FirstRgv.GetValue<RGVDBName, int>(RGVDBName.LevelPoint),
+                            CurrentTaskNum = FirstRgv.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum),
+                            FirstRgv.DeviceCode,
+                            FirstRgv.DeviceName,
+                        };
+                        _noticeService.RGVData(userIds?.FirstOrDefault(), userTokenIds, new { FirstRgv.DeviceName, data = obj });
+                    }
+
+
+                    #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+                }
+                else
+                {
+                    if (commonRGVFirst == null)
+                        Console.WriteLine($"RGV01鏈壘鍒拌澶囧璞$殑鍊�");
+                    else
+                        Console.WriteLine($"RGV01璁惧瀵硅薄绫诲瀷閿欒");
+                }
+
+                #endregion
+
+                #region  RGV02璋冨害
+                if (commonRGVSecond != null && commonRGVFirst is CommonRGV_FirstFloor SecondRgv)//杩欐牱鑳界湅鍑烘潵浼犲弬鍒板簳鍝噷鏈夐棶棰�
+                {
+                    if (SecondRgv.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
+                    {
+                        RGVTaskFinish(SecondRgv, SecondRgv.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+                    }
+                    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)
+                        {
+                            var IsExecutingTask = DispatchExecutingTask(SecondRgv, task);
+                            RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(task);
+                            if (rgvTaskCommand != null)
+                            {
+                                Thread.Sleep(1000);
+                                bool sendFlag = SendCommand(SecondRgv, rgvTaskCommand);
+                                if (sendFlag)
+                                {
+                                    _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                }
+                            }
+                        }
+                        else
+                        {
+                            var taskNew = DispatchTask(SecondRgv);
+                            if (taskNew != null)
+                            {
+                                RGVTaskCommand? rgvTaskCommand = ConvertToRGVTaskCommand(taskNew);
+                                if (rgvTaskCommand != null)
+                                {
+                                    Thread.Sleep(1000);
+                                    bool sendFlag = SendCommand(SecondRgv, rgvTaskCommand);
+                                    if (sendFlag)
+                                    {
+                                        _taskService.UpdateTaskStatusToNext(taskNew.TaskNum);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    #region 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+
+                    var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
+                    if (tokenInfos != null && tokenInfos.Any())
+                    {
+                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
+                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
+                        string RGVAutoStatus(bool AutoStatus) => AutoStatus switch
+                        {
+                            true => "鑱旀満妯″紡",
+                            false => "鍗曟満妯″紡",
+                        };
+                        string RGVWorkStatus(bool WorkStatus) => WorkStatus switch
+                        {
+                            true => "杩愯涓�",
+                            false => "寰呮満",
+                        };
+                        string RGVStatus(bool Status) => Status switch
+                        {
+                            true => "鏁呴殰",
+                            false => "姝e父",
+                        };
+                        object obj = new
+                        {
+                            Automatic = RGVAutoStatus(SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Automatic)),
+                            Fault = RGVStatus(SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Fault)),
+                            Running = RGVWorkStatus(SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Running)),
+                            LevelPoint = SecondRgv.GetValue<RGVDBName, int>(RGVDBName.LevelPoint),
+                            CurrentTaskNum = SecondRgv.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum),
+                            SecondRgv.DeviceCode,
+                            SecondRgv.DeviceName,
+                        };
+                        _noticeService.RGVData(userIds?.FirstOrDefault(), userTokenIds, new { SecondRgv.DeviceName, data = obj });
+                    }
+
+
+                    #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇
+                }
+                else
+                {
+                    if (commonRGVSecond == null)
+                        Console.WriteLine($"RGV02鏈壘鍒拌澶囧璞$殑鍊�");
+                    else
+                        Console.WriteLine($"RGV02璁惧瀵硅薄绫诲瀷閿欒");
+                }
+                #endregion
+                //}
+            }
+            catch (Exception ex)
+            {
+                WriteError("CommonStackerStationCraneJob", "test", ex);
+            }
+            return Task.CompletedTask;
+        }
+
+        public Dt_Task DispatchExecutingTask(CommonRGV_FirstFloor commonRGV, Dt_Task task)
+        {
+            try
+            {
+                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) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock))
+                        {
+                            if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(15),
+                                    TaskNum = Convert.ToInt16(1000),
+                                    TaskType = (byte)Convert.ToSByte(1)
+                                };
+                                SendCommand(commonRGVSecond, command);
+                            }
+                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGVSecond.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.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(task)}銆戙��");
+                            return task;
+                        }
+                        else 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)
+                            {
+                                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 && task.TargetStation > taskSecond.TargetStation)
+                                        {
+                                            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)}銆戙��");
+                                            return task;
+                                        }
+                                    }
+                                }
+                                else if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                                {
+                                    if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                                    {
+                                        if (task.TargetStation > taskSecond.TargetStation)
+                                        {
+                                            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)}銆戙��");
+                                            return task;
+                                        }
+                                    }
+                                }
+                                return null;
+                            }
+                            else
+                            {
+                                if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                                {
+                                    RGVTaskCommand command = new RGVTaskCommand()
+                                    {
+                                        PickupLocation = (byte)Convert.ToSByte(15),
+                                        TaskNum = Convert.ToInt16(1000),
+                                        TaskType = (byte)Convert.ToSByte(1)
+                                    };
+                                    SendCommand(commonRGVSecond, command);
+                                }
+                                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)}銆戙��");
+                                return task;
+                            }
+                        }
+                    }
+                    return task;
+                }
+                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) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock))
+                        {
+                            if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(26),
+                                    TaskNum = Convert.ToInt16(1000),
+                                    TaskType = (byte)Convert.ToSByte(1)
+                                };
+                                SendCommand(commonRGVFirst, command);
+                            }
+                            LogAndWarn("鎵ц璋冨害浠诲姟鎺у埗", $"銆恵commonRGVFirst.DeviceCode}宸ヤ綔妯″紡锛氥�恵commonRGV.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(task)}銆戙��");
+                            return task;
+                        }
+                        else 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));
+                            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 && task.TargetStation < taskSecond.TargetStation)
+                                        {
+                                            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)}銆戙��");
+                                            return task;
+                                        }
+                                    }
+                                }
+                                else if (taskSecond.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting || taskSecond.TaskState == (int)TaskInStatusEnum.RGV_InExecuting)
+                                {
+                                    if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish || task.TaskState == (int)TaskInStatusEnum.RGV_IndispatchFinish)
+                                    {
+                                        if (task.TargetStation < taskSecond.TargetStation)
+                                        {
+                                            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)}銆戙��");
+                                            return task;
+                                        }
+                                    }
+                                }
+                                return null;
+                            }
+                            else
+                            {
+                                if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                                {
+                                    RGVTaskCommand command = new RGVTaskCommand()
+                                    {
+                                        PickupLocation = (byte)Convert.ToSByte(26),
+                                        TaskNum = Convert.ToInt16(1000),
+                                        TaskType = (byte)Convert.ToSByte(1)
+                                    };
+                                    SendCommand(commonRGVFirst, command);
+                                }
+                                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)}銆戙��");
+                                return task;
+                            }
+                        }
+                    }
+                    return task;
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteInfo("璋冨害浠诲姟寮傚父鏃ュ織", ex.Message + Environment.NewLine + ex.StackTrace);
+                return null;
+            }
+        }
+
+        public Dt_Task DispatchTask(CommonRGV_FirstFloor commonRGV)
+        {
+            try
+            {
+                var tasks = _taskService.QueryRGVTask();
+                Dt_Task task;
+                if (tasks == null && 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) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.Running) && !commonRGVSecond.GetValue<RGVDBName, bool>(RGVDBName.InStock))
+                        {
+                            if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                            {
+                                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}宸ヤ綔妯″紡锛氥�恵commonRGV.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}宸ヤ綔妯″紡锛氥�恵commonRGV.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");
+                            }
+                        }
+                        else 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)
+                            {
+                                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 && x.TargetStation > taskSecond.SourceStation && x.SourceStation > taskSecond.SourceStation && x.TargetStation > taskSecond.TargetStation);
+
+
+                                    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 && x.TargetStation > taskSecond.TargetStation);
+
+                                    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 null;
+                            }
+                            else
+                            {
+                                if (commonRGVSecond.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                                {
+                                    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");
+                                }
+                            }
+                        }
+                        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");
+                            }
+                        }
+                    }
+                    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");
+                        }
+                    }
+                }
+                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) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.Running) && !commonRGVFirst.GetValue<RGVDBName, bool>(RGVDBName.InStock))
+                        {
+                            if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                            {
+                                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");
+                            }
+                        }
+                        else 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));
+                            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 => x.SourceStation < taskFirst.TargetStation && x.TargetStation < taskFirst.SourceStation && x.SourceStation < taskFirst.SourceStation && x.TargetStation < taskFirst.TargetStation);
+
+                                    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 => x.SourceStation < taskFirst.TargetStation && x.TargetStation < taskFirst.TargetStation);
+
+                                    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 null;
+                            }
+                            else
+                            {
+                                if (commonRGVFirst.GetValue<RGVDBName, int>(RGVDBName.LevelPoint) > 1000)
+                                {
+                                    RGVTaskCommand command = new RGVTaskCommand()
+                                    {
+                                        PickupLocation = (byte)Convert.ToSByte(15),
+                                        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");
+                                }
+                            }
+                        }
+                        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"))}銆戙��");
+
+                                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");
+                            }
+                        }
+                    }
+                    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"))}銆戙��");
+
+                            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");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteInfo("璋冨害浠诲姟寮傚父鏃ュ織", ex.Message+Environment.NewLine+ex.StackTrace);
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// RGV浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="commonRGV"></param>
+        /// <param name="TaskNum"></param>
+        public void RGVTaskFinish(CommonRGV_FirstFloor commonRGV, int TaskNum)
+        {
+            if (commonRGV != null)
+            {
+                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);
+                        if (stationManager != null)
+                        {
+                            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                            if (device != null)
+                            {
+                                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                                Thread.Sleep(100);
+                                DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault();
+                                var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 5);
+                                string Barcode = Encoding.UTF8.GetString(x);
+
+                                if (Barcode == null || Barcode == "")
+                                {
+                                    conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
+                                    commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, Convert.ToSByte(stationManager.stationRemark));
+                                    commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(task.TaskNum));
+                                    task.TaskState = (int)TaskInStatusEnum.InRetuen;
+                                    _taskRepository.UpdateData(task);
+                                    return;
+                                }
+                                var content = _taskService.RGVTaskCompleted(TaskNum, Barcode);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutExecuting)
+                        {
+                            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress && x.stationType == 7);
+                            if (stationManager != null)
+                            {
+                                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                                if (device != null)
+                                {
+                                    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);
+                                    Thread.Sleep(100);
+                                    conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(2), stationManager.stationChildCode);
+                                }
+                            }
+                        }
+                        var content = _taskService.RGVTaskCompleted(TaskNum);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇浠诲姟
+        /// </summary>
+        /// <param name="commonRGV">鍫嗗灈鏈哄璞�</param>
+        /// <returns></returns>
+        private Dt_Task? GetTask(CommonRGV_FirstFloor commonRGV, bool InStock)
+        {
+            if (InStock)
+            {
+                return _taskService.QueryRGVExecutingTask(commonRGV.DeviceCode, commonRGV.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum));
+            }
+            return null;
+
+            #region
+            //if (commonRGV.LastTaskType == null)
+            //{
+            //    task = _taskService.QueryRGVTask(commonRGV.DeviceCode);
+            //}
+            //else
+            //{
+            //    if (commonRGV.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            //    {
+            //        task = _taskService.QueryRGVInTask(commonRGV.DeviceCode);
+            //        if (task == null)
+            //        {
+            //            task = _taskService.QueryRGVOutTask(commonRGV.DeviceCode);
+            //        }
+            //    }
+            //    else
+            //    {
+            //        task = _taskService.QueryRGVOutTask(commonRGV.DeviceCode);
+            //    }
+            //}
+
+            //if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            //{
+            //    if (task == null)
+            //    {
+            //        task = _taskService.QueryRGVInTask(commonRGV.DeviceCode);
+            //    }
+            //    else
+            //    {
+            //        return task;
+            //    }
+            //}
+            //else if (task == null)
+            //{
+            //    task = _taskService.QueryRGVInTask(commonRGV.DeviceCode);
+            //}
+            #endregion
+        }
+
+        /// <summary>
+        /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public RGVTaskCommand? ConvertToRGVTaskCommand([NotNull] Dt_Task task)
+        {
+            RGVTaskCommand rgvTaskCommand = new RGVTaskCommand();
+
+            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_IndispatchFinish)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
+                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
+                    return null;
+                }
+            }
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            {
+
+                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);
+                }
+                else if (task.TaskState == (int)TaskOutStatusEnum.RGV_OutdispatchFinish)
+                {
+                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress);
+                    rgvTaskCommand.TaskType = (byte)Convert.ToSByte(4);
+                    rgvTaskCommand.PutcargoLocation = (byte)Convert.ToSByte(stationManager.stationRemark);
+                }
+                else
+                {
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
+                    return null;
+                }
+            }
+
+            return rgvTaskCommand;
+        }
+
+        public bool SendCommand(CommonRGV_FirstFloor commonRGV, RGVTaskCommand? rgvTaskCommand)
+        {
+            commonRGV.SetValue(StackerCraneDBName.TaskNum, rgvTaskCommand.TaskNum);
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, rgvTaskCommand.PutcargoLocation);
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PickupLocation, rgvTaskCommand.PickupLocation);
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(rgvTaskCommand.TaskType));
+            for (int i = 0; i < 6; i++)
+            {
+
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TaskNum) == rgvTaskCommand.TaskNum && commonRGV.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.TaskType) == rgvTaskCommand.TaskType && commonRGV.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.PutcargoLocation) == rgvTaskCommand.PutcargoLocation && commonRGV.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.PickupLocation) == rgvTaskCommand.PickupLocation)
+                {
+                    WriteInfo(commonRGV.DeviceName, $"鍐欏叆浠诲姟鎴愬姛鍐欏叆娆℃暟{i}鍐欏叆浠诲姟銆恵JsonConvert.SerializeObject(rgvTaskCommand)}銆�");
+                    return true;
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TaskNum) == rgvTaskCommand.TaskNum)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.TaskNum, rgvTaskCommand.TaskNum);
+                    Thread.Sleep(100);
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.PutcargoLocation) == rgvTaskCommand.PutcargoLocation)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, rgvTaskCommand.PutcargoLocation);
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.PickupLocation) == rgvTaskCommand.PickupLocation)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.PickupLocation, rgvTaskCommand.PickupLocation);
+                }
+                if (commonRGV.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TaskType) == rgvTaskCommand.TaskType)
+                {
+                    commonRGV.SetValue(StackerCraneDBName.TaskType, rgvTaskCommand.TaskType);
+                }
+            }
+            WriteInfo(commonRGV.DeviceName, $"RGV浠诲姟鍐欏叆澶辫触銆恵JsonConvert.SerializeObject(rgvTaskCommand)}銆�");
+            return false;
+        }
+
+        public void LogAndWarn(string deviceName, string log, string color = "red")
+        {
+            ConsoleHelper.WriteWarningLine(log);
+            _noticeService.Logs(userTokenIds, new { deviceName, log = log, time = DateTime.Now.ToString("G"), color = color });
+            WriteInfo(deviceName, log);
+        }
+    }
+}

--
Gitblit v1.9.3