From 531f16f2f15bf792e3e719e00abb57a95356dedd Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期一, 21 四月 2025 12:04:15 +0800 Subject: [PATCH] Merge branch 'master' of http://47.115.28.255:8110/r/TigerClouds-Tech/Server/TigerApi6_2024 --- Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs | 719 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 532 insertions(+), 187 deletions(-) diff --git a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs index 75a0eb3..243c7dc 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs @@ -9,11 +9,11 @@ using System.Threading.Tasks; using Tiger.Model; using Tiger.IBusiness; -using Tiger.Model.Sharetronic.Shelf; -using Tiger.Business.WMS.Sharetronic.Shelf; -using Tiger.Model.Entitys.MES.U9C; using Tiger.Business.WMS.Common; -using Tiger.Model.Base; +using Org.BouncyCastle.Ocsp; +using Tiger.Model.Sharetronic.Shelf; +using MailKit.Search; +using Tiger.Business.WMS.Extensions; namespace Tiger.Business.WMS.Transaction { @@ -31,7 +31,14 @@ } #region Propertys & Variables - private Preparation CurPREP; + public Preparation CurPREP { get; set; } + private List<BIZ_WMS_PREP_SN> CurSn = new(); + private BIZ_WMS_PREP_DTL CurPrepDtl = new(); + public List<SuggestItem> Suggests { get; set; } = new(); + public List<WMS_ITEM_POOL> CurPoolList => Suggests.Where(q => !q.poolItem.IsNullOrEmpty()).Select(q => q.poolItem).ToList(); + public List<WMS_LOCATION> LocationHis { get; set; } = new(); + private bool isExceed = false; + private bool isNeedCut = false; #endregion #region Functions @@ -48,8 +55,32 @@ { action = await ScanOrder(input); } + else if (input.Command == "SelectItem") + { + action = await SelectItem(input); + } + else if (input.Command == "ConfirmExceed") + { + action = await ConfirmExceed(input); + } else { + if (CurPREP.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("澶囨枡鍓嶈鍏堥�夋嫨闇�瑕佸鏂欑殑鍗曟嵁"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NotScanOrder"); + action.Data.Command = "ScanOrder"; + return SetOutPutMqttMsg(action, input.Locale); + } + if (CurPrepDtl.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("澶囨枡鍓嶈鍏堥�夋嫨闇�瑕佸鏂欑殑鐗╂枡琛�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NotSelectItem"); + action.Data.Command = "SelectItem"; + return SetOutPutMqttMsg(action, input.Locale); + } if (input.SN.IsNullOrEmpty()) { action.IsSuccessed = false; @@ -57,14 +88,7 @@ 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); } @@ -73,7 +97,7 @@ catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"鎵弿[{input.SN}]寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.Scan.ScanException", input.SN)); } @@ -96,30 +120,263 @@ action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanOrder.InputOrderIsNull"); return action; } - if (!CurPREP.PrepOrder.IsNullOrEmpty() && inputOrder.BIZ_TYPE != CurPREP.PrepOrder.BIZ_TYPE) + if (!CurPREP.Order.IsNullOrEmpty() && inputOrder.BIZ_TYPE != CurPREP.Order.BIZ_TYPE) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L($"褰撳墠澶囨枡浠诲姟[{0}]鐨勪笟鍔$被鍨嬩负{1}锛屽闇�鍒囨崲澶囨枡涓氬姟锛岃閫�鍑哄悗閲嶆柊閫夋嫨"); - action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanOrder.BizTypeError", CurPREP.PrepOrder.ORDER_NO, CurPREP.PrepOrder.BIZ_TYPE.GetEnumDesc<BIZ_WMS_PREP.BIZ_TYPEs>()); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanOrder.BizTypeError", CurPREP.Order.ORDER_NO, CurPREP.Order.BIZ_TYPE.GetEnumDesc<BIZ_WMS_PREP.BIZ_TYPEs>()); return action; } - if (CurPREP.PrepOrder.IsNullOrEmpty() || !CurPREP.PrepOrder.SourceOrders.Any(q => q.SOURCE_ORDER == inputOrder.SOURCE_ORDER)) + if (CurPREP.Order.IsNullOrEmpty() || !CurPREP.Order.SourceOrders.Any(q => q.SOURCE_ORDER == inputOrder.SOURCE_ORDER)) { action = CurPREP.AddOrder(inputOrder.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>(), inputOrder.SOURCE_CODE); } else { //action.LocaleMsg = Biz.L($"褰撳墠澶囨枡浠诲姟[{0}]宸插寘鍚崟鎹甗{1}]锛屾棤闇�閲嶅鎿嶄綔"); - action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanOrder.Repeat", CurPREP.PrepOrder.ORDER_NO, inputOrder.SOURCE_ORDER); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanOrder.Repeat", CurPREP.Order.ORDER_NO, inputOrder.SOURCE_ORDER); } + action.Data.Command = "SelectItem"; + action.Data.Data = CurPREP.Order; } catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"澶囨枡浠诲姟鎵弿鍗曟嵁寮傚父(Data: {0})"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Out_BIZ_WMS_PREP.ScanOrderException", input?.Data)); + } + return action; + } + + /// <summary> + /// 鑾峰彇褰撳墠澶囨枡鐨勫鏂欎换鍔′俊鎭� + /// </summary> + /// <returns></returns> + public async Task<ApiAction<BIZ_WMS_PREP>> GetPrepInfo() + { + var action = new ApiAction<BIZ_WMS_PREP>(); + CurPREP.Order = MainDB.Queryable<BIZ_WMS_PREP>().Where(q => q.ID == CurPREP.Order.ID).IncludesAllFirstLayer().First(); + + action.Data = CurPREP.Order; + return action; + } + + /// <summary> + /// 閫夋嫨澶囨枡浠诲姟涓涓嬫灦鐗╂枡琛� + /// </summary> + public async Task<ApiAction<ScanOutput>> SelectItem(BaseInput input) + { + var action = new ApiAction<ScanOutput>(new ScanOutput()); + try + { + var inputDtl = input?.Data?.JsonToObject<BIZ_WMS_PREP_DTL>(); + var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == inputDtl.ID).First(); + if (prepDtl.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("澶囨枡鍓嶈鍏堥�夋嫨闇�瑕佸鏂欑殑鐗╂枡琛�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NotSelectItem"); + return action; + } + if (prepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(prepDtl)) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("褰撳墠閫夋嫨鐗╂枡琛孾{0}]宸插鏂欐暟閲廩{1}]锛屼互婊¤冻瀹為檯闇�姹傛暟閲廩{2}]锛屾棤闇�缁х画澶囨枡"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.SelectItem.PrepFinish", prepDtl.ITEM_CODE, prepDtl.QTY_PREP, CurPREP.BizType.GetActReqQty(prepDtl)); + return action; + } + //鍒犻櫎鐗╂枡姹犱腑涓婁竴娆″垎閰嶇殑鐗╂枡 + MainDB.Deleteable<WMS_ITEM_POOL>().Where(q => q.TRANS_NO == prepDtl.ORDER_NO && q.TRANS_LINE == prepDtl.ORDER_LINE).ExecuteCommand(); + if (!CurPrepDtl.IsNullOrEmpty()) + { + MainDB.Deleteable<WMS_ITEM_POOL>().Where(q => q.TRANS_NO == CurPrepDtl.ORDER_NO && q.TRANS_LINE == CurPrepDtl.ORDER_LINE).ExecuteCommand(); + } + CurPrepDtl = prepDtl; + + //濡傛灉涓婁竴娆℃帹鑽愭湁鏁版嵁锛屽垯鍏堢伃鎺変寒鐨勭伅 + if (Suggests.Any()) + { + //await CloseLight(LocationHis); + } + + //濡傛灉鏄濂楀彂鏂欙紝鍒欏彧鎺ㄨ崘褰撳墠鐗╂枡琛岀殑涓�鐩樼墿鏂� + if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.First.GetValue()) + { + //鎺ㄨ崘鐗╂枡 + Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, 1); + action.LocaleMsg = result.LocaleMsg; + if (result.IsException) + { + action.IsSuccessed = false; + return action; + } + + Suggests.Clear(); + Suggests = result.Data; + if (Suggests.Count > 0) + { + var inv = Suggests.First(); + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + if (inv != null && actQty > 0) + { + inv.poolItem = inv.Item.GetPoolItem(OrgCode, nameof(CurPREP.Order), CurPrepDtl.ORDER_NO, CurPrepDtl.ORDER_LINE, actQty, true); + } + else + { + inv.poolItem = null; + } + } + Suggests.RemoveAll(q => q.poolItem.IsNullOrEmpty()); + } + + //濡傛灉鏄甯稿彂鏂欙紝鍒欐寜瀹為檯闇�姹傛暟閲忔帹鑽愬綋鍓嶇墿鏂欒鐨勬墍鏈夌墿鏂� + if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue()) + { + //鎺ㄨ崘鐗╂枡 + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, actQty); + action.LocaleMsg = result.LocaleMsg; + if (result.IsException) + { + action.IsSuccessed = false; + return action; + } + + Suggests.Clear(); + var remain = actQty; + Suggests.ForEach((inv) => + { + if (remain > 0) + { + inv.poolItem = inv.Item.GetPoolItem(input.AuthOption.OrgCode, nameof(CurPREP.Order), CurPrepDtl.ORDER_NO, CurPrepDtl.ORDER_LINE, remain, false); + remain -= inv.poolItem.ALLOC_QTY; + } + else + { + inv.poolItem = null; + } + }); + Suggests.RemoveAll(q => q.poolItem.IsNullOrEmpty()); + } + + //淇濆瓨鐗╂枡姹犲埌鏁版嵁搴� + MainDB.Insertable(CurPoolList).ExecuteCommand(); + CurPrepDtl.Suggests = Suggests; + + //action = await LightAll(new() { AuthOption = input.AuthOption, Color = LedColor.Blue }); + + action.Data.Command = "Normal"; + action.Data.Data = CurPrepDtl; + //action.LocaleMsg = Biz.L($"宸查�夋嫨瑕佸鏂欑墿鏂欒[{0}锛屽彲浠ュ紑濮嬪鏂欎笅鏋�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.SelectItem.Success", CurPrepDtl.ITEM_CODE); + } + catch (Exception ex) + { + //鍙栨秷褰撳墠鎿嶄綔 + ResetTrans(); + //action.CatchExceptionWithLog(ex, $"澶囨枡浠诲姟閫夋嫨瑕佺墿鏂欒寮傚父(Data: {0})"); + action.CatchExceptionWithLog(ex, Biz.L("WMS.Out_BIZ_WMS_PREP.SelectItemException", input?.Data)); + } + return action; + } + + /// <summary> + /// 鑾峰彇褰撳墠澶囨枡鐨勭墿鏂欒淇℃伅 + /// </summary> + /// <returns></returns> + public async Task<ApiAction<BIZ_WMS_PREP_DTL>> GetCurPrepItem() + { + var action = new ApiAction<BIZ_WMS_PREP_DTL>(); + var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == CurPrepDtl.ID).First(); + prepDtl.ERP_WH = CurPrepDtl.ERP_WH; + prepDtl.WH_ID = CurPrepDtl.WH_ID; + prepDtl.REGION_ID = CurPrepDtl.REGION_ID; + prepDtl.SHELF_ID = CurPrepDtl.SHELF_ID; + prepDtl.Suggests = Suggests; + CurPrepDtl = prepDtl; + CurPREP.Order.Details.RemoveAll(q => q.ID == CurPrepDtl.ID); + CurPREP.Order.Details.Add(CurPrepDtl); + action.Data = CurPrepDtl; + return action; + } + + /// <summary> + /// 棰嗘枡鍗曟帹鑽愭墍鏈夌墿鏂欎寒鐏� + /// </summary> + /// <param name="light"></param> + /// <returns></returns> + public async Task<ApiAction<ScanOutput>> LightAll(LightEntityInput light) + { + var action = new ApiAction<ScanOutput>(); + try + { + var list = Suggests.WhereIF(!light.ItemCode.IsNullOrEmpty(), q => q.Item.ITEM_CODE == light.ItemCode); + if (list.Any()) + { + list = list.Where(q => q.Shelf.SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.Smart.GetValue() || q.Shelf.SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.QRCode.GetValue()); + if (list.Any()) + { + list = list.Where(q => q.poolItem.STATUS < WMS_ITEM_POOL.STATUSs.WaitSend.GetValue()); + if (list.Any()) + { + var locs = list.Select(x => x.Location.AddShelf(x.Shelf)).ToList(); + LocationHis.AddRange(locs); + //浜伅鍓嶅厛鐏竴閬� + foreach (var shelf in list.Select(q => q.Shelf)) + { + await Share.Shelf.DownAll(shelf); + } + await Share.Shelf.LightMulti(TransID, light.Color, locs); + action.LocaleMsg = Biz.L("浜伅鎴愬姛锛屼寒鐏鑹瞇{0}]", light.Color.GetDesc()); + } + else + { + action.LocaleMsg = Biz.L($"鏃犻渶浜伅锛屾帹鑽愮殑鐗╂枡宸插叏閮ㄤ笅鏋�"); + } + } + else + { + action.LocaleMsg = Biz.L($"鏃犻渶浜伅锛屾帹鑽愮殑鐗╂枡涓嶅湪鏅鸿兘璐ф灦涓�"); + } + } + else + { + action.IsSuccessed = false; + action.LocaleMsg = Biz.L($"浜伅澶辫触锛屾湭鎵惧埌鎺ㄨ崘涓嬫灦鐨勭墿鏂�"); + } + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"浜伅寮傚父"); + } + return action; + } + + /// <summary> + /// 鐏伅 + /// </summary> + /// <returns></returns> + public async Task<ApiAction> CloseLight(List<WMS_LOCATION> locations = null) + { + var action = new ApiAction(); + try + { + if (locations != null) + { + foreach (var shelf in locations.Select(q => q.Shelf)) + { + await Share.Shelf.DownAll(shelf); + } + } + //鐏伅 + await Share.Shelf.DownMulti(TransID, locations.IsNullOrEmpty(Suggests.Where(q => q.Shelf.SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.Smart.GetValue() || q.Shelf.SHELF_TYPE == WMS_SHELF.SHELF_TYPEs.QRCode.GetValue()) + .Select(x => x.Location).ToList())); + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鐏伅寮傚父"); } return action; } @@ -132,195 +389,264 @@ var action = new ApiAction<ScanOutput>(new ScanOutput() { Command = Command }); try { - 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 SetOutPutMqttMsg(action, input.Locale); - } - var inv = result.Data as Inventory; - - //楠岃瘉鏉$爜鏄惁姝g‘ - if (!inv.isNormalStatus || inv.Status != WMS_ITEM.STATUSs.WaitIn) - { - 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 SetOutPutMqttMsg(action, input.Locale); - } - //鐗╂枡楠岃瘉 - if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N") - { - 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 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()) + //瑙f瀽鏉$爜 + Result<IInventory> result = GetInventory(input.SN, input.AuthOption, true); + if (!result.IsSuccessed) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑鎵句笉鍒版潯鐮佹墍灞炵殑鍗曟嵁[{0}]淇℃伅锛岃閲嶆柊鎵弿鏀惰揣鍗曠殑鏉$爜鎴栭�夋嫨姝g‘鐨勫姛鑳戒笂鏋�"); - action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.ReceiptNotExists", CurInvItem.Items.First().TRANS_NO); + action.LocaleMsg = result.LocaleMsg; return SetOutPutMqttMsg(action, input.Locale); } - var receiptDtl = receipt.Details.First(q => q.LINE_NO == CurInvItem.Items.First().TRANS_LINE); - if (receiptDtl.STATUS > BIZ_U9_RECEIPT.STATUSs.Storing.GetValue()) + var inv = result.Data as Inventory; + + //楠岃瘉鏉$爜鏄惁姝g‘ + if (!inv.isNormalStatus || inv.Status != WMS_ITEM.STATUSs.InStore) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑琛孾{0}]鐘舵�乕{1}]寮傚父锛岃鎵弿姝g‘鐨勬潯鐮�"); - action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.ReceiptDtlStatusException", receiptDtl.LINE_NO, receiptDtl.STATUS.GetEnumDesc<BIZ_U9_RECEIPT.STATUSs>()); + //action.LocaleMsg = Biz.L("鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', inv.StatusList.Select(q => q.GetDesc()))); return SetOutPutMqttMsg(action, input.Locale); } - 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())) + //楠岃瘉鏉$爜鏄惁琚攣瀹� + if (inv.Items.Any(q => q.IS_LOCKED == "Y")) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鏀惰揣鍗曚腑鏉$爜[{0}]鐘舵�乕{1}]寮傚父锛岃鎵弿姝g‘鐨勬潯鐮�"); - action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.ReceiptSnStatusException", CurInvItem.SN, receiptSn.First(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue()).STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()); + //action.LocaleMsg = Biz.L("鏉$爜[{0}]宸茶閿佸畾锛岃閲嶆柊鎵弿"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemIsLock", inv.CurPkg.SN); return SetOutPutMqttMsg(action, input.Locale); } - - var nLocation = new WMS_LOCATION(); - // 鍒ゆ柇鏄惁鏅鸿兘璐ф灦 - if (CurScanShelf.Shelf.IsLightShelf) + //楠岃瘉鏉$爜鏄惁琚叾浠栫敤鎴峰拰鍗曟嵁閿佸畾 + if (inv.Items.Any(q => q.IS_LOCKED == "Y")) { - ShelfApiResult shelfApiResult = await Share.Shelf.PutOn(TransID, CurScanShelf.Shelf, CurInvItem.Items[0]); - if (!shelfApiResult.IsSuccess) - { - action.IsSuccessed = false; - action.LocaleMsg = Biz.L(shelfApiResult.GetData<string>()); - return SetOutPutMqttMsg(action, input.Locale); - } - var reaultShelf = shelfApiResult.GetData<ShelfChangeModel>(); + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鏉$爜[{0}]宸茶閿佸畾锛岃閲嶆柊鎵弿"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemIsLock", inv.CurPkg.SN); + return SetOutPutMqttMsg(action, input.Locale); + } + //鍌ㄤ綅楠岃瘉 + if (inv.Location.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]搴撳瓨淇℃伅寮傚父: 娌℃湁鍌ㄤ綅淇℃伅锛岃鍏堜笂鏋跺悗鍐嶆壂鎻�(鍌ㄤ綅Id: {1})"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationIsNull", inv.CurPkg.SN, inv.CurPkg.LOCATION_ID); + return SetOutPutMqttMsg(action, input.Locale); + } + //鐗╂枡楠岃瘉 + if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N") + { + 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 SetOutPutMqttMsg(action, input.Locale); + } + //鍒ゆ柇鏄惁鍦ㄥ鏂欎腑鐨勭墿鏂� + if (inv.ItemInfo.ITEM_CODE != CurPrepDtl.ITEM_CODE) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]涓嶆槸褰撳墠閫変腑鐨勭墿鏂欒[{1}]锛岃鏀惧洖鍘熷偍浣嶆垨鑰呴噸鏂伴�夋嫨涓嬫灦鐗╂枡琛�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.CurPkg.SN, CurPrepDtl.ITEM_CODE); + return action; + } + //鍒ゆ柇鏄惁鍦ㄥ鏂欎腑鐨勭墿鏂� + //if (!CurPREP.Order.Details.Any(q => q.ITEM_CODE == inv.ItemInfo.ITEM_CODE)) + //{ + // action.IsSuccessed = false; + // //action.LocaleMsg = Biz.L($"褰撳墠澶囨枡浠诲姟[{0}]涓嶅寘鍚潯鐮乕{1}]鐨勭墿鏂欑紪鐮乕{2}]锛岃鏀惧洖鍘熷偍浣�"); + // action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); + // return action; + //} + + //ProcessingOrderDetail = input.SN; + //if (WMSContext.TransactionDic.Where(q => !string.IsNullOrWhiteSpace(q.Value.ProcessingSn)).Any(q => q.Value.ProcessingSn == ProcessingSn && q.Value.TransID != this.TransID)) + //{ + // action.IsSuccessed = false; + // action.LocaleMsg = Biz.L("褰撳墠鏉$爜姝e湪鎵ц涓紝鏃犳硶鎵弿"); + // return action; + //} + CurInvItem = inv; + CurSn = CurInvItem.Items.Select(q => new BIZ_WMS_PREP_SN() { + ORDER_NO = CurPREP.Order.ORDER_NO, + ORDER_LINE = CurPrepDtl.ORDER_LINE, + ORDER_BATCH = CurPREP.Order.CurBatch.BATCH.ToString(), + SN = q.SN, + ITEM_CODE = q.ITEM_CODE, + UNIT = q.UNIT, + QTY = q.QTY, + QTY_DLVY = q.QTY, + STATUS = q.STATUS, + LOTNO = q.LOTNO, + WH_CODE = CurInvItem.Warehouse.WH_CODE, + REGION_CODE = CurInvItem.Region.REGION_CODE, + SHELF_CODE = CurInvItem.Shelf.SHELF_CODE, + LOCATION_CODE = CurInvItem.Location.LOCATION_CODE, + FTY_CODE = CurPREP.Order.CurBatch.FTY_CODE, + WS_CODE = CurPREP.Order.CurBatch.WS_CODE, + LINE_CODE = CurPREP.Order.CurBatch.LINE_CODE, + POST_CODE = CurPREP.Order.CurBatch.POST_CODE, + OPER_CODE = CurPREP.Order.CurBatch.OPER_CODE, + SEGMENT = CurPREP.Order.CurBatch.SEGMENT, + SMT_NO = CurPrepDtl.SMT_NO, + STATION_NO = CurPrepDtl.STATION_NO, + FEEDER_NO = CurPrepDtl.FEEDER_NO, + FEEDER_TYPE = CurPrepDtl.FEEDER_TYPE, + IS_FIRST = CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.First.GetValue() ? "Y" : "N", + NEED_CUTTING = "N", + }).ToList(); - nLocation = reaultShelf.GetLocation(); - if (nLocation == null) + + //鍒ゆ柇鏄惁瓒呭彂 + isExceed = false; + //璁$畻鍓╀綑闇�姹傛暟閲忓拰鏉$爜涓殑鍙戝嚭鏁伴噺 + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + if (actQty < CurInvItem.CurPkg.QTY) + { + isExceed = true; + var remain = actQty; + foreach (var sn in CurSn.OrderByDescending(q => q.QTY)) { - 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 SetOutPutMqttMsg(action, input.Locale); + sn.QTY_DLVY = remain >= sn.QTY ? sn.QTY : remain; + sn.NEED_CUTTING = remain >= sn.QTY ? "N" : "Y"; + remain -= sn.QTY_DLVY; } - var locationData = MainDB.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == nLocation.ID).First(); - if (!locationData.IsNullOrEmpty()) + } + + //鍒ゆ柇鐗╂枡鏄惁鍏佽瓒呭彂锛屽鏋滀笉鍏佽鍒欏繀椤绘埅鏂欙紝鍚﹀垯鐢辩敤鎴峰湪PDA閫夋嫨鏄惁鎴枡 + isNeedCut = CurInvItem.ItemInfo.DLVY_TYPE == BAS_ITEM.DLVY_TYPEs.ByDemand.GetValue(); + + //濡傛灉瓒呭彂鍒欒繑鍥炲墠绔鐞嗭紝鍚﹀垯鐩存帴鍙戝嚭 + if (isExceed) + { + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛屾潯鐮侀渶瑕佹埅鏂欙紝鍙戝嚭鏁伴噺[{4}]"); + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛岃閫夋嫨瑕佽秴鍙戣繕鏄埅鏂欙紵"); + action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, CurPREP.BizType.GetActReqQty(CurPrepDtl), actQty); + action.Data.Command = "ConfirmExceed"; + action.Data.Data = new { - action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]宸插瓨鏈夌墿鏂橻{1}]锛岃妫�鏌ョ郴缁熷簱瀛樹俊鎭�"); - action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", nLocation.LOCATION_CODE, locationData.SN); - return SetOutPutMqttMsg(action, input.Locale); - } - CurScanShelf.LocationCode = nLocation.LOCATION_CODE; + isExceed, + isNeedCut, + CurSn, + }; + } + else + { + input.Data = CurSn.ToJson(); + action = await ConfirmExceed(input); + } + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鎵弿鐗╂枡[{input.SN}]澶嶆牳寮傚父"); + } + return SetOutPutMqttMsg(action, input.Locale); + } + + /// <summary> + /// 鍓嶇纭瓒呭彂鎴栬�呰繑鍥炴埅鏂欏悗鐨勪俊鎭� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<ApiAction<ScanOutput>> ConfirmExceed(BaseInput input) + { + var action = new ApiAction<ScanOutput>(new ScanOutput() { Command = "Normal" }); + try + { + var sns = (input.Data ?? "").JsonToObject<List<BIZ_WMS_PREP_SN>>() ?? new List<BIZ_WMS_PREP_SN>(); + if (!sns.Any()) + { + var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛屾潯鐮侀渶瑕佹埅鏂欙紝鍙戝嚭鏁伴噺[{4}]"); + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]鎵弿鎴愬姛锛屽鏂欑墿鏂橻{1}]闇�姹俒{2}]杩橀渶澶囨枡[{3}]锛岃閫夋嫨瑕佽秴鍙戣繕鏄埅鏂欙紵"); + action.LocaleMsg = Biz.L($"WMS.Out_BIZ_WMS_PREP.ScanItem.Success{(isNeedCut ? "" : "Confirm")}", CurInvItem.SN, CurInvItem.ItemInfo.ITEM_CODE, CurPREP.BizType.GetActReqQty(CurPrepDtl), actQty); + action.Data.Command = "ConfirmExceed"; + action.Data.Data = new + { + isExceed, + isNeedCut, + CurSn, + }; + return SetOutPutMqttMsg(action, input.Locale); } else { - if (CurScanShelf.LocationCode.IsNullOrEmpty() || CurScanShelf.WarehouseCode.IsNullOrEmpty()) + foreach (var item in sns) { - action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"); - action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); - return SetOutPutMqttMsg(action, input.Locale); + var sn = CurSn.First(q => q.ID == item.ID); + sn.NEED_CUTTING = item.NEED_CUTTING;//鍓嶇杩斿洖Y璁や负鏄埅鏂欏彂鏂欙紝N璁や负鏄暣鐩樺彂鏂� + sn.DeliverySN = item.DeliverySN; + sn.ReserveSN = item.ReserveSN; } - - nLocation = await MainDB.Queryable<WMS_LOCATION>().Where(t => t.LOCATION_CODE == CurScanShelf.LocationCode && t.AUTH_ORG == OrgCode).FirstAsync(); + Command = "Normal"; } - //鍒ゆ柇鍌ㄤ綅鏄惁鍗曟斁 - if (nLocation.IS_SINGLE == "Y" && CurInvItem.Items.Count > 1) - { - action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]鍙兘瀛樻斁涓�涓墿鏂�"); - action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationSingleFailure", nLocation.LOCATION_CODE); - ResetScan(); - return SetOutPutMqttMsg(action, input.Locale); - } - - //鎵ц涓婃灦鏁版嵁澶勭悊 + //鍑哄簱涓嬫灦 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; + item.TRANS_CODE = nameof(BIZ_WMS_PREP); + item.TRANS_NO = CurPREP.Order.ORDER_NO; + item.TRANS_LINE = CurPrepDtl.ORDER_LINE; } - Result putonResult = PutOn(input.AuthOption, nLocation.LOCATION_CODE); - if (!putonResult.IsSuccessed) + foreach (var item in CurInvItem.Packages) + { + item.SOURCE_CODE = item.TRANS_CODE; + item.SOURCE_ORDER = item.TRANS_NO; + item.SOURCE_LINE = item.TRANS_LINE; + item.TRANS_CODE = nameof(BIZ_WMS_PREP); + item.TRANS_NO = CurPREP.Order.ORDER_NO; + item.TRANS_LINE = CurPrepDtl.ORDER_LINE; + } + Result downResult = TakeDown(CurSn, input.AuthOption, WMS_ITEM.STATUSs.OffShelf); + if (!downResult.IsSuccessed) { action.IsSuccessed = false; - action.LocaleMsg = putonResult.LocaleMsg; + action.LocaleMsg = downResult.LocaleMsg; ResetScan(); return SetOutPutMqttMsg(action, input.Locale); } - - //鏇存柊鍗曟嵁淇℃伅 - foreach(var sn in receiptSn) + else//澶勭悊澶囨枡浠诲姟鏁版嵁 { - sn.STATUS = WMS_ITEM.STATUSs.InStore.GetValue(); - sn.IS_IN = "Y"; - } - //濡傛灉褰撳墠琛屼笂鏋跺畬鎴愭爣璁颁负寰呭鏍� - 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) - { - receiptDtl.STATUS = BIZ_U9_RECEIPT.STATUSs.Review.GetValue(); - //褰撳墠鍗曟嵁鏄庣粏宸茬粡鍏ㄩ儴涓婃灦瀹屾垚锛屽彲浠ヨ皟鐢║9琛屽鎺ュ彛 - var iInput = new SubmitLineInput + foreach (var sn in CurSn) { - userId = UserCode, - IsLogin = true, - param = new() + sn.STATUS = WMS_ITEM.STATUSs.OffShelf.GetValue(); + sn.DOWN_TIME = DateTime.Now; + if (sn.NEED_CUTTING == "Y") { - RcvLineID = receiptDtl.ID, - RcvDocNo = receiptDtl.ORDER_NO, - DocLineNo = receiptDtl.LINE_NO, - OrgCode = receiptDtl.AUTH_ORG, + sn.NEED_CUTTING = "N"; + sn.SN = sn.DeliverySN; + sn.QTY = sn.QTY_DLVY; } - }; - var result = await DI.Resolve<IWMS_U9C>().ReceivementApproveLine(iInput); - if (!result.IsSuccessed) + } + CurPrepDtl.QTY_PREP += CurSn.Sum(q => q.QTY_DLVY); + CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Picking.GetValue(); + CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Picking.GetValue(); + CurPREP.Order.CurBatch.PICK_TIME = CurPREP.Order.CurBatch.PICK_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : CurPREP.Order.CurBatch.PICK_TIME; + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _CurSn = CurSn.Clone(); + var _CurPrepDtl = CurPrepDtl.Clone(); + var _CurPREPOrder = CurPREP.Order.Clone(); + var _CurPREPCurBatch = CurPREP.Order.CurBatch.Clone(); + AddCommitAction("UpdatePrep", () => { - action.IsSuccessed = false; - action.LocaleMsg = result.LocaleMsg; - return SetOutPutMqttMsg(action, input.Locale); + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + //鏁版嵁淇濆瓨閫昏緫 + db.Insertable(_CurSn, UserCode).ExecuteCommand(); + _CurPrepDtl.QTY_PREP = db.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == _CurPrepDtl.ORDER_NO && q.ORDER_LINE == _CurPrepDtl.ORDER_LINE).Sum(q => q.QTY_DLVY); + db.Updateable(_CurPrepDtl, UserCode).UpdateColumns(q => new { q.QTY_PREP, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + db.Updateable(_CurPREPOrder, UserCode).UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + db.Updateable(_CurPREPCurBatch, UserCode).UpdateColumns(q => new { q.STATUS, q.PICK_TIME, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + }); + + //鐏伅 + if (CurInvItem.Shelf.IsLightShelf) + { + await Share.Shelf.DownSingle(TransID, CurInvItem.Location); } } - 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()) - { - receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.Review.GetValue(); - } - else - { - receipt.STATUS = BIZ_U9_RECEIPT.STATUSs.Storing.GetValue(); - } - - //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� - var _receipt = receipt.Clone(); - AddCommitAction("Receipt", () => - { - //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 - 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(receiptSn, UserCode).UpdateColumns(q => new { q.STATUS, q.IS_IN, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); - }); //瀹屾垚鎵�鏈夊鐞嗗悗浣跨敤浜嬪姟淇濆瓨鏁版嵁 action = DoIfFinish(action, input.Locale); @@ -328,7 +654,7 @@ catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{input.SN}]澶嶆牳寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", input.SN)); } @@ -419,7 +745,7 @@ catch (Exception ex) { //鍙栨秷褰撳墠鎿嶄綔 - ResetScan(); + ResetTrans(); //action.CatchExceptionWithLog(ex, $"鎵弿璐ф灦/鍌ㄤ綅[{0}]寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanShelf.ScanException", Code)); } @@ -442,52 +768,71 @@ doAfterSave?.Invoke(); // 杩斿洖鏁版嵁 - action.Data.Data = new DefaultInStoreOutput + action.Data.Data = new DefaultScanItemOutput() { - Barcode = CurInvItem.SN, - MaterialCode = CurInvItem.ItemInfo.ITEM_CODE, + SN = CurInvItem.SN, + ItemCode = CurInvItem.ItemInfo.ITEM_CODE, MaterialName = CurInvItem.ItemInfo.ITEM_NAME, - CurrentQty = CurInvItem.Items[0].QTY, - Unit = CurInvItem.Items[0].UNIT, + Qty = CurInvItem.CurPkg.QTY, + Unit = CurInvItem.CurPkg.UNIT, + regionCode = CurInvItem.Region.REGION_CODE, + locationCode = CurInvItem.Location?.LOCATION_CODE, DateCode = CurInvItem.Items[0].PROD_DATE, - WarehouseCode = CurInvItem.Warehouse.WH_CODE, - RegionCode = CurInvItem.Region.REGION_CODE, - ShelfCode = CurInvItem.Shelf.SHELF_CODE, - LocationCode = CurInvItem.Location.LOCATION_CODE, + ScanAfCut = CurInvItem.Warehouse.SCAN_AF_CUT }; - //action.LocaleMsg = Biz.L($"鎵弿鏉$爜[{0}]涓婃灦鍒板偍浣峓{1}]鎴愬姛"); - action.LocaleMsg = Biz.L("WMS.Default.ScanItem.PutOnSucceeded", CurInvItem.SN, CurInvItem.Location.LOCATION_CODE); + //action.LocaleMsg = Biz.L($"鎵弿鏉$爜[{0}]浠庡偍浣峓{1}]涓嬫灦鎴愬姛"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.TakeDownSucceeded", CurInvItem.SN, CurInvItem.Location?.LOCATION_CODE); //閲嶇疆宸ュ簭 - ResetScanInfo(); + ResetScan(); return SetOutPutMqttMsg(action, locale); + } + + /// <summary> + /// 璋冪敤鍙戞枡鍗曟嵁鐨凟RP鎺ュ彛 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<ApiAction> CommitToERP(BaseInput input) + { + var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .CommitToERP(this, input); + return action; } #endregion /// <summary> - /// 閲嶇疆褰撳墠鎿嶄綔锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� + /// 閲嶇疆浜嬪姟鏁版嵁锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� /// </summary> - public override void ResetScan() + public override void ResetTrans() { - base.ResetScan(); - ResetScanInfo(); + ResetScan(); CurPREP = new(MainDB, UserCode, OrgCode); + CurPrepDtl = new(); CurScanShelf = null; + base.ResetTrans(); } /// <summary> - /// 閲嶇疆鎵爜淇℃伅 + /// 閲嶇疆鏈鎵爜淇℃伅 /// </summary> - public void ResetScanInfo() + public override void ResetScan() { - Command = null; + Command = "Normal"; CurInvItem = null; + CurSn = new(); + base.ResetScan(); } public override bool Close(bool needSaveHistoryLog = false) { + //CloseLight(LocationHis).Wait(); + if (!(CurPREP?.Order?.ORDER_NO ?? "").IsNullOrEmpty()) + { + MainDB.Deleteable<WMS_ITEM_POOL>().Where(x => x.TRANS_NO == CurPREP.Order.ORDER_NO).ExecuteCommand(); + } + this.IsFinished = true; return IsFinished ? base.Close(needSaveHistoryLog) : IsFinished; } -- Gitblit v1.9.3