From 5b529126898f79c90062020389b56702a92bd490 Mon Sep 17 00:00:00 2001
From: yuyou_x <2336760928@qq.com>
Date: 星期六, 23 三月 2024 15:01:40 +0800
Subject: [PATCH] Merge branch 'yyk'

---
 Wms/WMS.BLL/Logic/AllotSku.cs |  109 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 97 insertions(+), 12 deletions(-)

diff --git a/Wms/WMS.BLL/Logic/AllotSku.cs b/Wms/WMS.BLL/Logic/AllotSku.cs
index d0af838..e54bfcb 100644
--- a/Wms/WMS.BLL/Logic/AllotSku.cs
+++ b/Wms/WMS.BLL/Logic/AllotSku.cs
@@ -2,6 +2,8 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using Model.ModelDto.DataDto;
+using SqlSugar;
 using WMS.Entity.Context;
 using WMS.Entity.DataEntity;
 using WMS.Entity.SysEntity;
@@ -14,14 +16,12 @@
         /// 鍒嗛厤璐х墿
         /// </summary>
         /// <param name="palletList">搴撳瓨鏄庣粏闆嗗悎</param>
-        /// <param name="goodCode">鐗╂枡缂栫爜</param>
-        /// <param name="lotNo">鎵规</param>
         /// <param name="needQty">闇�瑕佸垎閰嶇殑鏁伴噺</param>
         /// <param name="fullPalletQty">婊℃墭鏁伴噺</param>
         /// <param name="fullBoxQty">婊$鏁伴噺</param>
         /// <param name="stockQtyDic">鎵樺嚭搴撶墿鍝佹暟 key:搴撳瓨鎵樼洏琛ㄧ殑ID銆乿al:鎵樼洏涓婄殑鏁伴噺</param>
         /// <returns></returns>
-        public int AllotPallets(List<DataStockDetail> palletList, int needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, int> stockQtyDic)
+        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic)
         {
             //浼樺厛鍏堣繘鍏堝嚭锛堝揩杩囨湡鐨勫厛鍑猴級
             //浼樺厛闆剁銆侀浂鎵橈紙鍑哄畬闆剁鍑烘暣绠憋級
@@ -53,11 +53,13 @@
                     }
                 }
                 #endregion
-                var qty = 0; //鍒嗛厤鐨勬�绘暟閲�
+                decimal qty = 0; //鍒嗛厤鐨勬�绘暟閲�
                 var ztNum = needQty / fullPalletQty;//闇�瑕佹暣鎵樻暟
 
