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/Transaction/Yada/Count_BIZ_U9_ASN.cs | 235 ++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 162 insertions(+), 73 deletions(-) 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 775502d..bf58099 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs @@ -9,17 +9,10 @@ using System.Threading.Tasks; using Tiger.Model; using Tiger.IBusiness; -using Tiger.Model.Sharetronic.Shelf; -using Tiger.Business.WMS.Sharetronic.Shelf; using Tiger.Model.MES.Yada; -using static IronPython.SQLite.PythonSQLite; -using static Community.CsharpSqlite.Sqlite3; -using Tiger.Model.Entitys.MES.Position; -using MailKit.Search; -using static IronPython.Modules._ast; using Tiger.Model.Entitys.MES.U9C; using System.Security.Policy; -using Org.BouncyCastle.Asn1.X509; +using Tiger.Model.Entitys.MES.Position; namespace Tiger.Business.WMS.Transaction { @@ -30,7 +23,7 @@ { public ICount_BIZ_U9_ASN Init(string id, string userCode, string apiHost, string orgCode) { - base.Init(id, apiHost, userCode, orgCode); + base.Init(id, userCode, apiHost, orgCode); //鍔犺浇宸茬粡娓呯偣鏁版嵁 LoadData(); Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); @@ -40,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 @@ -50,8 +43,7 @@ /// </summary> private void LoadData() { - var orders = MainDB.Queryable<BIZ_U9_ASN>().Where(q => ("," + q.RECEIVER + ",").Contains("," + UserCode + ",")).ToList(); - OrderList = orders.Select(q => q.ORDER_NO).ToList(); + OrderList = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.RECEIVER == UserCode && SqlFunc.Subqueryable<BIZ_U9_ASN>().Where(s => s.ORDER_NO == q.ORDER_NO && s.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue()).Any()).Select(q => q.ORDER_NO).ToList(); } /// <summary> /// 鎵弿鍏ュ彛 @@ -108,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; @@ -117,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) @@ -148,7 +152,7 @@ { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�"); - action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", (inv.ItemInfo?.ITEM_CODE).IsNullOrEmpty(inv.Barcode.ItemCode)); return action; } @@ -164,8 +168,7 @@ AUTH_ORG = input.AuthOption.CurOrg, STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(), QTY = inv.Barcode.Qty.ToDouble(), - PROD_DATE = inv.Barcode.DateCode.ToDateTime(), - ERP_WH = CurScanShelf.WarehouseCode, + PROD_DATE = (inv.Barcode.DateCode?? DateTime.Now.ToString("yyyy-MM-dd")).ToDateTime(), UNIT = inv.Barcode.Unit, }; @@ -175,7 +178,6 @@ AUTH_ORG = input.AuthOption.CurOrg, ITEM_CODE = inv.Barcode.ItemCode, QTY = inv.Barcode.Qty.ToDouble(), - ERP_WH = CurScanShelf.WarehouseCode, UNIT = inv.Barcode.Unit, }; @@ -210,12 +212,12 @@ { foreach (var item in inv.Items) { - item.ERP_WH = CurScanShelf.WarehouseCode; + item.ERP_WH = ""; item.AUTH_ORG = input.AuthOption.CurOrg; } foreach (var item in inv.Packages) { - item.ERP_WH = CurScanShelf.WarehouseCode; + item.ERP_WH = ""; item.AUTH_ORG = input.AuthOption.CurOrg; } } @@ -229,6 +231,7 @@ { var item = CurInvItem.Items.First(q => q.SN == qty.Code); item.QTY = qty.WhQty; + item.SUPP_LOTNO = qty.Segment7; //渚涘簲鍟嗘壒娆″彿 } action.Data.Data = CurInvItem.Items.Select(q => new { q.SN, q.QTY }); action.Data.Command = Command = "ComfirmQty"; @@ -267,18 +270,24 @@ } //鎵ц娓呯偣鏁版嵁澶勭悊 - CurSn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); - CurSn.QTY = CurInvItem.Items.Sum(q => q.QTY); - foreach (var item in CurInvItem.Items) + 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}]")); } @@ -302,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(); }); @@ -329,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; @@ -358,6 +367,8 @@ foreach (var sn in ScanList) { sn.STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(); + sn.RECEIVER = null; + sn.RECEIVE_DATE = DateTime.MinValue; } var historys = new List<WMS_ITEM_HIS>(); @@ -366,12 +377,12 @@ { var order = item.TRANS_CODE; item.STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(); - item.TRANS_CODE = item.SOURCE_CODE; - item.TRANS_NO = item.SOURCE_ORDER; - item.TRANS_LINE = item.SOURCE_LINE; item.SOURCE_CODE = ""; item.SOURCE_ORDER = ""; item.SOURCE_LINE = ""; + item.TRANS_CODE = item.SOURCE_CODE; + item.TRANS_NO = item.SOURCE_ORDER; + item.TRANS_LINE = item.SOURCE_LINE; historys.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙栨秷娓呯偣锛屾搷浣滃崟鎹甗{order}]")); } @@ -414,18 +425,21 @@ var item = await Biz.Db.Queryable<WMS_ITEM>().Where(q => q.SN == input.SN).FirstAsync(); var order = item.TRANS_CODE; item.STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(); - item.TRANS_CODE = item.SOURCE_CODE; - item.TRANS_NO = item.SOURCE_ORDER; - item.TRANS_LINE = item.SOURCE_LINE; item.SOURCE_CODE = ""; item.SOURCE_ORDER = ""; item.SOURCE_LINE = ""; + item.TRANS_CODE = item.SOURCE_CODE; + item.TRANS_NO = item.SOURCE_ORDER; + item.TRANS_LINE = item.SOURCE_LINE; + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 var db = GetCommitDB(); var dbTran = db.UseTran(() => { db.Updateable<BIZ_U9_ASN_SN>(UserCode).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Incoming.GetValue()) - .Where(q => q.SN == input.SN).ExecuteCommand(); + .SetColumns(q => q.RECEIVER == null) + .SetColumns(q => q.RECEIVE_DATE == DateTime.MinValue) + .Where(q => q.SN == input.SN).ExecuteCommand(); db.Updateable(item, UserCode).ExecuteCommand(); db.Insertable(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙栨秷娓呯偣锛屾搷浣滃崟鎹甗{order}]"), UserCode).ExecuteCommand(); }); @@ -452,25 +466,29 @@ /// 鑾峰彇鏈宸叉竻鐐圭殑鐗╂枡鍒楄〃锛堝甫鍒嗛〉锛� /// </summary> /// <returns></returns> - public async Task<PageAble<BIZ_U9_ASN_SN>> GetScannedList() + public async Task<ApiAction<PageAble<BIZ_U9_ASN_SN>>> GetScannedList(BaseInputWithPage input) { - return await Task.FromResult(new PageAble<BIZ_U9_ASN_SN>() - { - data = ScanList, - totals = ScanList.Count(), - }); - } + var action = new ApiAction<PageAble<BIZ_U9_ASN_SN>>(); + action.Data = new PageAble<BIZ_U9_ASN_SN>(); + action.Data.pageSize = input.pageSize; + action.Data.pageIndex = input.pageIndex; + action.Data.totals = ScanList.Count; + action.Data.data = ScanList.Skip((input.pageIndex - 1) * input.pageSize).Take(input.pageSize).ToList(); + //action.Data = query; + return action; + } - /// <summary> - /// 鑾峰彇褰撳墠鎵�鏈夊崟鎹俊鎭� - /// </summary> - /// <returns></returns> - public async Task<List<BIZ_U9_ASN>> GetOrderList() + /// <summary> + /// 鑾峰彇褰撳墠鎵�鏈夊崟鎹俊鎭� + /// </summary> + /// <returns></returns> + public async Task<ApiAction<List<BIZ_U9_ASN>>> GetOrderList() { - var Orders = await Biz.Db.Queryable<BIZ_U9_ASN>().Where(q => OrderList.Contains(q.ORDER_NO)).IncludesAllFirstLayer().ToListAsync(); - if (!Orders.IsNullOrEmpty()) + var action = new ApiAction<List<BIZ_U9_ASN>>(); + action.Data = await Biz.Db.Queryable<BIZ_U9_ASN>().Where(q => OrderList.Contains(q.ORDER_NO)).IncludesAllFirstLayer().ToListAsync(); + if (!action.Data.IsNullOrEmpty()) { - foreach (var order in Orders) + foreach (var order in action.Data) { foreach (var dtl in order.Details) { @@ -479,14 +497,14 @@ } } } - return Orders; + return action; } - /// <summary> - /// 璁剧疆鏀惰揣鍗曟槑缁嗚禒鍝佹暟閲� - /// </summary> - /// <returns></returns> - public async Task<ApiAction> SetGiftQty(BaseInput input) + /// <summary> + /// 鐢熸垚鏀惰揣鍗曪細璋冪敤U9鏂板鏀惰揣鍗曟帴鍙� + /// </summary> + /// <returns></returns> + public async Task<ApiAction> SetGiftQty(BaseInput input) { var action = new ApiAction(); try @@ -523,7 +541,7 @@ var orderNo = input.Data; try { - var order = await Biz.Db.Queryable<BIZ_U9_ASN>().Where(q => q.ORDER_NO == orderNo).IncludesAllFirstLayer().FirstAsync(); + var order = await MainDB.Queryable<BIZ_U9_ASN>().Where(q => q.ORDER_NO == orderNo).IncludesAllFirstLayer().FirstAsync(); if (order.IsNullOrEmpty()) { action.IsSuccessed = false; @@ -559,7 +577,7 @@ aSNToRcvTransDTOs = order.Details.Select(q => new ASNToRcvTransDTO { ASNLineKey = q.ID, TransQty = new() { m_amount1 = q.QTY + q.QTY_GIFT } }).ToList(), } }; - var result = await DI.Resolve<WMS_U9C>().CreateRcvBySrcASN(iInput); + var result = await DI.Resolve<IWMS_U9C>().CreateRcvBySrcASN(iInput); if (!result.IsSuccessed) { action.IsSuccessed = false; @@ -569,30 +587,101 @@ //鏍规嵁鎺ュ彛杩斿洖鏀惰揣鍗曞崟鍙锋煡璇㈠崟鎹槑缁嗭紝骞跺垱寤烘潯鐮佹槑缁� var receipt = new BIZ_U9_RECEIPT(); - throw new NotImplementedException(); + receipt.Details = new(); + receipt.SnList = new(); + DbClient U9Cdb = Biz.DataSource["YadaU9C"].Client; + var list = U9Cdb.Queryable<mes_ReturnedDocInfo>().Where(x => x.RcvId == result.Data[0].ID.ToDouble() && x.DocNo == result.Data[0].Code).ToList(); + + if (list != null && list.Count > 0) + { + receipt.ID = list.First().RcvId.ToString(); + receipt.AUTH_ORG = order.AUTH_ORG; + receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.InQC.GetValue(); + receipt.ORDER_NO = list.First().DocNo; + receipt.SUPP_CODE = list.First().SupplierCode; + receipt.SUPP_NAME = list.First().SupplierName; + receipt.RECEIVER = UserCode; + receipt.RECEIVE_DATE = DateTime.Now; + receipt.ASN_ID = order.ID; + receipt.ASN_NO = order.ORDER_NO; + receipt.ORDER_DATE = list.First().ModifiedOn; + receipt.HANDLED = 0; + receipt.HANDLED_DATE = DateTime.Now; + + foreach (var item in list) + { + var asnDtl = order.Details.First(q => q.ID == item.SrcASNDocLineId.ToString()); + BIZ_U9_RECEIPT_DTL receiptDt = new() + { + ID = item.RcvLineId.ToString(), + AUTH_ORG = receipt.AUTH_ORG, + STATUS = BIZ_U9_RECEIPT.STATUSs.InQC.GetValue(), + ORDER_NO = item.DocNo, + LINE_NO = item.DocLineNo.ToString(), + ITEM_CODE = item.ItemCode, + QTY = item.RtnFillQtyTU.ToDouble(), // mes鍗曟嵁鏁伴噺 --U9閫�琛ユ暟閲� + QTY_GIFT = asnDtl.QTY_GIFT, + ASN_ID = item.SrcASNDocId.ToString(), + ASN_NO =asnDtl.ORDER_NO, + ASN_LINE_ID = item.SrcASNDocLineId.ToString(), + ASN_LINE = asnDtl.LINE_NO, + ERP_CODE = item.ItemCode1, + }; + receipt.Details.Add(receiptDt); + } + + foreach (var sn in order.SnList) + { + var dtl = receipt.Details.First(q => q.ASN_LINE == sn.LINE_NO); + BIZ_U9_RECEIPT_SN receiptSn = new() + { + AUTH_ORG = dtl.AUTH_ORG, + ORDER_NO = dtl.ORDER_NO, + LINE_NO = dtl.LINE_NO, + SN = sn.SN, + META_SN = sn.META_SN, + ITEM_CODE = sn.ITEM_CODE, + STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(), + QTY = sn.QTY, + UNIT = sn.UNIT, + IS_OK = sn.IS_OK, + IS_IN = sn.IS_IN, + LOTNO = sn.LOTNO, + CARTON_NO = sn.CARTON_NO, + PALLET_NO = sn.PALLET_NO, + }; + receipt.SnList.Add(receiptSn); + } + } //鏇存柊搴撳瓨琛ㄤ俊鎭� - var items = Biz.Db.Queryable<WMS_ITEM>().Where(q => SqlFunc.Subqueryable<BIZ_U9_ASN_SN>().Where(s => s.SN == q.SN && s.ORDER_NO == order.ORDER_NO).Any()).ToList(); + var items = MainDB.Queryable<WMS_ITEM>().Where(q => SqlFunc.Subqueryable<BIZ_U9_ASN_SN>().Where(s => s.SN == q.SN && s.ORDER_NO == order.ORDER_NO).Any()).ToList(); var historys = new List<WMS_ITEM_HIS>(); foreach (var item in items) { item.STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(); - item.TRANS_CODE = nameof(BIZ_U9_RECEIPT); - item.TRANS_NO = receipt.ORDER_NO; - item.TRANS_LINE = receipt.SnList.First(q => q.SN == item.SN).LINE_NO; item.SOURCE_CODE = item.TRANS_CODE; item.SOURCE_ORDER = item.TRANS_NO; item.SOURCE_LINE = item.TRANS_LINE; + item.TRANS_CODE = nameof(BIZ_U9_RECEIPT); + item.TRANS_NO = receipt.ORDER_NO; + item.TRANS_LINE = receipt.SnList.First(q => q.SN == item.SN).LINE_NO; historys.Add(new WMS_ITEM_HIS(item, $"閫佽揣鍗昜{order.ORDER_NO}]鐨勬潯鐮乕{item.SN}]鐢熸垚鏀惰揣鍗昜{receipt.ORDER_NO}]锛屽緟妫�楠屽畬鎴愬悗鍙叆搴�")); } + order.STATUS = BIZ_U9_ASN.STATUSs.Finished.GetValue(); + order.RECEIVER_ID = receipt.ID; + order.RECEIVER_NO = receipt.ORDER_NO; + order.RECEIVER = UserCode; + order.RECEIVE_DATE = DateTime.Now; - //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 - var db = GetCommitDB(); + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); var dbTran = db.UseTran(() => { - db.Updateable(items, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.TRANS_CODE, q.TRANS_NO, q.TRANS_LINE, q.SOURCE_CODE, q.SOURCE_ORDER, q.SOURCE_LINE }).ExecuteCommandAsync(); + db.Updateable(items, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.TRANS_CODE, q.TRANS_NO, q.TRANS_LINE, q.SOURCE_CODE, q.SOURCE_ORDER, q.SOURCE_LINE }).ExecuteCommand(); db.Insertable(historys, UserCode).ExecuteCommand(); - db.Insertable(receipt, UserCode).ExecuteCommand(); + db.Updateable(order, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.RECEIVER, q.RECEIVE_DATE, q.RECEIVER_ID, q.RECEIVER_NO }).ExecuteCommand(); + db.Insertable(receipt, UserCode).ExecuteCommand(); db.Insertable(receipt.Details, UserCode).ExecuteCommand(); db.Insertable(receipt.SnList, UserCode).ExecuteCommand(); }); -- Gitblit v1.9.3