Demo
2024-02-20 b7cece216d84ef5b079e99f4843485e092cc4c33
Wms/WMS.BLL/Logic/AllotLocation.cs
@@ -63,7 +63,7 @@
                            //查询该巷道并且标志为正常的的储位
                            roadwayList.Add(roadway);
                            var locate = GetLocateByRoadways(roadwayList,areaList);
                            var locate = GetLocateByRoadways(roadwayList,areaList,true);
                            if (locate == null)
                            {
                                throw new Exception($"{roadwayNo}巷道没有合适的空储位");
@@ -107,8 +107,9 @@
        /// </summary>
        /// <param name="roadways">巷道集合</param>
        /// <param name="areaList">区域集合</param>
        /// <param name="isRoadway">是否指定巷道</param>
        /// <returns></returns>
        private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList)
        private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false)
        {
            try
            {
@@ -185,11 +186,15 @@
                    //取各巷道所有排第一个合适位
                    foreach (var l in roadways)
                    {
                        //如果上次是当前巷道则跳出
                        if (log != null && l.RoadwayNo == log.RoadwayNo)
                        if (!isRoadway)
                        {
                            continue;
                            //如果上次是当前巷道则跳出
                            if (log != null && l.RoadwayNo == log.RoadwayNo)
                            {
                                continue;
                            }
                        }
                        //取当前巷最优位置
                        locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList);
                        //当前巷有位置则退出
@@ -199,11 +204,14 @@
                        }
                    }
                    //如果跳巷道并且未找到合适空储位,则跳到最后一次使用的巷道查询
                    if (locate == null)
                    if (!isRoadway)
                    {
                        if (log != null)
                        if (locate == null)
                        {
                            locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList);
                            if (log != null)
                            {
                                locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList);
                            }
                        }
                    }
                }
@@ -212,6 +220,10 @@
                    foreach (var item in roadways)
                    {
                        locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList);
                        if (locate != null)
                        {
                            break;
                        }
                    }
                }