From 36230cd4dd0ebe5d21eede3eff6216908f7f7a8e Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期三, 06 十一月 2024 16:48:32 +0800 Subject: [PATCH] AGV任务下发,AGV任务状态更新 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 202 ++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 163 insertions(+), 39 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" index 084be31..1e2c33f 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" @@ -16,6 +16,7 @@ #endregion << 鐗� 鏈� 娉� 閲� >> using AutoMapper; +using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using System; @@ -26,10 +27,12 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; +using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; -using WIDESEAWCS_Core.Enums; +using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; +using WIDESEAWCS_DTO.WMSInfo; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; @@ -38,7 +41,7 @@ namespace WIDESEAWCS_TaskInfoService { - public class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService + public partial class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService { private readonly IRouterService _routerService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; @@ -64,7 +67,6 @@ _taskExecuteDetailRepository = taskExecuteDetailRepository; _mapper = mapper; } - /// <summary> /// 鎺ユ敹WMS浠诲姟淇℃伅 /// </summary> @@ -120,32 +122,80 @@ } return content; } - /// <summary> - /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟 + /// 杈撻�佺嚎鍏ュ簱瀹屾垚鍚慦MS鐢宠鍏ュ簱/鍫嗗灈鏈虹敵璇峰叆搴� /// </summary> - /// <param name="palletCode">鎵樼洏鍙�</param> - /// <param name="sourceAddress">璧峰鍦板潃</param> + /// <param name="task"></param> /// <returns></returns> - public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress) + public WebResponseContent StackerCraneRequestInbound(Dt_Task task) { WebResponseContent content = new WebResponseContent(); try { - WMSTaskDTO taskDTO = new WMSTaskDTO() + ConveyorLineDTO lineDTO = new ConveyorLineDTO() { - TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), - Grade = 1, - PalletCode = palletCode, - RoadWay = "SC01", - SourceAddress = sourceAddress, - TargetAddress = "SC01", - TaskState = (int)TaskInStatusEnum.InNew, - Id = 0, - TaskType = (int)TaskInboundTypeEnum.Inbound + stationCode = task.CurrentAddress, + TaskNum = task.TaskNum, + Barcode = task.PalletCode }; + var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.StackerCraneRequestInbound, lineDTO.ToJson(), headers: new Dictionary<string, string>()); + if (ResultData.Result == null) throw new Exception($"鍚慦MS璇锋眰鍏ュ簱鍒嗛厤璐т綅澶辫触!浠诲姟鍙�:{task.TaskNum}"); + content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); + if (content.Status) + { + var receiveWMSInfo = JsonConvert.DeserializeObject<ReceiveWMSInfo>(content.Data.ToJson()); + task.IsPickPlace = receiveWMSInfo.IsPickPlace; + task.TargetAddress = receiveWMSInfo.TargetAddress; + task.NextAddress = task.TargetAddress; + BaseDal.UpdateData(task); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } - content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); + /// <summary> + /// 杈撻�佺嚎妫�娴嬪彛鍚慦MS鐢宠鍏ュ簱 + /// </summary> + /// <param name="palletCode">鎵樼洏鍙�</param> + /// <param name="sourceAddress">璧峰鍦板潃</param> + /// <returns></returns> + public WebResponseContent RequestWMSTask(ConveyorLineDTO lineDTO) + { + WebResponseContent content = new WebResponseContent(); + try + { + #region 鍚慦MS鐢宠 + var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.ConveyorLineRequestInbound, lineDTO.ToJson(), headers: new Dictionary<string, string>()); + if (ResultData.Result == null) throw new Exception($"鍚慦MS璇锋眰鍏ュ簱澶辫触!鎵樼洏鍙�:{lineDTO.Barcode}"); + + content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); + + #endregion + + #region 浜х嚎鐢宠鍏ュ簱浠诲姟 + if (content != null && content.Status)//浠诲姟杞崲 + { + var task = JsonConvert.DeserializeObject<Dt_Task>(content.Data.ToJson()); + if (task != null) + { + List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.TargetAddress); + if (routers.Count > 0) + { + task.NextAddress = routers.FirstOrDefault().ChildPosi; + } + task.WMSId = task.TaskId; + task.Creater = "WMS"; + task.Dispatchertime = null; + task.CreateDate = DateTime.Now; + BaseDal.AddData(task); + } + } + #endregion + } catch (Exception ex) { @@ -160,9 +210,9 @@ /// <param name="deviceNo">璁惧缂栧彿</param> /// <param name="currentAddress">褰撳墠鍦板潃</param> /// <returns></returns> - public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress) + public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress, string Barcode) { - return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); + return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.NextAddress == currentAddress && x.PalletCode == Barcode && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -213,9 +263,9 @@ public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") { if (string.IsNullOrEmpty(currentAddress)) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy); else - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish), TaskOrderBy); } /// <summary> @@ -241,9 +291,9 @@ public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "") { if (string.IsNullOrEmpty(currentAddress)) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish, TaskOrderBy); else - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.Car_OutFinish && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -464,23 +514,35 @@ task.TaskState = nextStatus; task.ModifyDate = DateTime.Now; task.Modifier = "System"; - BaseDal.UpdateData(task); - _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�"); - WMSTaskDTO taskDTO = new WMSTaskDTO() + #region 鍚慦MS鍙嶉鍫嗗灈鏈轰换鍔″畬鎴� + WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task); + var ResultData = HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>()); + if (ResultData.Result == null) throw new Exception($"浠诲姟鐘舵�佸悓姝ュ埌WMS澶辫触!浠诲姟鍙�:{task.TaskNum}"); + content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result); + if (content.Status) { - TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), - Grade = 1, - PalletCode = task.PalletCode + "S", - RoadWay = "SC01", - SourceAddress = task.TargetAddress, - TargetAddress = "CLOutAreaA", - TaskState = (int)TaskOutStatusEnum.OutNew, - Id = 0, - TaskType = (int)TaskOutboundTypeEnum.Outbound - }; + BaseDal.UpdateData(task); + _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�"); + } + #endregion - content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); + + + //WMSTaskDTO taskDTO = new WMSTaskDTO() + //{ + // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), + // Grade = 1, + // PalletCode = task.PalletCode + "S", + // RoadWay = "SC01", + // SourceAddress = task.TargetAddress, + // TargetAddress = "CLOutAreaA", + // TaskState = (int)TaskOutStatusEnum.OutNew, + // Id = 0, + // TaskType = (int)TaskOutboundTypeEnum.Outbound + //}; + + //content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) { @@ -593,5 +655,67 @@ } return content; } + + public Dt_Task GetTaskInfo(int taskNum) + { + return BaseDal.QueryFirst(x => x.TaskNum == taskNum); + } + + public Dt_Task GetTaskState(int TaskState, int TaskType) + { + Dt_Task task = null; + if (TaskState > 0 && TaskType > 0) + task = BaseDal.QueryFirst(x => x.TaskState == TaskState && x.TaskType == TaskType); + else if (TaskState > 0) + task = BaseDal.QueryFirst(x => x.TaskState == TaskState); + else if (TaskType > 0) + task = BaseDal.QueryFirst(x => x.TaskType == TaskType); + return task; + } + + /// <summary> + /// 鏌ヨ绌挎杞﹀嚭鍏ュ簱浠诲姟 + /// </summary> + /// <param name="deviceNo"></param> + /// <param name="currentAddress"></param> + /// <returns></returns> + public Dt_Task QueryShuttleCarTask(string deviceNo, string currentAddress = "") + { + if (string.IsNullOrEmpty(currentAddress)) + return BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + else + return BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + } + /// <summary> + /// 娣诲姞绉昏溅浠诲姟 + /// </summary> + /// <param name="SourceAddress">璧风偣</param> + /// <param name="TargetAddress">缁堢偣</param> + /// <param name="ShuttleCarCode">绌挎杞﹀彿</param> + /// <returns></returns> + /// <exception cref="NotImplementedException"></exception> + public WebResponseContent AddRelocationCarTask(string SourceAddress, string TargetAddress, string ShuttleCarCode = "", string remark = "") + { + #region 鍒涘缓鍫嗗灈鏈虹Щ杞︿换鍔� + Dt_Task dt_Task = new Dt_Task() + { + TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), + Grade = 2, + Roadway = "SC01", + TaskType = (int)TaskOtherTypeEnum.RelocationCar, + SourceAddress = SourceAddress, + TargetAddress = TargetAddress, + CurrentAddress = SourceAddress, + NextAddress = TargetAddress, + CreateDate = DateTime.Now, + Creater = "WCS", + TaskState = (int)TaskCarStatusEnum.CarNew, + ShuttleCarCode = ShuttleCarCode, + WMSId = 0, + Remark = remark + }; + return AddData(dt_Task); + #endregion + } } } -- Gitblit v1.9.3