From f7e91120bed67bf81f3e873056b147c8df2d68c0 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期三, 23 四月 2025 15:38:15 +0800
Subject: [PATCH] 修复了一些已知问题

---
 Tiger.Business.WMS/WMS_ITEM_Biz.cs |   81 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 72 insertions(+), 9 deletions(-)

diff --git a/Tiger.Business.WMS/WMS_ITEM_Biz.cs b/Tiger.Business.WMS/WMS_ITEM_Biz.cs
index 4bc1e2f..5e22b24 100644
--- a/Tiger.Business.WMS/WMS_ITEM_Biz.cs
+++ b/Tiger.Business.WMS/WMS_ITEM_Biz.cs
@@ -64,7 +64,7 @@
                         //var query = Biz.Db.Queryable<WMS_ITEM_PKG>().Where(q => q.SN == barcode.SN).IncludesAllFirstLayer().First();//.ByAuth(option)
 
                         //鍖呰琛ㄤ腑鎵惧埌鏉$爜
-                        if (!query.IsNullOrEmpty() && query.QTY > 0)
+                        if (!query.IsNullOrEmpty())// && query.QTY > 0)
                         {
                             inv.SN = barcode.SN;
                             inv.Barcode = barcode;
@@ -74,8 +74,8 @@
                             inv.Region = query.Region;
                             inv.Shelf = query.Shelf;
                             inv.Location = query.Location;
-                            inv.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("pkg_wms_get_item_pkg", new SugarParameter("root", barcode.SN));
-                            inv.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("pkg_wms_get_items", new SugarParameter("root", barcode.SN));
+                            inv.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("sp_wms_get_item_pkg", new SugarParameter("root", barcode.SN));
+                            inv.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("sp_wms_get_items", new SugarParameter("root", barcode.SN));
                             inv.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => inv.Items.Any(s => s.SN == q.SN)).ToList();
                             //var data = inv.Items.Select(i => i.SN).ToList().Except(inv.ItemsExt.Select(i => i.SN).ToList());
                             var data = inv.Items.Where(q => !inv.ItemsExt.Any(s => s.SN == q.SN)).ToList();
@@ -185,8 +185,8 @@
                             inv.Region = query.Region;
                             inv.Shelf = query.Shelf;
                             inv.Location = query.Location;
-                            inv.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("pkg_wms_get_item_pkg", new SugarParameter("root", barcode.SN));
-                            inv.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("pkg_wms_get_items", new SugarParameter("root", barcode.SN));
+                            inv.Packages = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM_PKG>("sp_wms_get_item_pkg", new SugarParameter("root", barcode.SN));
+                            inv.Items = Biz.Db.Ado.UseStoredProcedure().SqlQuery<WMS_ITEM>("sp_wms_get_items", new SugarParameter("root", barcode.SN));
                             inv.ItemsExt = Biz.Db.Queryable<WMS_ITEM_EXT>().Where(q => inv.Items.Any(s => s.SN == q.SN)).ToList();//鎵╁睍琛�
                             //var data = inv.Items.Select(i => i.SN).ToList().Except(inv.ItemsExt.Select(i => i.SN).ToList());
                             var data = inv.Items.Where(q => !inv.ItemsExt.Any(s => s.SN == q.SN)).ToList();
@@ -321,6 +321,7 @@
             /// <returns></returns>
             public Result<TakeDownInfo> TakeDown(IInventory inventory, AuthOption option, WMS_ITEM.STATUSs status, bool clearLocation = true)
             {
+                return TakeDown(inventory, inventory.Items.ToDictionary(k => k.SN, v => v.QTY), option, status, clearLocation);
                 var result = new Result<TakeDownInfo>(Result.Flags.Success, new TakeDownInfo());
                 try
                 {
@@ -346,6 +347,68 @@
                             item.LOCATION_ID = null;
                         }
                     }
