Demo
2024-03-26 9f9b980d5c801db37922828deded131bdc00be3c
修改分配方法
2个文件已修改
97 ■■■■ 已修改文件
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/Logic/AllotSku.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -2874,12 +2874,11 @@
                        #region 包装信息
                        var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo);
                        if (pack == null)
                        {
                            throw new Exception("未查询到物料包装");
                        }
                        var pNum = 0;//托盘物品数量
                        var bNum = 0;//箱物品数量
                        if (pack != null)
                        {
                            //throw new Exception("未查询到物料包装");
                        if (pack.L5Num.HasValue)
                        {
                            pNum = Convert.ToInt32(pack.L5Num);
@@ -2905,10 +2904,13 @@
                            pNum = Convert.ToInt32(pack.L1Num);
                            bNum = Convert.ToInt32(pack.L1Num);
                        }
                        if (pNum == 0)
                        {
                            throw new Exception("未查询到物料包装托箱关系信息");
                        }
                        //if (pNum == 0)
                        //{
                        //    throw new Exception("未查询到物料包装托箱关系信息");
                        //}
                        #endregion
                        //取合适库存商品
                        Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -54,9 +54,37 @@
                }
                #endregion
                decimal qty = 0; //分配的总数量
                var list = GetDataListOrderByDept(palletList);
                if (fullPalletQty == 0)//无包装物料分配
                {
                    //已分配的托盘 key:库存明细ID,value:分配的数量
                    var st = list.OrderBy(s => s.ExpirationTime).ThenBy(s => s.Qty - s.LockQty - s.FrozenQty).ToList();//所有未使用的托盘(未被分配的)
                    //
                    foreach (var s in st)
                    {
                        var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                        if (needQty - qty < detailQty)
                        {
                            var num = needQty - qty;
                            qty += num;
                            SaveDic(stockQtyDic, s.Id, num);
                            break;
                        }
                        qty += detailQty;
                        SaveDic(stockQtyDic, s.Id, detailQty);
                        if (qty >= needQty)
                        {
                            break;
                        }
                    }
                }
                else
                {
                var ztNum = needQty / fullPalletQty;//需要整托数
                var list = GetDataListOrderByDept(palletList);
                var zps = list.Where(s => s.Qty >= fullPalletQty).ToList();//整托
                var sps = list.Where(s => s.Qty < fullPalletQty).ToList();//散托(有可能是被锁定了数量的) 
@@ -187,6 +215,8 @@
                    }
                }
                }
                if (qty < needQty)
                {
                    throw new Exception("库存数量不足");
@@ -334,9 +364,54 @@
                    item.Dept = int.Parse(dept);
                }
                //平库
                var locate1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W02");
                var data2 = new List<StockDetailDto>();
                foreach (var liku in detail2.OrderBy(m => m.Dept).ToList())
                {
                    if (data2.Contains(liku))
                    {
                        continue;
                    }
                    data2.Add(liku);
                    var currentLocate = locate1.First(m => m.LocatNo == liku.LocatNo);
                    var locateAfter = locate1.Where(m => m.AreaNo == currentLocate.AreaNo && m.Layer == currentLocate.Layer && m.Row == currentLocate.Row && int.Parse(m.Depth) < int.Parse(currentLocate.Depth)).OrderBy(m => m.Depth).ToList();
                    foreach (var locat in locateAfter)
                    {
                        if (detail3.Any(m => m.LocatNo == locat.LocatNo))
                        {
                            data2.Add(detail3.First(m => m.LocatNo == locat.LocatNo));
                        }
                    }
                }
                //立库
                var locate2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W01");
                var data3 = new List<StockDetailDto>();
                foreach (var liku in detail3.OrderBy(m => m.Dept).ToList())
                {
                    if (data3.Contains(liku))
                    {
                        continue;
                    }
                    data3.Add(liku);
                    var currentLocate = locate2.First(m => m.LocatNo == liku.LocatNo);
                    var locateAfter = locate2.Where(m => m.Column == currentLocate.Column && m.Layer == currentLocate.Layer && m.Row == currentLocate.Row && int.Parse(m.Depth) < int.Parse(currentLocate.Depth)).OrderBy(m => m.Depth).ToList();
                    foreach (var locat in locateAfter)
                    {
                        if (detail3.Any(m=>m.LocatNo == locat.LocatNo))
                        {
                            data3.Add(detail3.First(m=>m.LocatNo == locat.LocatNo));
                        }
                    }
                }
                data.AddRange(detail1);
                data.AddRange(detail2.OrderBy(m => m.Dept).ToList());
                data.AddRange(detail3.OrderBy(m => m.Dept).ToList());
                data.AddRange(data2);
                data.AddRange(data3);
                return data;
            }