From 36746596927952a6b860129a62eec9059bf083a7 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期六, 26 四月 2025 18:06:27 +0800 Subject: [PATCH] 优化了备料逻辑 --- Tiger.Business.WMS/Common/Preparation.cs | 115 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 63 insertions(+), 52 deletions(-) diff --git a/Tiger.Business.WMS/Common/Preparation.cs b/Tiger.Business.WMS/Common/Preparation.cs index 9ebfbb0..6579a32 100644 --- a/Tiger.Business.WMS/Common/Preparation.cs +++ b/Tiger.Business.WMS/Common/Preparation.cs @@ -5,16 +5,14 @@ using System.Diagnostics; using System.Linq; using System.Text; -using System.Threading.Tasks; using Tiger.Business.WMS.Extensions; -using Tiger.Business.WMS.Transaction; using Tiger.IBusiness; using Tiger.Model; -using Tiger.Model.Entitys.MES.Position; using Tiger.Model.Extensions; namespace Tiger.Business.WMS.Common { + /// <summary> /// 澶囨枡浠诲姟鍗曟嵁 /// </summary> @@ -29,10 +27,13 @@ #region Propertys & Variables private static object AddOrderLock { get; } = new object(); + private static object AddBatchLock { get; } = new object(); public DbClient MainDB { get; set; } public string UserCode { get; set; } public string OrgCode { get; set; } public BIZ_WMS_PREP Order { get; set; } + public BIZ_WMS_PREP.BIZ_TYPEs BizType => Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>(); + public SuggestOption Option { get; set; } #endregion Propertys & Variables #region Functions @@ -71,6 +72,15 @@ }; } } + //鍚堝苟鍙戞枡鍙�傜敤浜庡寘瑁呰溅闂村伐鍗曞彂鏂欙紝闆呰揪鍖呰杞﹂棿缂栫爜锛�1002310010030758 + else if (Order.WS_CODE != "1002310010030758") + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("澶囨枡浠诲姟[{0}]涓嶆槸鍖呰杞﹂棿宸ュ崟鍙戞枡锛屾棤娉曞悎骞跺崟鎹彂鏂�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.PrepNot1002310010030758", Order.ORDER_NO); + return action; + } + if (!src.IsNullOrEmpty() && src.ORDER_NO != Order.ORDER_NO) { action.IsSuccessed = false; @@ -78,21 +88,37 @@ action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.NoFound", orderNo, src.ORDER_NO, Order.ORDER_NO); return action; } - - // 鏌ヨ鍗曟嵁鏄庣粏锛屽苟鍚堝苟鍒板鏂欏崟鐨勫鏂欐槑缁嗕腑 - var dtls = bizType.GetPickList(orderNo); - if (dtls.Sum(q => q.QTY_ACT_REQ) <= 0) + + // 鏌ヨ鍗曟嵁鏄庣粏锛屽苟鍚堝苟鍒板鏂欏崟鐨勫鏂欐槑缁嗕腑 + var srcDtls = bizType.GetPickList(orderNo); + if (srcDtls.Sum(q => q.QTY_ACT_REQ) <= 0) { action.IsSuccessed = false; //action.LocaleMsg = Biz.L("鍗曟嵁[{0}]鏈壘鍒伴渶瑕佸鏂欑殑琛屾槑缁嗭紝璇锋壂鎻忔纭殑鍗曟嵁"); action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.NoNeedPrep", orderNo); return action; } + //鍚堝苟鍙戞枡鍙�傜敤浜庡寘瑁呰溅闂村伐鍗曞彂鏂� + if (src.IsNullOrEmpty() && Order.BIZ_TYPE == BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder.GetValue()) + { + var wo = Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == orderNo).First(); + //闆呰揪鍖呰杞﹂棿缂栫爜锛�1002310010030758 + if (wo?.WS_CODE == "1002310010030758") + { + Order.WS_CODE = wo.WS_CODE; + } + else + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鍗曟嵁[{0}]涓嶆槸鍖呰杞﹂棿宸ュ崟锛屾棤娉曞悎骞跺崟鎹彂鏂�"); + action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.AddOrder.WoNot1002310010030758", orderNo); + return action; + } + } Order.SourceOrders = Order.SourceOrders ?? new(); Order.SourceDetails = Order.SourceDetails ?? new(); Order.Details = Order.Details ?? new(); - Order.Batchs = Order.Batchs ?? new(); Order.SnList = Order.SnList ?? new(); var srcOrder = new BIZ_WMS_PREP_SRC() { @@ -103,10 +129,10 @@ ADD_TIME = DateTime.Now, }; Order.SourceOrders.Add(srcOrder); - foreach (var dtl in dtls) + foreach (var sdtl in srcDtls) { - dtl.AUTH_ORG = OrgCode; - var pdtl = Order.Details.Where(q => q.ITEM_CODE == dtl.ITEM_CODE).FirstOrDefault(); + sdtl.AUTH_ORG = OrgCode; + var pdtl = Order.Details.Where(q => q.ITEM_CODE == sdtl.ITEM_CODE).FirstOrDefault(); if (pdtl.IsNullOrEmpty()) { pdtl = new () @@ -114,66 +140,51 @@ AUTH_ORG = OrgCode, ORDER_NO = Order.ORDER_NO, ORDER_LINE = (Order.Details.Max(q => q.LINE_CODE.ToInt32()) + 1).ToString(), - ITEM_CODE = dtl.ITEM_CODE, - SUBITEM_CODE = dtl.SUBITEM_CODE, - UNIT = dtl.UNIT, - PLAN_LOSS_QTY = dtl.PLAN_LOSS_QTY, - PLAN_LOSS_RATE = dtl.PLAN_LOSS_RATE, - IS_CALC_LOSS = dtl.IS_CALC_LOSS, - IS_WHOLE = dtl.IS_WHOLE, - SOURCE_CODE = dtl.SOURCE_CODE, - SOURCE_ORDER = dtl.SOURCE_ORDER, - SOURCE_LINE = dtl.SOURCE_LINE, + ITEM_CODE = sdtl.ITEM_CODE, + SUBITEM_CODE = sdtl.SUBITEM_CODE, + UNIT = sdtl.UNIT, + PLAN_LOSS_QTY = sdtl.PLAN_LOSS_QTY, + PLAN_LOSS_RATE = sdtl.PLAN_LOSS_RATE, + IS_CALC_LOSS = sdtl.IS_CALC_LOSS, + IS_WHOLE = sdtl.IS_WHOLE, + SOURCE_CODE = sdtl.SOURCE_CODE, + SOURCE_ORDER = sdtl.SOURCE_ORDER, + SOURCE_LINE = sdtl.SOURCE_LINE, STATUS = BIZ_WMS_PREP_DTL.STATUSs.UnCalc.GetValue(), - FTY_CODE = dtl.FTY_CODE, - WS_CODE = dtl.WS_CODE, - LINE_CODE = dtl.LINE_CODE, - POST_CODE = dtl.POST_CODE, - OPER_CODE = dtl.OPER_CODE, - SEGMENT = dtl.SEGMENT, - SMT_NO = dtl.SMT_NO, - STATION_NO = dtl.STATION_NO, - FEEDER_NO = dtl.FEEDER_NO, - FEEDER_TYPE = dtl.FEEDER_TYPE, + FTY_CODE = sdtl.FTY_CODE, + WS_CODE = sdtl.WS_CODE, + LINE_CODE = sdtl.LINE_CODE, + POST_CODE = sdtl.POST_CODE, + OPER_CODE = sdtl.OPER_CODE, + SEGMENT = sdtl.SEGMENT, + SMT_NO = sdtl.SMT_NO, + STATION_NO = sdtl.STATION_NO, + FEEDER_NO = sdtl.FEEDER_NO, + FEEDER_TYPE = sdtl.FEEDER_TYPE, }; Order.Details.Add(pdtl); } - pdtl.QTY_REQ += dtl.QTY_ACT_REQ; - Order.SourceDetails.Add(dtl); + pdtl.QTY_REQ += sdtl.QTY_ACT_REQ; + sdtl.ORDER_NO = pdtl.ORDER_NO; + sdtl.ORDER_LINE = pdtl.ORDER_LINE; + Order.SourceDetails.Add(sdtl); } var srcInfo = Order.SourceOrders.Select(q => new { q.SOURCE_CODE, q.SOURCE_ORDER }).DistinctBy(q => q.SOURCE_ORDER).OrderBy(q => q.SOURCE_ORDER); Order.SOURCE_CODE = string.Join(",", srcInfo.Select(q => q.SOURCE_CODE)); Order.SOURCE_ORDER = string.Join(",", srcInfo.Select(q => q.SOURCE_ORDER)); - if (Order.CurBatch.IsNullOrEmpty()) - { - var bacth = new BIZ_WMS_PREP_BTH() - { - AUTH_ORG = OrgCode, - ORDER_NO = Order.ORDER_NO, - BATCH = Order.Batchs.Max(q => q.BATCH) + 1, - PREP_MODE = BIZ_WMS_PREP_BTH.PREP_MODEs.Whole.GetValue(), - DLVY_MODE = BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue(), - STATUS = BIZ_WMS_PREP_BTH.STATUSs.WaitPick.GetValue(), - CALL_TIME = DateTime.Now, - PRIORITY = 4, - }; - bacth.PLAN_TIME = bacth.CALL_TIME.AddHours(1); - Order.Batchs.Add(bacth); - } - + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 var db = Biz.Db; var dbTran = db.UseTran(() => { var o = db.Storageable(Order, UserCode).WhereColumns(t => new { t.ORDER_NO, t.GHOST_ROW }).ToStorage(); o.AsInsertable.ExecuteCommand(); - o.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.SOURCE_CODE, q.SOURCE_ORDER, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + o.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.WS_CODE, q.SOURCE_CODE, q.SOURCE_ORDER, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); db.Storageable(Order.SourceOrders, UserCode).WhereColumns(t => new { t.ORDER_NO, t.SOURCE_ORDER, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); db.Storageable(Order.SourceDetails, UserCode).WhereColumns(t => new { t.ORDER_NO, t.ITEM_CODE, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); var d = db.Storageable(Order.Details, UserCode).WhereColumns(t => new { t.ORDER_NO, t.ITEM_CODE, t.GHOST_ROW }).ToStorage(); d.AsInsertable.ExecuteCommand(); d.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.QTY_REQ, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); - db.Storageable(Order.Batchs, UserCode).WhereColumns(t => new { t.ORDER_NO, t.BATCH, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); }); if (dbTran.IsSuccess) { -- Gitblit v1.9.3