+                    result.Data.Items = inventory.Items;
+                    result.Data.History = inventory.History;
+                    result.Data.Packages = inventory.Packages;
+                }
+                catch (Exception ex)
+                {
+                    result.CatchExceptionWithLog(ex, Biz.L("WMS.WmsItem.TakeDown.Exception", inventory.SN, inventory?.Location?.LOCATION_CODE));
+                }
+                return result;
+            }
+
+            /// <summary>
+            /// 涓嬫灦
+            /// </summary>
+            /// <param name="inventory">瑕佷笅鏋剁殑搴撳瓨瀵硅薄</param>
+            /// <param name="qtyList">瑕佷笅鏋剁殑鏈�灏忓寘瑁呮暟閲忓瓧鍏革紝key锛歴n锛寁alue锛歲ty</param>
+            /// <param name="option">鎺堟潈鏌ヨ閫夐」</param>
+            /// <param name="status">涓嬫灦鍚庣姸鎬�</param>
+            /// <param name="clearLocation">鏄惁娓呯悊鍌ㄥ尯璐ф灦鍌ㄤ綅淇℃伅</param>
+            /// <returns></returns>
+            public Result<TakeDownInfo> TakeDown(IInventory inventory, Dictionary<string, double> qtyList, AuthOption option, WMS_ITEM.STATUSs status, bool clearLocation = true)
+            {
+                var result = new Result<TakeDownInfo>(Result.Flags.Success, new TakeDownInfo());
+                try
+                {
+                    //濡傛灉瑕佷笅鏋剁殑鏁伴噺瀛楀吀涓虹┖鍒欒涓烘槸鍏ㄩ儴涓嬫灦
+                    qtyList = qtyList.IsNullOrEmpty(inventory.Items.ToDictionary(k => k.SN, v => v.QTY));
+
+                    foreach (var item in inventory.Items)
+                    {
+                        if (qtyList.ContainsKey(item.SN) && qtyList[item.SN] > 0)
+                        {
+                            var downQty = qtyList[item.SN];
+                            if (item.QTY > downQty)
+                            {
+                                item.QTY -= downQty;
+                                var pkg = inventory.Packages.First(q => q.SN == item.SN);
+                                pkg.QTY = item.QTY;
+                            }
+                            else
+                            {
+                                item.STATUS = status.GetValue();
+                                var pkg = inventory.Packages.First(q => q.SN == item.SN);
+                                pkg.PARENT_SN = null;
+                                pkg.Parent = null;
+                                if (clearLocation)
+                                {
+                                    //item.WH_ID = null;
+                                    item.REGION_ID = null;
+                                    item.SHELF_ID = null;
+                                    item.LOCATION_ID = null;
+                                    //pkg.WH_ID = null;
+                                    pkg.REGION_ID = null;
+                                    pkg.SHELF_ID = null;
+                                    pkg.LOCATION_ID = null;
+                                }
+                            }
+                            inventory.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{inventory.SN}]浠庡偍浣峓{inventory?.Location?.LOCATION_CODE}]涓嬫灦鏁伴噺[{downQty}]鎴愬姛锛岀姸鎬乕{item.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()}]锛屾搷浣滃崟鎹甗{item.TRANS_NO}]"));
+                        }
+                    }
+                    inventory.Packages = WMS_ITEM_PKG.UpdateQty(inventory.Packages);
+
                     result.Data.Items = inventory.Items;
                     result.Data.History = inventory.History;
                     result.Data.Packages = inventory.Packages;
@@ -456,13 +519,13 @@
             /// <param name="option">鎺堟潈鏌ヨ閫夐」</param>
             /// <param name="reqQty">闇�姹傛暟閲忥紝浼氳繑鍥炴弧瓒抽渶姹傜殑鐗╂枡涓暟</param>
             /// <returns></returns>
-            public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, decimal reqQty)
+            public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, double reqQty)
             {
                 var result = new Result<List<SuggestItem>>(Result.Flags.Success, new List<SuggestItem>()) { LocaleMsg = new("WMS.WmsItem.Suggest.Success") };
                 try
                 {
                     var takeCount = 0;
-                    var checkSum = (decimal)0;
+                    var checkSum = 0.0;
                     var checkCount = 0;
                     do
                     {
@@ -563,7 +626,7 @@
                                                     Location = l,
                                                 })
                                                 .Take(takeCount).ToList();
-                    var curQty = (decimal)0;
+                    var curQty = 0.0;
                     foreach (var item in items)
                     {
                         result.Data.Add(item);
@@ -674,7 +737,7 @@
         /// <param name="transLine"></param>
         /// <param name="actQty"></param>
         /// <param name="isFirst"></param>
-        public static WMS_ITEM_POOL GetPoolItem(this WMS_ITEM item, string orgCode, string transCode, string transNo, string transLine, decimal actQty, bool isFirst)
+        public static WMS_ITEM_POOL GetPoolItem(this WMS_ITEM item, string orgCode, string transCode, string transNo, string transLine, double actQty, bool isFirst)
         {
             var poolItem = new WMS_ITEM_POOL()
             {

--
Gitblit v1.9.3