1
z8018
2025-06-10 e46aa927d231af83724683c7286d9db503e24cf7
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_DTO.PlacedBlockDTO;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
 
namespace WIDESEAWCS_IBasicInfoService
{
    public interface IContainerService : IService<Dt_Container>
    {
        /// <summary>
        /// 获取任务位置信息
        /// </summary>
        /// <param name="length">物品长度</param>
        /// <param name="width">物品宽度</param>
        /// <param name="height">物品高度</param>
        /// <param name="containerSize">容器尺寸</param>
        /// <param name="placedBlocks">已放置块列表</param>
        /// <param name="edge">边缘参数</param>
        /// <returns>返回任务位置信息,若放置失败则返回null</returns>
        /// <exception cref="Exception">当放置过程中发生错误时抛出异常</exception>
        TaskPosition? GetTaskPosition(int length, int width, int height, ContainerSize containerSize, List<PlacedBlock> placedBlocks, int edge);
 
        /// <summary>
        /// 根据订单信息或尺寸获取任务位置
        /// </summary>
        /// <param name="orderId">订单ID</param>
        /// <param name="orderNo">订单编号</param>
        /// <param name="length">长度</param>
        /// <param name="width">宽度</param>
        /// <param name="height">高度</param>
        /// <returns>
        /// 返回元组包含三个值: <br/>
        /// Item1 - 是否成功获取位置 <br/>
        /// Item2 - 获取到的任务位置对象,可能为null <br/>
        /// Item3 - 错误代码,成功时返回空字符串
        /// </returns>
        (bool, TaskPosition?, string) GetPosition(int orderId, string orderNo, int length, int width, int height);
 
        /// <summary>
        /// 获取指定容器中的可用位置
        /// </summary>
        /// <param name="container">目标容器对象</param>
        /// <param name="length">待放置物品长度</param>
        /// <param name="width">待放置物品宽度</param>
        /// <param name="height">待放置物品高度</param>
        /// <returns>元组包含: <br/>
        ///   - bool: 是否找到合适位置 <br/>
        ///   - TaskPosition?: 找到的任务位置信息(可为null) <br/>
        ///   - string: 错误代码(成功时返回空字符串)
        /// </returns>
        /// <remarks>
        /// 方法会检查容器尺寸是否满足物品放置要求, <br/>
        /// 并考虑容器边缘情况计算最佳放置位置
        /// </remarks>
        (bool, TaskPosition?, string) GetPosition(Dt_Container container, int length, int width, int height);
 
        /// <summary>
        /// 释放指定容器及其关联项
        /// </summary>
        /// <param name="keys">容器ID数组</param>
        /// <returns>操作结果响应</returns>
        /// <remarks>
        /// 1. 查询并获取指定容器及其关联项 <br/>
        /// 2. 更新容器状态为空闲 <br/>
        /// 3. 在事务中执行以下操作: <br/>
        ///    - 删除容器项并移入历史表 <br/>
        ///    - 删除订单容器关联并移入历史表 <br/>
        ///    - 更新容器状态 <br/>
        /// 4. 操作成功返回OK,失败回滚事务并返回错误信息
        /// </remarks>
        WebResponseContent ReleaseContainer(int[] keys);
 
        WebResponseContent AutoReleaseContainer(int[] keys);
 
        /// <summary>
        /// 自动释放容器
        /// </summary>
        /// <param name="containerCode">容器编号</param>
        /// <returns>Web响应结果</returns>
        /// <remarks>
        /// 1. 根据容器编号查询容器信息 <br/>
        /// 2. 检查容器是否存在关联任务 <br/>
        /// 3. 若无任务则清空容器状态并删除订单容器记录 <br/>
        /// 4. 若有任务则更新任务状态为"龙门架重新分配" <br/>
        /// 5. 事务处理所有数据库操作
        /// </remarks>
        WebResponseContent AutoReleaseContainer(string containerCode);
 
        /// <summary>
        /// 获取异常工位位置
        /// </summary>
        /// <param name="length">物品长度</param>
        /// <param name="width">物品宽度</param>
        /// <param name="height">物品高度</param>
        /// <returns>元组包含三个值:是否成功获取、任务位置对象(失败时为null)、错误信息(成功时为空)</returns>
        /// <remarks>
        /// 当异常容器中物品数量≥5时,使用固定Z轴位置99;否则根据当前物品数量计算位置
        /// </remarks>
        (bool, TaskPosition?, string) GetExceptionPosition(int length, int width, int height);
    }
}