From 77da8b9247b9df926678cfb7e4af0f0900f3a084 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期二, 13 五月 2025 18:32:52 +0800
Subject: [PATCH] 修复了一些已知问题

---
 Tiger.Business.WMS/Common/WmsTask.cs |  209 ++++++++++++++++++++++++++++------------------------
 1 files changed, 113 insertions(+), 96 deletions(-)

diff --git a/Tiger.Business.WMS/Common/WmsTask.cs b/Tiger.Business.WMS/Common/WmsTask.cs
index 6ae26b6..7e3432d 100644
--- a/Tiger.Business.WMS/Common/WmsTask.cs
+++ b/Tiger.Business.WMS/Common/WmsTask.cs
@@ -1,4 +1,5 @@
-锘縰sing Rhea.Common;
+锘縰sing Microsoft.Extensions.Options;
+using Rhea.Common;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
@@ -8,6 +9,7 @@
 using Tiger.IBusiness;
 using Tiger.Model;
 using Tiger.Model.Entitys.MES.Position;
+using Tiger.Model.Entitys.MES.U9C;
 using static IronPython.Modules._ast;
 
 namespace Tiger.Business.WMS.Transaction
@@ -258,6 +260,7 @@
                     foreach (var item in CurInvItem.Items)
                     {
                         item.STATUS = WMS_ITEM.STATUSs.InStore.GetValue();
+                        item.LOTNO = item.LOTNO.IsNullOrEmpty(new Barcode(item.SN).LotNo);
                         item.SUPP_LOTNO = CurInvItem.Barcode.LotNo;
                         item.FIRST_IN_DATE = item.FIRST_IN_DATE <= DateTime.MinValue ? DateTime.Now : item.FIRST_IN_DATE;
                         item.PROD_DATE = item.PROD_DATE <= DateTime.MinValue ? item.FIRST_IN_DATE : item.PROD_DATE;
@@ -321,28 +324,25 @@
         /// </summary>
         /// <param name="order">棰嗘枡鍗曞彿</param>
         /// <param name="itemCode">鐗╂枡缂栫爜</param>
-        /// <param name="erpWH">鐗╂枡鐨凟RP搴撲綅</param>
-        /// <param name="whID">鐗╂枡鎵�鍦ㄧ殑浠撳簱缂栫爜</param>
-        /// <param name="regionID">鐗╂枡鎵�鍦ㄧ殑鍌ㄥ尯缂栫爜</param>
-        /// <param name="shelfID">鐗╂枡鎵�鍦ㄧ殑璐ф灦缂栫爜</param>
-        /// <param name="option">鎺堟潈鏌ヨ閫夐」</param>
+        /// <param name="option">澶囨枡鐗╂枡鎺ㄨ崘閫夐」</param>
+        /// <param name="auth">鎺堟潈鏌ヨ閫夐」</param>
         /// <param name="returnCount">杩斿洖鐨勬渶灏忓寘瑁呯墿鏂欎釜鏁帮紝榛樿杩斿洖1涓�</param>
         /// <returns></returns>
-        public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, int returnCount = 1)
+        public Result<List<SuggestItem>> Suggest(string order, string itemCode, SuggestOption option, AuthOption auth, int returnCount = 1)
         {
             var result = new Result<List<SuggestItem>>(Result.Flags.Success, new List<SuggestItem>()) { LocaleMsg = new("WMS.WmsItem.Suggest.Success") };
             try
             {
-                var items = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos(
+                var query = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos(
                                                                 JoinType.Left, q.SN == p.SN,
                                                                 JoinType.Left, q.WH_ID == w.ID,
                                                                 JoinType.Left, q.REGION_ID == r.ID,
                                                                 JoinType.Left, q.SHELF_ID == s.ID,
                                                                 JoinType.Left, q.LOCATION_ID == l.ID))
                                              //妫�鏌ョ敤鎴锋潈闄�
-                                             .ByAuth(option)
-                                            //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓殑鐗╂枡
-                                            .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order))
+                                             .ByAuth(auth)
+                                            //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓悓涓�涓崟鎹殑鐗╂枡
+                                            .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.TRANS_NO == order) || p.IS_LOCKED == "N")
                                             //鍙厑璁告湭閿佸畾鐨�
                                             .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N")
                                             //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨�
