From 914d38f0eef4709c10507e403cd57fd22273829b Mon Sep 17 00:00:00 2001 From: wxw <Administrator@DESKTOP-5BIMHQ3> Date: 星期六, 20 七月 2024 16:44:42 +0800 Subject: [PATCH] Merge branch 'wxw' --- Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 2 Wms/WMS.BLL/Logic/AllotSku.cs | 77 ++++++++++++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 13 deletions(-) diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs index e746979..cddd4ff 100644 --- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs +++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs @@ -4380,7 +4380,7 @@ var exAllotList = new List<BllExportAllot>(); var assign = new AllotSku(); - var specialSku = new List<string>();//鐗规畩鐗╂枡闆嗗悎锛屾棤闇�鎵樼洏涓婂叏閮ㄥ垎閰嶇殑 + var specialSku = new List<string>();//鐗规畩鐗╂枡闆嗗悎锛� 鏃犻渶鎵樼洏涓婂叏閮ㄥ垎閰嶇殑 Db.BeginTran(); try { diff --git a/Wms/WMS.BLL/Logic/AllotSku.cs b/Wms/WMS.BLL/Logic/AllotSku.cs index a995732..50235b8 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 @@ } } } - } } @@ -230,6 +261,28 @@ } } + /// <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> /// JC23棰嗘枡鍑哄簱鍒嗛厤璐х墿锛堝垎閰嶆墭鐩樹笂鍏ㄩ儴鐗╂枡锛岄槻姝㈠洓妤间笉鍚屾姇鏂欏彛鍒嗛厤鍚屼竴鎵樼洏鐗╂枡鍐茬獊锛� -- Gitblit v1.8.0