From 1af49bdb3cdaa44a7e44ebdc843fb8180596365f Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 15 五月 2025 16:34:39 +0800 Subject: [PATCH] 尾箱回库、移库逻辑开发 --- Services/MoboxService.cs | 173 ++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 110 insertions(+), 63 deletions(-) diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 8ad85b5..4ff7773 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -18,45 +18,6 @@ namespace HH.WCS.Mobox3.DSZSH.Services { public class MoboxService { - #region 妯℃澘鍔熻兘 - public static SimpleResult BaseBound(StartCntEndInfo model) { - var taskName = ""; // 鐢ㄤ簬鐢熸垚浠诲姟绫诲瀷銆佹墦鍗版棩蹇椾俊鎭�- var db = DbHelper.GetDbClient(); - - try { - var startLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.StartLoc)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty.Negate()).First(); - - if (startLoc == null) { - return BuildSimpleResult(2, $"璧风偣浣嶇疆 '{model.StartLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�); - } - - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(ExprHelper.LocCntrIsBind(startLoc.S_CODE, model.CntId)).First(); - - if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{startLoc.S_CODE}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); - } - - var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty).First(); - - if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); - } - - return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); - } - catch (Exception ex) { - return BuildSimpleEx(ex); - } - } - #endregion - #region PDA 鍔熻兘 /// <summary> /// 濂借繍绠�婊℃墭涓嬬嚎鍏ュ簱(PDA) @@ -82,10 +43,9 @@ // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹� var locCntrRel = db.Queryable<TN_Loc_Container>().First( - a => a.S_LOC_CODE == model.StartLoc - && a.S_CNTR_CODE == model.CntId); + a => a.S_LOC_CODE == startLoc.S_CODE); if (locCntrRel == null) { - return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}' 锛屾棤鍙嚭搴撶殑鐗╂枡"); + return BuildSimpleResult(3, $"璧风偣浣嶇疆 '{model.StartLoc}' 鏃犲彲鍑哄簱鐨勭墿鏂�); } // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖�@@ -133,7 +93,7 @@ return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); } - loc.N_CURRENT_NUM = model.PalletCount; + //loc.N_CURRENT_NUM = model.PalletCount; locCntrRel = new TN_Loc_Container { S_LOC_CODE = model.LocCode, @@ -325,13 +285,13 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) + .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); } return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); @@ -371,13 +331,13 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(ExprHelper.LocCode(model.EndLoc)) + .Where(ExprHelper.LocBelongsToArea(AreaName.鍖呰鍖�) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty).First(); if (endLoc == null) { - return BuildSimpleResult(4, $"缁堢偣浣嶇疆 '{model.EndLoc}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); } return TaskHelper.SimpleCreateTask(startLoc.S_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, taskName); @@ -399,11 +359,11 @@ using (var tran = db.Ado.UseTran()) { var order = new TN_Check_Order { - S_NO = model.No, - S_CG_ID = model.CgId, - S_ITEM_NAME = model.ItemName, + S_NO = GenerateOrderNo("鎶芥鍗曞彿", "CN"), + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, S_BATCH_NO = model.BatchNo, - N_COUNT = model.N_QTY, + N_COUNT = model.Qty, S_END_AREA = model.EndArea, }; @@ -412,10 +372,10 @@ return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); } - for (int i = 0; i < model.N_QTY; i++) { + for (int i = 0; i < model.Qty; i++) { var detail = new TN_Check_Detail { - S_NO = model.No, - S_CG_ID = model.CgId, + S_NO = order.S_NO, + S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, S_END_AREA = model.EndArea }; @@ -428,7 +388,7 @@ tran.CommitTran(); } - return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛锛氬崟鍙�{model.No}"); + return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛"); } catch (Exception ex) { return BuildSimpleEx(ex); @@ -437,6 +397,7 @@ public static SimpleResult QualifiedBack(QualifiedBackInfo model) { var db = DbHelper.GetDbClient(); + try { var cgDetail = db.Queryable<TN_CG_Detail>() @@ -549,6 +510,34 @@ } } + public static SimpleResult RestBack(RestBackInfo model) { + var db = DbHelper.GetDbClient(); + + try { + var locCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_LOC_CODE == model.StartLoc) + .First(); + + if (locCntrRel == null) { + return BuildSimpleResult(2, $"璧风偣璐т綅 {model.StartLoc}"); + } + + var endLoc = db.Queryable<TN_Location, TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where((l, c) => c.S_CNTR_TYPE == locCntrRel.S_CNTR_TYPE) + .First(); + + if (endLoc == null) { + return BuildSimpleResult(3, $"涓嶅瓨鍦ㄥ悎閫傜殑缁堢偣璐т綅鍙互鍥炲簱"); + } + + return TaskHelper.SimpleCreateTask(locCntrRel.S_LOC_CODE, locCntrRel.S_CNTR_CODE, endLoc.S_CODE, TaskName.灏剧鍥炲簱); + } + catch (Exception ex) { + + return BuildSimpleEx(ex); + } + } + #endregion #region Mobox 鍔熻兘 @@ -598,7 +587,7 @@ S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, F_QTY = model.Qty, - F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY), + F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -659,7 +648,7 @@ S_ITEM_CODE = model.ItemCode, S_BATCH_NO = model.BatchNo, F_QTY = model.Qty, - F_OUT_QTY = cgDetailList.Sum(a => a.F_QTY), + F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -685,8 +674,8 @@ try { var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode - && a.F_QTY > targetNum). - OrderBy(a => a.F_QTY, OrderByType.Asc).First(); + && a.N_QTY > targetNum). + OrderBy(a => a.N_QTY, OrderByType.Asc).First(); if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠� { result.Add(targetCg); @@ -695,12 +684,12 @@ // NOTE 鏍规嵁鎬婚噺閫塪etail鏃讹紝鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵 var sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE) - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.F_QTY > 0) + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_QTY > 0) .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) .Where(d => (model.ForcedOut && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") || (!model.ForcedOut && (d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮"))) - .OrderBy(d => d.F_QTY, OrderByType.Desc) + .OrderBy(d => d.N_QTY, OrderByType.Desc) .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); if (sortedMaterials.Count == 0)//娌℃湁婊¤冻鏉′欢鐨�@@ -710,13 +699,13 @@ float countNum = 0; foreach (var mat in sortedMaterials) { - countNum += mat.F_QTY; + countNum += mat.N_QTY; result.Add(mat); if (countNum >= targetNum) { break; } } - if (result.Sum(a => a.F_QTY) >= targetNum) { + if (result.Sum(a => a.N_QTY) >= targetNum) { return result; } else { @@ -729,6 +718,64 @@ } } + /// <summary> + /// 绉诲簱-鍒涘缓绉诲簱浠诲姟(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static SimpleResult CreateShiftOrder(CreateShiftOrderInfo model) { + var db = DbHelper.GetDbClient(); + try { + var locCntrRelList = db.Queryable<TN_Loc_Container, TN_CG_Detail>((c, d) => c.S_CNTR_CODE == d.S_CNTR_CODE) + .Where((c, d) => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.ItemCode) + .ToList(); + + if (locCntrRelList.Count == 0) { + return BuildSimpleResult(2, "娌℃湁鎵惧埌寰呯Щ搴撶殑鐗╂枡"); + } + + // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁�+ using (var tran = db.Ado.UseTran()) { + + var order = new TN_Shift_Order { + S_NO = GenerateOrderNo("绉诲簱鍗曞彿", "SN"), + S_ITEM_CODE = model.ItemCode, + //S_ITEM_NAME = model.ItemName, + S_BATCH_NO = model.BatchNo, + N_COUNT = locCntrRelList.Count, + S_END_AREA = model.EndArea, + }; + + if (db.Insertable<TN_Shift_Order>(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(2, "鐢熸垚 绉诲簱鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); + } + + foreach (var locCntrRel in locCntrRelList) { + var detail = new TN_Shift_Detail { + S_NO = order.S_NO, + S_ITEM_CODE = model.ItemCode, + S_LOC_CODE = locCntrRel.S_LOC_CODE, + S_CNTR_CODE = locCntrRel.S_CNTR_CODE, + S_BATCH_NO = model.BatchNo, + S_END_AREA = model.EndArea + }; + + if (db.Insertable<TN_Shift_Detail>(detail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(3, "鐢熸垚 绉诲簱鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail)); + } + } + + tran.CommitTran(); + } + return BuildSimpleResult(0, $"鍒涘缓 绉诲簱鍗�鎴愬姛"); + } + catch (Exception ex) { + return BuildSimpleEx(ex); + } + } + private static string GenerateOrderNo(string snType, string prefix) { var id = SysHelper.GetSerialNumber(snType, prefix); var date = DateTime.Now.ToString("yyMMdd"); -- Gitblit v1.9.1