wxw
2 天以前 5cff51cedf8320fd944e7748a09166f4c061b58b
Wms/WMS.BLL/Logic/AllotLocation.cs
@@ -38,12 +38,12 @@
                dataStock = dataStock.Where(m => m.LotNo == lotNo);
            }
            //库存查找相同物料/批次的巷道
            var yiYouRoad = dataStock.GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).OrderBy(m => m).ToList();
            foreach (var l in yiYouRoad)
            var yiYouRoad = dataStock.GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
            foreach (var l in yiYouRoad.OrderBy(m=>m).ToList())
            {
                // 判断当前巷道(组)是否有空余储位
                 
                var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l);
                var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.IsDel=="0" && m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l);
                
                var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
@@ -56,7 +56,6 @@
            //获取库存内已有物料的巷道
            var dataStockRoad = db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.WareHouseNo == house).GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
            //排除掉已有物料的巷道
            roadways = roadways.Where(m => !dataStockRoad.Contains(m)).ToList();
            foreach (var l in roadways)
            {
@@ -79,18 +78,18 @@
                            
                        }
                    }
                    if (bl)
                }
                if (bl)
                {
                    // 判断当前巷道(组)是否有空余储位
                    var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l);
                    var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
                                .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                    if (locateCount - bindNum > 0)
                    {
                        // 判断当前巷道(组)是否有空余储位
                        var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l);
                        var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
                                    .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                        if (locateCount - bindNum > 0)
                        {
                            return l;
                        }
                        return l;
                    }
                }
            }
@@ -111,7 +110,7 @@
            var db = DataContext.Db;
            
            // 判断当前巷道(组)是否有空余储位
            var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadwayNo && areaList.Contains(m.AreaNo)).ToList();
            var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadwayNo && areaList.Contains(m.AreaNo) && m.Status == "0").ToList();
            if (locateList.Count(m => m.Status == "0") > 0)
            {
                var bl = GetLocateASCOrDesc(roadwayNo);
@@ -146,7 +145,7 @@
            var locate = db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.RoadwayNo == roadStr);
            var a = locate.LocatNo.Substring(2,2);//储位列
            var b = locate.AisleOne.Substring(2, 2);//通道口列
            return int.Parse(a) < int.Parse(b);
            return int.Parse(a) > int.Parse(b);
        }
        /// <summary>
@@ -166,6 +165,17 @@
            var locatList2 = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == locate.RoadwayNo && m.Column > a).ToList();
            if (bl)
            {
                if (locatList1.Count(m => str2.Contains(m.Status)) > 0)
                {
                    return false;
                }
                if (locatList2.Count(m => str1.Contains(m.Status)) > 0)
                {
                    return false;
                }
            }
            else
            {
                if (locatList1.Count(m => str1.Contains(m.Status)) > 0)
                {
                    return false;
@@ -174,17 +184,6 @@
                {
                    return false;
                }
            }
            else
            {
                if (locatList1.Count(m => str2.Contains(m.Status)) > 0)
                {
                    return false;
                }
                if (locatList2.Count(m => str1.Contains(m.Status)) > 0)
                {
                    return false;
                }
            }
            return true;
                
@@ -293,10 +292,14 @@
        /// <param name="areaList">区域集合</param>
        /// <param name="roadwayNo">巷道号(可空)</param>
        /// <returns></returns>
        public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "")
        public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "",string ceng = "")
        {
            try
            {
                if (string.IsNullOrWhiteSpace(ceng))
                {
                    throw new Exception($"申请货架库位层数不能为空");
                }
                var db = DataContext.Db;
                /* 1.先判断仓库(立库或者平库)
                 * 2.如果是立库 再判断是否指定巷道号
@@ -309,6 +312,22 @@
                var roadList = db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) )
                    .GroupBy(m=>m.RoadwayNo).Select(m=>m.RoadwayNo).ToList();
                if (houseNo == "W02")
                {
                    //一楼巷道
                    var conveyList1 = new List<string>() { "LR01", "LR02", "LR03", "LR04", "LR05", "LR06", "LR07", "LR08" };
                    //二楼巷道
                    var conveyList2 = new List<string>() { "LR09", "LR10", "LR11", "LR12" };
                    if (ceng == "1")
                    {
                        roadList = roadList.Where(m => conveyList1.Contains(m)).ToList();
                    }
                    else if (ceng == "2")
                    {
                        roadList = roadList.Where(m => conveyList2.Contains(m)).ToList();
                    }
                }
                //数据字典(获取字典中仓库类型)
                var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type);
@@ -335,7 +354,7 @@
                            //查询该巷道并且标志为正常的的储位
                            roadwayList.Add(roadway);
                            var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo);
                            var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo, ceng);
                            if (locate == null)
                            {
                                throw new Exception($"{roadwayNo}巷道没有合适的空储位");
@@ -347,7 +366,7 @@
                        {
                            var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0" && roadList.Contains(m.RoadwayNo)).OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList();
                            var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo);
                            var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo,ceng);
                            if (locate == null)
                            {
                                throw new Exception($"{houseNo}仓库已启用的巷道中没有合适的空储位");
@@ -381,7 +400,7 @@
        /// <param name="areaList">区域集合</param>
        /// <param name="isRoadway">是否指定巷道</param>
        /// <returns></returns>
        private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W01")
        private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02",string ceng = "")
        {
            try
            {
@@ -470,7 +489,7 @@
                        var count = 0;
                        do
                        {
                            locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
                            locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count, ceng);
                            if (locate != null)
                            {
                                break;
@@ -504,7 +523,7 @@
                                var count = 0;
                                do
                                {
                                    locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
                                    locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng);
                                    if (locate != null)
                                    {
                                        break;
@@ -532,7 +551,7 @@
                        var count = 0;
                        do
                        {
                            locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
                            locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng);
                            if (locate != null)
                            {
                                break;
@@ -576,7 +595,7 @@
        /// <param name="areaList">区域集合</param>
        /// <param name="locateNoStr">排除的储位集合</param>
        /// <returns></returns>
        private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count)
        private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count,string ceng = "")
        {
            var db = DataContext.Db;
            var str = "";
@@ -597,7 +616,11 @@
            
            foreach (var area in areaList)
            {
                var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) ";
                var sql = $@"select * from SysStorageLocat where IsDel = 0 and Layer!= '3' and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) ";
                //if (!string.IsNullOrWhiteSpace(ceng))
                //{
                //    sql += $"and Layer = '{ceng}' ";
                //}
                sql += "order by ";
                sql += topOrBom == 0 ? "Layer desc, " : "Layer, ";
                sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, ";