From c54e0666bdd34fbe133fe521bf9d46dd6c0fe53e Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com> Date: 星期四, 12 六月 2025 10:33:28 +0800 Subject: [PATCH] 代码提交 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs | 160 +++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 124 insertions(+), 36 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" index 0f28fa5..1de6610 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" @@ -1,20 +1,17 @@ -锘縰sing Autofac.Core; -using Microsoft.AspNetCore.Components.Routing; -using Microsoft.AspNetCore.Hosting; -using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; +锘縰sing Newtonsoft.Json; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using Quartz; -using System; +using SqlSugar; +using SqlSugar.Extensions; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Diagnostics.Eventing.Reader; -using System.Linq; -using System.Reflection.Metadata; -using System.Text; using System.Threading.Tasks; -using WIDESEA_Common.Log; -using WIDESEAWCS_Common.TaskEnum; -using WIDESEAWCS_Core; -using WIDESEAWCS_Core.Enums; +using WIDESEA_Core.Enums; +using WIDESEAWCS_Core.Caches; +using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_Core.HttpContextUser; +using WIDESEAWCS_IBasicInfoRepository; +using WIDESEAWCS_ISystemRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; @@ -23,8 +20,11 @@ using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Service; +using WIDESEAWCS_QuartzJob.StackerCrane; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; +using WIDESEAWCS_SignalR; using WIDESEAWCS_Tasks.StackerCraneJob; +using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; namespace WIDESEAWCS_Tasks { @@ -34,14 +34,18 @@ private readonly ITaskService _taskService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskRepository _taskRepository; - private readonly IRouterService _routerService; + private readonly IDt_StationManagerRepository _stationManagerRepository; + private readonly ICacheService _cacheService; + private readonly INoticeService _noticeService; - public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService) + public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository,IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _taskRepository = taskRepository; - _routerService = routerService; + _stationManagerRepository = stationManagerRepository; + _cacheService = cacheService; + _noticeService = noticeService; } public Task Execute(IJobExecutionContext context) @@ -49,16 +53,50 @@ try { CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); + if (commonStackerCrane != null) { - //娣诲姞鍒ゆ柇agv鐘舵�佹槸鍚﹀彲涓嬪彂 - if (ReadAGVstatus(commonStackerCrane) == 1 && ReadAGVworkingmode(commonStackerCrane) == 1) + if (!commonStackerCrane.IsEventSubscribed) { - GetTask(commonStackerCrane); + commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢 } - //澶勭悊agv鏄惁瀹屾垚浠诲姟 - + if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal) + { + commonStackerCrane.CheckStackerCraneTaskCompleted();//妫�娴嬪爢鍨涙満浠诲姟瀹屾垚浜嬩欢 + + if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Idle) + { + GetTask(commonStackerCrane); + } + } + + #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(); + object obj = new + { + commonStackerCrane.StackerCraneStatusDes, + commonStackerCrane.StackerCraneAutoStatusDes, + commonStackerCrane.StackerCraneWorkStatusDes, + commonStackerCrane.DeviceCode, + commonStackerCrane.DeviceName, + commonStackerCrane.CurrentTaskNum, + commonStackerCrane.LastTaskNum, + SourceAddress = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.SourceAddress), + TargetAddress = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.TargetAddress), + Command = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Command), + Electricity = commonStackerCrane.GetValue<StackerCraneDBName, float>(StackerCraneDBName.Electricity), + }; + + _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj }); + } + + #endregion 璋冪敤浜嬩欢鎬荤嚎閫氱煡鍓嶇 } } catch (Exception ex) @@ -73,17 +111,16 @@ /// </summary> /// <param name="sender"></param> /// <param name="e"></param> - private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e) + private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e) { - CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane; + CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane; if (commonStackerCrane != null) { - if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5) - { - Console.Out.WriteLine("TaskCompleted" + e.TaskNum); - _taskService.StackCraneTaskCompleted(e.TaskNum); - commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); - } + + Console.Out.WriteLine("TaskCompleted" + e.TaskNum); + _taskService.StackCraneTaskCompleted(e.TaskNum); + commonStackerCrane.SetValue(StackerCraneDBName.TaskCompleted, 1); + } } @@ -102,8 +139,10 @@ if (stackerCraneTaskCommand != null) { bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); - if (sendFlag) + Thread.Sleep(1000); + if (ReadReceived(commonStackerCrane) == 1) { + WriteConfirm(commonStackerCrane); _taskService.UpdateTaskStatusToNext(task.TaskNum); } } @@ -131,7 +170,50 @@ return deviceProDTO != null ? commonStackerCrane.Communicator.Read<int>(deviceProDTO.DeviceProAddress) : 99; } + /// <summary> + /// 璇诲彇AGV鏀跺埌浣滀笟淇″彿 + /// </summary> + /// <param name="commonStackerCrane"></param> + /// <returns></returns> + public int ReadReceived(CommonStackerCrane commonStackerCrane) + { + return commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Received); + } + public void WriteConfirm(CommonStackerCrane commonStackerCrane) + { + commonStackerCrane.SetValue(StackerCraneDBName.WriteConfirm, 1); + } + /// <summary> + /// 璋冨害AGV鍘诲皝杈瑰尯鍩� + /// </summary> + /// <param name="commonStackerCrane"></param> + /// <param name="value"></param> + public void AGVToEdgeBanding(CommonStackerCrane commonStackerCrane) + { + commonStackerCrane.SetValue(StackerCraneDBName.AreaWrite, true); + } + + /// <summary> + /// 璋冨害AGV鍘荤爞杈瑰尯鍩� + /// </summary> + /// <param name="commonStackerCrane"></param> + /// <param name="value"></param> + public void AGVToSandyEdge(CommonStackerCrane commonStackerCrane) + { + DeviceProDTO? devicePro = commonStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamType == "AreaWrite" && x.DeviceChildCode == commonStackerCrane.DeviceCode && x.DeviceProParamName == "AreaWrite").OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + + if(devicePro == null) + { + ConsoleHelper.WriteColorLine($"銆愭湭鎵惧埌閰嶇疆璋冨害AGV鍖哄煙鍗忚銆�", ConsoleColor.Magenta); + return; + } + var writeBool = commonStackerCrane.Communicator.Read<bool>(devicePro.DeviceProAddress+0.1); + if (!writeBool) + { + commonStackerCrane.Communicator.Write(devicePro.DeviceProAddress + 0.1, true); + } + } /// <summary> /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel /// </summary> @@ -140,17 +222,23 @@ /// <exception cref="Exception"></exception> public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task) { + var SourceAddress = _stationManagerRepository.QueryFirst(x => x.stationName == task.SourceAddress); + var TargetAddress = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress); + + if(SourceAddress == null || TargetAddress == null) + { + ConsoleHelper.WriteColorLine($"銆愪换鍔JsonConvert.SerializeObject(task)}鏈壘鍒扮珯鍙伴厤缃��", ConsoleColor.Magenta); + return null; + } StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand(); stackerCraneTaskCommand.TaskNum = task.TaskNum; stackerCraneTaskCommand.WorkType = 1; - stackerCraneTaskCommand.TrayType = 0; - stackerCraneTaskCommand.StartAdder = Convert.ToInt16(task.SourceAddress); - stackerCraneTaskCommand.EndAdder = Convert.ToInt16(task.TargetAddress); + stackerCraneTaskCommand.TaskType = 0; + stackerCraneTaskCommand.StartAddress = Convert.ToInt16(SourceAddress.stationCode); + stackerCraneTaskCommand.EndAddress = Convert.ToInt16(TargetAddress.stationCode); - return stackerCraneTaskCommand; - - + return stackerCraneTaskCommand; } } } -- Gitblit v1.9.3