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/Transaction/Yada/In_BIZ_U9_RECEIPT.cs | 323 ++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 253 insertions(+), 70 deletions(-) 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 aa797e4..1a07c99 100644 --- a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs +++ b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs @@ -11,6 +11,8 @@ using Tiger.IBusiness; using Tiger.Model.Sharetronic.Shelf; using Tiger.Business.WMS.Sharetronic.Shelf; +using Tiger.Model.Entitys.MES.U9C; +using Tiger.Model.MES.Yada; namespace Tiger.Business.WMS.Transaction { @@ -19,15 +21,16 @@ /// </summary> public class In_BIZ_U9_RECEIPT : WmsTask, IIn_BIZ_U9_RECEIPT { + public IIn_BIZ_U9_RECEIPT Init(string id, string userCode, string apiHost, string orgCode) { - base.Init(id, apiHost, userCode, orgCode); + base.Init(id, userCode, apiHost, orgCode); Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); return this; } #region Propertys & Variables - + public BIZ_U9_RECEIPT CurOrder { get; set; } #endregion #region Functions @@ -39,33 +42,85 @@ var action = new ApiAction<ScanOutput>(new ScanOutput()); try { - if (input.SN.IsNullOrEmpty()) + if (input.Command == "ScanOrder") { - action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鏉$爜涓嶈兘涓虹┖"); - action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure"); - return SetOutPutMqttMsg(action, input.Locale); + var inputOrder = new BaseInput<BIZ_U9_RECEIPT>(input); + if (inputOrder.Data?.ORDER_NO == null) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("閫夋嫨鐨勫崟鍙蜂笉鑳戒负绌�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanOrder.OrderNoEmptyFailure"); + return SetOutPutMqttMsg(action, input.Locale); + } + action = await ScanOrder(inputOrder); } - //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋� - var whUnit = await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == input.SN || t.LOCATION_CODE.ToUpper() == input.SN) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync(); - //if (string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) - if (!whUnit.IsNullOrEmpty() || string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) + else { - action = await ScanShelf(input.SN, whUnit); - } - else//鎵弿鐗╂枡骞跺鏍� - { - action = await ScanItem(input); + if (CurOrder.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("涓婃灦鍓嶈鍏堥�夋嫨闇�瑕佷笂鏋剁殑鏀惰揣鍗�"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.NoScanOrder"); + action.Data.Command = "ScanOrder"; + return SetOutPutMqttMsg(action, input.Locale); + } + if (input.SN.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鏉$爜涓嶈兘涓虹┖"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure"); + return SetOutPutMqttMsg(action, input.Locale); + } + //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋� + var whUnit = await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == input.SN || t.LOCATION_CODE.ToUpper() == input.SN) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync(); + //if (string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) + if (!whUnit.IsNullOrEmpty() || string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) + { + action = await ScanShelf(input.SN, whUnit); + } + else//鎵弿鐗╂枡骞跺鏍� + { + action = await ScanItem(input); + } } } catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"鎵弿[{input.SN}]寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.Scan.ScanException", input.SN)); } return SetOutPutMqttMsg(action, input.Locale); + } + + /// <summary> + /// 鎵弿涓嬫灦鍗曟嵁鍙风爜 + /// </summary> + public async Task<ApiAction<ScanOutput>> ScanOrder(BaseInput<BIZ_U9_RECEIPT> input) + { + var action = new ApiAction<ScanOutput>(new ScanOutput()); + try + { + var receipt = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == input.Data.ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync(); + if (receipt.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鎵句笉鍒版敹璐у崟[{0}]鐨勪俊鎭紝璇烽噸鏂伴�夋嫨姝g‘鐨勬敹璐у崟"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanOrder.ReceiptNotExists", input.Data.ORDER_NO); + return SetOutPutMqttMsg(action, input.Locale); + } + action.Data.Command = "Normal"; + action.Data.Data = CurOrder = receipt; + } + catch (Exception ex) + { + //鍙栨秷褰撳墠鎿嶄綔 + ResetTrans(); + //action.CatchExceptionWithLog(ex, $"閫夋嫨鏀惰揣鍗曞紓甯�(Data: {0})"); + action.CatchExceptionWithLog(ex, Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanOrderException", input?.Data)); + } + return action; } /// <summary> @@ -79,14 +134,14 @@ if (CurInvItem.IsNullOrEmpty()) { //瑙f瀽鏉$爜 - Result<IInventory> result = WMS_ITEM_Biz.WmsItem.Get(input.SN, input.AuthOption, true); - if (!result.IsSuccessed) - { - action.IsSuccessed = false; - action.LocaleMsg = result.LocaleMsg; - return action; - } - var inv = result.Data as Inventory; + Result<IInventory> result = GetInventory(input.SN, input.AuthOption, true); + if (!result.IsSuccessed) + { + action.IsSuccessed = false; + action.LocaleMsg = result.LocaleMsg; + return SetOutPutMqttMsg(action, input.Locale); + } + var inv = result.Data as Inventory; //楠岃瘉鏉$爜鏄惁姝g‘ if (!inv.isNormalStatus || inv.Status != WMS_ITEM.STATUSs.WaitIn) @@ -94,7 +149,7 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', inv.StatusList.Select(q => q.GetDesc()))); - return action; + return SetOutPutMqttMsg(action, input.Locale); } //鐗╂枡楠岃瘉 if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N") @@ -102,34 +157,61 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); - return action; + return SetOutPutMqttMsg(action, input.Locale); + } + //榛樿鍌ㄤ綅楠岃瘉 + if (!inv.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty() && inv.ItemInfo.DEFAULT_LOCATION != CurScanShelf.LocationCode) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鐗╂枡[{0}]鍙厑璁镐笂鏋跺埌鍌ㄤ綅[{1}]锛岃閲嶆柊鎵弿鍌ㄤ綅"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.DefaultLocationError", inv.ItemInfo.ITEM_CODE, inv.ItemInfo.DEFAULT_LOCATION); + return SetOutPutMqttMsg(action, input.Locale); + } + //鍒ゆ柇褰撳墠鏉$爜鏄惁灞炰簬褰撳墠鏀惰揣鍗� + if (CurInvItem.Items.First().TRANS_NO != CurOrder.ORDER_NO) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鏉$爜鎵�灞炵殑鍗曟嵁[{0}]涓嶆槸閫夋嫨鐨勬敹璐у崟[{1}]锛岃閲嶆柊鎵弿姝g‘鐨勬潯鐮佹垨閫夋嫨鍏朵粬鏀惰揣鍗�"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.NotCurOrder", CurInvItem.Items.First().TRANS_NO, CurOrder.ORDER_NO); + return SetOutPutMqttMsg(action, input.Locale); } CurInvItem = inv; } - var receipt = await Biz.Db.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == CurInvItem.Items.First().TRANS_NO).IncludesAllFirstLayer().FirstAsync(); - if (receipt.IsNullOrEmpty()) - { - action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑鎵句笉鍒版潯鐮佹墍灞炵殑鍗曟嵁[{0}]淇℃伅锛岃閲嶆柊鎵弿鏀惰揣鍗曠殑鏉$爜鎴栭�夋嫨姝g‘鐨勫姛鑳戒笂鏋�"); - action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptNotExists", CurInvItem.Items.First().TRANS_NO); - return action; - } + var receipt = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == CurOrder.ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync(); var receiptDtl = receipt.Details.First(q => q.LINE_NO == CurInvItem.Items.First().TRANS_LINE); if (receiptDtl.STATUS > BIZ_U9_RECEIPT.STATUSs.Storing.GetValue()) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑琛孾{0}]鐘舵�乕{1}]寮傚父锛岃鎵弿姝g‘鐨勬潯鐮�"); action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.ReceiptDtlStatusException", receiptDtl.LINE_NO, receiptDtl.STATUS.GetEnumDesc<BIZ_U9_RECEIPT.STATUSs>()); - return action; + return SetOutPutMqttMsg(action, input.Locale); } - 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>()); - return action; + 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 SetOutPutMqttMsg(action, input.Locale); + } + //浠嶶9鑾峰彇鏀惰揣鍗曡淇℃伅 + var u9Dtl = Biz.DataSource["YadaU9C"].Client.Queryable<mes_ReturnedDocInfo>().Where(x => x.RcvId == receipt.ID.ToDouble() && x.DocLineNo == receiptDtl.LINE_NO.ToDouble() && x.SplitFlag != 1).First(); + //鏀惰揣鍗曠殑鐘舵�佸垽鏂槸鍚﹀凡鎻愪氦IQC瀹℃牳锛屾湭閫氳繃IQC涓嶈兘涓婃灦 + if (!u9Dtl.IsNullOrEmpty() && u9Dtl.Status != 3) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鏀惰揣鍗曡鐘舵�乕{0}]寮傚父锛岃鍏堟彁浜QC妫�楠岀粨鏋�"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.U9StatusException", u9Dtl.StatusName); + return SetOutPutMqttMsg(action, input.Locale); + } + if (!u9Dtl.IsNullOrEmpty() && u9Dtl.RcvQtyTU != receiptDtl.QTY_OK) + { + receiptDtl.ID = u9Dtl.RcvLineId.ToString(); + receiptDtl.QTY_OK = u9Dtl.RcvQtyTU; + receiptDtl.QTY_NG = receiptDtl.QTY - receiptDtl.QTY_OK; + receiptDtl.ERP_STATUS_CODE = u9Dtl.Status.ToString(); + receiptDtl.ERP_STATUS_NAME = u9Dtl.StatusName; } var nLocation = new WMS_LOCATION(); @@ -141,7 +223,7 @@ { action.IsSuccessed = false; action.LocaleMsg = Biz.L(shelfApiResult.GetData<string>()); - return action; + return SetOutPutMqttMsg(action, input.Locale); } var reaultShelf = shelfApiResult.GetData<ShelfChangeModel>(); @@ -151,7 +233,7 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"璐ф灦[{0}]涓笉瀛樺湪id涓篬{1}]鐨勫偍浣嶏紝璇峰厛缁存姢璐ф灦淇℃伅"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationNotExistsInShelf", CurScanShelf.Shelf.SHELF_CODE, reaultShelf.ledAddr); - return action; + return SetOutPutMqttMsg(action, input.Locale); } var locationData = MainDB.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == nLocation.ID).First(); if (!locationData.IsNullOrEmpty()) @@ -159,8 +241,9 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]宸插瓨鏈夌墿鏂橻{1}]锛岃妫�鏌ョ郴缁熷簱瀛樹俊鎭�"); action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", nLocation.LOCATION_CODE, locationData.SN); - return action; + return SetOutPutMqttMsg(action, input.Locale); } + CurScanShelf.Location = nLocation; CurScanShelf.LocationCode = nLocation.LOCATION_CODE; } else @@ -170,7 +253,7 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); - return action; + return SetOutPutMqttMsg(action, input.Locale); } nLocation = await MainDB.Queryable<WMS_LOCATION>().Where(t => t.LOCATION_CODE == CurScanShelf.LocationCode && t.AUTH_ORG == OrgCode).FirstAsync(); @@ -182,12 +265,26 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]鍙兘瀛樻斁涓�涓墿鏂�"); action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationSingleFailure", nLocation.LOCATION_CODE); - ResetScan(); - return action; + ResetTrans(); + return SetOutPutMqttMsg(action, input.Locale); } + + CurOrder = receipt; //鎵ц涓婃灦鏁版嵁澶勭悊 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; + item.TRANS_CODE = nameof(BIZ_U9_RECEIPT); + item.TRANS_NO = receipt.ORDER_NO; + item.TRANS_LINE = receiptDtl.LINE_NO; + item.PROD_DATE = item.PROD_DATE < new DateTime(2000, 1, 1) ? DateTime.Now : item.PROD_DATE; + item.FIRST_IN_DATE = item.FIRST_IN_DATE < new DateTime(2000, 1, 1) ? DateTime.Now : item.FIRST_IN_DATE; + } + foreach (var item in CurInvItem.Packages) { item.SOURCE_CODE = item.TRANS_CODE; item.SOURCE_ORDER = item.TRANS_NO; @@ -201,32 +298,62 @@ { action.IsSuccessed = false; action.LocaleMsg = putonResult.LocaleMsg; - ResetScan(); - return action; + ResetTrans(); + return SetOutPutMqttMsg(action, input.Locale); } //鏇存柊鍗曟嵁淇℃伅 - 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) + receiptDtl.QTY_IN = receipt.SnList.Where(q => q.LINE_NO == receiptDtl.LINE_NO && q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue()).Sum(q => q.QTY); + if (receiptDtl.QTY_IN == receiptDtl.QTY_OK) { receiptDtl.STATUS = BIZ_U9_RECEIPT.STATUSs.Review.GetValue(); - //褰撳墠鍗曟嵁鏄庣粏宸茬粡鍏ㄩ儴涓婃灦瀹屾垚锛屽彲浠ヨ皟鐢║9琛屽鎺ュ彛 + //褰撳墠鍗曟嵁鏄庣粏琛屽凡缁忓叏閮ㄤ笂鏋跺畬鎴愶紝鍙互璋冪敤U9琛屽鎺ュ彛锛屽鏋滆瀹″け璐ュ垯鎶ラ敊锛屾渶鍚庝竴涓笂鏋跺け璐� + var iInput = new SubmitLineInput + { + userId = UserCode, + IsLogin = true, + param = new() + { + RcvLineID = receiptDtl.ID, + RcvDocNo = receiptDtl.ORDER_NO, + DocLineNo = receiptDtl.LINE_NO, + OrgCode = receiptDtl.AUTH_ORG, + } + }; + var result = await DI.Resolve<IWMS_U9C>().ReceivementApproveLine(iInput); + if (!result.IsSuccessed) + { + action.IsSuccessed = false; + action.LocaleMsg = result.LocaleMsg; + return SetOutPutMqttMsg(action, input.Locale); + } + else + { + receiptDtl.STATUS = BIZ_U9_RECEIPT.STATUSs.Finished.GetValue(); + } } else { receiptDtl.STATUS = BIZ_U9_RECEIPT.STATUSs.Storing.GetValue(); } - var dtlStatus = receipt.Details.Select(q => q.STATUS).Distinct(); - if (dtlStatus.Count() == 1 && dtlStatus.First() == BIZ_U9_RECEIPT.STATUSs.Review.GetValue()) + //鏇存柊鍗曟嵁鐘舵�� + if (receipt.Details.Any(q => q.STATUS < BIZ_U9_RECEIPT.STATUSs.Review.GetValue())) + { + receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.Storing.GetValue(); + } + else if (receipt.Details.Any(q => q.STATUS < BIZ_U9_RECEIPT.STATUSs.Finished.GetValue())) { receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.Review.GetValue(); } else { - receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.Storing.GetValue(); + receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.Finished.GetValue(); } //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� @@ -237,21 +364,32 @@ var db = GetCommitDB(); //鏁版嵁淇濆瓨閫昏緫 db.Updateable(receipt, UserCode).UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); - db.Updateable(receiptDtl, UserCode).UpdateColumns(q => new { q.STATUS, q.QTY_IN, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + db.Updateable(receiptDtl, UserCode).UpdateColumns(q => new { q.ID, q.STATUS, q.QTY_IN, q.QTY_OK, q.QTY_NG, q.ERP_STATUS_CODE, q.ERP_STATUS_NAME, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); db.Updateable(receiptSn, UserCode).UpdateColumns(q => new { q.STATUS, q.IS_IN, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); }); //瀹屾垚鎵�鏈夊鐞嗗悗浣跨敤浜嬪姟淇濆瓨鏁版嵁 - action = DoIfFinish(action, input.Locale); + action = DoIfFinish(action, input.Locale, () => + { + //璁剧疆褰撳墠鐗╂枡鐨勯粯璁ゅ偍浣� + if (CurInvItem.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty()) + { + SetDefaultLocation(MainDB, CurInvItem.ItemInfo, nLocation); + } + }); + //if (!action.Data.Data.IsNullOrEmpty() && action.Data.Data is DefaultInStoreOutput) + //{ + // (action.Data.Data as DefaultInStoreOutput).OrderInfo = receipt; + //} } catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{input.SN}]澶嶆牳寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", input.SN)); } - return action; + return SetOutPutMqttMsg(action, input.Locale); } /// <summary> @@ -267,6 +405,13 @@ action.IsSuccessed = false; //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"); action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); + return action; + } + if (!CurOrder.Details.Any(q => q.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty() || q.ItemInfo.DEFAULT_LOCATION == Code)) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("褰撳墠鍌ㄤ綅[{0}]涓嶅湪鏀惰揣鍗曢渶瑕佷笂鏋剁殑鍌ㄤ綅鍒楄〃涓細{1}"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanShelf.NoContainLocation", Code, string.Join(", ", CurOrder.Details.Select(q => q.ItemInfo.DEFAULT_LOCATION))); return action; } @@ -338,7 +483,7 @@ catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"鎵弿璐ф灦/鍌ㄤ綅[{0}]寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanShelf.ScanException", Code)); } @@ -349,11 +494,16 @@ /// 瀹屾垚鎵�鏈夊鐞嗗悗浣跨敤浜嬪姟淇濆瓨鏁版嵁 /// </summary> /// <param name="action"></param> + /// <param name="locale"></param> + /// <param name="doAfterSave"></param> /// <returns></returns> - public ApiAction<ScanOutput> DoIfFinish(ApiAction<ScanOutput> action, string locale) + public ApiAction<ScanOutput> DoIfFinish(ApiAction<ScanOutput> action, string locale, Action doAfterSave = null) { //淇濆瓨鏁版嵁搴� SaveCommitListToDB(); + + //淇濆瓨鏁版嵁鎴愬姛鍚庢墽琛� + doAfterSave?.Invoke(); // 杩斿洖鏁版嵁 action.Data.Data = new DefaultInStoreOutput @@ -374,29 +524,62 @@ action.LocaleMsg = Biz.L("WMS.Default.ScanItem.PutOnSucceeded", CurInvItem.SN, CurInvItem.Location.LOCATION_CODE); //閲嶇疆宸ュ簭 - ResetScanInfo(); + ResetScan(); + return SetOutPutMqttMsg(action, locale); + } + + /// <summary> + /// 鑾峰彇闇�瑕佷笂鏋剁殑鏀惰揣鍗曞垪琛紙甯﹀垎椤碉級 + /// </summary> + /// <returns></returns> + public async Task<ApiAction<PageAble<BIZ_U9_RECEIPT>>> GetOrderList(BaseInputWithPage input) + { + var action = new ApiAction<PageAble<BIZ_U9_RECEIPT>>(); + var query = Biz.DataSource["YadaU9C"].Client.Queryable<mes_ReturnedDocInfo>().Where(q => q.Status == 3) + .WhereIF(!input.OrderNo.IsNullOrEmpty(), q => q.DocNo.Contains(input.OrderNo) || SqlFunc.Subqueryable<mes_AsnDocInfo>().Where(a => a.AsnId == q.SrcASNDocId && q.DocNo.Contains(input.OrderNo)).Any()) + .OrderBy(q => q.DocNo).Select(q => new { q.DocNo, q.Status, q.StatusName }).Distinct().ToList(); + + action.Data = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => query.Select(o => o.DocNo).Contains(q.ORDER_NO)).ToPageAsync(input.pageIndex, input.pageSize); + foreach (var order in action.Data.data) + { + order.ERP_STATUS_CODE = query.FirstOrDefault(q => q.DocNo == order.ORDER_NO)?.Status.ToString(); + order.ERP_STATUS_NAME = query.FirstOrDefault(q => q.DocNo == order.ORDER_NO)?.StatusName; + } + MainDB.Updateable(action.Data.data, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.ERP_STATUS_CODE, q.ERP_STATUS_NAME }).ExecuteCommand(); + return action; + } + + /// <summary> + /// 鑾峰彇褰撳墠鏀惰揣鍗曚俊鎭� + /// </summary> + /// <returns></returns> + public async Task<ApiAction<BIZ_U9_RECEIPT>> GetCurOrder() + { + var action = new ApiAction<BIZ_U9_RECEIPT>(); + action.Data = CurOrder; return action; } #endregion /// <summary> - /// 閲嶇疆褰撳墠鎿嶄綔锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� + /// 閲嶇疆浜嬪姟鏁版嵁锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� /// </summary> - public override void ResetScan() + public override void ResetTrans() { - base.ResetScan(); - ResetScanInfo(); + ResetScan(); CurScanShelf = null; + base.ResetTrans(); } /// <summary> - /// 閲嶇疆鎵爜淇℃伅 + /// 閲嶇疆鏈鎵爜淇℃伅 /// </summary> - public void ResetScanInfo() + public override void ResetScan() { - Command = null; + Command = "Normal"; CurInvItem = null; + base.ResetScan(); } public override bool Close(bool needSaveHistoryLog = false) -- Gitblit v1.9.3