From e69f814f50fd59739dbedd88518dc8cb8d2ed3ee Mon Sep 17 00:00:00 2001 From: z8018 <1282578289@qq.com> Date: 星期二, 08 四月 2025 21:18:47 +0800 Subject: [PATCH] 1 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 327 +++++++++++++++++++++++++++++------------------------- 1 files changed, 175 insertions(+), 152 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 e02f602..058e2e0 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,45 +16,20 @@ #endregion << 鐗� 鏈� 娉� 閲� >> using AutoMapper; -using Magicodes.ExporterAndImporter.Core; -using Microsoft.AspNetCore.Mvc.RazorPages; -using NetTaste; -using Newtonsoft.Json; -using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +using HslCommunication.WebSocket; using SqlSugar; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Reflection.Metadata; -using System.Security.Policy; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; -using WIDESEA_Common.Log; +using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_BasicInfoService; using WIDESEAWCS_Common; -using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; -using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; -using WIDESEAWCS_Core.Utilities; -using WIDESEAWCS_DTO.Enum; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; -using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Repository; -using WIDESEAWCS_QuartzJob.Service; namespace WIDESEAWCS_TaskInfoService { @@ -63,19 +38,169 @@ private readonly IMapper _mapper; private readonly IContainerRepository _containerRepository; private readonly IContainerItemRepository _containerItemRepository; - private readonly IDeviceInfoRepository _deviceInfoRepository; + private readonly WebSocketServer _webSocketServer; + private readonly IOrderDetailsRepository _orderDetailsRepository; - public TaskService(ITaskRepository BaseDal, IMapper mapper, IContainerRepository containerRepository, IContainerItemRepository containerItemRepository, IDeviceInfoRepository deviceInfoRepository) : base(BaseDal) + public TaskService(ITaskRepository BaseDal, IMapper mapper, IContainerRepository containerRepository, IContainerItemRepository containerItemRepository, WebSocketServer webSocketServer, IOrderDetailsRepository orderDetailsRepository) : base(BaseDal) { _mapper = mapper; _containerRepository = containerRepository; _containerItemRepository = containerItemRepository; - _deviceInfoRepository = deviceInfoRepository; + _webSocketServer = webSocketServer; + _orderDetailsRepository = orderDetailsRepository; } public Dt_Task? QueryAGantryUnExecuteTask(string gantryDeviceNo) { return BaseDal.QueryFirst(x => x.TaskState == (int)TaskStatusEnum.Gantry_New && x.DeviceCode == gantryDeviceNo); + } + + public WebResponseContent PlaceBlockTest(int orderRowId) + { + try + { + List<OrderDetails> orderDetails = _orderDetailsRepository.QueryData(x => x.Orderrowsid == orderRowId); + if (orderDetails == null || orderDetails.Count == 0) + { + return WebResponseContent.Instance.Error("鏈壘鍒拌鍗曟槑缁嗕俊鎭�"); + } + + Dt_Container putContainer = _containerRepository.QueryFirst(x => x.ContainerType == ContainerTypeEnum.PutContainer.ObjToInt()); + if (putContainer == null) + { + return WebResponseContent.Instance.Error("鏀捐揣浣嶇疆涓嶅瓨鍦�"); + } + + ContainerSize containerSize = new ContainerSize(1500, putContainer.ContainerWidth, putContainer.ContainerHeight); + List<PlacedBlock> placedBlocks = new List<PlacedBlock>(); + + for (int i = 0; i < orderDetails.Count; i++) + { + try + { + lock (placedBlocks) + { + int length = Convert.ToInt32(orderDetails[i].Orderdetails_length); + int width = Convert.ToInt32(orderDetails[i].Orderdetails_width); + int height = Convert.ToInt32(orderDetails[i].Orderdetails_thickness); + + TaskPosition taskPosition = new TaskPosition(); + taskPosition = GetTakePutPosition(length, width, height, containerSize, placedBlocks); + + 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, + }; + + _webSocketServer.PublishAllClientPayload(obj.Serialize()); + + Thread.Sleep(100); + } + } + catch (Exception ex) + { + + } + } + return WebResponseContent.Instance.OK(data: placedBlocks); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + + public TaskPosition GetTakePutPosition(int length, int width, int height, ContainerSize containerSize, List<PlacedBlock> placedBlocks) + { + try + { + PlaceBlockService placeBlockService = new PlaceBlockService(containerSize, placedBlocks); + + Point3D? point3D = placeBlockService.PlaceBlock(length, width, height); + if (point3D == null) + { + throw new Exception("鏀捐揣浣嶇疆宸叉弧"); + } + + //鏀捐揣浣嶇疆鏉挎潗涓績鐐� + Point3D putCenter = new Point3D(point3D.Value.X + length / 2, point3D.Value.Y + width / 2, point3D.Value.Z + height / 2); + + //鍙栬揣浣嶇疆鏉挎潗涓績鐐� + Point3D takeCenter = new Point3D(length / 2, width / 2, height / 2); + + //鍚哥洏闀�530 闂撮殧660 鏈�澶�920 鍚哥洏瀹�130 + + int positionR = 1; + + int takePositionX = 0; + int takePositionY = 0; + int takePositionZ = 0; + int putPositionX = 0; + int putPositionY = 0; + int putPositionZ = 0; + + //1.濡傛灉闀垮害澶т簬920锛屽搴﹀ぇ浜庣瓑浜�300锛屽垯鍙互浣跨敤鍙屽惛鐩樻í鍚戝惛鍙� + if (length > 920 && width >= 300) + { + // + Point3D deviceCenter = new Point3D(530 / 2, 920 / 2, 0); + + positionR = 1; + takePositionX = takeCenter.Y - deviceCenter.X; + takePositionY = takeCenter.X - deviceCenter.Y; + takePositionZ = 10; + + putPositionX = putCenter.Y - deviceCenter.X; + putPositionY = putCenter.X - deviceCenter.Y; + putPositionZ = point3D.Value.Z; // putCenter.Z /*+ 10*/; + } + else + { + positionR = 0; + Point3D deviceCenter = new Point3D(130 / 2, 530 / 2, 0); + takePositionX = takeCenter.Y - deviceCenter.X; + takePositionY = takeCenter.X - deviceCenter.Y; + takePositionZ = 10; + + putPositionX = putCenter.Y - deviceCenter.X; + putPositionY = putCenter.X - deviceCenter.Y; + putPositionZ = point3D.Value.Z; //putCenter.Z /*+ 10*/; + } + + TaskPosition taskPosition = new TaskPosition() + { + PositionR = positionR, + TakePositionX = takePositionX, + TakePositionY = takePositionY, + TakePositionZ = takePositionZ, + PutPositionX = putPositionX, + PutPositionY = putPositionY, + PutPositionZ = putPositionZ, + TakeCenterPositionX = takeCenter.X, + TakeCenterPositionY = takeCenter.Y, + TakeCenterPositionZ = takeCenter.Z, + PutCenterPositionX = putCenter.X, + PutCenterPositionY = putCenter.Y, + PutCenterPositionZ = putCenter.Z, + PositionX = point3D.Value.X, + PositionY = point3D.Value.Y, + PositionZ = point3D.Value.Z + }; + + return taskPosition; + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } } public WebResponseContent CreateTask(string takePosition, string putPosition, string deviceCode, int length, int width, int height) @@ -99,13 +224,21 @@ List<PlacedBlock> placedBlocks = containerItems.Select(x => new PlacedBlock(new Point3D(x.ItemPositionX, x.ItemPositionY, x.ItemPositionZ), x.ItemLength, x.ItemWidth, x.ItemHeight)).ToList(); - PlaceBlockService placeBlockService = new PlaceBlockService(containerSize, placedBlocks); - Point3D? point3D = placeBlockService.PlaceBlock(length, width, height); - if (point3D == null) + TaskPosition taskPosition = GetTakePutPosition(length, width, height, containerSize, placedBlocks); + + object obj = new { - return WebResponseContent.Instance.Error("鏀捐揣浣嶇疆宸叉弧"); - } + x = taskPosition.PutCenterPositionX - putContainer.ContainerLength / 2, + y = taskPosition.PutCenterPositionY - putContainer.ContainerWidth / 2, + z = taskPosition.PutCenterPositionZ, + length, + width, + height, + }; + + _webSocketServer.PublishAllClientPayload(obj.Serialize()); + string code = DateTime.Now.ToString("yyyyMMddHHmmss"); Dt_ContainerItem dt_ContainerItem = new Dt_ContainerItem() @@ -115,122 +248,12 @@ ItemLength = length, ItemWidth = width, ItemHeight = height, - ItemPositionX = point3D.Value.X, - ItemPositionY = point3D.Value.Y, - ItemPositionZ = point3D.Value.Z, + ItemPositionX = taskPosition.PutPositionX, + ItemPositionY = taskPosition.PutPositionY, + ItemPositionZ = taskPosition.PutPositionZ, ItemStatus = (int)ItemStatusEnum.Assigned, ItemName = code }; - - int positionR = 1; - - int takePositionX = 0; - int takePositionY = 0; - - int putPositionX = 0; - int putPositionY = 0; - - int takeContainerPositionX = 0; - int takeContainerPositionY = 0; - int takeContainerPositionZ = 0; - - int putContainerPositionX = 0; - int putContainerPositionY = 0; - int putContainerPositionZ = 0; - - int deviceHalfLength = 0; - int deviceHalfWidth = 0; - - if (length > 920 && width >= 300) - { - positionR = 1; - if (OPositions.ZPositions.TryGetValue(takeContainer.ContainerCode, out Position? takeOPosition)) - { - takeContainerPositionX = takeOPosition.PositionX; - takeContainerPositionY = takeOPosition.PositionY; - takeContainerPositionZ = takeOPosition.PositionZ; - } - - if (OPositions.ZPositions.TryGetValue(putContainer.ContainerCode, out Position? putOPosition)) - { - putContainerPositionX = putOPosition.PositionX; - putContainerPositionY = putOPosition.PositionY; - putContainerPositionZ = putOPosition.PositionZ; - } - - deviceHalfLength = 460; - deviceHalfWidth = 265; - } - else - { - positionR = 0; - - if (OPositions.HPositions.TryGetValue(takeContainer.ContainerCode, out Position? takeOPosition)) - { - takeContainerPositionX = takeOPosition.PositionX; - takeContainerPositionY = takeOPosition.PositionY; - takeContainerPositionZ = takeOPosition.PositionZ; - } - - if (OPositions.HPositions.TryGetValue(putContainer.ContainerCode, out Position? putOPosition)) - { - putContainerPositionX = putOPosition.PositionX; - putContainerPositionY = putOPosition.PositionY; - putContainerPositionZ = putOPosition.PositionZ; - } - - deviceHalfLength = 265; - deviceHalfWidth = 460; - } - - //鍚哥洏闀�530 300 闂撮殧660 鏈�澶�920 鍚哥洏瀹�130 - - int sourceTakePositionX = 0; - int sourceTakePositionY = 0; - - int sourcePutPositionX = 0; - int sourceTPutPositionY = 0; - - if (length / 2 + point3D.Value.X > 1000) - { - takePositionY = 1000; - putPositionY = putContainerPositionY + 1000; - - sourceTakePositionY = 1000; - sourceTPutPositionY = 1000; - } - else - { - takePositionY = takeContainerPositionY - length / 2 + deviceHalfLength; - putPositionY = putContainerPositionY + length / 2 + point3D.Value.X - deviceHalfLength; - - sourceTakePositionY = length / 2 + point3D.Value.X + deviceHalfLength; - sourceTPutPositionY = length / 2 + point3D.Value.X - deviceHalfLength; - } - - - if (width >= 530) - { - takePositionX = takeContainerPositionX + Math.Abs( width / 2 - deviceHalfWidth); - putPositionX = point3D.Value.Y + putContainerPositionX + Math.Abs(width / 2 - deviceHalfWidth); - - sourceTakePositionX = Math.Abs(width / 2 - deviceHalfWidth); - sourcePutPositionX = point3D.Value.Y + Math.Abs(width / 2 - deviceHalfWidth); - } - else - { - takePositionX = takeContainerPositionX; - putPositionX = point3D.Value.Y + takeContainerPositionX; - - sourceTakePositionX = 0; - sourcePutPositionX = point3D.Value.Y; - } - - int takePositionZ = takeContainerPositionZ - (height - (height - 10)); - int putPositionZ = (putContainerPositionZ - (height - (height - 10))) - point3D.Value.Z; - - int sourceTakePositionZ = height - (height - 10); - int sourcePutPositionZ = height - (height - 10) + point3D.Value.Z; Dt_Task dt_Task = new Dt_Task() { @@ -239,10 +262,10 @@ DeviceCode = deviceCode, TaskState = (int)TaskStatusEnum.Gantry_New, TaskType = 0, - SourceAddress = $"{takePosition}-{sourceTakePositionX}-{sourceTakePositionY}-{sourceTakePositionZ}-{positionR}", - TargetAddress = $"{putPosition}-{sourcePutPositionX}-{sourceTPutPositionY}-{sourcePutPositionZ}-{positionR}", - CurrentAddress = $"{takePosition}-{takePositionX}-{takePositionY}-{takePositionZ}-{positionR}", - NextAddress = $"{putPosition}-{putPositionX}-{putPositionY}-{putPositionZ}-{positionR}", + SourceAddress = $"{takePosition}*{taskPosition.TakePositionX}*{taskPosition.TakePositionY}*{taskPosition.TakePositionZ}*{taskPosition.PositionR}", + TargetAddress = $"{putPosition}*{taskPosition.PutPositionX}*{taskPosition.PutPositionX}*{taskPosition.PutPositionZ}*{taskPosition.PositionR}", + CurrentAddress = $"{takePosition}*{taskPosition.TakePositionX}*{taskPosition.TakePositionY}*{taskPosition.TakePositionZ}*{taskPosition.PositionR}", + NextAddress = $"{putPosition}*{taskPosition.PutPositionX}*{taskPosition.PutPositionX}*{taskPosition.PutPositionZ}*{taskPosition.PositionR}", Grade = 0, }; -- Gitblit v1.9.3