@@ -350,30 +350,32 @@
                                             //濡傛灉鏈変紶鍏ユ枡鍙凤紝鍒欏彧鍏佽鏂欏彿鐨勭墿鏂�
                                             .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode)
                                             //濡傛灉鏈変紶鍏ュ簱浣嶏紝鍒欏彧鍏佽搴撲綅涓殑鐗╂枡
-                                            .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg)
                                             //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂�
-                                            .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg)
                                             //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂�
-                                            .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.CurOrg)
                                             //濡傛灉鏈変紶鍏ヨ揣鏋讹紝鍒欏彧鍏佽璐ф灦鐨勭墿鏂�
-                                            .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.ShelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == option.ShelfID && q.AUTH_ORG == auth.CurOrg)
                                             //浼樺厛浣跨敤搴撳瓨姹犱腑鐨勭墿鏂�
-                                            .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID))
+                                            .OrderBy((q, p, w, r, s, l) => SqlFunc.IIF(SqlFunc.IsNullOrEmpty(p.ID), 1, 0))
                                             //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡)
-                                            .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T"))
-                                            //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛屾渶鍚庢寜鏉$爜鎺掑簭
-                                            .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN)
-                                            .Select((q, p, w, r, s, l) => new SuggestItem
-                                            {
-                                                Item = q,
-                                                poolItem = null,
-                                                Warehouse = w,
-                                                Region = r,
-                                                Shelf = s,
-                                                Location = l,
-                                            })
-                                            //妫�鏌ョ敤鎴锋潈闄�
-                                            .Take(returnCount).ToList();
+                                            //.OrderByDescending((q, p, w, r, s, l) => SqlFunc.IIF(q.SN.Contains("_C") || q.SN.Contains("_T"), 1, 0))
+                                            //澶囨枡绛栫暐锛氭寜鐢熶骇鏃ユ湡鍏堣繘鍏堝嚭
+                                            .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FIFO), (q, p, w, r, s, l) => q.PROD_DATE)
+                                            //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛�
+                                            .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FSFO), q => q.QTY)
+                                            //鏈�鍚庢寜鏉$爜鎺掑簭
+                                            .OrderBy(q => q.SN);
+                var items = query.Select((q, p, w, r, s, l) => new SuggestItem
+                                    {
+                                        Item = q,
+                                        poolItem = null,
+                                        Warehouse = w,
+                                        Region = r,
+                                        Shelf = s,
+                                        Location = l,
+                                    }).Take(returnCount).ToList();
                 //foreach (var item in items)
                 //{
                 //    var inv = Get(item.SN, option, false);
@@ -390,11 +392,11 @@
                     result.Flag = Result.Flags.Warning;
                     result.LocaleMsg = new("WMS.WmsItem.Suggest.Warning", total);
                 }
-                //if (total == 0)
-                //{
-                //    result.Flag = Result.Flags.Failed;
-                //    result.LocaleMsg = new("WMS.WmsItem.Suggest.Failed");
-                //}
+                if (total == 0)
+                {
+                    result.Flag = Result.Flags.Failed;
+                    result.LocaleMsg = new("WMS.WmsItem.Suggest.Failed");
+                }
             }
             catch (Exception ex)
             {
@@ -408,34 +410,25 @@
         /// </summary>
         /// <param name="order">棰嗘枡鍗曞彿</param>
         /// <param name="itemCode">鐗╂枡缂栫爜</param>
-        /// <param name="erpWH">鐗╂枡鐨凟RP搴撲綅</param>
-        /// <param name="whID">鐗╂枡鎵�鍦ㄧ殑浠撳簱缂栫爜</param>
-        /// <param name="regionID">鐗╂枡鎵�鍦ㄧ殑鍌ㄥ尯缂栫爜</param>
-        /// <param name="shelfID">鐗╂枡鎵�鍦ㄧ殑璐ф灦缂栫爜</param>
-        /// <param name="option">鎺堟潈鏌ヨ閫夐」</param>
+        /// <param name="option">澶囨枡鐗╂枡鎺ㄨ崘閫夐」</param>
+        /// <param name="auth">鎺堟潈鏌ヨ閫夐」</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, double reqQty)
+        public Result<List<SuggestItem>> Suggest(string order, string itemCode, SuggestOption option, AuthOption auth, 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 = 0.0;
-                var checkCount = 0;
-                do
-                {
-                    takeCount += 50;
-                    var check = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos(
+                var query = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos(
                                                                 JoinType.Left, q.SN == p.SN,
                                                                 JoinType.Left, q.WH_ID == w.ID,
                                                                 JoinType.Left, q.REGION_ID == r.ID,
                                                                 JoinType.Left, q.SHELF_ID == s.ID,
                                                                 JoinType.Left, q.LOCATION_ID == l.ID))
                                              //妫�鏌ョ敤鎴锋潈闄�
-                                             .ByAuth(option)
+                                             .ByAuth(auth)
                                             //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓殑鐗╂枡
-                                            .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order))
+                                            .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.TRANS_NO == order) || p.IS_LOCKED == "N")
                                             //鍙厑璁告湭閿佸畾鐨�
                                             .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N")
                                             //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨�
