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_Model.Models;
|
|
namespace WIDESEAWCS_IBasicInfoService
|
{
|
public class ContainerService : ServiceBase<Dt_Container, IContainerRepository>, 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<Dt_OrderContainer> containerInfos = new List<Dt_OrderContainer>();
|
List<Dt_OrderContainer> orderContainers = Db.Queryable<Dt_OrderContainer>().Where(it => it.OrderNo == orderNo).ToList();
|
if (orderContainers != null)
|
{
|
containerInfos = orderContainers;
|
if (containerInfos.Count == 1)
|
{
|
Dt_Container container = Db.Queryable<Dt_Container>().First(x => x.ContainerStatus == ContainerStatusEnum.Empty.ObjToInt());
|
if (container != null)
|
{
|
Dt_OrderContainer containerInfo = _mapper.Map<Dt_OrderContainer>(container);
|
containerInfos.Add(containerInfo);
|
}
|
}
|
}
|
else
|
{
|
List<Dt_Container> containers = Db.Queryable<Dt_Container>().Where(x => x.ContainerStatus == ContainerStatusEnum.Empty.ObjToInt()).Take(2).ToList();
|
if (containers != null && containers.Count > 0)
|
{
|
containerInfos = _mapper.Map<List<Dt_OrderContainer>>(containers);
|
}
|
}
|
|
{
|
List<Dt_Container> containers = Db.Queryable<Dt_Container>().Where(it => containerInfos.Any(x => x.ContainerId == it.Id && x.ContainerCode == it.ContainerCode)).Includes(x => x.Items).ToList();
|
|
foreach (var container in containers)
|
{
|
List<PlacedBlock> placedBlocks = new List<PlacedBlock>();
|
|
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();
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
}
|