From f546c6012b27a31a0c70089b6398c9ce935f2ce0 Mon Sep 17 00:00:00 2001 From: 刘磊 <1161824510@qq.com> Date: 星期六, 23 十一月 2024 14:56:54 +0800 Subject: [PATCH] 1 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs | 291 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 291 insertions(+), 0 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs new file mode 100644 index 0000000..1c27251 --- /dev/null +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerStationJob/CommonStackerStationCraneJob.cs @@ -0,0 +1,291 @@ +锘縰sing HslCommunication; +using Newtonsoft.Json; +using Quartz; +using System.Diagnostics.CodeAnalysis; +using WIDESEAWCS_BasicInfoRepository; +using WIDESEAWCS_Common.TaskEnum; +using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_DTO.MOM; +using WIDESEAWCS_IProcessRepository; +using WIDESEAWCS_ITaskInfoRepository; +using WIDESEAWCS_ITaskInfoService; +using WIDESEAWCS_Model; +using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.DeviceBase; +using WIDESEAWCS_QuartzJob.Models; +using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_QuartzJob.StackerCrane.Enum; +using WIDESEAWCS_Tasks.StackerCraneJob; + +namespace WIDESEAWCS_Tasks +{ + [DisallowConcurrentExecution] + public class CommonStackerStationCraneJob : JobBase, IJob + { + private readonly ITaskService _taskService; + private readonly ITaskExecuteDetailService _taskExecuteDetailService; + private readonly ITaskRepository _taskRepository; + private readonly IProcessRepository _processRepository; + private readonly IDt_StationManagerRepository _stationManagerRepository; + + public CommonStackerStationCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IProcessRepository processRepository, IDt_StationManagerRepository stationManagerRepository) + { + _taskService = taskService; + _taskExecuteDetailService = taskExecuteDetailService; + _taskRepository = taskRepository; + _processRepository = processRepository; + _stationManagerRepository = stationManagerRepository; + } + + public Task Execute(IJobExecutionContext context) + { + try + { + // speStackerCrane.GetStackerCraneStatus<StackerCraneAutoStatus>(); + // speStackerCrane.GetStackerCraneStatus<StackerCraneWorkStatus>(); + // speStackerCrane.GetStackerCraneStatus<StackerCraneStatus>(); + + CommonStackerStationCrane commonStackerCrane = (CommonStackerStationCrane)context.JobDetail.JobDataMap.Get("JobParams"); + if (commonStackerCrane != null) + { + //EqptAlive(commonStackerCrane); + //Console.Out.WriteLine(commonStackerCrane.DeviceName); + if (!commonStackerCrane.IsEventSubscribed) + { + commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢 + } + + if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal) + { + commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆� + + if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) + { + Dt_Task? task = GetTask(commonStackerCrane); + if (task != null) + { + StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); + if (stackerCraneTaskCommand != null) + { + bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); + if (sendFlag) + { + commonStackerCrane.LastTaskType = task.TaskType; + _taskService.UpdateTaskStatusToNext(task.TaskNum); + } + } + } + } + } + } + } + catch (Exception ex) + { + WriteError("CommonStackerStationCraneJob", "test", ex); + //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString()); + } + WriteDebug("CommonStackerStationCraneJob", "test"); + return Task.CompletedTask; + } + + /// <summary> + /// 浠诲姟瀹屾垚浜嬩欢璁㈤槄鐨勬柟娉� + /// </summary> + /// <param name="sender"></param> + /// <param name="e"></param> + private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e) + { + CommonStackerStationCrane? commonStackerCrane = sender as CommonStackerStationCrane; + if (commonStackerCrane != null) + { + if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5) + { + Console.Out.WriteLine("TaskCompleted" + e.TaskNum); + _taskService.StackCraneTaskCompletedByStation(e.TaskNum); + commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); + } + } + } + + /// <summary> + /// 鑾峰彇浠诲姟 + /// </summary> + /// <param name="commonStackerCrane">鍫嗗灈鏈哄璞�</param> + /// <returns></returns> + private Dt_Task? GetTask(CommonStackerStationCrane commonStackerCrane) + { + Dt_Task task; + if (commonStackerCrane.LastTaskType == null) + { + task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); + } + else + { + if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + { + task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); + if (task == null) + { + task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); + } + } + else + { + task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); + } + } + + if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + { + if (OutTaskStationIsOccupied(task) != null) + { + return task; + } + else + { + //List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList(); + //List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes); + //foreach (var item in tasks) + //{ + // if (OutTaskStationIsOccupied(task) != null) + // { + // return task; + // } + //} + task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); + } + } + else if (task == null) + { + task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); + } + + return task; + } + + /// <summary> + /// 鍑哄簱浠诲姟鍒ゆ柇鍑哄簱绔欏彴鏄惁琚崰鐢� + /// </summary> + /// <param name="task">浠诲姟瀹炰綋</param> + /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns> + private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task) + { + var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.TargetAddress && x.Roadway == task.Roadway); + IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationinfo.stationPLC); + if (device != null) + { + CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)device; + if (conveyorLine.IsOccupied(stationinfo.stationChildCode))//鍑哄簱绔欏彴鏈鍗犵敤 + { + return task; + } + } + else + { + _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵task.NextAddress}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤"); + } + return null; + } + + /// <summary> + /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel + /// </summary> + /// <param name="task">浠诲姟瀹炰綋</param> + /// <returns></returns> + /// <exception cref="Exception"></exception> + public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task) + { + StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand(); + + stackerCraneTaskCommand.Barcode = task.PalletCode; + stackerCraneTaskCommand.TaskNum = task.TaskNum; + stackerCraneTaskCommand.WorkType = 1; + stackerCraneTaskCommand.TrayType = 0; + stackerCraneTaskCommand.StartCommand = 1; + + string[] sourceCodes = task.SourceAddress.Split("-"); + if (sourceCodes.Length == 3) + { + stackerCraneTaskCommand.StartRow = (short)(Convert.ToInt16(sourceCodes[0]) % 2 == 0 ? 2:1); + stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]); + stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]); + } + else + { + //鏁版嵁閰嶇疆閿欒 + _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�"); + return null; + } + string[] targetCodes = task.TargetAddress.Split("-"); + if (targetCodes.Length == 3) + { + //if (task.Roadway.Contains("FR")) + //{ + // if(task.Roadway.EndsWith("03")|| task.Roadway.EndsWith("01")) + // { + + // stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 1 : 2); + // stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); + // stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); + // } + // else + // { + + // stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 2 : 1); + // stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); + // stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); + // } + //} + //else + //{ + + //} + stackerCraneTaskCommand.EndRow = (short)(Convert.ToInt16(targetCodes[0]) % 2 == 0 ? 2 : 1); + stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); + stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); + } + else + { + //鏁版嵁閰嶇疆閿欒 + _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�"); + return null; + } + + return stackerCraneTaskCommand; + } + + + /// <summary> + /// 璁惧蹇冭烦 + /// </summary> + /// <param name="commonStackerCrane"></param> + public async void EqptAlive(CommonStackerCrane commonStackerCrane) + { + if (commonStackerCrane.StackerOnline) + { + BasicDto dto = new BasicDto + { + EmployeeNo = "T00001", + EquipmentCode = commonStackerCrane.DeviceCode, + RequestTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"), + SessionId = Guid.NewGuid().ToString(), + Software = commonStackerCrane.DeviceName, + }; + var respone = await HttpHelper.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/EqptAlive", dto.ToJsonString()); + if (respone != null) + { + var result = JsonConvert.DeserializeObject<ResponseEqptAliveDto>(respone); + if (result != null && result.Success) + { + if (result.KeyFlag == "99") + commonStackerCrane.StackerOnline = true; + else if (result.KeyFlag == "98") + commonStackerCrane.StackerOnline = false; + } + } + } + } + + } +} \ No newline at end of file -- Gitblit v1.9.3