From b079910e5de15863c26e479ffab15cc45d706f1a Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 19 五月 2025 16:25:22 +0800 Subject: [PATCH] 测试修复轮询出库、抽检流程的问题 --- Services/MoboxService.cs | 133 +++++++++++++++++++++++++++++++++++--------- 1 files changed, 105 insertions(+), 28 deletions(-) diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs index 680d804..1e82ed8 100644 --- a/Services/MoboxService.cs +++ b/Services/MoboxService.cs @@ -3,6 +3,7 @@ using System.Linq; using HH.WCS.Mobox3.DSZSH.Consts; +using HH.WCS.Mobox3.DSZSH.Dispatch; using HH.WCS.Mobox3.DSZSH.Helper; using HH.WCS.Mobox3.DSZSH.Helpers; using HH.WCS.Mobox3.DSZSH.Models; @@ -371,11 +372,13 @@ public static SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) { var db = DbHelper.GetDbClient(); try { + var orderNo = GenerateOrderNo("鎶芥鍗曞彿", "CN"); + // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁� using (var tran = db.Ado.UseTran()) { var order = new TN_Check_Order { - S_NO = GenerateOrderNo("鎶芥鍗曞彿", "CN"), + S_NO = orderNo, S_ITEM_CODE = model.ItemCode, //S_ITEM_NAME = model.ItemName, S_BATCH_NO = model.BatchNo, @@ -388,20 +391,33 @@ return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order)); } - for (int i = 0; i < model.Qty; i++) { - var detail = new TN_Check_Detail { - S_NO = order.S_NO, - S_ITEM_CODE = model.ItemCode, - S_BATCH_NO = model.BatchNo, - S_END_AREA = model.EndArea - }; + var cgDetailList = SelectCgByTotalQty(model); - if (db.Insertable<TN_Check_Detail>(detail).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(3, "鐢熸垚 鎶芥鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail)); - } + if (cgDetailList.Count == 0) { + return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ユ娊妫�); } + foreach (var cgDetail in cgDetailList) { + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_END_AREA = model.EndArea, + }; + + cgDetail.N_ITEM_STATE = 3; + cgDetail.S_ITEM_STATE = "姝e湪妫�獙"; + + if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0 + && db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); + } + + LogHelper.Debug("鍒涘缓鍑哄簱鍗曟槑缁嗘垚鍔燂細" + JsonConvert.SerializeObject(detail)); + } + tran.CommitTran(); } return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛"); @@ -556,6 +572,56 @@ } } + public static List<TN_CG_Detail> SelectCgByTotalQty(CreateCheckOrderInfo model) { + var db = DbHelper.GetDbClient(); + var result = new List<TN_CG_Detail>(); + var targetNum = model.Qty; + + try { + var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode + && a.N_ITEM_NUM > targetNum). + OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); + if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠�+ { + result.Add(targetCg); + return result; + } + + var sortedMaterials = new List<TN_CG_Detail>(); + + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + + if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨�+ { + return result; + } + + int countNum = 0; + foreach (var mat in sortedMaterials) { + countNum += mat.N_ITEM_NUM; + result.Add(mat); + if (countNum >= targetNum) { + break; + } + } + if (result.Sum(a => a.N_ITEM_NUM) >= targetNum) { + return result; + } + else { + result.Clear(); + return result; + } + } + catch (Exception ex) { + throw ex; + } + } + #endregion #region Mobox 鍔熻兘 @@ -584,14 +650,13 @@ return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - // NOTE 濡傛灉鍒涘缓order鐨勬椂鍊欏氨鎸囧畾鍏蜂綋鍑哄簱鐗╂枡鐨刢ntr锛岄偅涔堝鏋滃湪鍒涘缓浠诲姟鍓嶏紝杩欎釜鐗╂枡琚敊璇娊妫�簡鎬庝箞鍔� foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { - S_NO = orderNo, + S_OO_NO = orderNo, S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, - N_COUNT = cgDetail.N_QTY, + N_COUNT = cgDetail.N_ITEM_NUM, S_END_AREA = model.EndArea }; @@ -646,10 +711,9 @@ return BuildSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } - // NOTE 濡傛灉鍒涘缓order鐨勬椂鍊欏氨鎸囧畾鍏蜂綋鍑哄簱鐗╂枡鐨刢ntr锛岄偅涔堝鏋滃湪鍒涘缓浠诲姟鍓嶏紝杩欎釜鐗╂枡琚敊璇娊妫�簡鎬庝箞鍔� foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { - S_NO = orderNo, + S_OO_NO = orderNo, S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, @@ -693,8 +757,8 @@ try { var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode - && a.N_QTY > targetNum). - OrderBy(a => a.N_QTY, OrderByType.Asc).First(); + && a.N_ITEM_NUM > targetNum). + OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠� { result.Add(targetCg); @@ -702,29 +766,42 @@ } // 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.N_QTY > 0) + + var sortedMaterials = new List<TN_CG_Detail>(); + + if (model.ForcedOut) { + 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.N_ITEM_NUM > 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.N_QTY, OrderByType.Desc) + .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" + || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + } + else { + 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.N_ITEM_NUM > 0) + .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") + .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) + .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); + } + if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨� { return result; } - float countNum = 0; + int countNum = 0; foreach (var mat in sortedMaterials) { - countNum += mat.N_QTY; + countNum += mat.N_ITEM_NUM; result.Add(mat); if (countNum >= targetNum) { break; } } - if (result.Sum(a => a.N_QTY) >= targetNum) { + if (result.Sum(a => a.N_ITEM_NUM) >= targetNum) { return result; } else { -- Gitblit v1.9.1