From 1310b47a24f0cc70f0128c820bd490dca6a1a921 Mon Sep 17 00:00:00 2001 From: yyk <2336760928@qq.com> Date: 星期四, 22 八月 2024 14:08:03 +0800 Subject: [PATCH] Merge branch 'master' into yyk --- Wms/WMS.BLL/Logic/AllotSku.cs | 132 +++++++++++++++++++++++++++++++------------- 1 files changed, 93 insertions(+), 39 deletions(-) diff --git a/Wms/WMS.BLL/Logic/AllotSku.cs b/Wms/WMS.BLL/Logic/AllotSku.cs index a995732..03ae06d 100644 --- a/Wms/WMS.BLL/Logic/AllotSku.cs +++ b/Wms/WMS.BLL/Logic/AllotSku.cs @@ -20,8 +20,10 @@ /// <param name="fullPalletQty">婊℃墭鏁伴噺</param> /// <param name="fullBoxQty">婊$鏁伴噺</param> /// <param name="stockQtyDic">鎵樺嚭搴撶墿鍝佹暟 key:搴撳瓨鎵樼洏琛ㄧ殑ID銆乿al:鎵樼洏涓婄殑鏁伴噺</param> + /// <param name="lotNo">鎵规</param> + /// <param name="isMixBox">鏄惁鎺ュ彈鎷肩 0锛氬惁 1锛氭槸</param> /// <returns></returns> - public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic) + public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic,string lotNo,string isMixBox) { //浼樺厛鍏堣繘鍏堝嚭锛堝揩杩囨湡鐨勫厛鍑猴級 //浼樺厛闆剁銆侀浂鎵橈紙鍑哄畬闆剁鍑烘暣绠憋級 @@ -84,8 +86,6 @@ { var ztNum = needQty / fullPalletQty;//闇�瑕佹暣鎵樻暟 - - var zps = list.Where(s => s.Qty >= fullPalletQty).ToList();//鏁存墭 var sps = list.Where(s => s.Qty < fullPalletQty).ToList();//鏁f墭(鏈夊彲鑳芥槸琚攣瀹氫簡鏁伴噺鐨�) @@ -96,7 +96,14 @@ //鏁f墭 foreach (var s in st) { - var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString()); + decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� + //涓嶆帴鍙楁嫾绠� + if (isMixBox == "0") + { + //鏌ユ壘鍑烘贩绠遍泦鍚� + otherLotQty = GetMixBoxQty(s.Id, lotNo); + } + var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty - otherLotQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -119,7 +126,14 @@ var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級 foreach (var ss in zt) { - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); + decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� + //涓嶆帴鍙楁嫾绠� + if (isMixBox == "0") + { + //鏌ユ壘鍑烘贩绠遍泦鍚� + otherLotQty = GetMixBoxQty(ss.Id, lotNo); + } + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -135,10 +149,7 @@ break; } } - - } - } else if (allotSet == 1)//浼樺厛鏁存墭锛堝垎閰嶅悎閫傜殑鏁存墭鏁伴噺锛� { @@ -153,7 +164,14 @@ var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級 foreach (var ss in zt) { - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); + decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� + //涓嶆帴鍙楁嫾绠� + if (isMixBox == "0") + { + //鏌ユ壘鍑烘贩绠遍泦鍚� + otherLotQty = GetMixBoxQty(ss.Id, lotNo); + } + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); if (needQty - qty < detailQty) { break; @@ -174,7 +192,14 @@ foreach (var ss in zt) { - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); + decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� + //涓嶆帴鍙楁嫾绠� + if (isMixBox == "0") + { + //鏌ユ壘鍑烘贩绠遍泦鍚� + otherLotQty = GetMixBoxQty(ss.Id, lotNo); + } + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -197,7 +222,14 @@ var zt = zps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//鎵�鏈夋湭浣跨敤锛堟湭琚垎閰嶇殑锛� foreach (var ss in zt) { - var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString()); + decimal otherLotQty = 0;//娣风涓叾浠栨壒娆℃暟閲� + //涓嶆帴鍙楁嫾绠� + if (isMixBox == "0") + { + //鏌ユ壘鍑烘贩绠遍泦鍚� + otherLotQty = GetMixBoxQty(ss.Id, lotNo); + } + var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString()); if (needQty - qty < detailQty) { var num = needQty - qty; @@ -213,7 +245,6 @@ } } } - } } @@ -229,6 +260,28 @@ throw new Exception("鍒嗛厤鍑哄簱鐗╂枡澶辫触锛�" + e.Message); } + } + /// <summary> + /// 鏌ユ壘鍑烘贩绠变腑鍏朵粬鎵规鎬绘暟閲� + /// </summary> + /// <param name="stockDetailId"></param> + /// <param name="lotNo"></param> + /// <returns></returns> + private decimal GetMixBoxQty(int stockDetailId,string lotNo) + { + var contextDb = DataContext.Db; + //鏌ユ壘鍑烘贩绠遍泦鍚� + List<string> mixBoxList = contextDb.Queryable<DataBoxInfo>() + .Where(w => w.IsDel == "0" && w.StockDetailId == stockDetailId) + .GroupBy(g => g.LotNo) + .Having(h => SqlFunc.AggregateCount(h.LotNo) > 1) + .Select(s => s.BoxNo).ToList(); + + decimal otherLotQty = contextDb.Queryable<DataBoxInfo>() + .Where(w => w.IsDel == "0" && w.StockDetailId == stockDetailId && mixBoxList.Contains(w.BoxNo) && w.LotNo != lotNo) + .Sum(s => s.Qty); + + return otherLotQty; } /// <summary> @@ -869,12 +922,13 @@ //绔嬪簱鍐呮墭鐩� var detail3 = list.Where(m => m.WareHouseNo == "W01").ToList(); - foreach (var item in detail2) - { - var dept = item.LocatNo.Substring(5,2); + // 骞冲簱鍌ㄤ綅缂栫爜瑙勫垯纭鍚庯紝鏍规嵁瀹為檯瑙勫垯鍙栨繁搴� + //foreach (var item in detail2) + //{ + // var dept = item.LocatNo.Substring(5,2); - item.Dept = int.Parse(dept); - } + // item.Dept = int.Parse(dept); + //} foreach (var item in detail3) { var dept = item.LocatNo.Substring(6, 2); @@ -882,27 +936,27 @@ 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 pingku in detail2.OrderByDescending(a => a.PalletTags).ThenBy(m => m.Dept).ToList()) - { - if (data2.Contains(pingku)) - { - continue; - } + //var locate1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W02"); + //var data2 = new List<StockDetailDto>(); + //foreach (var pingku in detail2.OrderByDescending(a => a.PalletTags).ThenBy(m => m.Dept).ToList()) + //{ + // if (data2.Contains(pingku)) + // { + // continue; + // } - var currentLocate = locate1.First(m => m.LocatNo == pingku.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 (detail2.Any(m => m.LocatNo == locat.LocatNo) && !data2.Contains(detail2.First(m => m.LocatNo == locat.LocatNo))) - { - data2.Add(detail2.First(m => m.LocatNo == locat.LocatNo)); - } + // var currentLocate = locate1.First(m => m.LocatNo == pingku.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 (detail2.Any(m => m.LocatNo == locat.LocatNo) && !data2.Contains(detail2.First(m => m.LocatNo == locat.LocatNo))) + // { + // data2.Add(detail2.First(m => m.LocatNo == locat.LocatNo)); + // } - } - data2.Add(pingku); - } + // } + // data2.Add(pingku); + //} //绔嬪簱 var locate2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W01").ToList(); @@ -928,9 +982,9 @@ } - data.AddRange(detail1); - data.AddRange(data2); - data.AddRange(data3); + data.AddRange(detail1); // 搴撳 + data.AddRange(detail2); // 骞冲簱 + data.AddRange(data3); // 绔嬪簱 return data; } -- Gitblit v1.8.0