From 9e5eb7707c9a42e2515a583b40078d2d7685e2d0 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期三, 19 三月 2025 00:51:42 +0800 Subject: [PATCH] 优化清点上架支持扫箱条码 --- Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs | 154 ++++++++++++++++++++++---------------- Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs | 52 ++++++++---- Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs | 14 ++- Tiger.Business.WMS/Common/Barcode/Barcode.cs | 20 ++-- 4 files changed, 141 insertions(+), 99 deletions(-) diff --git a/Tiger.Business.WMS/Common/Barcode/Barcode.cs b/Tiger.Business.WMS/Common/Barcode/Barcode.cs index 31c4935..1c07325 100644 --- a/Tiger.Business.WMS/Common/Barcode/Barcode.cs +++ b/Tiger.Business.WMS/Common/Barcode/Barcode.cs @@ -21,6 +21,16 @@ } /// <summary> + /// 璁剧疆鏉$爜鍒嗘瀽楠岃瘉瑙勫垯 + /// </summary> + public void SetAnalysisRule() + { + Analyses.Clear(); + Analyses.Add(new YadaBarcode()); + //Analyses.Add(new BarcodeAnalysis()); + } + + /// <summary> /// 鏉$爜锛堣В鏋愬悗鐨勬潯鐮侊級 /// </summary> private List<BarcodeAnalysis> Analyses { get; set; } = new(); @@ -237,16 +247,6 @@ SubsidiaryMaterial, [Description("鍘熸潗鏂�")] RawMaterial, - } - - /// <summary> - /// 璁剧疆鏉$爜鍒嗘瀽楠岃瘉瑙勫垯 - /// </summary> - public void SetAnalysisRule() - { - Analyses.Clear(); - Analyses.Add(new YadaBarcode()); - //Analyses.Add(new BarcodeAnalysis()); } /// <summary> diff --git a/Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs b/Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs index 37979fa..d15c8d2 100644 --- a/Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs +++ b/Tiger.Business.WMS/Common/Barcode/BarcodeAnalysis.Yada.cs @@ -30,74 +30,96 @@ if (!string.IsNullOrEmpty(Barcode.MetaSn)) { string[] parts = (Barcode.MetaSn ?? "").Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); - //鏀惰揣鏉$爜锛歒DASN241200964/10/12010102.0011.00/ASN241200964/1 - //鏉傛敹鏉$爜锛歒DZS241200607/10/10150102.2226.00/ASN24120012750/0001 - //瑙勫垯锛氬崟鍙�/琛屽彿/鏂欏彿/鎵瑰彿/娴佹按鍙� - if (parts.Length == 5)// && (Barcode.MetaSn.StartsWith("ASN") || Barcode.MetaSn.StartsWith("YDZS") || Barcode.MetaSn.StartsWith("YDASN"))) + //绠辨潯鐮� + if (Barcode.MetaSn.StartsWith("Carton/")) { - Barcode.OrderNo = parts[0]; - Barcode.OrderLine = parts[1]; - Barcode.ItemCode = parts[2]; - Barcode.LotNo = parts[3]; - Barcode.SerialNoStr = parts[4]; - Barcode.Type = Types.MiniPackage; - Barcode.ItemType = ItemTypes.RawMaterial; - - result.Flag = Result.Flags.Success; - } - //璋冨叆鏉$爜锛�101/YDDR241200924/10/13060306.0008.00/ASN24090127310/0001 - //褰㈡�佽浆鎹㈡潯鐮侊細101/YDZH231000028/10/32020101.0005.00/23001034/0001 - //瑙勫垯锛氱粍缁�/鍗曞彿/琛屽彿/鏂欏彿/鎵瑰彿/娴佹按鍙� - if (parts.Length == 6)// && (Barcode.MetaSn.StartsWith("YDDR") || Barcode.MetaSn.StartsWith("YDZH"))) + //鏀惰揣绠辨潯鐮侊細Carton/YDASN241000433/10/17010505.0064.00/ASN241000433/13957 + //瑙勫垯锛欳arton/鍗曞彿/琛屽彿/鏂欏彿/鎵瑰彿/娴佹按鍙� + if (parts.Length == 6) + { + Barcode.OrderNo = parts[1]; + Barcode.OrderLine = parts[2]; + Barcode.ItemCode = parts[3]; + Barcode.LotNo = parts[4]; + Barcode.SerialNoStr = parts[5]; + Barcode.Type = Types.OuterPackage; + Barcode.ItemType = ItemTypes.RawMaterial; + + result.Flag = Result.Flags.Success; + } + } + //鍏朵粬鏉$爜 + else { - Barcode.Organization = parts[0]; - Barcode.OrderNo = parts[1]; - Barcode.OrderLine = parts[2]; - Barcode.ItemCode = parts[3]; - Barcode.LotNo = parts[4]; - Barcode.SerialNoStr = parts[5]; - Barcode.Type = Types.MiniPackage; - Barcode.ItemType = ItemTypes.RawMaterial; - - result.Flag = Result.Flags.Success; - } - //鏀惰揣鍗曪細YDRC240801351/10/10030202.0013.02/7/ - //瑙勫垯锛氬崟鍙�/琛屽彿/鏂欏彿/娴佹按鍙�/ - if (parts.Length == 4 && parts[2].Contains(".")) - { - Barcode.OrderNo = parts[0]; - Barcode.OrderLine = parts[1]; - Barcode.ItemCode = parts[2]; - Barcode.SerialNoStr = parts[3]; - Barcode.Type = Types.MiniPackage; - Barcode.ItemType = ItemTypes.RawMaterial; - - result.Flag = Result.Flags.Success; - } - //鏈熷垵搴撳瓨鏉$爜琛ユ墦锛�10150102.0655.00/108444-1-230/168A05/10101/ - //瑙勫垯锛氭枡鍙�/鎵瑰彿/搴撲綅/瀛樺偍鍦扮偣/ - if (parts.Length == 4 && parts[0].Contains(".")) - { - Barcode.ItemCode = parts[0]; - Barcode.LotNo = parts[1]; - Barcode.Location = parts[2]; - Barcode.Warehouse = parts[3]; - Barcode.Type = Types.MiniPackage; - Barcode.ItemType = ItemTypes.RawMaterial; - - result.Flag = Result.Flags.Success; - } - //鏈熷垵鏉$爜锛�10150102.0655.00/108444-1-230207/000001 - //瑙勫垯锛氭枡鍙�/鎵瑰彿/娴佹按鍙� - if (parts.Length == 3) - { - Barcode.ItemCode = parts[0]; - Barcode.LotNo = parts[1]; - Barcode.SerialNoStr = parts[2]; - Barcode.Type = Types.MiniPackage; - Barcode.ItemType = ItemTypes.RawMaterial; - - result.Flag = Result.Flags.Success; + //鏀惰揣鏉$爜锛歒DASN241200964/10/12010102.0011.00/ASN241200964/1 + //鏉傛敹鏉$爜锛歒DZS241200607/10/10150102.2226.00/ASN24120012750/0001 + //瑙勫垯锛氬崟鍙�/琛屽彿/鏂欏彿/鎵瑰彿/娴佹按鍙� + if (parts.Length == 5)// && (Barcode.MetaSn.StartsWith("ASN") || Barcode.MetaSn.StartsWith("YDZS") || Barcode.MetaSn.StartsWith("YDASN"))) + { + Barcode.OrderNo = parts[0]; + Barcode.OrderLine = parts[1]; + Barcode.ItemCode = parts[2]; + Barcode.LotNo = parts[3]; + Barcode.SerialNoStr = parts[4]; + Barcode.Type = Types.MiniPackage; + Barcode.ItemType = ItemTypes.RawMaterial; + + result.Flag = Result.Flags.Success; + } + //璋冨叆鏉$爜锛�101/YDDR241200924/10/13060306.0008.00/ASN24090127310/0001 + //褰㈡�佽浆鎹㈡潯鐮侊細101/YDZH231000028/10/32020101.0005.00/23001034/0001 + //瑙勫垯锛氱粍缁�/鍗曞彿/琛屽彿/鏂欏彿/鎵瑰彿/娴佹按鍙� + if (parts.Length == 6)// && (Barcode.MetaSn.StartsWith("YDDR") || Barcode.MetaSn.StartsWith("YDZH"))) + { + Barcode.Organization = parts[0]; + Barcode.OrderNo = parts[1]; + Barcode.OrderLine = parts[2]; + Barcode.ItemCode = parts[3]; + Barcode.LotNo = parts[4]; + Barcode.SerialNoStr = parts[5]; + Barcode.Type = Types.MiniPackage; + Barcode.ItemType = ItemTypes.RawMaterial; + + result.Flag = Result.Flags.Success; + } + //鏀惰揣鍗曪細YDRC240801351/10/10030202.0013.02/7/ + //瑙勫垯锛氬崟鍙�/琛屽彿/鏂欏彿/娴佹按鍙�/ + if (parts.Length == 4 && parts[2].Contains(".")) + { + Barcode.OrderNo = parts[0]; + Barcode.OrderLine = parts[1]; + Barcode.ItemCode = parts[2]; + Barcode.SerialNoStr = parts[3]; + Barcode.Type = Types.MiniPackage; + Barcode.ItemType = ItemTypes.RawMaterial; + + result.Flag = Result.Flags.Success; + } + //鏈熷垵搴撳瓨鏉$爜琛ユ墦锛�10150102.0655.00/108444-1-230/168A05/10101/ + //瑙勫垯锛氭枡鍙�/鎵瑰彿/搴撲綅/瀛樺偍鍦扮偣/ + if (parts.Length == 4 && parts[0].Contains(".")) + { + Barcode.ItemCode = parts[0]; + Barcode.LotNo = parts[1]; + Barcode.Location = parts[2]; + Barcode.Warehouse = parts[3]; + Barcode.Type = Types.MiniPackage; + Barcode.ItemType = ItemTypes.RawMaterial; + + result.Flag = Result.Flags.Success; + } + //鏈熷垵鏉$爜锛�10150102.0655.00/108444-1-230207/000001 + //瑙勫垯锛氭枡鍙�/鎵瑰彿/娴佹按鍙� + if (parts.Length == 3) + { + Barcode.ItemCode = parts[0]; + Barcode.LotNo = parts[1]; + Barcode.SerialNoStr = parts[2]; + Barcode.Type = Types.MiniPackage; + Barcode.ItemType = ItemTypes.RawMaterial; + + result.Flag = Result.Flags.Success; + } } } diff --git a/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs b/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs index f41ef28..bf58099 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs @@ -33,7 +33,7 @@ #region Propertys & Variables //private List<WmsOrder<BIZ_U9_ASN>> _OrderList { get; set; } = new(); private List<string> OrderList = new(); - private BIZ_U9_ASN_SN CurSn = new(); + private List<BIZ_U9_ASN_SN> CurSn = new(); private List<BIZ_U9_ASN_SN> ScanList = new(); #endregion @@ -100,8 +100,20 @@ action.LocaleMsg = Biz.L("WMS.WmsItem.Barcode.IllegalFailure", input.SN); return action; } - CurSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.SN == barcode.SN).First(); + if (barcode.Type == Barcode.Types.OuterPackage) + { + CurSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.CARTON_NO == barcode.SN).ToList(); + } + else + { + CurSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.SN == barcode.SN).ToList(); + foreach (var sn in CurSn) + { + sn.META_SN = input.SN; + } + } + if (CurSn.IsNullOrEmpty()) { action.IsSuccessed = false; @@ -109,22 +121,22 @@ action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.SnNotExists", input.SN); return action; } - if (CurSn.AUTH_ORG != input.AuthOption.CurOrg) + if (CurSn.First().AUTH_ORG != input.AuthOption.CurOrg) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"鏉$爜鎵�灞炵粍缁嘯{0}]涓庡綋鍓嶇櫥褰曠粍缁嘯{1}]涓嶄竴鑷达紝璇烽噸鏂伴�夋嫨缁勭粐"); - action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.OrgNotCorrect", CurSn.AUTH_ORG, input.AuthOption.CurOrg); + action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.OrgNotCorrect", CurSn.First().AUTH_ORG, input.AuthOption.CurOrg); return action; } //楠岃瘉鏉$爜鏄惁姝g‘ - if (CurSn.STATUS > WMS_ITEM.STATUSs.Incoming.GetValue()) + if (CurSn.First().STATUS > WMS_ITEM.STATUSs.Incoming.GetValue()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"); - action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", CurSn.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", CurSn.First().STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()); return action; } - CurSn.META_SN = input.SN; + Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(barcode.SN, input.AuthOption, true); if (!result.IsSuccessed) @@ -258,20 +270,24 @@ } //鎵ц娓呯偣鏁版嵁澶勭悊 - CurSn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); - CurSn.QTY = CurInvItem.Items.Sum(q => q.QTY); - CurSn.RECEIVER = UserCode; - CurSn.RECEIVE_DATE = DateTime.Now; + foreach (var sn in CurSn) + { + sn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); + sn.QTY = CurInvItem.Items.Where(q => q.SN == sn.SN).Sum(q => q.QTY); + sn.RECEIVER = UserCode; + sn.RECEIVE_DATE = DateTime.Now; + } foreach (var item in CurInvItem.Items) { - item.AUTH_ORG = CurSn.AUTH_ORG; + var sn = CurSn.First(q => q.SN == item.SN); + item.AUTH_ORG = sn.AUTH_ORG; item.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); item.SOURCE_CODE = item.TRANS_CODE; item.SOURCE_ORDER = item.TRANS_NO; item.SOURCE_LINE = item.TRANS_LINE; item.TRANS_CODE = nameof(BIZ_U9_ASN); - item.TRANS_NO = CurSn.ORDER_NO; - item.TRANS_LINE = CurSn.LINE_NO; + item.TRANS_NO = sn.ORDER_NO; + item.TRANS_LINE = sn.LINE_NO; CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{CurInvItem.SN}]娓呯偣瀹屾垚锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); } @@ -295,7 +311,7 @@ db.Storageable(_Packages, UserCode).ToStorage().AsInsertable.ExecuteCommand(); db.Insertable(_History, UserCode).ExecuteCommand(); var e = db.Storageable(_ItemsExt, UserCode).ToStorage().AsInsertable.ExecuteCommand();//涓嶅瓨鍦ㄦ彃鍏� - db.Updateable<BIZ_U9_ASN>(UserCode).SetColumns(q => q.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue()).Where(q => q.ORDER_NO == _CurSn.ORDER_NO).ExecuteCommand(); + db.Updateable<BIZ_U9_ASN>(UserCode).SetColumns(q => q.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue()).Where(q => q.ORDER_NO == _CurSn.First().ORDER_NO).ExecuteCommand(); db.Storageable(_CurSn, UserCode).ExecuteCommand(); }); @@ -322,11 +338,11 @@ //淇濆瓨鏁版嵁搴� SaveCommitListToDB(); - if (!OrderList.Contains(CurSn.ORDER_NO)) + if (!OrderList.Contains(CurSn.First().ORDER_NO)) { - OrderList.Add(CurSn.ORDER_NO); + OrderList.Add(CurSn.First().ORDER_NO); } - ScanList.Add(CurSn); + ScanList.AddRange(CurSn); // 杩斿洖鏁版嵁 action.Data.Data = ScanList; diff --git a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs index 135ed8c..b2f19b1 100644 --- a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs +++ b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs @@ -123,12 +123,12 @@ action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptDtlStatusException", receiptDtl.LINE_NO, receiptDtl.STATUS.GetEnumDesc<BIZ_U9_RECEIPT.STATUSs>()); return action; } - var receiptSn = receipt.SnList.First(q => q.SN == CurInvItem.SN); - if (receiptSn.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue()) + var receiptSn = receipt.SnList.Where(q => CurInvItem.Items.Any(i => i.SN == q.SN)).ToList(); + if (receiptSn.Any(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue())) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑鏉$爜[{0}]鐘舵�乕{1}]寮傚父锛岃鎵弿姝g‘鐨勬潯鐮�"); - action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptSnStatusException", receiptSn.SN, receiptSn.STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptSnStatusException", CurInvItem.SN, receiptSn.First(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue()).STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()); return action; } @@ -189,6 +189,7 @@ //鎵ц涓婃灦鏁版嵁澶勭悊 foreach (var item in CurInvItem.Items) { + item.IS_LOCKED = "Y"; item.SOURCE_CODE = item.TRANS_CODE; item.SOURCE_ORDER = item.TRANS_NO; item.SOURCE_LINE = item.TRANS_LINE; @@ -206,8 +207,11 @@ } //鏇存柊鍗曟嵁淇℃伅 - receiptSn.STATUS = WMS_ITEM.STATUSs.InStore.GetValue(); - receiptSn.IS_IN = "Y"; + foreach(var sn in receiptSn) + { + sn.STATUS = WMS_ITEM.STATUSs.InStore.GetValue(); + sn.IS_IN = "Y"; + } //濡傛灉褰撳墠琛屼笂鏋跺畬鎴愭爣璁颁负寰呭鏍� receiptDtl.QTY_IN = receipt.SnList.Where(q => q.LINE_NO == receiptDtl.LINE_NO).Sum(q => q.QTY); if (receiptDtl.QTY_IN == receiptDtl.QTY) -- Gitblit v1.9.3