-                var zps = palletList.Where(s => s.Qty >= fullPalletQty).ToList();//鏁存墭
-                var sps = palletList.Where(s => s.Qty < fullPalletQty).ToList();//鏁f墭(鏈夊彲鑳芥槸琚攣瀹氫簡鏁伴噺鐨�) 
+                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)//浼樺厛闆剁锛堝嚭瀹岄浂绠卞嚭鏁寸锛�
                 {
@@ -66,7 +68,7 @@
                     //鏁f墭
                     foreach (var s in st)
                     {
-                        var detailQty = int.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
+                        var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                         if (needQty - qty < detailQty)
                         {
                             var num = needQty - qty;
@@ -89,7 +91,7 @@
                         var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
                         foreach (var ss in zt)
                         {
-                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                             if (needQty - qty < detailQty)
                             {
                                 var num = needQty - qty;
@@ -123,7 +125,7 @@
                         var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//鎵�鏈夋湭浣跨敤鐨勬墭鐩橈紙鏈鍒嗛厤鐨勶級
                         foreach (var ss in zt)
                         {
-                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                             if (needQty - qty < detailQty)
                             {
                                 break;
@@ -144,7 +146,7 @@
 
                         foreach (var ss in zt)
                         {
-                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                             if (needQty - qty < detailQty)
                             {
                                 var num = needQty - qty;
@@ -167,7 +169,7 @@
                         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 = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
+                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                             if (needQty - qty < detailQty)
                             {
                                 var num = needQty - qty;
@@ -206,7 +208,7 @@
         /// <param name="dic"></param>
         /// <param name="key"></param>
         /// <param name="v"></param>
-        private void SaveDic(Dictionary<int, int> dic, int key, int v)
+        private void SaveDic(Dictionary<int, decimal> dic, int key, decimal v)
         {
             if (dic.ContainsKey(key))
             {
@@ -220,6 +222,7 @@
 
         //--------------------------------------------------------------------------------------------------------------
 
+        #region MyRegion
 
         ///// <summary>
         ///// 鑾峰緱鑳屽寘鎵块噸w锛岃璐х墿o锛屼粠绗琸浠跺悜鍚庤�冭檻锛屽緱鍒扮殑鏈�澶т环鍊�
@@ -262,5 +265,87 @@
         //    return a > b ? a : b;
         //}
 
+        #endregion
+
+
+        private List<StockDetailDto> GetDataListOrderByDept(List<DataStockDetail> palletList)
+        {
+            try
+            {
+                var Db = DataContext.Db;
+                var data = new List<StockDetailDto>();
+
+                var list = palletList.Select(m => new StockDetailDto()
+                {
+                    Id = m.Id,
+                    LotNo = m.LotNo,
+                    LotText = m.LotText,
+                    SupplierLot = m.SupplierLot,
+                    OwnerNo = m.OwnerNo,
+                    OwnerName = m.OwnerName,
+                    SupplierNo = m.SupplierNo,
+                    SupplierName = m.SupplierName,
+                    SkuNo = m.SkuNo,
+                    SkuName = m.SkuName,
+                    Standard = m.Standard,
+                    Qty = m.Qty,
+                    LockQty = m.LockQty,
+                    FrozenQty = m.FrozenQty,
+                    InspectQty = m.InspectQty,
+                    ASNNo = m.ASNNo,
+                    ASNDetailNo = m.ASNDetailNo,
+                    WareHouseNo = m.WareHouseNo,
+                    RoadwayNo = m.RoadwayNo,
+                    AreaNo = m.AreaNo,
+                    LocatNo = m.LocatNo,
+                    PalletNo = m.PalletNo,
+                    PalletNo2 = m.PalletNo2,
+                    PalletNo3 = m.PalletNo3,
+                    CompleteTime = m.CompleteTime,
+                    ProductionTime = m.ProductionTime,
+                    ExpirationTime = m.ExpirationTime,
+                    Status = m.Status,
+                    InspectMark = m.InspectMark,
+                    BitPalletMark = m.BitPalletMark,
+                    InspectStatus = m.InspectStatus,
+                    InspectTime = m.InspectTime,
+                    PackagNo = m.PackagNo,
+                    IsBale = m.IsBale,
+                    IsBelt = m.IsBelt,
+                    Demo = m.Demo,
+
+                }).ToList();
+                //搴撳鎵樼洏
+                var detail1 = list.Where(m => string.IsNullOrWhiteSpace(m.LocatNo)).ToList();
+                //骞冲簱鍐呮墭鐩�
+                var detail2 = list.Where(m => m.WareHouseNo == "W02").ToList();
+                //绔嬪簱鍐呮墭鐩�
+                var detail3 = list.Where(m => m.WareHouseNo == "W01").ToList();
+
+                foreach (var item in detail2)
+                {
+                    var dept = item.LocatNo.Substring(5,2);
+
+                    item.Dept = int.Parse(dept);
+                }
+                foreach (var item in detail3)
+                {
+                    var dept = item.LocatNo.Substring(6, 2);
+
+                    item.Dept = int.Parse(dept);
+                }
+                data.AddRange(detail1);
+                data.AddRange(detail2.OrderBy(m => m.Dept).ToList());
+                data.AddRange(detail3.OrderBy(m => m.Dept).ToList());
+
+                return data;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+
     }
 }

--
Gitblit v1.8.0