@@ -443,20 +436,30 @@
                                             //濡傛灉鏈変紶鍏ユ枡鍙凤紝鍒欏彧鍏佽鏂欏彿鐨勭墿鏂�
                                             .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode)
                                             //濡傛灉鏈変紶鍏ュ簱浣嶏紝鍒欏彧鍏佽搴撲綅涓殑鐗╂枡
-                                            .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg)
                                             //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂�
-                                            .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg)
                                             //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂�
-                                            .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.CurOrg)
                                             //濡傛灉鏈変紶鍏ヨ揣鏋讹紝鍒欏彧鍏佽璐ф灦鐨勭墿鏂�
-                                            .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg)
+                                            .WhereIF(!option.ShelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == option.ShelfID && q.AUTH_ORG == auth.CurOrg)
                                             //浼樺厛浣跨敤搴撳瓨姹犱腑鐨勭墿鏂�
-                                            .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID))
+                                            .OrderBy((q, p, w, r, s, l) => SqlFunc.IIF(SqlFunc.IsNullOrEmpty(p.ID), 1, 0))
                                             //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡)
-                                            .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T"))
-                                            //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛屾渶鍚庢寜鏉$爜鎺掑簭
-                                            .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN)
-                                            .Select((q, p, w, r, s, l) => new
+                                            //.OrderByDescending((q, p, w, r, s, l) => SqlFunc.IIF(q.SN.Contains("_C") || q.SN.Contains("_T"), 1, 0))
+                                            //澶囨枡绛栫暐锛氭寜鐢熶骇鏃ユ湡鍏堣繘鍏堝嚭
+                                            .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FIFO), (q, p, w, r, s, l) => q.PROD_DATE)
+                                            //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛�
+                                            .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FSFO), q => q.QTY)
+                                            //鏈�鍚庢寜鏉$爜鎺掑簭
+                                            .OrderBy(q => q.SN);
+                var takeCount = 0;
+                var checkSum = 0.0;
+                var checkCount = 0;
+                do
+                {
+                    takeCount += 50;
+                    var check = query.Select((q, p, w, r, s, l) => new
                                             {
                                                 ItemCode = q.ITEM_CODE,
                                                 Sn = q.SN,
@@ -482,37 +485,7 @@
                     }
                 } while (checkSum < reqQty && checkCount >= takeCount);
 
-                var items = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos(
-                                                                JoinType.Left, q.SN == p.SN,
-                                                                JoinType.Left, q.WH_ID == w.ID,
-                                                                JoinType.Left, q.REGION_ID == r.ID,
-                                                                JoinType.Left, q.SHELF_ID == s.ID,
-                                                                JoinType.Left, q.LOCATION_ID == l.ID))
-                                             //妫�鏌ョ敤鎴锋潈闄�
-                                             .ByAuth(option)
-                                            //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓殑鐗╂枡
-                                            .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order))
-                                            //鍙厑璁告湭閿佸畾鐨�
-                                            .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N")
-                                            //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨�
-                                            .Where((q, p, w, r, s, l) => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue())
-                                            //濡傛灉鏈変紶鍏ユ枡鍙凤紝鍒欏彧鍏佽鏂欏彿鐨勭墿鏂�
-                                            .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode)
-                                            //濡傛灉鏈変紶鍏ュ簱浣嶏紝鍒欏彧鍏佽搴撲綅涓殑鐗╂枡
-                                            .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg)
-                                            //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂�
-                                            .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg)
-                                            //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂�
-                                            .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg)
-                                            //濡傛灉鏈変紶鍏ヨ揣鏋讹紝鍒欏彧鍏佽璐ф灦鐨勭墿鏂�
-                                            .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg)
-                                            //浼樺厛浣跨敤搴撳瓨姹犱腑鐨勭墿鏂�
-                                            .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID))
-                                            //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡)
-                                            .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T"))
-                                            //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛屾渶鍚庢寜鏉$爜鎺掑簭
-                                            .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN)
-                                            .Select((q, p, w, r, s, l) => new SuggestItem
+                var items = query.Select((q, p, w, r, s, l) => new SuggestItem
                                             {
                                                 Item = q,
                                                 poolItem = null,
@@ -540,11 +513,12 @@
                     result.Flag = Result.Flags.Warning;
                     result.LocaleMsg = new("WMS.WmsItem.Suggest.Warning", totalQty);
                 }
-                //if (totalQty == 0)
-                //{
-                //    result.Flag = Result.Flags.Failed;
-                //    result.LocaleMsg = new("WMS.WmsItem.Suggest.Failed");
-                //}
+                if (totalQty == 0)
+                {
+                    result.Flag = Result.Flags.Failed;
+                    //result.LocaleMsg = new("鐗╂枡涓嬫灦鎺ㄨ崘澶辫触锛氬簱瀛樹腑鎵句笉鍒板彲浠ヤ笅鏋剁殑鐗╂枡");
+                    result.LocaleMsg = new("WMS.WmsItem.Suggest.Failed");
+                }
             }
             catch (Exception ex)
             {
@@ -647,6 +621,7 @@
             var result = new Result(Result.Flags.Success);
             try
             {
+                var newItems = new List<WMS_ITEM>();
                 foreach (var item in CurInvItem.Items)
                 {
                     var sn = snList.First(q => q.SN == item.SN);
@@ -689,7 +664,7 @@
                             META_SN = newItem.SN,
                         });
 
-                        CurInvItem.Items.Add(newItem);
+                        newItems.Add(newItem);
                         CurInvItem.History.Add(his);
                         CurInvItem.Packages.Add(newPkg);
                     }
@@ -712,6 +687,7 @@
                         CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{CurInvItem.SN}]浠庡偍浣峓{CurInvItem?.Location?.LOCATION_CODE}]鍙戞枡涓嬫灦鎴愬姛锛岀姸鎬乕{item.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()}]锛屾搷浣滃崟鎹甗{item.TRANS_NO}]"));
                     }
                 }
