From c827fe7b0c5b3b444d76ba0d96a2649c764630dd Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期四, 14 十一月 2024 16:36:08 +0800 Subject: [PATCH] 修改WCS、WMS出入库逻辑 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 215 ++++++----------------------------------------------- 1 files changed, 27 insertions(+), 188 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 1e2c33f..edc34d8 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" @@ -46,6 +46,7 @@ private readonly IRouterService _routerService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; + private readonly ITaskHtyService _taskHtyService; private readonly IMapper _mapper; private Dictionary<string, OrderByType> _taskOrderBy = new() @@ -60,11 +61,12 @@ public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); - public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal) + public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, ITaskHtyService taskHtyService, IMapper mapper) : base(BaseDal) { _routerService = routerService; _taskExecuteDetailService = taskExecuteDetailService; _taskExecuteDetailRepository = taskExecuteDetailRepository; + _taskHtyService = taskHtyService; _mapper = mapper; } /// <summary> @@ -122,87 +124,6 @@ } return content; } - /// <summary> - /// 杈撻�佺嚎鍏ュ簱瀹屾垚鍚慦MS鐢宠鍏ュ簱/鍫嗗灈鏈虹敵璇峰叆搴� - /// </summary> - /// <param name="task"></param> - /// <returns></returns> - public WebResponseContent StackerCraneRequestInbound(Dt_Task task) - { - WebResponseContent content = new WebResponseContent(); - try - { - ConveyorLineDTO lineDTO = new ConveyorLineDTO() - { - 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; - } - - /// <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) - { - content = WebResponseContent.Instance.Error(ex.Message); - } - return content; - } /// <summary> /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏈墽琛岀殑浠诲姟 @@ -212,7 +133,7 @@ /// <returns></returns> public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress, string Barcode) { - 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); + 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> @@ -263,7 +184,7 @@ 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.Car_OutFinish), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) || 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.Car_OutFinish), TaskOrderBy); } @@ -277,9 +198,9 @@ public Dt_Task QueryStackerCraneInTask(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, TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress), TaskOrderBy); else - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && !string.IsNullOrEmpty(x.NextAddress) && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -416,6 +337,15 @@ task.TargetAddress = task.NextAddress; } } + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)//搴撳唴绉昏溅 + { + if (task.TaskState >= (int)TaskCarStatusEnum.RelocationCarFinish) + { + return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�"); + } + int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskCarStatusEnum>(); + task.TaskState = nextStatus; + } else { throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�"); @@ -476,94 +406,6 @@ return null; } - /// <summary> - /// 浠诲姟瀹屾垚 - /// </summary> - /// <param name="taskNum">浠诲姟缂栧彿</param> - /// <returns>杩斿洖澶勭悊缁撴灉</returns> - public WebResponseContent StackCraneTaskCompleted(int taskNum) - { - WebResponseContent content = new WebResponseContent(); - try - { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); - if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); - - if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) - { - List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); - if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�"); - - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); - task.TaskState = nextStatus; - task.CurrentAddress = task.NextAddress; - task.NextAddress = routers.FirstOrDefault().ChildPosi; - task.ModifyDate = DateTime.Now; - task.Modifier = "System"; - BaseDal.UpdateData(task); - - _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�"); - //todo 鍚屾鍒癢MS - - //鏆備笉鑰冭檻澶氫釜鍑哄簱鍙� - } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) - { - //todo - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); - task.TaskState = nextStatus; - task.ModifyDate = DateTime.Now; - task.Modifier = "System"; - - #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) - { - BaseDal.UpdateData(task); - _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�"); - } - #endregion - - - - //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) - { - //todo 璋冪敤WMS绉诲簱瀹屾垚 - } - else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) - { - - } - else - { - throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�"); - } - content = WebResponseContent.Instance.OK(); - } - catch (Exception ex) - { - content = WebResponseContent.Instance.Error($"浠诲姟瀹屾垚寮傚父,浠诲姟鍙�:銆恵taskNum}銆�"); - } - return content; - } /// <summary> /// 鎭㈠鎸傝捣浠诲姟 @@ -656,11 +498,21 @@ return content; } + /// <summary> + /// 鏍规嵁浠诲姟鍙锋煡璇换鍔� + /// </summary> + /// <param name="taskNum"></param> + /// <returns></returns> public Dt_Task GetTaskInfo(int taskNum) { return BaseDal.QueryFirst(x => x.TaskNum == taskNum); } - + /// <summary> + /// 鏍规嵁浠诲姟鐘舵�併�佺被鍨嬫煡璇换鍔� + /// </summary> + /// <param name="TaskState"></param> + /// <param name="TaskType"></param> + /// <returns></returns> public Dt_Task GetTaskState(int TaskState, int TaskType) { Dt_Task task = null; @@ -673,19 +525,6 @@ 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> -- Gitblit v1.9.3