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