+                CurInvItem.Items.AddRange(newItems);
                 CurInvItem.Packages = WMS_ITEM_PKG.UpdateQty(CurInvItem.Packages);
 
                 //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊�
@@ -792,8 +768,49 @@
             action.Data.MqttMsg = msg;
             return action;
         }
+
+        /// <summary>
+        /// 璁剧疆褰撳墠鐗╂枡鐨勯粯璁ゅ偍浣�
+        /// </summary>
+        public ApiAction<ScanOutput> SetDefaultLocation(DbClient db, BAS_ITEM Item, WMS_LOCATION location, long RcvLineId)
+        {
+            var action = new ApiAction<ScanOutput>(new ScanOutput());
+
+            //璋冪敤璁剧疆榛樿鍌ㄤ綅鎺ュ彛
+            var iInput = new CreateRcvLineLocationInput
+            {
+                IsLogin = true,
+                RcvLineLocationParam = new()
+                {
+                    RcvLineId = RcvLineId,
+                    BinCode = location.LOCATION_CODE,
+                }
+            };
+            var result =  DI.Resolve<IWMS_U9C>().CreateRcvLineLocation(iInput).Result;
+            if (!result.IsSuccessed)
+            {
+                action.IsSuccessed = false;
+                action.LocaleMsg = result.LocaleMsg;
+            }
+            else
+            {
+                Item.DEFAULT_LOCATION = location.LOCATION_CODE;
+                db.Updateable(Item, UserCode).UpdateColumns(q => new { q.DEFAULT_LOCATION, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand();
+            }
+
+            return action;
+        }
         #endregion Functions
 
+        /// <summary>
+        /// 閲嶇疆鏈鎵爜淇℃伅
+        /// </summary>
+        public virtual void ResetScan()
+        {
+            //娓呯悊鏆傚瓨鏁版嵁鎻愪氦鎿嶄綔
+            DBCommitList.Clear();
+        }
+
         public override bool Close(bool needSaveHistoryLog = false)
         {
             //needSaveHistoryLog = true;

--
Gitblit v1.9.3