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);
|
}
|
}
|