From 2ca90a404fa1ab94eb6374f50c6ddd47a2b7f0e6 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 31 七月 2025 17:23:57 +0800 Subject: [PATCH] 删除有问题的TCP旧代码, 优化事务处理和ERP数据模型 --- core/Monitor.cs | 502 ++++++++++++------------------------------------------- 1 files changed, 110 insertions(+), 392 deletions(-) diff --git a/core/Monitor.cs b/core/Monitor.cs index b24ff54..86fafc7 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -22,13 +22,6 @@ public static void CheckInbound() { var db = new SqlHelper<object>().GetInstance(); - var info = ""; - - const string taskName = TaskName.T鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱; - const string startAreaName = AreaName.B鍖呰鍖� - const string endAreaName = AreaName.M婊℃墭璐ф灦鍖� - const string cntrType = "鎵樼洏"; - try { // 鏌ヤ骇绾挎槸鍚︽湁鐗╂枡淇℃伅 foreach (var prod in Settings.ProductionLines) { @@ -38,11 +31,10 @@ //TcpClientHelper.Link("127.0.0.1", 8550); // 鐢ㄤ簬娴嬭瘯 TcpClientHelper.Link(prod.PlcIp, prod.PlcPort); - // TCPClient浼犻�淇℃伅鐨勬椂鍊欙紝涓嶈鐢ㄦ柇鐐归樆濉炵▼搴�+ // TCPClient浼犻�淇℃伅鐨勬椂鍊�涓嶈鐢ㄦ柇鐐归樆濉炵▼搴� // {"item_code":"CG1001","batch_no":"BN1001","cntr_code":"CN2505111"} if (!TcpClientHelper.TryReadProductionLine(out byte[] read)) { - info = $"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}锛氳鍙栦骇绾夸俊鎭け璐�; - LogHelper.Info(info); + LogHelper.Info($"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}:璇诲彇浜х嚎淇℃伅澶辫触"); continue; } @@ -65,103 +57,7 @@ var startLocCode = prod.OffLoc[0]; // 鐢ㄤ簬娴嬭瘯 //var startLocCode = "CX01"; // 鐢ㄤ簬娴嬭瘯 - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == startLocCode) - .Where(l => Settings.AreaMap[startAreaName].Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") - //.Where(l => l.N_CURRENT_NUM == 0) // 缁戝畾鍓�- .First(); - - if (startLoc == null) { - info = $"鍦�{startAreaName}'涓病鏈夋壘鍒拌捣鐐硅揣浣�{startLocCode}'锛屾垨涓嶆弧瓒宠姹傦細鏈笂閿併�褰撳墠瀹瑰櫒鏁伴噺=0"; - LogHelper.Info(info); - } - - var locCntrRelOld = db.Queryable<TN_Loc_Container>() - .Where(c => c.S_CNTR_CODE == cntrCode).First(); - - // 缁戝畾璐т綅鍜屽鍣ㄥ彿 - var locCntrRel = new TN_Loc_Container { - S_LOC_CODE = startLocCode, - S_CNTR_CODE = cntrCode, - S_CNTR_TYPE = cntrType, - }; - - startLoc.N_CURRENT_NUM = 1; // 缁戝畾鍚�- - var endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[endAreaName].Contains(a.S_AREA_CODE)) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 - .OrderBy(l => l.N_LAYER) - .First(); - - if (endLoc == null) { - info = $"鍦ㄧ粓鐐硅揣鍖�{endAreaName}'涓紝娌℃湁鎵惧埌鍚堥�鐨勩�缁堢偣璐т綅銆戯紝闇�婊¤冻瑕佹眰锛氭湭涓婇攣銆佸綋鍓嶅鍣ㄦ暟閲�0"; - LogHelper.Info(info); - } - - var cntId = locCntrRel.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - - LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�- LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�- - using (var tran = db.Ado.UseTran()) { - if (locCntrRelOld != null) { - if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0 && - db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鍒犻櫎鏃ц揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛氳揣浣嶇紪鐮亄locCntrRelOld.S_LOC_CODE}锛屽鍣ㄧ紪鐮亄locCntrRelOld.S_CNTR_CODE}"; - LogHelper.Info(info); - continue; - } - } - - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅缂栫爜{locCntrRel.S_LOC_CODE}锛屽鍣ㄧ紪鐮亄locCntrRel.S_CNTR_CODE}"; - LogHelper.Info(info); - continue; - } - - if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�- }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } - - tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } + WCSCore.CreateInboundTask(startLocCode, cntrCode); } } @@ -173,19 +69,16 @@ public static void CheckOutboundOrder() { var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var (ok, msg) = (false, string.Empty); - const string taskName = TaskName.C鎴愬搧鑳跺嚭搴� + var taskInfo = ETask.C鎴愬搧鑳跺嚭搴�Info(); + var taskName = "鍑哄簱"; + const string preLog = "杞:鍑哄簱:"; try { - var orderList = db.Queryable<TN_Outbound_Order>() - .Where(c => c.N_B_STATE == 1) - .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) - .ToList(); - + var orderList = db.Queryable<TN_Outbound_Order>().Where(c => c.N_B_STATE == 1).OrderBy(c => c.T_CREATE).ToList(); if (orderList.Count == 0) { - info = $"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�; - LogHelper.Info(info); + LogHelper.Debug(preLog + $"鏆傛棤寰呮墽琛岀殑{taskName}鍗�); return; } @@ -193,16 +86,13 @@ var detailList = new List<TN_Outbound_Detail>(); foreach (var order in orderList) { - var doingCount = db.Queryable<TN_Outbound_Detail>() - .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_Outbound_Detail>() - .Count(d => d.S_OO_NO == order.S_NO); - info = $"杞锛歿taskName}锛氱粺璁taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"; - LogHelper.Info(info); + var doingCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); + var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == order.S_NO); + LogHelper.Info(preLog + $"缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙�{doingCount}/{allCount}"); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Outbound_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } @@ -211,8 +101,7 @@ .First(); if (lastDetail != null) { - info = $"杞锛歿taskName}锛歿taskName}鍗�{order.S_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛� + JsonConvert.SerializeObject(lastDetail); - LogHelper.Info(info); + LogHelper.Info(preLog + $"{taskName}鍗�{order.S_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑:" + JsonConvert.SerializeObject(lastDetail)); continue; } @@ -221,8 +110,7 @@ .First(); if (outboundDetail == null) { - info = $"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟"; - LogHelper.Info(info); + LogHelper.Info(preLog + $"浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�"); continue; } @@ -235,16 +123,10 @@ } foreach (var detail in detailList) { - var startLoc = db.Queryable<TN_Location>() - .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) // 鏍规嵁瀹瑰櫒鍙锋悳绱㈣捣鐐硅揣浣�- .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 1) - .First(); + var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where((l, c) => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == detail.S_CNTR_CODE).First(); if (startLoc == null) { - info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�; - LogHelper.Info(info); + LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�"); continue; } @@ -254,68 +136,29 @@ .Where(a => a.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛佸崟鍙�{detail.S_OO_NO}'瑕佹眰缁堢偣搴撳尯涓�{detail.S_END_AREA}'"; - LogHelper.Info(info); + LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�鍗曞彿'{detail.S_OO_NO}'瑕佹眰缁堢偣搴撳尯涓�{detail.S_END_AREA}'"); continue; } detail.N_B_STATE = 2; + detail.T_MODIFY = DateTime.Now; - var cntId = detail.S_CNTR_CODE; - - var erp_no = string.IsNullOrEmpty(detail.S_BS_NO) ? "" : detail.S_BS_NO; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO, erp_no); - - LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�- LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�- - using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"杞锛歿taskName}锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�; - LogHelper.Info(info); - continue; - } - - if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�- }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } - - tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - //continue; + var task = WCSHelper.BuildTaskAndLockLoc(startLoc, endLoc, detail.S_CNTR_CODE, taskName); + task.S_OP_CODE = detail.S_OO_NO; + if (string.IsNullOrEmpty(detail.S_BS_NO)) { + task.S_BS_NO = detail.S_BS_NO; + task.S_BS_TYPE = "ERP"; } - // 濡傛灉褰撳墠鍑哄簱鍗曟槑缁嗘槸ERP涓嬪彂鐨勶紝浠诲姟鍒涘缓瀹屾垚鍙嶉璐т綅淇℃伅 + (ok, msg) = DbTran.CreateTaskOrderObj(new CreateTaskOrderObj { + OutboundDetailToUpdate = detail, + StartLocToUpdate = startLoc, + EndLocToUpdate = endLoc, + TaskToInsert = task, + }); + LogHelper.Info(preLog + msg); + + // 濡傛灉褰撳墠鍑哄簱鍗曟槑缁嗘槸ERP涓嬪彂鐨�浠诲姟鍒涘缓瀹屾垚鍙嶉璐т綅淇℃伅 if (detail.S_BS_TYPE == "ERP") { //var createTaskReturnErpTask = Task.Run(() => { // CreateTaskReturnErp(task); @@ -325,72 +168,36 @@ } - - //// BEG 鏌ユ壘6涓湀浠ュ墠鐨勪换鍔¤〃鍜屼换鍔″姩浣滆〃 - //var oldTaskList = db.Queryable<TN_Task>() - // .Where(t => t.T_MODIFY < DateTime.Now.AddMonths(-6)) - // .Where(t => t.N_B_STATE == 3 && t.S_B_STATE == "瀹屾垚") - // .ToList(); - - //var oldTaskActionList = db.Queryable<TN_Task, TN_Task_Action>((t, a) => t.S_CODE == a.S_TASK_CODE) - // .Where(t => t.T_MODIFY < DateTime.Now.AddMonths(-6)) - // .Where(t => t.N_B_STATE == 3 && t.S_B_STATE == "瀹屾垚") - // .Select((t, a) => a) - // .ToList(); - //// END - - //using (var tran = db.Ado.UseTran()) { - // // 鍦ㄥ嚭搴撹疆璇腑澶勭悊锛屾煡鎵句换鍔″崟鏄惁鏈夊崐骞村墠涓斿凡缁忓畬鎴愮殑浠诲姟锛屽鏋滄湁鍒欏垹闄�- // // 杩欎釜鎿嶄綔涓嶅奖鍝嶆甯告祦绋嬶紝濡傛灉澶辫触涔熶笉闇�鍥炴粴 - // //if (db.Deleteable<TN_Task>() - // // .Where(t => t.T_MODIFY < DateTime.Now.AddMonths(-6)) - // // .Where(t => t.N_B_STATE == 3 && t.S_B_STATE == "瀹屾垚") - // // .ExecuteCommand() <= 0) { - // // info = $"杞{taskName}鍗曟椂灏濊瘯鍒犻櫎鍗婂勾鍓嶇殑浠诲姟澶辫触"; - // // LogHelper.Info(info); - // //} - // if (db.Deleteable<TN_Task>(oldTaskList).ExecuteCommand() <= 0 - // && db.Deleteable<TN_Task_Action>(oldTaskActionList).ExecuteCommand() <= 0) { - // info = $"杞{taskName}鍗曟椂灏濊瘯鍒犻櫎鍗婂勾鍓嶇殑浠诲姟澶辫触"; - // LogHelper.Info(info); - // } - //} - } catch (Exception ex) { - info = $"杞锛歿taskName}锛氬彂鐢熶簡寮傚父锛歿ex.Message}"; - LogHelper.InfoEx(ex); + LogHelper.InfoEx(ex, preLog); } } public static void CheckCheckOrder() { var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var (ok, msg) = (false, string.Empty); - const string taskName = TaskName.C鎶芥_鍑哄簱; + var taskInfo = ETask.C鎶芥鍑哄簱.Info(); + var taskName = taskInfo.TaskName; + const string preLog = "杞:鎶芥:"; try { - var orderList = db.Queryable<TN_Spot_Check>() - .Where(c => c.N_B_STATE == 1) - .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) - .ToList(); - + var orderList = db.Queryable<TN_Spot_Check>().Where(c => c.N_B_STATE == 1).OrderBy(c => c.T_CREATE).ToList(); if (orderList.Count == 0) { - LogHelper.Info($"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�); + LogHelper.Debug(preLog + $"鏆傛棤寰呮墽琛岀殑{taskName}鍗�); return; } var detailList = new List<TN_SpotCheck_Detail>(); foreach (var order in orderList) { - var doingCount = db.Queryable<TN_SpotCheck_Detail>() - .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_SpotCheck_Detail>() - .Count(d => d.S_OO_NO == order.S_NO); - LogHelper.Info($"杞锛歿taskName}锛氱粺璁taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"); + var doingCount = db.Queryable<TN_SpotCheck_Detail>().Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); + var allCount = db.Queryable<TN_SpotCheck_Detail>().Count(d => d.S_OO_NO == order.S_NO); + LogHelper.Info(preLog + $"缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙�{doingCount}/{allCount}"); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Spot_Check>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } @@ -399,7 +206,7 @@ .ToList(); if (checkDetailList.Count == 0) { - LogHelper.Info($"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟"); + LogHelper.Info(preLog + $"浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�); continue; } @@ -409,91 +216,53 @@ } foreach (var detail in detailList) { - var startLoc = db.Queryable<TN_Location>() - .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) - .First(); + var startLoc = db.Queryable<TN_Location>() .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE).First(); if (startLoc == null) { - LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); + LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�"); continue; } var endLoc = db.Queryable<TN_Location>() .Where(l => l.S_AREA_CODE == detail.S_END_AREA) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�:鏈笂閿� .Where(a => a.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); + LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�"); continue; } detail.N_B_STATE = 2; + detail.T_MODIFY = DateTime.Now; var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO); + var task = WCSHelper.BuildTaskAndLockLoc(startLoc, endLoc, cntId, taskName); + task.S_OP_CODE = detail.S_OO_NO; - LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�- LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�- - using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_SpotCheck_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info($"杞锛歿taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); - continue; - } - - if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�- }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } - - tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } + (ok, msg) = DbTran.CreateTaskOrderObj(new CreateTaskOrderObj { + SpotCheckDetailToUpdate = detail, + StartLocToUpdate = startLoc, + EndLocToUpdate = endLoc, + TaskToInsert = task, + }); + LogHelper.Info(preLog + msg); } } catch (Exception ex) { - LogHelper.InfoEx(ex); + LogHelper.InfoEx(ex, preLog); } } public static void CheckShiftOrder() { var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var (ok, msg) = (false, string.Empty); - const string taskName = TaskName.Y绉诲簱; - + var taskInfo = ETask.Y绉诲簱.Info(); + var taskName = taskInfo.TaskName; + const string preLog = "杞:绉诲簱:"; + try { var orderList = db.Queryable<TN_Relocation_List>() .Where(c => c.N_B_STATE == 1) @@ -501,7 +270,7 @@ .ToList(); if (orderList.Count == 0) { - LogHelper.Info($"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�); + LogHelper.Debug(preLog + $"鏆傛棤寰呮墽琛岀殑{taskName}鍗�); return; } @@ -511,11 +280,11 @@ .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓� var allCount = db.Queryable<TN_RelocationList_Detail>() .Count(d => d.S_OO_NO == order.S_NO); - LogHelper.Info($"杞锛歿taskName}锛氱粺璁taskName}鍗�{order.S_NO}浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"); + LogHelper.Info(preLog + $"缁熻{taskName}鍗�{order.S_NO}浠诲姟宸蹭笅鍙�{doingCount}/{allCount}"); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Relocation_List>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } @@ -524,7 +293,7 @@ .ToList(); if (checkDetailList.Count == 0) { - LogHelper.Info($"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟"); + LogHelper.Info(preLog + $"浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�); continue; } @@ -534,92 +303,44 @@ } foreach (var detail in detailList) { - var startLoc = db.Queryable<TN_Location>() - .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 1) - .First(); + var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where(DbExpr.StartLoc()).Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE).First(); if (startLoc == null) { - info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板鍣ㄥ彿={detail.S_CNTR_CODE}鐨勮捣鐐硅揣浣嶏紒闇�婊¤冻锛氭湭涓婇攣銆佸綋鍓嶅鍣ㄦ暟閲�1"; - LogHelper.Info(info); + LogHelper.Info(preLog + LogMsg.StartLocNotFound() + $"缁戝畾瀹瑰櫒='{detail.S_CNTR_CODE}'"); continue; } var endLoc = db.Queryable<TN_Location>() - .Where(l => l.S_AREA_CODE == detail.S_END_AREA) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0).First(); - + .Where(DbExpr.EndLoc(areas: new List<string> { detail.S_END_AREA })).First(); if (endLoc == null) { - info = $"杞锛歿taskName}锛氭病鏈夋壘鍒扮粓鐐硅揣浣�{detail.S_END_AREA}鐨勭粓鐐硅揣浣嶏紒闇�婊¤冻锛氭湭涓婇攣銆佸綋鍓嶅鍣ㄦ暟閲�0"; - LogHelper.Info(info); + LogHelper.Info(preLog + LogMsg.EndLocNotFound(areas: new List<string> { detail.S_END_AREA })); continue; } detail.N_B_STATE = 2; + detail.T_MODIFY = DateTime.Now; var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO); + var task = WCSHelper.BuildTaskAndLockLoc(startLoc, endLoc, cntId, taskName); + task.S_OP_CODE = detail.S_OO_NO; - LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�- LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�- - using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_RelocationList_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info($"杞锛歿taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); - continue; - } - - if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�- }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } - - tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } + (ok, msg) = DbTran.CreateTaskOrderObj(new CreateTaskOrderObj { + RelocationDetailToUpdate = detail, + StartLocToUpdate = startLoc, + EndLocToUpdate = endLoc, + TaskToInsert = task, + }); + LogHelper.Info(preLog + msg); } } catch (Exception ex) { - LogHelper.InfoEx(ex); + LogHelper.InfoEx(ex, preLog); } } public static void CreateTaskReturnErp(TN_Task task) { var db = new SqlHelper<object>().GetInstance(); - var info = ""; var httpH = new HttpHelper(); try { @@ -628,8 +349,7 @@ .First(); if (plan == null) { - info = $"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦紒"; - LogHelper.Info(info); + LogHelper.Info($"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�"); } var cgDetail = db.Queryable<TN_CG_Detail>() @@ -637,13 +357,12 @@ .First(); if (cgDetail == null) { - info = $"鐗╂枡缂栫爜涓嶅瓨鍦紒"; - LogHelper.Info(info); + LogHelper.Info($"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�"); } - var model = new OtherModel.CreateTaskReturnErpInfo { - jhdh = plan.JHDH , // 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級 - ckzt = plan.CKZT , // 鍑哄簱鐘舵�锛堥渶瑕佽繑鍥烇級 + var model = new ErpModel.CreateTaskReturnErpInfo { + jhdh = plan.JHDH , // 璁″垝鍗曞彿 (鍞竴鏍囪瘑) + ckzt = plan.CKZT , // 鍑哄簱鐘舵� (闇�杩斿洖) jhlb = plan.JHLB , // 璁″垝绫诲埆 ckdh = plan.CKDH , // 鍙傝�鍗曞彿 cph = plan.CPH , // 杞︾墝鍙�@@ -654,9 +373,9 @@ cplb = plan.CPLB , // 浜у搧绫诲埆 cplbmx = plan.CPLBMX , // 浜у搧绫诲埆鏄庣粏 pp = plan.PP , // 鍝佺墝 - dj = plan.DJ , // 绛夌骇锛堥渶瑕佽繑鍥烇級 + dj = plan.DJ , // 绛夌骇 (闇�杩斿洖) gh = plan.GH , // 缃愬彿 - ph = plan.PH , // 鎵瑰彿锛堥渶瑕佽繑鍥烇級 + ph = plan.PH , // 鎵瑰彿 (闇�杩斿洖) bzlx = plan.BZLX , // 鍖呰绫诲瀷 pzdh = plan.PZDH , // 娲捐鍗曞彿 pzd_dw = plan.PZD_DW , // 娲捐鍗曞崟浣�@@ -669,15 +388,15 @@ pz_zfrq = plan.PZ_ZFRQ , // 娲捐浣滃簾鏃ユ湡 pz_bz = plan.PZ_BZ , // 娲捐澶囨敞 ckdbh = plan.CKDBH , // 鍑哄簱鍗曠紪鍙�- //sfjs = plan.SFJS , // 瀹炲彂浠舵暟锛堥渶瑕佽繑鍥烇級 - //sfsl = plan.SFSL , // 瀹炲彂鏁伴噺锛堥渶瑕佽繑鍥烇級 - //sfcs = plan.SFCS , // 瀹炲彂杞︽暟锛堥渶瑕佽繑鍥烇級 - //zcsj = plan.ZCSJ , // 瑁呰溅鏃堕棿锛堥渶瑕佽繑鍥烇級 - //jldw = plan.JLDW , // 璁¢噺鍗曚綅锛堥渶瑕佽繑鍥烇級 - //fhrq = plan.FHRQ , // 鍙戣揣鏃ユ湡锛堥渶瑕佽繑鍥烇級 - //ckdm = plan.CKDM , // 浠撳簱浠g爜锛堥渶瑕佽繑鍥烇級 - //fhr = plan.FHR , // 鍙戣揣浜猴紙闇�杩斿洖锛�- //czydm = plan.CZYDM , // 鎿嶄綔鍛橈紙闇�杩斿洖锛�+ //sfjs = plan.SFJS , // 瀹炲彂浠舵暟 (闇�杩斿洖) + //sfsl = plan.SFSL , // 瀹炲彂鏁伴噺 (闇�杩斿洖) + //sfcs = plan.SFCS , // 瀹炲彂杞︽暟 (闇�杩斿洖) + //zcsj = plan.ZCSJ , // 瑁呰溅鏃堕棿 (闇�杩斿洖) + //jldw = plan.JLDW , // 璁¢噺鍗曚綅 (闇�杩斿洖) + //fhrq = plan.FHRQ , // 鍙戣揣鏃ユ湡 (闇�杩斿洖) + //ckdm = plan.CKDM , // 浠撳簱浠g爜 (闇�杩斿洖) + //fhr = plan.FHR , // 鍙戣揣浜�(闇�杩斿洖) + //czydm = plan.CZYDM , // 鎿嶄綔鍛�(闇�杩斿洖) shr_username = plan.SHR_USERNAME , // 瀹℃牳浜� shrq = plan.SHRQ , // 瀹℃牳鏃ユ湡 zfbj = plan.ZFBJ , // 浣滃簾鏍囪 @@ -686,30 +405,29 @@ shdw = plan.SHDW , // 鏀惰揣鍗曚綅 ysdw = plan.YSDW , // 杩愯緭鍗曚綅 lxr = plan.LXR , // 鑱旂郴浜�- //ry_zxg = plan.RY_ZXG , // 瑁呭嵏宸ワ紙闇�杩斿洖锛�- //ry_ccsj = plan.RY_CCSJ , // 鍙夎溅鍙告満锛堥渶瑕佽繑鍥烇級 + //ry_zxg = plan.RY_ZXG , // 瑁呭嵏宸�(闇�杩斿洖) + //ry_ccsj = plan.RY_CCSJ , // 鍙夎溅鍙告満 (闇�杩斿洖) erphx_jhdh = plan.ERPHX_JHDH , // erp浜よ揣鍗曞彿 erphx_wlbm = plan.ERPHX_WLBM , // erp鐗╂枡缂栫爜 erphx_wlmc = plan.ERPHX_WLMC , // erp鐗╂枡鍚嶇О erphx_cjrq = plan.ERPHX_CJRQ , // erp鍒涘缓鏃ユ湡 - hw = plan.HW , // 璐т綅锛堥渶瑕佽繑鍥烇級 - hwzt = plan.HWZT // 璐т綅鐘舵�锛堥渶瑕佽繑鍥烇級 + hw = plan.HW , // 璐т綅 (闇�杩斿洖) + hwzt = plan.HWZT // 璐т綅鐘舵� (闇�杩斿洖) }; model.hw = task.S_START_LOC; model.hwzt = "寰呭嚭搴�; model.ph = cgDetail.S_BATCH_NO; var jsonInfo = JsonConvert.SerializeObject(model); - var result = httpH.WebPost(Settings.ErpApiUrl + "CreateTaskReturn", jsonInfo); + var result = httpH.WebPost(Settings.ErpApiUrl + Settings.ErpRoute.CreateTaskReturn, jsonInfo); - LogHelper.InfoApi($"鍒涘缓浠诲姟瀹屾垚鍙嶉ERP鎺ュ彛锛岀粨鏋�{result}锛岃皟鐢ㄥ弬鏁帮細", model); + LogHelper.InfoApi($"鍒涘缓浠诲姟瀹屾垚鍙嶉ERP鎺ュ彛,缁撴灉={result},璋冪敤鍙傛暟:", model); plan.HW = model.hw; plan.HWZT = model.hwzt; plan.PH = model.ph; - var success = db.Updateable<TN_Outbound_Plan>(plan).UpdateColumns(p => new { p.HW, p.HWZT, p.PH }).ExecuteCommand() > 0; - info = "鏇存柊鍑哄簱璁″垝鍗曡褰曡〃" + (success ? "鎴愬姛" : "澶辫触"); - LogHelper.Info(info); + var success = db.Updateable(plan).UpdateColumns(p => new { p.HW, p.HWZT, p.PH }).ExecuteCommand() > 0; + LogHelper.Info("鏇存柊鍑哄簱璁″垝鍗曡褰曡〃" + (success ? "鎴愬姛" : "澶辫触")); } catch (Exception ex) { LogHelper.InfoEx(ex); -- Gitblit v1.9.1