From b6837f097e9cdb2645368aed4ddb03f580c331e4 Mon Sep 17 00:00:00 2001 From: z8018 <1282578289@qq.com> Date: 星期一, 05 五月 2025 17:29:07 +0800 Subject: [PATCH] 1 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 391 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 200 insertions(+), 191 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 6057dff..f0eb3c3 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" @@ -15,8 +15,10 @@ *----------------------------------------------------------------*/ #endregion << 鐗� 鏈� 娉� 閲� >> +using System.Text; using System.Threading.Tasks; using AutoMapper; +using HslCommunication; using HslCommunication.WebSocket; using SqlSugar; using WIDESEAWCS_BasicInfoRepository; @@ -82,16 +84,9 @@ return WebResponseContent.Instance.Error("鏈壘鍒拌鍗曟槑缁嗕俊鎭�"); } - - - Dt_Container putContainer = _containerRepository.QueryFirst(x => x.ContainerType == ContainerTypeEnum.PutContainer.ObjToInt()); - if (putContainer == null) - { - return WebResponseContent.Instance.Error("鏀捐揣浣嶇疆涓嶅瓨鍦�"); - } - - List<PlacedBlock> placedBlocks = new List<PlacedBlock>(); + + string putPosition = ""; for (int i = 0; i < orderDetails.Count; i++) { @@ -103,118 +98,107 @@ int width = Convert.ToInt32(orderDetails[i].Orderdetails_width); int height = Convert.ToInt32(orderDetails[i].Orderdetails_thickness); + if (length < 300 || width < 50) + { + continue; + } + OrderInfo orderInfo = _orderDetailsService.GetOrderInfoByBarcode(orderDetails[i].Orderdetails_outid); - Dt_OrderContainer orderContainer = _orderContainerRepository.QueryFirst(x => x.OrderNo == orderInfo.OrderNo && x.ContainerCode == putContainer.ContainerCode); - ContainerSize containerSize = new ContainerSize(putContainer.ContainerLength, putContainer.ContainerWidth, putContainer.ContainerHeight); - - int lengthThreshold = AppSettings.Get("LengthThreshold").ObjToInt(); - bool isAdd = false; - bool isUpdate = false; - if (orderContainer == null) + var (flag, taskPosition, message) = _containerService.GetPosition(orderInfo.OrderHeadId, orderInfo.OrderNo, length, width, height); + if (flag && taskPosition != null) { - orderContainer = new Dt_OrderContainer() + if (string.IsNullOrEmpty(putPosition)) { - OrderId = orderInfo.OrderHeadId, - ContainerCode = putContainer.ContainerCode, - ContainerId = putContainer.Id, - OrderNo = orderInfo.OrderNo, - }; + putPosition = taskPosition.PutPosition; + } - if (length > lengthThreshold) + if (putPosition != taskPosition.PutPosition) { + continue; + } + + Dt_OrderContainer orderContainer = _orderContainerRepository.QueryFirst(x => x.OrderNo == orderInfo.OrderNo && x.ContainerCode == taskPosition.PutPosition); + + Dt_Container putContainer = _containerRepository.QueryFirst(x => x.ContainerCode == taskPosition.PutPosition); + if (putContainer == null) + { + //todo + throw new Exception("鏈壘鍒版斁璐т綅缃�"); + } + + bool isAdd = false; + if (orderContainer == null) + { + orderContainer = new Dt_OrderContainer() + { + OrderId = orderInfo.OrderHeadId, + ContainerCode = putContainer.ContainerCode, + ContainerId = putContainer.Id, + OrderNo = orderInfo.OrderNo, + }; orderContainer.MaxLength = putContainer.ContainerLength; + isAdd = true; } - else + + if (taskPosition != null) { - orderContainer.MaxLength = lengthThreshold; + Dt_ContainerItem dt_ContainerItem = new Dt_ContainerItem() + { + ContainerId = putContainer.Id, + ItemCode = orderInfo.Barcode, + ItemLength = length, + ItemWidth = width, + ItemHeight = height, + ItemPositionX = taskPosition.PositionX, + ItemPositionY = taskPosition.PositionY, + ItemPositionZ = taskPosition.PositionZ, + ItemRelaPositionX = taskPosition.PutPositionX, + ItemRelaPositionY = taskPosition.PutPositionY, + ItemRelaPositionZ = taskPosition.PutPositionZ, + ItemStatus = (int)ItemStatusEnum.Assigned, + ItemName = orderInfo.Barcode + }; + + Dt_Task dt_Task = new Dt_Task() + { + PalletCode = orderInfo.Barcode, + DeviceCode = putContainer.DeviceCode, + TaskState = (int)TaskStatusEnum.Gantry_Wait, + TaskType = 0, + SourceAddress = "", + TargetAddress = $"F06", + CurrentAddress = $"F06*{taskPosition.TakePositionX}*{taskPosition.TakePositionY}*{taskPosition.TakePositionZ}*{taskPosition.PositionR}", + NextAddress = $"{putContainer.ContainerCode}*{taskPosition.PutPositionX}*{taskPosition.PutPositionY}*{taskPosition.PutPositionZ}*{taskPosition.PositionR}", + ItemInfo = $"{length}*{width}*{height}", + Grade = 0, + }; + putContainer.ContainerStatus = ContainerStatusEnum.NonEmpty.ObjToInt(); + _unitOfWorkManage.BeginTran(); + BaseDal.AddData(dt_Task); + _containerRepository.UpdateData(putContainer); + _containerItemRepository.AddData(dt_ContainerItem); + if (isAdd) + { + _orderContainerRepository.AddData(orderContainer); + } + _unitOfWorkManage.CommitTran(); + + PlacedBlock placedBlock = new PlacedBlock(new Point3D(taskPosition.PositionX, taskPosition.PositionY, taskPosition.PositionZ), length > width ? length : width, width > length ? length : width, height); + placedBlocks.Add(placedBlock); + + object obj = new + { + x = taskPosition.PutCenterPositionX - putContainer.ContainerLength / 2, + y = taskPosition.PutCenterPositionY - putContainer.ContainerWidth / 2, + z = taskPosition.PutCenterPositionZ, + length, + width, + height, + }; + _webSocketServer.PublishAllClientPayload(obj.Serialize()); } - isAdd = true; } - else - { - if (length < lengthThreshold) - { - isUpdate = true; - orderContainer.MaxLength = lengthThreshold; - } - containerSize = new ContainerSize(orderContainer.MaxLength, putContainer.ContainerWidth, putContainer.ContainerHeight); - } - - - - TaskPosition? taskPosition = new TaskPosition(); - taskPosition = _containerService.GetTaskPosition(length, width, height, containerSize, placedBlocks); - - if (taskPosition != null) - { - - - - Dt_ContainerItem dt_ContainerItem = new Dt_ContainerItem() - { - ContainerId = putContainer.Id, - ItemCode = orderInfo.Barcode, - ItemLength = length, - ItemWidth = width, - ItemHeight = height, - ItemPositionX = taskPosition.PositionX, - ItemPositionY = taskPosition.PositionY, - ItemPositionZ = taskPosition.PositionZ, - ItemRelaPositionX = taskPosition.PositionX, - ItemRelaPositionY = taskPosition.PositionY, - ItemRelaPositionZ = taskPosition.PositionZ, - ItemStatus = (int)ItemStatusEnum.Assigned, - ItemName = orderInfo.Barcode - }; - - Dt_Task dt_Task = new Dt_Task() - { - PalletCode = orderInfo.Barcode, - DeviceCode = putContainer.DeviceCode, - TaskState = (int)TaskStatusEnum.Gantry_Wait, - TaskType = 0, - SourceAddress = "", - TargetAddress = $"F06", - CurrentAddress = $"F06*{taskPosition.TakePositionX}*{taskPosition.TakePositionY}*{taskPosition.TakePositionZ}*{taskPosition.PositionR}", - NextAddress = $"{putContainer.ContainerCode}*{taskPosition.PutPositionX}*{taskPosition.PutPositionY}*{taskPosition.PutPositionZ}*{taskPosition.PositionR}", - ItemInfo = $"{length}*{width}*{height}", - Grade = 0, - }; - putContainer.ContainerStatus = ContainerStatusEnum.NonEmpty.ObjToInt(); - _unitOfWorkManage.BeginTran(); - BaseDal.AddData(dt_Task); - _containerRepository.UpdateData(putContainer); - _containerItemRepository.AddData(dt_ContainerItem); - if (isAdd) - { - _orderContainerRepository.AddData(orderContainer); - } - else if (isUpdate) - { - _orderContainerRepository.UpdateData(orderContainer); - } - _unitOfWorkManage.CommitTran(); - - PlacedBlock placedBlock = new PlacedBlock(new Point3D(taskPosition.PositionX, taskPosition.PositionY, taskPosition.PositionZ), length, width, height); - placedBlocks.Add(placedBlock); - - object obj = new - { - x = taskPosition.PutCenterPositionX - containerSize.Length / 2, - y = taskPosition.PutCenterPositionY - containerSize.Width / 2, - z = taskPosition.PutCenterPositionZ, - length, - width, - height, - }; - if (i == 0) - Thread.Sleep(5000); - _webSocketServer.PublishAllClientPayload(obj.Serialize()); - Thread.Sleep(500); - } - - } } catch (Exception ex) @@ -240,19 +224,27 @@ return WebResponseContent.Instance.Error("鍙栬揣浣嶇疆涓嶅瓨鍦�"); } + List<Dt_Container> containers = _containerRepository.QueryData(x => x.DeviceCode == deviceCode && x.ContainerType == ContainerTypeEnum.PutContainer.ObjToInt()); + Dt_Container putContainer = _containerRepository.QueryFirst(x => x.ContainerCode == putPosition && x.ContainerType == ContainerTypeEnum.PutContainer.ObjToInt()); if (putContainer == null) { return WebResponseContent.Instance.Error("鏀捐揣浣嶇疆涓嶅瓨鍦�"); } + int edge = 0; + if (putContainer.ContainerNo == containers.Min(x => x.ContainerNo)) + { + edge = 1; + } + ContainerSize containerSize = new ContainerSize(putContainer.ContainerLength, putContainer.ContainerWidth, putContainer.ContainerHeight); List<Dt_ContainerItem> containerItems = _containerItemRepository.QueryData(x => x.ContainerId == putContainer.Id); - List<PlacedBlock> placedBlocks = containerItems.Select(x => new PlacedBlock(new Point3D(x.ItemRelaPositionX, x.ItemRelaPositionY, x.ItemRelaPositionZ), x.ItemLength, x.ItemWidth, x.ItemHeight)).ToList(); + List<PlacedBlock> placedBlocks = containerItems.Select(x => new PlacedBlock(new Point3D(x.ItemPositionX, x.ItemPositionY, x.ItemPositionZ), x.ItemLength > x.ItemLength ? x.ItemLength : x.ItemWidth, x.ItemLength > x.ItemLength ? x.ItemWidth : x.ItemLength, x.ItemHeight)).ToList(); - TaskPosition? taskPosition = _containerService.GetTaskPosition(length, width, height, containerSize, placedBlocks); + TaskPosition? taskPosition = _containerService.GetTaskPosition(length, width, height, containerSize, placedBlocks, edge); if (taskPosition == null) { return WebResponseContent.Instance.Error("鏈壘鍒板悎閫傛斁缃綅缃�"); @@ -279,12 +271,12 @@ ItemLength = length, ItemWidth = width, ItemHeight = height, - ItemPositionX = taskPosition.PutPositionX, - ItemPositionY = taskPosition.PutPositionY, - ItemPositionZ = taskPosition.PutPositionZ, - ItemRelaPositionX = taskPosition.PositionX, - ItemRelaPositionY = taskPosition.PositionY, - ItemRelaPositionZ = taskPosition.PositionZ, + ItemPositionX = taskPosition.PositionX, + ItemPositionY = taskPosition.PositionY, + ItemPositionZ = taskPosition.PositionZ, + ItemRelaPositionX = taskPosition.PutPositionX, + ItemRelaPositionY = taskPosition.PutPositionY, + ItemRelaPositionZ = taskPosition.PutPositionZ, ItemStatus = (int)ItemStatusEnum.Assigned, ItemName = code }; @@ -314,7 +306,7 @@ } } - public Dt_Task GenerateTask(OrderInfo orderInfo) + public (bool, Dt_Task?, string) GenerateTask(OrderInfo orderInfo) { try { @@ -322,30 +314,23 @@ int width = Convert.ToInt32(orderInfo.Width); int height = Convert.ToInt32(orderInfo.Thickness); - TaskPosition? taskPosition = _containerService.GetPosition(orderInfo.OrderNo, length, width, height); - if (taskPosition != null) + var (flag, taskPosition, message) = _containerService.GetPosition(orderInfo.OrderHeadId, orderInfo.OrderNo, length, width, height); + if (flag && taskPosition != null) { - int lengthThreshold = AppSettings.Get("LengthThreshold").ObjToInt(); - if (taskPosition.TakePositionY > lengthThreshold) - { - throw new Exception("10002,闀垮害瓒呭嚭闄愬埗"); - } - Dt_Container putContainer = _containerRepository.QueryFirst(x => x.ContainerCode == taskPosition.PutPosition); if (putContainer == null) { - //todo - throw new Exception("鏈壘鍒版斁璐т綅缃�"); + return (false, null, "鏈壘鍒版斁璐т綅缃�"); } Dt_Container? takeContainer = GetTakePosition(putContainer.DeviceCode); if (takeContainer == null) { - throw new Exception("鏈壘鍒板彇璐т綅缃�"); + return (false, null, "鏈壘鍒板彇璐т綅缃�"); } Dt_OrderContainer orderContainer = _orderContainerRepository.QueryFirst(x => x.OrderNo == orderInfo.OrderNo && x.ContainerCode == putContainer.ContainerCode); - + bool isAdd = false; bool isUpdate = false; if (orderContainer == null) @@ -357,24 +342,8 @@ ContainerId = putContainer.Id, OrderNo = orderInfo.OrderNo, }; - - if (length > lengthThreshold) - { - orderContainer.MaxLength = putContainer.ContainerLength; - } - else - { - orderContainer.MaxLength = lengthThreshold; - } + orderContainer.MaxLength = putContainer.ContainerLength; isAdd = true; - } - else - { - if (length < lengthThreshold) - { - isUpdate = true; - orderContainer.MaxLength = lengthThreshold; - } } Dt_ContainerItem dt_ContainerItem = new Dt_ContainerItem() @@ -387,11 +356,12 @@ ItemPositionX = taskPosition.PositionX, ItemPositionY = taskPosition.PositionY, ItemPositionZ = taskPosition.PositionZ, - ItemRelaPositionX = taskPosition.PositionX, - ItemRelaPositionY = taskPosition.PositionY, - ItemRelaPositionZ = taskPosition.PositionZ, + ItemRelaPositionX = taskPosition.PutPositionX, + ItemRelaPositionY = taskPosition.PutPositionY, + ItemRelaPositionZ = taskPosition.PutPositionZ, ItemStatus = (int)ItemStatusEnum.Assigned, - ItemName = orderInfo.Barcode + ItemName = orderInfo.Barcode, + Remark = $"{takeContainer.ContainerCode}*{taskPosition.TakePositionX}*{taskPosition.TakePositionY}*{taskPosition.TakePositionZ}*{taskPosition.PositionR}" }; Dt_Task dt_Task = new Dt_Task() @@ -422,14 +392,17 @@ } _unitOfWorkManage.CommitTran(); - return dt_Task; + return (true, dt_Task, ""); } - throw new Exception($"鏃犲彲鏀剧疆浣嶇疆"); + else + { + return (false, null, $"鏃犲彲鏀剧疆浣嶇疆,{orderInfo.Serialize()}"); + } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); - throw new Exception(ex.Message); + return (false, null, $"閿欒,{ex.ExceptionToString()}"); } } @@ -476,72 +449,108 @@ return containers.FirstOrDefault(); } - public void TaskComplete(Dt_Task task) + public WebResponseContent TaskComplete(Dt_Task task) { try { task.TaskState = TaskStatusEnum.Gantry_Completed.ObjToInt(); - - + _unitOfWorkManage.BeginTran(); OrderDetails orderDetails = _orderDetailsRepository.QueryFirst(x => x.Orderdetails_outid == task.PalletCode); if (orderDetails != null) { orderDetails.Orderdetails_status = PalletingStatusEnmu.PalletingSuccess.ObjToInt(); - Orderrows orderrows = _orderrowsRepository.QueryFirst(x => x.id == orderDetails.Orderrowsid); if (orderrows != null) { orderrows.Orderrows_PalletNum = orderrows.Orderrows_PalletNum ?? 0 + 1; - Dt_Container container = _containerRepository.QueryFirst(x => task.NextAddress.Contains(x.ContainerCode)); - _unitOfWorkManage.BeginTran(); - BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚); _orderDetailsRepository.UpdateData(orderDetails); _orderrowsRepository.UpdateData(orderrows); - _unitOfWorkManage.CommitTran(); - - List<object> list = new List<object>(); - - List<OrderDetails> totalDetails = _orderDetailsRepository.QueryData(x => x.Orderrowsid == orderDetails.Orderrowsid); - - List<OrderDetails> details = totalDetails.Where(x => x.Orderrowsid == orderDetails.Orderrowsid && x.Orderdetails_status == PalletingStatusEnmu.PalletingSuccess.ObjToInt()).ToList(); - foreach (var item in details) + try { - object obj = new + List<string> containerItemCodes = _containerItemRepository.QueryData(x => x.ContainerId == container.Id).Select(x => x.ItemCode).ToList(); + + List<OrderDetails> totalDetails = _orderDetailsRepository.QueryData(x => x.Orderrowsid == orderrows.id); + List<OrderDetails> details = totalDetails.Where(x => x.Orderrowsid == orderrows.id && x.Orderdetails_status == PalletingStatusEnmu.PalletingSuccess.ObjToInt() && containerItemCodes.Contains(x.Orderdetails_outid)).ToList(); + + int sortedNum = totalDetails.Where(x => x.Orderrowsid == orderrows.id && x.Orderdetails_status == PalletingStatusEnmu.PalletingSuccess.ObjToInt()).Count(); + object data = new object(); + if (totalDetails.Count <= sortedNum) { - orderCode = orderrows.Orderrows_orderid, - cusName = orderrows.Orderrows_customer, - orderName = orderrows.Orderrows_name, - batch = orderrows.Orderrows_batchid, - productName = "" - }; - list.Add(obj); + data = new + { + stationCode = task.NextAddress.Split("*").FirstOrDefault(), + release = 1, + data = new + { + stationCode = task.NextAddress.Split("*").FirstOrDefault(), + orderTotalNum = totalDetails.Count, + sortedNum = sortedNum, + unsortedNum = totalDetails.Count - sortedNum, + stationSortedNum = details.Count, + orderId = orderrows.id, + orderData = new + { + orderCode = orderrows.Orderrows_orderid, + cusName = orderrows.Orderrows_customer, + orderName = orderrows.Orderrows_name, + batch = orderrows.Orderrows_batchid, + productName = "", + } + } + }; + } + else + { + data = new + { + stationCode = task.NextAddress.Split("*").FirstOrDefault(), + release = 0, + data = new + { + stationCode = task.NextAddress.Split("*").FirstOrDefault(), + orderTotalNum = totalDetails.Count, + sortedNum = sortedNum, + unsortedNum = totalDetails.Count - sortedNum, + stationSortedNum = details.Count, + orderId = orderrows.id, + orderData = new + { + orderCode = orderrows.Orderrows_orderid, + cusName = orderrows.Orderrows_customer, + orderName = orderrows.Orderrows_name, + batch = orderrows.Orderrows_batchid, + productName = "", + } + } + }; + } + List<WebSocketSession> webSocketSessions2 = _webSocketServer.OnlineSessions.ToList(); + List<WebSocketSession> webSocketSessions = _webSocketServer.OnlineSessions.Where(x => x.Url.Contains(task.DeviceCode ?? "")).ToList(); + foreach (var item in webSocketSessions) + { + _webSocketServer.SendClientPayload(item, data.Serialize()); + } } + catch (Exception ex) + { - object data = new - { - stationCode = task.NextAddress.Split("*").FirstOrDefault(), - orderTotalNum = totalDetails.Count, - sortedNum = details.Count, - unsortedNum = totalDetails.Count - details.Count, - orderData = list - }; - List<WebSocketSession> webSocketSessions2 = _webSocketServer.OnlineSessions.ToList(); - List<WebSocketSession> webSocketSessions = _webSocketServer.OnlineSessions.Where(x => x.Url.Contains(task.DeviceCode ?? "")).ToList(); - foreach (var item in webSocketSessions) - { - _webSocketServer.SendClientPayload(item, data.Serialize()); } } } + + BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); } } } -- Gitblit v1.9.3