z8018
2025-04-01 7ad4c76e91735cf3333c8bc0d2016bacf6ae7d04
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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();
                        }
                    }
                }
            }
        }
    }
 
 
}