From 2950220f98f891a64cc452478e2a2ae61b82a8cd Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期日, 13 四月 2025 16:21:52 +0800 Subject: [PATCH] 优化代码、添加大屏 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs | 253 +++++++++----------------------------------------- 1 files changed, 46 insertions(+), 207 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs" index 8351b96..dfe8b78 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ShuttleCarJob/ShuttleCarJob.cs" @@ -1,4 +1,5 @@ 锘縰sing AutoMapper; +using HslCommunication; using Newtonsoft.Json; using OfficeOpenXml.Drawing.Chart; using Quartz; @@ -9,13 +10,15 @@ using System.Threading.Tasks; using WIDESEAWCS_Common.ShuttleCarEnum; using WIDESEAWCS_Common.TaskEnum; -using WIDESEAWCS_Common.WMSInfo; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_DTO.WMSInfo; using WIDESEAWCS_IShuttleCar; +using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; using WIDESEAWCS_TaskInfoService; @@ -26,17 +29,21 @@ namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] - public class CommonShuttleCarJob : IJob + partial class CommonShuttleCarJob : JobBase, IJob { private readonly ITaskService _taskService; + private readonly ITaskRepository _taskRepository; + private readonly ITaskHtyService _taskHtyService; private readonly IShuttleCarService _shuttleCarService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; private readonly IMapper _mapper; - public CommonShuttleCarJob(ITaskService taskService, IShuttleCarService shuttleCarService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper) + public CommonShuttleCarJob(ITaskService taskService, ITaskRepository taskRepository, ITaskHtyService taskHtyService, IShuttleCarService shuttleCarService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper) { _taskService = taskService; + _taskRepository = taskRepository; + _taskHtyService = taskHtyService; _shuttleCarService = shuttleCarService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; @@ -50,239 +57,71 @@ ShuttleCar shuttleCar = (ShuttleCar)context.JobDetail.JobDataMap.Get("JobParams"); if (shuttleCar != null) { - ShuttleCarTaskCommandR command = shuttleCar.ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar.DeviceCode);//璇诲彇绌挎杞︿俊鎭� + shuttleCar.Communicator.IsReadAfterWrite = false; + ShuttleCarTaskCommandR command = ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar, shuttleCar.DeviceCode);//璇诲彇绌挎杞︿俊鎭� if (command != null && command.JoinStatus == 1) { #region 绌挎杞︿换鍔″畬鎴� - if (command.TaskTypeComplete > (short)ShuttleCarTaskComplete.Standby) + var complete = shuttleCar.GetValue<ShuttleCarDBName, bool>(ShuttleCarDBName.TaskComplete); + if (complete && command.TaskTypeComplete > (short)ShuttleCarTaskComplete.Standby && command.Status == command.TaskTypeComplete) { - //鏌ユ壘浠诲姟锛屽垽鏂换鍔$姸鎬佸仛瀵瑰簲澶勭悊锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛� - var Status = _taskService.StackCraneTaskCompleted(command.number).Status;//闇�浼樺寲!!! - shuttleCar.SetValue(ShuttleCarDBName.ConfirmComplete, Status, shuttleCar.DeviceCode); + _taskService.ShuttleCarTaskCompleted(command.number, command.TaskTypeComplete); + shuttleCar.SetValue(ShuttleCarDBName.ConfirmComplete, true, shuttleCar.DeviceCode); } #endregion - #region 绉诲簱鍏呯數浠诲姟 - if (command.Err_Status == (short)ShuttleCarErr.LowBattery || command.ElectricQuantity == (short)ShuttleCarErr.LowBattery) - { - //鐢熸垚鍫嗗灈鏈虹Щ杞︿换鍔�&绌挎杞﹀厖鐢典换鍔� - var ShuttleCar = QueryCode(shuttleCar.DeviceCode); - _taskService.AddRelocationCarTask(ShuttleCar.ShuttleCarPosition, "", ShuttleCar.ShuttleCarCode, ShuttleCarTaskType.Charging.ToString()); - } + #region 鑾峰彇鍫嗗灈鏈虹Щ杞�/绉诲簱瀹屾垚浠诲姟 + GetSC_CarFinish(); #endregion - #region 绌挎杞︾Щ搴撲换鍔� - - #region 鑾峰彇鍫嗗灈鏈虹Щ杞﹀畬鎴愪换鍔� - Dt_Task dt_Task = GetTask((int)TaskCarStatusEnum.SC_CarFinish, (int)TaskOtherTypeEnum.RelocationCar); - if (dt_Task != null) + #region 鍒涘缓绉昏溅鍏呯數浠诲姟 + if (command.Err_Status == (short)ShuttleCarErr.LowBattery || command.ElectricQuantity <= (short)ShuttleCarErr.LowBattery) { - var ShuttleCar = QueryCode(dt_Task.ShuttleCarCode); - ShuttleCar.ShuttleCarPosition = dt_Task.TargetAddress; - _shuttleCarService.UpdateData(ShuttleCar); - if (string.IsNullOrEmpty(dt_Task.Remark))//瀹屾垚绉诲簱浠诲姟 + var ShuttleCar = QueryCode(shuttleCar.DeviceCode);//鍦ㄥ厖鐢典綅鐩存帴璁╃┛姊溅鍘诲厖鐢� + //鐢熸垚鍫嗗灈鏈虹Щ杞︿换鍔�&绌挎杞﹀厖鐢典换鍔�,鍒ゆ柇鏄惁鏈夌┛姊溅鍦ㄥ厖鐢� + Dt_Task _Task = _taskRepository.QueryFirst(x => x.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt()); + if (_Task != null) { - //绉诲叆鍘嗗彶浠诲姟锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛侊紒锛� - //鍒犻櫎褰撳墠浠诲姟 - } - else//涓嬪彂鍏呯數浠诲姟 - { - SendTask(dt_Task); - } - } - #endregion - - dt_Task = GetTask((int)TaskCarStatusEnum.CarNew, (int)TaskOtherTypeEnum.RelocationCar);//鑾峰彇鏂板缓绉昏溅浠诲姟 - if (dt_Task != null) - { - if (string.IsNullOrEmpty(dt_Task.SourceAddress)) - { - if (command.Status == (short)ShuttleCarStatus.Standby && command.TaskTypeComplete == (short)ShuttleCarTaskComplete.Standby && command.Err_Status == (short)ShuttleCarErr.Normal) + if (_Task.ShuttleCarCode != shuttleCar.DeviceCode) { - dt_Task.SourceAddress = QueryCode(shuttleCar._deviceCode).ShuttleCarPosition; - dt_Task.CurrentAddress = dt_Task.SourceAddress; - dt_Task.ShuttleCarCode = shuttleCar._deviceCode; - _taskService.UpdateData(dt_Task); - } - } - else if (string.IsNullOrEmpty(dt_Task.TargetAddress)) - { - #region 鍚慦MS鐢宠 - WebResponseContent content = new WebResponseContent(); - var ResultData = HttpHelper.PostAsync(WMSIP.GetPosition + $"?position={dt_Task.SourceAddress}", "", headers: new Dictionary<string, string>()); - if (ResultData.Result != null) - { - content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); - if (content != null && content.Status) + ShuttleCar shuttleCar1 = Storage.Devices.Where(x => x.DeviceCode.Equals(_Task.ShuttleCarCode)).FirstOrDefault() as ShuttleCar; + ShuttleCarTaskCommandR command1 = ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar1, shuttleCar1.DeviceCode);//璇诲彇绌挎杞︿俊鎭� + if (command1 != null && command1.JoinStatus == 1) { - dt_Task.TargetAddress = content.Message; - dt_Task.NextAddress = dt_Task.TargetAddress; - _taskService.UpdateData(dt_Task); + if (command1.Status == (short)ShuttleCarStatus.Charging && command1.ElectricQuantity >= 50) + { + shuttleCar1.SetValue(ShuttleCarDBName.TaskType, (short)ShuttleCarStatus.QuitCharging); + } } } - #endregion } - //绌挎杞︾Щ搴撲换鍔′笅鍙� - if (!string.IsNullOrEmpty(dt_Task.SourceAddress) && !string.IsNullOrEmpty(dt_Task.TargetAddress) && !string.IsNullOrEmpty(dt_Task.ShuttleCarCode)) + else { - SendTask(dt_Task); - } - } - #endregion - - #region 绌挎杞﹀嚭鍏ュ簱浠诲姟 - else - { - var task = _taskService.QueryShuttleCarTask(shuttleCar.DeviceCode); - if (task != null) - { - if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound && !task.IsPickPlace) + //鍒ゆ柇鍏呯數浣嶆槸鍚︽湁杞� + var ShuttleCar1 = _shuttleCarService.QueryShuttleCar("003-002-001"); + if (ShuttleCar1 != null && ShuttleCar1.ShuttleCarCode != shuttleCar.DeviceCode) { - var ShuttleCar = _shuttleCarService.QueryShuttleCar(task.SourceAddress);//鍑哄簱浠诲姟鍒ゆ柇鏄惁瀛樺湪绌挎杞� - if (ShuttleCar != null) - { - SendTask(task); - } - else - { - _taskService.AddRelocationCarTask("", task.SourceAddress); - } - #region 鍒涘缓鍫嗗灈鏈虹Щ杞︿换鍔� - //dt_Task = new Dt_Task() - //{ - // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), - // Grade = 2, - // Roadway = "SC01", - // TaskType = (int)TaskOtherTypeEnum.RelocationCar, - // SourceAddress = "", - // TargetAddress = task.SourceAddress, - // CurrentAddress = "", - // NextAddress = task.SourceAddress, - // CreateDate = DateTime.Now, - // Creater = "WCS", - // TaskState = (int)TaskCarStatusEnum.CarNew, - // WMSId = 0, - //}; - //_taskService.AddData(dt_Task); - #endregion + _taskService.AddRelocationCarTask(ShuttleCar1.ShuttleCarPosition, "", ShuttleCar1.ShuttleCarCode); + } + else + { + _taskService.AddRelocationCarTask(ShuttleCar.ShuttleCarPosition, "003-002-001", ShuttleCar.ShuttleCarCode, ShuttleCarTaskType.Charging.ToString()); } } } + #endregion + + #region 鑾峰彇绉昏溅/鍑哄叆搴撲换鍔� + Get_CarTask(shuttleCar, command); #endregion } } } catch (Exception ex) { - Console.Out.WriteLine(nameof(CommonShuttleCarJob) + ":" + ex.ToString()); - } - finally - { - + //Console.Out.WriteLine(nameof(CommonShuttleCarJob) + ":" + ex.ToString()); } return Task.CompletedTask; - } - private void SendTask(Dt_Task task) - { - ShuttleCar shuttleCar = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.ShuttleCarCode) as ShuttleCar; - if (shuttleCar != null) - { - ShuttleCarTaskCommandR command = shuttleCar.ReadCustomer<ShuttleCarTaskCommandR>(shuttleCar.DeviceCode);//璇诲彇绌挎杞︿俊鎭� - if (command != null && command.Status == (short)ShuttleCarStatus.Standby && command.TaskTypeComplete == (short)ShuttleCarTaskComplete.Standby && command.Err_Status == (short)ShuttleCarErr.Normal) - { - //浠诲姟杞崲 - ShuttleCarTaskCommandW shuttleCarTaskCommand = new ShuttleCarTaskCommandW(); - shuttleCarTaskCommand.Direction = command.Position; - shuttleCarTaskCommand.TaskNum = task.TaskNum; - if (task.TaskType == (int)TaskOtherTypeEnum.RelocationCar)//绉昏溅 - { - if (task.TaskState == (int)TaskCarStatusEnum.CarNew) - { - if (task.Remark == ShuttleCarTaskType.ExitCharge.ToString()) shuttleCarTaskCommand.TaskType = (short)GetCarTaskType(task.Remark); - else shuttleCarTaskCommand.TaskType = (short)GetCarTaskType(task.TaskType, shuttleCarTaskCommand.Direction); - } - else if (task.TaskState == (int)TaskCarStatusEnum.SC_CarFinish) - { - if (task.Remark == ShuttleCarTaskType.Charging.ToString()) shuttleCarTaskCommand.TaskType = (short)GetCarTaskType(task.Remark); - else shuttleCarTaskCommand.TaskType = (short)GetCarTaskType(task.TaskType, shuttleCarTaskCommand.Direction); - } - } - else - shuttleCarTaskCommand.TaskType = (short)GetCarTaskType(task.TaskType, shuttleCarTaskCommand.Direction); - //shuttleCarTaskCommand.TaskType = string.IsNullOrEmpty(task.Remark) ? (short)GetCarTaskType(task.TaskType, shuttleCarTaskCommand.Direction) : (short)GetCarTaskType(task.Remark); - //浠诲姟涓嬪彂 - if (shuttleCarTaskCommand.TaskType != null)//0 - { - if (shuttleCar.SendCommand(shuttleCarTaskCommand, shuttleCar.DeviceCode)) - { - if (!string.IsNullOrEmpty(task.Remark)) task.Remark = task.Remark + "宸蹭笅鍙�"; - task.TaskState = GetTaskState(task.TaskType); - _taskService.UpdateData(task); - } - } - } - - ///閫�鍑哄厖鐢典换鍔★紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛� - if (command.ElectricQuantity > 50) - { - - } - } - } - private Dt_Task GetTask(int TaskState, int TaskType) - { - return _taskService.GetTaskState(TaskState, TaskType); - } - - public Dt_ShuttleCar QueryCode(string ShuttleCarCode) - { - return _shuttleCarService.QueryCode(ShuttleCarCode); - } - - ShuttleCarTaskType GetCarTaskType(string remark) => remark switch - { - "Charging" => ShuttleCarTaskType.Charging, - "ExitCharge" => ShuttleCarTaskType.ExitCharge, - }; - - ShuttleCarTaskType GetCarTaskType(int TaskType, short Direction) - { - ShuttleCarTaskType taskType = new ShuttleCarTaskType(); - switch (TaskType) - { - case (int)TaskInboundTypeEnum.Inbound: - taskType = ShuttleCarTaskType.In; - break; - case (int)TaskOutboundTypeEnum.Outbound: - taskType = ShuttleCarTaskType.Out; - break; - case (int)TaskOtherTypeEnum.RelocationCar: - taskType = Direction == 1 ? ShuttleCarTaskType.ZeroA : ShuttleCarTaskType.ZeroB; - break; - default: - break; - } - return taskType; - } - - int GetTaskState(int TaskType) - { - int state = 0; - switch (TaskType) - { - case (int)TaskInboundTypeEnum.Inbound: - state = (int)TaskInStatusEnum.Car_InExecuting; - break; - case (int)TaskOutboundTypeEnum.Outbound: - state = (int)TaskOutStatusEnum.Car_OutExecuting; - break; - case (int)TaskOtherTypeEnum.RelocationCar: - state = (int)TaskCarStatusEnum.ShuttleCar_Executing; - break; - default: - break; - } - return state; } } } -- Gitblit v1.9.3