Demo
2024-02-04 9884fc2f90c19cd67a7aa840345978b72da2397d
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -699,20 +699,25 @@
                //查询托盘绑定信息(状态为等待入库的)
                var palletBindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "2").ToList();
                var haveLocate = palletBindList.FirstOrDefault(m => !string.IsNullOrWhiteSpace(m.LocatNo));
                var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();
                //物料类别信息
                var skuCategoryList = Db.Queryable<SysMaterialCategory>().Where(m => m.IsDel == "0").ToList();
                var skuNo = ""; //入库物料
                if (palletBindList.Count >= 1) //正常入库
                {
                    var bindIdList = palletBindList.Select(m => m.Id).ToList();
                    //var bindIdList = palletBindList.Select(m => m.Id).ToList();
                    //判断是否有零箱
                    foreach (var item in bindIdList)
                    {
                        var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == item);
                        if (boxInfo.Count(m => m.BitBoxMark == "1") > 0)
                        {
                            throw new Exception($"{palletNo}托盘上有零箱,请入零箱库!");
                        }
                    }
                    //foreach (var item in bindIdList)
                    //{
                    //    var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == item);
                    //    if (boxInfo.Count(m => m.BitBoxMark == "1") > 0)
                    //    {
                    //        throw new Exception($"{palletNo}托盘上有零箱,请入零箱库!");
                    //    }
                    //}
                    var palletBind = palletBindList.FirstOrDefault(m => m.Status == "1");
                    if (palletBind != null)
@@ -740,6 +745,7 @@
                    {
                        isHaveLocateNo = true; //已有指定储位
                    }
                    if (palletBindList.First().Type == "0") //物料托入库
                    {
                        //判断是否绑定单据及单据状态是否正常
@@ -750,12 +756,26 @@
                            {
                                throw new Exception("托盘存在物料未绑定入库单,不可入库!");
                            }
                            if (notice.Status == "3")
                            {
                                throw new Exception($"入库单{item.ASNNo}已关闭,不可入库!");
                            }
                        }
                        //获取物料存放区域
                        var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m =>
                            m.IsDel == "0" && m.Id == palletBindList.First().ASNDetailNo);
                        if (noticeDetail == null)
                        {
                            throw new Exception("托盘存在物料未绑定入库单明细,不可入库");
                        }
                        skuNo = noticeDetail.SkuNo;
                    }
                    else if(palletBindList.First().Type == "1")//空托盘
                    {
                        skuNo = "100099";
                    }
                }
                else //回流入库
@@ -765,17 +785,19 @@
                    {
                        throw new Exception($"{palletNo}托盘条码不具有箱码信息,不可入库!");
                    }
                    else
                    {
                        //判断是否有零箱
                        var detailIdList = stockDetail.Select(m => m.Id).ToList();
                        var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => detailIdList.Contains(m.StockDetailId)).ToList();
                        if (dataBoxInfo.Count(m => m.BitBoxMark == "1")>0)
                        {
                            throw new Exception($"{palletNo}托盘上有零箱,不可入库!");
                        }
                    skuNo = stockDetail.First().SkuNo;
                    //else
                    //{
                    //    //判断是否有零箱
                    //    var detailIdList = stockDetail.Select(m => m.Id).ToList();
                    //    var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => detailIdList.Contains(m.StockDetailId)).ToList();
                    //    if (dataBoxInfo.Count(m => m.BitBoxMark == "1")>0)
                    //    {
                    //        throw new Exception($"{palletNo}托盘上有零箱,不可入库!");
                    //    }
                    }
                    //}
                    //获取对应回库规则
                    var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" &&  a.FunSetName == "托盘回库验证" && a.IsEnable == "NO");
@@ -813,7 +835,31 @@
                }
                else
                {
                    locate = allotLocate.GetSuiTableLocate(houseNo, roadwayNo);
                    var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo);
                    if (sku == null)
                    {
                        throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库");
                    }
                    //判断物料是否含有类别信息
                    if (string.IsNullOrWhiteSpace(sku.CategoryNo))
                    {
                        throw new Exception($"物料:{sku.SkuNo}未查询到类别信息");
                    }
                    var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo);
                    if (skuCategory == null)
                    {
                        throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别");
                    }
                    var areaStr = skuCategory.AreaNo.Split(",");
                    var areaList = new List<string>();
                    foreach (var item in areaStr)
                    {
                        areaList.Add(item);
                    }
                    locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo);
                }               
                Db.BeginTran();
                try
@@ -1479,7 +1525,54 @@
                AllotLocation allotLocate = new AllotLocation();
                try
                {
                    locate = allotLocate.GetSuiTableLocate("W01", taskModel.EndRoadway);
                    var skuNo = "";
                    if (asnNo != "回流托盘")
                    {
                        //获取物料存放区域
                        var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m =>
                            m.IsDel == "0" && m.Id == palletBindModel.ASNDetailNo);
                        if (noticeDetail == null)
                        {
                            throw new Exception("托盘存在物料未绑定入库单明细,不可入库");
                        }
                        skuNo = noticeDetail.SkuNo;
                    }
                    else
                    {
                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == model.PalletNo).ToList();
                        if (stockDetail.Count == 0)
                        {
                            throw new Exception($"{model.PalletNo}托盘条码不具有箱码信息,不可入库!");
                        }
                        skuNo = stockDetail.First().SkuNo;
                    }
                    var sku = Db.Queryable<SysMaterials>().First(m =>m.IsDel =="0" && m.SkuNo == skuNo);
                    if (sku == null)
                    {
                        throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库");
                    }
                    //判断物料是否含有类别信息
                    if (string.IsNullOrWhiteSpace(sku.CategoryNo))
                    {
                        throw new Exception($"物料:{sku.SkuNo}未查询到类别信息");
                    }
                    var skuCategory = Db.Queryable<SysMaterialCategory>().First(m =>m.IsDel=="0" && m.CategoryNo == sku.CategoryNo);
                    if (skuCategory == null)
                    {
                        throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别");
                    }
                    var areaStr = skuCategory.AreaNo.Split(",");
                    var areaList = new List<string>();
                    foreach (var item in areaStr)
                    {
                        areaList.Add(item);
                    }
                    locate = allotLocate.GetSuiTableLocate("W01", areaList, taskModel.EndRoadway);
                }
                catch (Exception ex)
                {