From 9f9b980d5c801db37922828deded131bdc00be3c Mon Sep 17 00:00:00 2001
From: Demo <Demo@DESKTOP-CPA90BF>
Date: 星期二, 26 三月 2024 16:28:46 +0800
Subject: [PATCH] 修改分配方法
---
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 64 +++++-----
Wms/WMS.BLL/Logic/AllotSku.cs | 277 +++++++++++++++++++++++++++++----------------
2 files changed, 209 insertions(+), 132 deletions(-)
diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index e85ca4e..17d6ceb 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -2874,41 +2874,43 @@
#region 鍖呰淇℃伅
var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo);
- if (pack == null)
- {
- throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰");
- }
var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺
var bNum = 0;//绠辩墿鍝佹暟閲�
- if (pack.L5Num.HasValue)
+ if (pack != null)
{
- pNum = Convert.ToInt32(pack.L5Num);
- bNum = Convert.ToInt32(pack.L4Num);
+ //throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰");
+ if (pack.L5Num.HasValue)
+ {
+ pNum = Convert.ToInt32(pack.L5Num);
+ bNum = Convert.ToInt32(pack.L4Num);
+ }
+ else if (pack.L4Num.HasValue)
+ {
+ pNum = Convert.ToInt32(pack.L4Num);
+ bNum = Convert.ToInt32(pack.L3Num);
+ }
+ else if (pack.L3Num.HasValue)
+ {
+ pNum = Convert.ToInt32(pack.L3Num);
+ bNum = Convert.ToInt32(pack.L2Num);
+ }
+ else if (pack.L2Num.HasValue)
+ {
+ pNum = Convert.ToInt32(pack.L2Num);
+ bNum = Convert.ToInt32(pack.L1Num);
+ }
+ else if (pack.L1Num.HasValue)
+ {
+ pNum = Convert.ToInt32(pack.L1Num);
+ bNum = Convert.ToInt32(pack.L1Num);
+ }
}
- else if (pack.L4Num.HasValue)
- {
- pNum = Convert.ToInt32(pack.L4Num);
- bNum = Convert.ToInt32(pack.L3Num);
- }
- else if (pack.L3Num.HasValue)
- {
- pNum = Convert.ToInt32(pack.L3Num);
- bNum = Convert.ToInt32(pack.L2Num);
- }
- else if (pack.L2Num.HasValue)
- {
- pNum = Convert.ToInt32(pack.L2Num);
- bNum = Convert.ToInt32(pack.L1Num);
- }
- else if (pack.L1Num.HasValue)
- {
- 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>();//鎵樺嚭搴撶墿鍝佹暟
diff --git a/Wms/WMS.BLL/Logic/AllotSku.cs b/Wms/WMS.BLL/Logic/AllotSku.cs
index e54bfcb..6cfeb23 100644
--- a/Wms/WMS.BLL/Logic/AllotSku.cs
+++ b/Wms/WMS.BLL/Logic/AllotSku.cs
@@ -54,18 +54,13 @@
}
#endregion
decimal qty = 0; //鍒嗛厤鐨勬�绘暟閲�
- 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();//鏁f墭(鏈夊彲鑳芥槸琚攣瀹氫簡鏁伴噺鐨�)
-
- if (allotSet == 0)//浼樺厛闆剁锛堝嚭瀹岄浂绠卞嚭鏁寸锛�
+ if (fullPalletQty == 0)//鏃犲寘瑁呯墿鏂欏垎閰�
{
//宸插垎閰嶇殑鎵樼洏 key锛氬簱瀛樻槑缁咺D锛寁alue锛氬垎閰嶇殑鏁伴噺
- var st = sps.OrderBy(s => s.ExpirationTime).ThenBy(s => s.Qty - s.LockQty - s.FrozenQty).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
- //鏁f墭
+ 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());
@@ -84,109 +79,144 @@
break;
}
}
-
- //涓嶅//鍙栨暣鎵�
- if (qty < needQty)
- {
- var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
- foreach (var ss in zt)
- {
- var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
- if (needQty - qty < detailQty)
- {
- var num = needQty - qty;
- qty += num;
- SaveDic(stockQtyDic, ss.Id, num);
- break;
- }
- qty += detailQty;
- SaveDic(stockQtyDic, ss.Id, detailQty);
-
- if (qty >= needQty)
- {
- break;
- }
- }
-
-
- }
-
}
- else if (allotSet == 1)//浼樺厛鏁存墭锛堝垎閰嶅悎閫傜殑鏁存墭鏁伴噺锛�
+ else
{
- //鍏堝垽鏂渶瑕佺殑鏁伴噺
- //鍒ゆ柇闇�瑕佹暣鎵樼殑鏁伴噺鏄惁澶т簬0
- //鏄細鍏堝嚭鏁存墭锛屽墿浣欑殑鏁伴噺浠庢墭鐩樹笂鏁伴噺鏈�灏戠殑鍑恒�侊紙濡傛灉鎵惧悎閫傜殑鏁伴噺銆佸彲鑳藉皬鏁伴噺寰堝皬姒傜巼浼氳鍒嗛厤鍒般�佹湁鍏堣繘鍏堝嚭鏃ユ湡鍗$潃锛�
- //鍚︼細鏁伴噺浠庢墭鐩樹笂鏁伴噺鏈�灏戠殑鍑恒�侊紙濡傛灉鎵惧悎閫傜殑鏁伴噺銆佸彲鑳藉皬鏁伴噺寰堝皬姒傜巼浼氳鍒嗛厤鍒般�佹湁鍏堣繘鍏堝嚭鏃ユ湡鍗$潃锛�
- //
- //鍙栨暣鎵�
- if (ztNum > 0)
- {
- var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
- foreach (var ss in zt)
- {
- var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
- if (needQty - qty < detailQty)
- {
- break;
- }
- qty += detailQty;
- SaveDic(stockQtyDic, ss.Id, detailQty);
- if (qty >= needQty)
- {
- break;
- }
- }
- }
- //浠庢暣鎵樺拰鍜屾暎鎵樹腑鏌ユ壘鍚堥�傜殑(浠庢暟閲忓皯鐨勫厛鍑哄線)
- if (qty < needQty)
- {
- var sIds = stockQtyDic.Select(s => s.Key).ToList();
- var zt = sps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//鎵�鏈夋湭浣跨敤锛堟湭琚垎閰嶇殑锛�
+ var ztNum = needQty / fullPalletQty;//闇�瑕佹暣鎵樻暟
- foreach (var ss in zt)
+
+
+ var zps = list.Where(s => s.Qty >= fullPalletQty).ToList();//鏁存墭
+ var sps = list.Where(s => s.Qty < fullPalletQty).ToList();//鏁f墭(鏈夊彲鑳芥槸琚攣瀹氫簡鏁伴噺鐨�)
+
+ if (allotSet == 0)//浼樺厛闆剁锛堝嚭瀹岄浂绠卞嚭鏁寸锛�
+ {
+ //宸插垎閰嶇殑鎵樼洏 key锛氬簱瀛樻槑缁咺D锛寁alue锛氬垎閰嶇殑鏁伴噺
+ var st = sps.OrderBy(s => s.ExpirationTime).ThenBy(s => s.Qty - s.LockQty - s.FrozenQty).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
+ //鏁f墭
+ foreach (var s in st)
{
- var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+ var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
if (needQty - qty < detailQty)
{
var num = needQty - qty;
qty += num;
- SaveDic(stockQtyDic, ss.Id, num);
+ SaveDic(stockQtyDic, s.Id, num);
break;
}
- qty += detailQty;
- SaveDic(stockQtyDic, ss.Id, detailQty);
- if (qty >= needQty)
- {
- break;
- }
- }
- }
- //鎵惧畬鏁f墭杩樹笉澶熷啀鎵炬暣鎵�
- if (qty < needQty)
- {
- var sIds = stockQtyDic.Select(s => s.Key).ToList();
- 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());
- if (needQty - qty < detailQty)
- {
- var num = needQty - qty;
- qty += num;
- SaveDic(stockQtyDic, ss.Id, num);
- break;
- }
- qty += detailQty;
- SaveDic(stockQtyDic, ss.Id, detailQty);
- if (qty >= needQty)
- {
- break;
- }
- }
- }
+ qty += detailQty;
+ SaveDic(stockQtyDic, s.Id, detailQty);
+ if (qty >= needQty)
+ {
+ break;
+ }
+ }
+
+ //涓嶅//鍙栨暣鎵�
+ if (qty < needQty)
+ {
+ var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
+ foreach (var ss in zt)
+ {
+ var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+ if (needQty - qty < detailQty)
+ {
+ var num = needQty - qty;
+ qty += num;
+ SaveDic(stockQtyDic, ss.Id, num);
+ break;
+ }
+ qty += detailQty;
+ SaveDic(stockQtyDic, ss.Id, detailQty);
+
+ if (qty >= needQty)
+ {
+ break;
+ }
+ }
+
+
+ }
+
+ }
+ else if (allotSet == 1)//浼樺厛鏁存墭锛堝垎閰嶅悎閫傜殑鏁存墭鏁伴噺锛�
+ {
+ //鍏堝垽鏂渶瑕佺殑鏁伴噺
+ //鍒ゆ柇闇�瑕佹暣鎵樼殑鏁伴噺鏄惁澶т簬0
+ //鏄細鍏堝嚭鏁存墭锛屽墿浣欑殑鏁伴噺浠庢墭鐩樹笂鏁伴噺鏈�灏戠殑鍑恒�侊紙濡傛灉鎵惧悎閫傜殑鏁伴噺銆佸彲鑳藉皬鏁伴噺寰堝皬姒傜巼浼氳鍒嗛厤鍒般�佹湁鍏堣繘鍏堝嚭鏃ユ湡鍗$潃锛�
+ //鍚︼細鏁伴噺浠庢墭鐩樹笂鏁伴噺鏈�灏戠殑鍑恒�侊紙濡傛灉鎵惧悎閫傜殑鏁伴噺銆佸彲鑳藉皬鏁伴噺寰堝皬姒傜巼浼氳鍒嗛厤鍒般�佹湁鍏堣繘鍏堝嚭鏃ユ湡鍗$潃锛�
+ //
+ //鍙栨暣鎵�
+ if (ztNum > 0)
+ {
+ var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
+ foreach (var ss in zt)
+ {
+ var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+ if (needQty - qty < detailQty)
+ {
+ break;
+ }
+ qty += detailQty;
+ SaveDic(stockQtyDic, ss.Id, detailQty);
+ if (qty >= needQty)
+ {
+ break;
+ }
+ }
+ }
+ //浠庢暣鎵樺拰鍜屾暎鎵樹腑鏌ユ壘鍚堥�傜殑(浠庢暟閲忓皯鐨勫厛鍑哄線)
+ if (qty < needQty)
+ {
+ var sIds = stockQtyDic.Select(s => s.Key).ToList();
+ var zt = sps.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());
+ if (needQty - qty < detailQty)
+ {
+ var num = needQty - qty;
+ qty += num;
+ SaveDic(stockQtyDic, ss.Id, num);
+ break;
+ }
+ qty += detailQty;
+ SaveDic(stockQtyDic, ss.Id, detailQty);
+ if (qty >= needQty)
+ {
+ break;
+ }
+ }
+ }
+ //鎵惧畬鏁f墭杩樹笉澶熷啀鎵炬暣鎵�
+ if (qty < needQty)
+ {
+ var sIds = stockQtyDic.Select(s => s.Key).ToList();
+ 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());
+ if (needQty - qty < detailQty)
+ {
+ var num = needQty - qty;
+ qty += num;
+ SaveDic(stockQtyDic, ss.Id, num);
+ break;
+ }
+ qty += detailQty;
+ SaveDic(stockQtyDic, ss.Id, detailQty);
+ if (qty >= needQty)
+ {
+ break;
+ }
+ }
+ }
+
+ }
}
+
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;
}
--
Gitblit v1.8.0