From b079910e5de15863c26e479ffab15cc45d706f1a Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 19 五月 2025 16:25:22 +0800 Subject: [PATCH] 测试修复轮询出库、抽检流程的问题 --- ServiceCore/OutboundCore.cs | 205 +++++++++++++++++++------------------------------- 1 files changed, 78 insertions(+), 127 deletions(-) diff --git a/ServiceCore/OutboundCore.cs b/ServiceCore/OutboundCore.cs index a42caae..488821a 100644 --- a/ServiceCore/OutboundCore.cs +++ b/ServiceCore/OutboundCore.cs @@ -1,83 +1,73 @@ 锘縰sing System; -using System.Collections.Generic; -using System.Linq; using HH.WCS.Mobox3.DSZSH.Consts; using HH.WCS.Mobox3.DSZSH.Helpers; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; using Newtonsoft.Json; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { - /// <summary> - /// 瀹氭椂杞浠诲姟锛氬嚭搴撲笟鍔℃牳蹇�- /// </summary> public class OutboundCore { - /// <summary> - /// 鍚庡彴杞鍑哄簱鍗�鍑哄簱鏄庣粏鍗曪紝鐢熸垚鍑哄簱浠诲姟琛�- /// </summary> - public static void CheckOutboundOrder() { + public static void CheckOrderState() { var db = DbHelper.GetDbClient(); - try { - // 鏌ユ壘鎵�湁鐨�绛夊緟鍑哄簱 鐨�鍑哄簱鍗曪紝鎸�鍏堝垱寤哄厛澶勭悊 鎺掑簭 - var orders = db.Queryable<TN_Outbound_Order>() - .Where(o => o.N_B_STATE == 0) - .OrderBy(o => o.T_CREATE) - .Mapper( - o => o.Details, // 灏嗗瓙琛ㄦ暟鎹槧灏勫埌涓昏〃鐨�Details 灞炴� - o => o.S_NO, // 涓昏〃鍏宠仈瀛楁 - d => d.S_NO // 瀛愯〃鍏宠仈瀛楁 - ) - .ToList(); + var order = db.Queryable<TN_Outbound_Order>() + .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) + .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First(); - if (orders.Count == 0) { - LogHelper.Info("杞 | 褰撳墠娌℃湁绛夊緟鎵ц鐨勫嚭搴撳崟"); + if (order == null) { + LogHelper.Info("杞--鍑哄簱--鏆傛棤寰呮墽琛岀殑Order"); + return; + } + + var lastDetail = db.Queryable<TN_Outbound_Detail>() + .First(d => d.S_OO_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; + + if (lastDetail != null) { + LogHelper.Info($"杞--鍑哄簱--涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛� + JsonConvert.SerializeObject(lastDetail)); + return; + } + + var detail = db.Queryable<TN_Outbound_Detail>() + .Where(d => d.S_OO_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) + .OrderBy(d => d.T_CREATE, SqlSugar.OrderByType.Asc).First(); + + if (detail == null) { + //order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� + + LogHelper.Info($"杞--鍑哄簱--褰撳墠Order '{order.S_NO}' 鏆傛棤寰呮墽琛岀殑浠诲姟"); + return; + } + + var startLocCntrRel = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_CNTR_CODE == detail.S_CNTR_CODE) + .First(); + + if (startLocCntrRel == null) { + LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); + return; + } + + var endLoc = db.Queryable<TN_Location>() + .Where(l => l.S_AREA_CODE == detail.S_END_AREA) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛丼_NO涓�'{detail.S_OO_NO}'锛岃姹侫rea涓�'{detail.S_END_AREA}'"); return; } using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� + if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info($"杞--鍑哄簱--淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚澶辫触锛�); + } - foreach (var o in orders) { - foreach (var d in o.Details) { - for (int i = 0; i < d.N_QTY; i++) { - var task = new TN_Outbound_Task { - S_CG_ID = d.S_CG_ID, - S_END_AREA = d.S_END_AREA, - N_FORCE = o.N_FORCE, - S_BATCH_NO = d.S_BATCH_NO, - N_STATE = 0 - }; - if (db.Insertable<TN_Outbound_Task>(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info("鎻掑叆浠诲姟鍑洪敊"); - return; - } - } - - d.N_B_STATE = 1; - if (db.Updateable<TN_Outbound_Detail>(d).UpdateColumns(c => c.N_B_STATE).ExecuteCommand() > 0) { - LogHelper.Info("鏇存柊 N_B_STATE 鎴愬姛"); - } - else { - tran.RollbackTran(); - - LogHelper.Info("鏇存柊 N_B_STATE 澶辫触"); - return; - } - } - - o.N_B_STATE = 1; - if (db.Updateable<TN_Outbound_Order>(o).UpdateColumns(c => c.N_B_STATE).ExecuteCommand() > 0) { - LogHelper.Info("鏇存柊 N_B_STATE 鎴愬姛"); - } - else { - tran.RollbackTran(); - - LogHelper.Info("鏇存柊 N_B_STATE 澶辫触"); - return; - } + if (!TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) { + tran.RollbackTran(); } tran.CommitTran(); @@ -85,87 +75,48 @@ } catch (Exception ex) { LogHelper.InfoEx(ex); - throw; } } - /// <summary> - /// 杞鍑哄簱 - /// </summary> - public static void CheckOutboundTask() { + public static void UpdateTaskState(int spotStateCode) { + var db = DbHelper.GetDbClient(); - try { - var task = db.Queryable<TN_Outbound_Task>() - .Where(t => t.N_STATE == 0).First(); + var detail = db.Queryable<TN_Outbound_Detail>() + .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; - if (task == null) { - LogHelper.Info("杞 | 鍑哄簱浠诲姟闃熷垪 鏆傛棤寰呮墽琛岀殑浠诲姟"); + if (detail == null) { + LogHelper.Info("鍑哄簱--AGV鍙栬揣--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); + return; + } + + using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = spotStateCode; + if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info("鍑哄簱--AGV鍙栬揣锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); return; } - var headTask = task; - if (headTask.N_STATE != 0) { - LogHelper.Info("杞 | 鍑哄簱浠诲姟闃熷垪 闃熷ご浠诲姟灏氭湭瀹屾垚"); - return; - } + var finishedCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO && d.N_B_STATE == 3); + var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO); - var locCntr = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail> - ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE) - // 绛涢�瑕佹眰鐨勭墿鏂欑紪鐮佸拰鎵规鍙�- .Where((l, c, d) => d.S_CG_ID == headTask.S_CG_ID && d.S_BATCH_NO == headTask.S_BATCH_NO) - // 濡傛灉涓嶆槸寮哄埗鍑哄簱锛岀墿鏂欑姸鎬佸繀椤诲繀椤诲悎鏍�- // 鍚﹀垯锛屽彧瑕佷笉鏄鍦ㄦ楠岀殑鐗╂枡鍗冲彲 - .Where((l, c, d) => (headTask.N_FORCE == 0 && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") - || (headTask.N_FORCE != 0 && d.N_ITEM_STATE != 3 && d.S_ITEM_STATE != "姝e湪妫�獙")) - // 鐗╂枡鐘舵�瀵瑰簲鐨勬暟瀛楋紝瓒婂皬瓒婁紭鍏�- .OrderBy((l, c, d) => d.N_ITEM_STATE) - .OrderBy(l => l.N_LAYER) - .Select((l, c) => new { Location = l, Container = c }).First(); - - if (locCntr == null) { - LogHelper.Info("杞 | 涓嶅瓨鍦ㄧ鍚堟潯浠剁殑鐗╂枡璐т綅"); - return; - } + LogHelper.Info($"鍑哄簱--AGV鍙栬揣--缁熻浠诲姟宸插畬鎴愶細{finishedCount} / {allCount}"); - var endLoc = db.Queryable<TN_Location>() - .Where(l => l.S_AREA_CODE == headTask.S_END_AREA) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty) - .OrderBy(l => l.S_CODE) - .First(); + if (finishedCount == allCount) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟锛屼换鍔¢兘宸茬粡瀹屾垚 - if (endLoc == null) { - LogHelper.Info("杞 | 涓嶅瓨鍦ㄧ鍚堟潯浠剁殑鍑哄簱缁堢偣搴撲綅"); - return; - } + if (db.Updateable<TN_Outbound_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) + .Where(it => it.S_NO == detail.S_OO_NO) + .ExecuteCommand() <= 0) { - using (var tran = db.Ado.UseTran()) { - if (TaskHelper.LogCreateTask(locCntr.Location.S_CODE, locCntr.Container.S_CNTR_CODE, endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) { - task.N_STATE = 1; - if (db.Updateable<TN_Outbound_Task>(task).UpdateColumns(c => c.N_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info("淇敼鍑哄簱浠诲姟鐘舵�閿欒"); - } - else { - tran.CommitTran(); - LogHelper.Info("淇敼鍑哄簱浠诲姟鐘舵�鎴愬姛"); - } + tran.RollbackTran(); + LogHelper.Info("鍑哄簱--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; } } - - } - catch (Exception ex) { - LogHelper.InfoEx(ex); - } - } - /// <summary> - /// - /// </summary> - /// <param name="state"></param> - public static void UpdateTaskState(int state = 2) { - + tran.CommitTran(); + } } } -- Gitblit v1.9.1