From f94288b728f81b20c29e626526c584c11a7894a3 Mon Sep 17 00:00:00 2001 From: z8018 <1282578289@qq.com> Date: 星期六, 05 四月 2025 14:02:06 +0800 Subject: [PATCH] 1 --- 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 200 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 188 insertions(+), 12 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 2e9e686..e02f602 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" @@ -37,38 +37,40 @@ using System.Text; using System.Threading.Tasks; using System.Xml.Linq; -using WIDESEA_Comm.Http; using WIDESEA_Common.Log; +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 { public class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService { - private readonly IRouterService _routerService; - private readonly ITaskExecuteDetailService _taskExecuteDetailService; - private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; - private readonly ITask_HtyService _task_HtyService; private readonly IMapper _mapper; + private readonly IContainerRepository _containerRepository; + private readonly IContainerItemRepository _containerItemRepository; + private readonly IDeviceInfoRepository _deviceInfoRepository; - public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ITask_HtyService task_HtyService) : base(BaseDal) + public TaskService(ITaskRepository BaseDal, IMapper mapper, IContainerRepository containerRepository, IContainerItemRepository containerItemRepository, IDeviceInfoRepository deviceInfoRepository) : base(BaseDal) { - _routerService = routerService; - _taskExecuteDetailService = taskExecuteDetailService; - _taskExecuteDetailRepository = taskExecuteDetailRepository; - _task_HtyService = task_HtyService; _mapper = mapper; + _containerRepository = containerRepository; + _containerItemRepository = containerItemRepository; + _deviceInfoRepository = deviceInfoRepository; } public Dt_Task? QueryAGantryUnExecuteTask(string gantryDeviceNo) @@ -76,9 +78,183 @@ return BaseDal.QueryFirst(x => x.TaskState == (int)TaskStatusEnum.Gantry_New && x.DeviceCode == gantryDeviceNo); } - public WebResponseContent CreateTask(string takePosition, string putPosition, string deviceCode) + public WebResponseContent CreateTask(string takePosition, string putPosition, string deviceCode, int length, int width, int height) { - return WebResponseContent.Instance.OK(); + try + { + Dt_Container takeContainer = _containerRepository.QueryFirst(x => x.ContainerCode == takePosition && x.ContainerType == ContainerTypeEnum.TakeContainer.ObjToInt()); + if (takeContainer == null) + { + return WebResponseContent.Instance.Error("鍙栬揣浣嶇疆涓嶅瓨鍦�"); + } + + Dt_Container putContainer = _containerRepository.QueryFirst(x => x.ContainerCode == putPosition && x.ContainerType == ContainerTypeEnum.PutContainer.ObjToInt()); + if (putContainer == null) + { + return WebResponseContent.Instance.Error("鏀捐揣浣嶇疆涓嶅瓨鍦�"); + } + + 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.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) + { + return WebResponseContent.Instance.Error("鏀捐揣浣嶇疆宸叉弧"); + } + string code = DateTime.Now.ToString("yyyyMMddHHmmss"); + + Dt_ContainerItem dt_ContainerItem = new Dt_ContainerItem() + { + ContainerId = putContainer.Id, + ItemCode = code, + ItemLength = length, + ItemWidth = width, + ItemHeight = height, + ItemPositionX = point3D.Value.X, + ItemPositionY = point3D.Value.Y, + ItemPositionZ = point3D.Value.Z, + 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() + { + TaskNum = 1, + PalletCode = code, + 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}", + Grade = 0, + }; + + _containerItemRepository.AddData(dt_ContainerItem); + base.AddData(dt_Task); + + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } } } } -- Gitblit v1.9.3