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