1
z8018
2025-06-10 e46aa927d231af83724683c7286d9db503e24cf7
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/ExceptionPlaceBlockService.cs
@@ -10,6 +10,14 @@
namespace WIDESEAWCS_BasicInfoService
{
    /// <summary>
    /// å¼‚常放置区块服务,用于计算和处理异常情况下的货物放置位置
    /// </summary>
    /// <remarks>
    /// è¯¥ç±»æ ¹æ®å®¹å™¨å°ºå¯¸å’Œè´§ç‰©å°ºå¯¸è®¡ç®—取放位置坐标,
    /// åŒ…含横向Y坐标的最小/最大限制处理逻辑,
    /// å¹¶è¿”回包含完整位置信息的TaskPosition对象
    /// </remarks>
    public class ExceptionPlaceBlockService
    {
        public ContainerSize ContainerSize { get; private set; }
@@ -24,11 +32,29 @@
        /// </summary>
        public const int MaxY = 600;
        /// <summary>
        /// æž„造函数,初始化异常位置区块服务
        /// </summary>
        /// <param name="containerSize">容器尺寸参数</param>
        public ExceptionPlaceBlockService(ContainerSize containerSize)
        {
            ContainerSize = containerSize;
        }
        /// <summary>
        /// è®¡ç®—异常放置块的任务位置
        /// </summary>
        /// <param name="length">物品长度</param>
        /// <param name="width">物品宽度</param>
        /// <param name="height">物品高度</param>
        /// <param name="count">物品数量</param>
        /// <returns>包含取放位置信息的TaskPosition对象</returns>
        /// <remarks>
        /// è¯¥æ–¹æ³•会根据物品尺寸自动调整取放位置:
        /// 1. å½“长度小于宽度时会交换两者
        /// 2. æ ¹æ®ç‰©å“å°ºå¯¸é€‰æ‹©ä¸åŒçš„设备中心点
        /// 3. ç¡®ä¿Y轴位置在MinY和MaxY之间
        /// </remarks>
        public TaskPosition ExceptionPlaceBlock(int length, int width, int height, int count)
        {
            int tempLength = length;
@@ -52,7 +78,7 @@
                deviceCenter = new Point3D(530 / 2, 130 / 2, 0);
            }
            takePositionX = width / 2 - deviceCenter.X - MinY / 2;
            takePositionX = width / 2 - deviceCenter.X;
            takePositionY = length / 2 - deviceCenter.Y;
            takePositionZ = 10;
@@ -65,7 +91,12 @@
                takePositionY = 0;
                putPositionY = MinY;
            }
            else if (putPositionY > MaxY)
            else
            {
                takePositionY -= MinY;
            }
            if (putPositionY > MaxY)
            {
                int moreY = putPositionY - MaxY;
                if (takePositionY - moreY > 0)