using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AutoMapper; using WIDESEAWCS_BasicInfoService; using WIDESEAWCS_Common; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_BasicInfoService { public class ContainerService : ServiceBase, IContainerService { private readonly IMapper _mapper; public ContainerService(IContainerRepository BaseDal, IMapper mapper) : base(BaseDal) { _mapper = mapper; } public void GetPosition(string orderNo, int length, int width, int height) { List containerInfos = new List(); List orderContainers = Db.Queryable().Where(it => it.OrderNo == orderNo).ToList(); if (orderContainers != null) { containerInfos = orderContainers; if (containerInfos.Count == 1) { Dt_Container container = Db.Queryable().OrderBy(x => x.ContainerSort).First(x => x.ContainerStatus == ContainerStatusEnum.Empty.ObjToInt()); if (container != null) { Dt_OrderContainer containerInfo = _mapper.Map(container); containerInfos.Add(containerInfo); } } } else { Dt_Container container = Db.Queryable().OrderBy(x => x.ContainerSort).First(x => x.ContainerStatus == ContainerStatusEnum.Empty.ObjToInt()); if (container != null) { containerInfos = _mapper.Map>(container); } } { List containers = Db.Queryable().Where(it => containerInfos.Any(x => x.ContainerId == it.Id && x.ContainerCode == it.ContainerCode)).Includes(x => x.Items).ToList(); foreach (var container in containers) { List placedBlocks = new List(); if (container.Items != null && container.Items.Count > 0) { foreach (var item in container.Items) { Point3D point3D = new Point3D(item.ItemPositionX, item.ItemPositionY, item.ItemPositionZ); placedBlocks.Add(new PlacedBlock(point3D, item.ItemLength, item.ItemWidth, item.ItemHeight)); } ContainerSize containerSize = new ContainerSize(container.ContainerLength, container.ContainerWidth, container.ContainerHeight); PlaceBlockService placeBlockService = new PlaceBlockService(containerSize, placedBlocks); Point3D? axis = placeBlockService.PlaceBlock(length, width, height); if (axis != null) { Dt_ContainerItem containerItem = new Dt_ContainerItem() { ContainerId = container.Id, ItemCode = "ItemCode", ItemHeight = height, ItemLength = length, ItemName = "ItemName", ItemPositionX = axis.Value.X, ItemPositionY = axis.Value.Y, ItemPositionZ = axis.Value.Z, ItemWidth = width, ItemStatus = ItemStatusEnum.Assigned.ObjToInt() }; Db.Insertable(containerItem).ExecuteCommand(); } } } } } } }