From 3ab68d4877acffcb9677ecf369e15210e5db6981 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期一, 28 四月 2025 17:03:08 +0800 Subject: [PATCH] 一些更改 --- Tiger.Business.WMS/Common/WmsTask.cs | 471 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 468 insertions(+), 3 deletions(-) diff --git a/Tiger.Business.WMS/Common/WmsTask.cs b/Tiger.Business.WMS/Common/WmsTask.cs index 6a0045c..3b052c8 100644 --- a/Tiger.Business.WMS/Common/WmsTask.cs +++ b/Tiger.Business.WMS/Common/WmsTask.cs @@ -1,4 +1,6 @@ -锘縰sing Rhea.Common; +锘縰sing Microsoft.Extensions.Options; +using Rhea.Common; +using SqlSugar; using System; using System.Collections.Generic; using System.Linq; @@ -7,6 +9,8 @@ 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 { @@ -127,6 +131,116 @@ } /// <summary> + /// 鑾峰彇鏉$爜搴撳瓨淇℃伅锛屽寘鎷粨搴擄紝鍌ㄥ尯锛岃揣鏋讹紝鍌ㄤ綅锛岀埗鏉$爜锛屽寘瑁呮槑缁嗙瓑 + /// </summary> + /// <param name="sn">鏌ヨ鐨勬潯鐮�</param> + /// <param name="option">鎺堟潈鏌ヨ閫夐」</param> + /// <param name="doUnPack">鏄惁鍚屾椂鎵ц鎷嗗寘鎿嶄綔锛岃В闄や笌鐖舵潯鐮佷箣闂寸殑鍖呰鍏崇郴</param> + /// <returns></returns> + public Result<IInventory> GetInventory(string sn, AuthOption option, bool doUnPack) + { + var result = new Result<IInventory>(Result.Flags.Success); + try + { + var inv = new Inventory(); + Barcode barcode = new Barcode(sn); + if (sn.IsNullOrEmpty()) + { + result.Flag = Result.Flags.Failed; + result.LocaleMsg = new("WMS.WmsItem.Barcode.EmptyFailure"); + } + else if (barcode.IsException) + { + throw barcode.AnalyseException; + } + //闈炴硶鏉$爜 + else if (!barcode.IsRegular) + { + result.Flag = Result.Flags.Failed; + result.LocaleMsg = new("WMS.WmsItem.Barcode.IllegalFailure"); + } + //else if (barcode.Qty <= 0) + //{ + // result.Flag = Result.Flags.Failed; + // result.LocaleMsg = new("鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紝璇锋鏌ヤ簩缁寸爜锛�"); + //} + else + { + var query = Biz.Db.Queryable<WMS_ITEM_PKG>().ByAuth(option).Where(q => q.SN == barcode.SN).IncludesAllFirstLayer().First(); + //var query = Biz.Db.Queryable<WMS_ITEM_PKG>().Where(q => q.SN == barcode.SN).IncludesAllFirstLayer().First();//.ByAuth(option) + + //鍖呰琛ㄤ腑鎵惧埌鏉$爜 + if (!query.IsNullOrEmpty())// && query.QTY > 0) + { + inv.SN = barcode.SN; + inv.Barcode = barcode; + inv.ExtInfo = query.ExtInfo; + inv.ItemInfo = query.ItemInfo; + inv.Warehouse = query.Warehouse; + inv.Region = query.Region; + inv.Shelf = query.Shelf; + inv.Location = query.Location; + 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(); + if (data.Count > 0) + { + foreach (var item in data) + { + inv.ItemsExt.Add(new() + { + SN = item.SN, + META_SN = barcode.MetaSn, + QR_CODE = barcode.MetaSn + }); + } + } + result.LocaleMsg = new($"WMS.WmsItem.Barcode.Get{(doUnPack ? "UnPack" : "")}Success", barcode.SN, query.Parent?.SN); + if (!query.Parent.IsNullOrEmpty() && doUnPack && query.Parent.SN != query.SN) + { + inv.ParentPkg = null; + //淇濆瓨鏁版嵁鍒版暟鎹簱 + var db = Biz.Db; + var dbTran = db.UseTran(() => + { + var unPackQty = inv.Items.Sum(q => q.QTY); + db.Updateable<WMS_ITEM_PKG>().SetColumns(q => q.PARENT_SN == null).Where(q => q.ID == query.ID).ExecuteCommand(); + db.Updateable<WMS_ITEM_PKG>().SetColumns(q => q.QTY == q.QTY - unPackQty).Where(q => q.ID == query.Parent.ID).ExecuteCommand(); + if (!Biz.Db.Queryable<WMS_ITEM_PKG>().Any(q => q.PARENT_SN == query.PARENT_SN && q.SN != query.SN)) + { + db.Deleteable(query.Parent); + } + }); + if (!dbTran.IsSuccess) + { + throw dbTran.ErrorException; + } + } + else + { + inv.ParentPkg = query.Parent; + } + } + else + { + inv.SN = barcode.SN; + inv.Barcode = barcode; + inv.ItemInfo = Biz.Db.Queryable<BAS_ITEM>().Where(q => q.ITEM_CODE == barcode.ItemCode).First(); + result.LocaleMsg = new($"WMS.WmsItem.Barcode.NotFound", barcode.SN); + } + } + result.Data = inv; + } + catch (Exception ex) + { + result.CatchExceptionWithLog(ex, Biz.L("WMS.WmsItem.Barcode.GetException", sn)); + } + return result; + } + + /// <summary> /// 涓婃灦 /// </summary> /// <param name="inventory">瑕佷笂鏋剁殑搴撳瓨瀵硅薄</param> @@ -146,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; @@ -205,6 +320,213 @@ } /// <summary> + /// 涓嬫灦鐗╂枡鎺ㄨ崘锛岃繑鍥炲浐瀹氫釜鏁扮殑鏈�灏忓寘瑁呯墿鏂欏簱瀛樺垪琛� + /// </summary> + /// <param name="order">棰嗘枡鍗曞彿</param> + /// <param name="itemCode">鐗╂枡缂栫爜</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, 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 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(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") + //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨� + .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(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg) + //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂� + .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg) + //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂� + .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.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)) + //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡) + //.OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) + //澶囨枡绛栫暐锛氭寜鐢熶骇鏃ユ湡鍏堣繘鍏堝嚭 + .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); + // if (inv.IsSuccessed) + // { + // result.Data.Add(inv.Data); + // } + //} + result.Data = items; + var totalQty = result.Data.Sum(q => q.Item.QTY); + var total = result.Data.Count; + if (0 <= total && total < returnCount) + { + 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"); + //} + } + catch (Exception ex) + { + result.CatchExceptionWithLog(ex, Biz.L("WMS.WmsItem.Suggest.Exception")); + } + return result; + } + + /// <summary> + /// 涓嬫灦鐗╂枡鎺ㄨ崘锛屾寜闇�姹傛暟閲忚繑鍥炴弧瓒抽渶姹傜殑鐗╂枡搴撳瓨鍒楄〃 + /// </summary> + /// <param name="order">棰嗘枡鍗曞彿</param> + /// <param name="itemCode">鐗╂枡缂栫爜</param> + /// <param name="option">澶囨枡鐗╂枡鎺ㄨ崘閫夐」</param> + /// <param name="auth">鎺堟潈鏌ヨ閫夐」</param> + /// <param name="reqQty">闇�姹傛暟閲忥紝浼氳繑鍥炴弧瓒抽渶姹傜殑鐗╂枡涓暟</param> + /// <returns></returns> + 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 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(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") + //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨� + .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(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg) + //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂� + .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg) + //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂� + .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.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)) + //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡) + //.OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) + //澶囨枡绛栫暐锛氭寜鐢熶骇鏃ユ湡鍏堣繘鍏堝嚭 + .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, + Qty = q.QTY + }) + .Take(takeCount) + .MergeTable() + .GroupBy(t => t.ItemCode) + .Select(t => new + { + Count = SqlFunc.AggregateCount(t.Sn), + Sum = SqlFunc.AggregateSum(t.Qty), + }).First(); + if (!check.IsNullOrEmpty()) + { + checkSum = check.Sum; + checkCount = check.Count; + } + else + { + checkSum = 0; + checkCount = 0; + } + } while (checkSum < reqQty && checkCount >= takeCount); + + 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(takeCount).ToList(); + var curQty = 0.0; + foreach (var item in items) + { + result.Data.Add(item); + curQty += item.Item.QTY; + if (curQty >= reqQty) + { + break; + } + } + + var totalQty = result.Data.Sum(q => q.Item.QTY); + var total = result.Data.Count; + if (0 <= totalQty && totalQty < reqQty) + { + 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"); + //} + } + catch (Exception ex) + { + result.CatchExceptionWithLog(ex, Biz.L("WMS.WmsItem.Suggest.Exception")); + } + return result; + } + + /// <summary> /// 涓嬫灦 /// </summary> /// <param name="option">鎺堟潈鏌ヨ閫夐」</param> @@ -219,11 +541,9 @@ /// <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 TakeDown(Dictionary<string, double> qtyList, AuthOption option, WMS_ITEM.STATUSs status) { @@ -247,6 +567,8 @@ else { item.STATUS = status.GetValue(); + item.CARTON_NO = null; + item.PALLET_NO = null; var pkg = CurInvItem.Packages.First(q => q.SN == item.SN); pkg.PARENT_SN = null; pkg.Parent = null; @@ -277,6 +599,108 @@ db.Updateable(_Items, UserCode).ExecuteCommand(); db.Insertable(_History, UserCode).ExecuteCommand(); db.Updateable(_Packages, UserCode).ExecuteCommand(); + }); + } + catch (Exception ex) + { + result.CatchExceptionWithLog(ex, Biz.L("WMS.WmsItem.TakeDown.Exception", CurInvItem.SN, CurInvItem?.Location?.LOCATION_CODE)); + } + return result; + } + + /// <summary> + /// 澶囨枡涓嬫灦 + /// </summary> + /// <param name="qtyList">瑕佷笅鏋剁殑鏈�灏忓寘瑁呮暟閲忓瓧鍏革紝key锛歴n锛寁alue锛歲ty</param> + /// <param name="option">鎺堟潈鏌ヨ閫夐」</param> + /// <param name="status">涓嬫灦鍚庣姸鎬�</param> + /// <returns></returns> + public Result TakeDown(List<BIZ_WMS_PREP_SN> snList, AuthOption option, WMS_ITEM.STATUSs status) + { + var result = new Result(Result.Flags.Success); + try + { + foreach (var item in CurInvItem.Items) + { + var sn = snList.First(q => q.SN == item.SN); + var pkg = CurInvItem.Packages.First(q => q.SN == item.SN); + //鍓嶇杩斿洖Y璁や负鏄埅鏂欏彂鏂欙紝N璁や负鏄暣鐩樺彂鏂� + if (sn.QTY > sn.QTY_DLVY && sn.NEED_CUTTING == "Y") + { + CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鎴枡鍙戞枡锛屾埅鏂欏彂鍑烘潯鐮乕{sn.DeliverySN}]鏁伴噺[{sn.QTY_DLVY}]锛屼繚鐣欏湪搴撴潯鐮乕{sn.ReserveSN}]鏁伴噺[{sn.QTY - sn.QTY_DLVY}]锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + + item.SN = sn.ReserveSN; + item.QTY = sn.QTY - sn.QTY_DLVY; + pkg.SN = sn.ReserveSN; + pkg.QTY = sn.QTY - sn.QTY_DLVY; + CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鎴枡鍙戞枡鍚庝繚鐣欏湪搴擄紝鍘熸潯鐮乕{sn.SN}]鏁伴噺[{sn.QTY}]锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + + //鍒涘缓鎴枡鍙戝嚭鐨勭墿鏂欎俊鎭� + var newItem = item.Clone(); + newItem.ID = Guid.NewGuid().ToString(); + newItem.SN = sn.DeliverySN; + newItem.STATUS = status.GetValue(); + newItem.QTY = sn.QTY_DLVY; + newItem.CARTON_NO = null; + newItem.PALLET_NO = null; + newItem.REGION_ID = null; + newItem.SHELF_ID = null; + newItem.LOCATION_ID = null; + WMS_ITEM_HIS his = new(newItem, $"鏉$爜[{newItem.SN}]浠庡偍浣峓{CurInvItem?.Location?.LOCATION_CODE}]鎴枡鍙戞枡鎴愬姛锛屽彂鍑烘暟閲廩{newItem.QTY}]锛岀姸鎬乕{newItem.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()}]锛屽師鏉$爜[{sn.SN}]鏁伴噺[{sn.QTY}]锛屾搷浣滃崟鎹甗{item.TRANS_NO}]"); + + var newPkg = pkg.Clone(); + newPkg.ID = Guid.NewGuid().ToString(); + newPkg.PARENT_SN = null; + newPkg.Parent = null; + newPkg.REGION_ID = null; + newPkg.SHELF_ID = null; + newPkg.LOCATION_ID = null; + + CurInvItem.ItemsExt.Add(new() + { + SN = newItem.SN, + META_SN = newItem.SN, + }); + + CurInvItem.Items.Add(newItem); + CurInvItem.History.Add(his); + CurInvItem.Packages.Add(newPkg); + } + else + { + item.STATUS = status.GetValue(); + item.CARTON_NO = null; + item.PALLET_NO = null; + pkg.PARENT_SN = null; + pkg.Parent = null; + //濡傛灉涓嬫灦鏁伴噺绛変簬搴撳瓨鏁伴噺鍒欐竻鐞嗗偍鍖鸿揣鏋跺偍浣嶄俊鎭紝鍚﹀垯淇濈暀浠撳簱淇℃伅 + //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; + CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{CurInvItem.SN}]浠庡偍浣峓{CurInvItem?.Location?.LOCATION_CODE}]鍙戞枡涓嬫灦鎴愬姛锛岀姸鎬乕{item.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()}]锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + } + } + CurInvItem.Packages = WMS_ITEM_PKG.UpdateQty(CurInvItem.Packages); + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _Items = CurInvItem.Items.Clone(); + var _Packages = CurInvItem.Packages.Clone(); + var _History = CurInvItem.History.Clone(); + var _ItemsExt = CurInvItem.ItemsExt.Clone(); + AddCommitAction("TakeDown", () => + { + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + //鏁版嵁淇濆瓨閫昏緫 + db.Storageable(_Items, UserCode).ExecuteCommand(); + db.Insertable(_History, UserCode).ExecuteCommand(); + db.Storageable(_Packages, UserCode).ExecuteCommand(); + db.Storageable(_ItemsExt, UserCode).ToStorage().AsInsertable.ExecuteCommand(); }); } catch (Exception ex) @@ -341,8 +765,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