From 9fa293298c53429e8ac5148de8328933c0a80ff4 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期三, 11 六月 2025 17:26:04 +0800 Subject: [PATCH] 更新容器必须检查前台是否维护的功能 --- core/Monitor.cs | 486 +++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 369 insertions(+), 117 deletions(-) diff --git a/core/Monitor.cs b/core/Monitor.cs index 0dce8c5..8a7dbbd 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -4,104 +4,170 @@ using System.Text; using System.Threading.Tasks; +using HH.WCS.Mobox3.DSZSH.device; using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.util; using HH.WCS.Mobox3.DSZSH.wms; +using Microsoft.Win32; + using Newtonsoft.Json; namespace HH.WCS.Mobox3.DSZSH.core { public class Monitor { - public static void CheckOutboundOrder() { - var taskName = TaskName.鎴愬搧鑳跺嚭搴� + public class ItemData { + public string item_code { get; set; } + public string batch_no { get; set;} + public string cntr_code { get; set; } + } + + public static void CheckInbound() { + var taskName = TaskName.T鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱; var db = new SqlHelper<object>().GetInstance(); var info = ""; - try { - var orderList = db.Queryable<TN_Outbound_Order>() - .Where(c => c.N_B_STATE == 1) - .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) - .ToList(); + // 鏌ヤ骇绾挎槸鍚︽湁鐗╂枡淇℃伅 + foreach (var prod in Settings.ProductionLines) { + if (int.Parse(prod.Id) > 1) break; // TEST - if (orderList.Count == 0) { - LogHelper.Info("杞--鍑哄簱--鏆傛棤寰呮墽琛岀殑Order"); - return; - } + //var prodDevice = new ProductionLineDevice(prod); // TODO 寰呴渶姹傜‘瀹氬悗鍐嶅鐞�+ //TcpClientHelper.Link("127.0.0.1", 8550); // 鐢ㄤ簬娴嬭瘯 + TcpClientHelper.Link(prod.PlcIp, prod.PlcPort); - 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); - LogHelper.Info($"杞--鍑哄簱--缁熻鍑哄簱鍗�{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(); + // 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); continue; } - var lastDetail = db.Queryable<TN_Outbound_Detail>() - .Where(d => d.S_OO_NO == order.S_NO && d.N_B_STATE == 2) // TODO 鎴栬�鏀规垚鏌ask - .First(); - if (lastDetail != null) { - LogHelper.Info($"杞--鍑哄簱--鍑哄簱鍗�{order.S_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛� + JsonConvert.SerializeObject(lastDetail)); - continue; + // 3. 灏嗗瘎瀛樺櫒鍊艰浆鎹负瀛楄妭鏁扮粍 + //byte[] bytes = TcpClientHelper.ConvertRegistersToBytes(registers); + + // 4. 灏嗗瓧鑺傛暟缁勮浆鎹负瀛楃涓�+ string result = TcpClientHelper.ConvertBytesToString(read); + + //var itemData = BitConverter.ToString(read); + LogHelper.Info($"璇诲彇鐨勪骇绾夸俊鎭瘂result}"); + var data = JsonConvert.DeserializeObject<ItemData>(result); + + LogHelper.Info(JsonConvert.SerializeObject(data)); + + var itemCode = data.item_code; + var batchNo = data.batch_no; + var cntrCode = data.cntr_code; + + var startLocCode = prod.OffLoc[0]; // 鐢ㄤ簬娴嬭瘯 + //var startLocCode = "CX01"; // 鐢ㄤ簬娴嬭瘯 + + var cgDetail = new TN_CG_Detail { + S_ITEM_CODE = itemCode, + S_BATCH_NO = batchNo, + S_CNTR_CODE = cntrCode, + }; + + var needInsertContainer = false; + var needUpdateContainer = false; + + // TEMP 鑷姩瑙﹀彂鐨勬墭鐩樹笅绾挎殏鏃朵笉鑰冭檻鍒ゆ柇锛岄粯璁ゆ病鏈夋椂鍐欏叆 + // 鏌ュ鍣ㄤ俊鎭〃鏄惁宸茬粡鏈夎繖涓鍣�+ var cntr = db.Queryable<TN_Container>() + .Where(c => c.S_CODE == cntrCode).First(); + // 濡傛灉鎵句笉鍒拌瀹瑰櫒锛岄渶瑕佹坊鍔狅紝骞朵笖灏嗗鍣ㄦ潵婧愯缃负浠诲姟鍚嶇О + if (cntr == null) { + needInsertContainer = true; + LogHelper.Info($"杞锛歿taskName}锛氬鍣細{cntrCode}锛屽湪瀹瑰櫒琛ㄤ腑娌℃湁鐧昏锛岀櫥璁板苟璁剧疆瀹瑰櫒鏉ユ簮涓猴細{taskName}"); + + cntr = new TN_Container { + S_CODE = cntrCode, + S_TYPE = "鎵樼洏", + S_SPEC = itemCode, + }; + } + else { + // 濡傛灉鎵惧埌璇ュ鍣紝浣嗗鍣ㄧ墿鏂欑被鍨嬩笌涓嬬嚎鐗╂枡涓嶇锛岃褰曞苟鐩存帴瑕嗙洊锛堝緟瀹氾級 + if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { + needUpdateContainer = true; + LogHelper.Info($"杞锛歿taskName}锛氬鍣ㄨ〃涓鍣▄cntrCode}瀵瑰簲鐨勭墿鏂欎俊鎭細{cntr.S_SPEC}锛� + + $"涓庢墍闇�鐨勭墿鏂欎俊鎭瘂itemCode}涓嶇锛岀洿鎺ヨ鐩栫粨鏋�); + + cntr.S_SPEC = itemCode; + } } - var outboundDetail = db.Queryable<TN_Outbound_Detail>() - .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�- .First(); - if (outboundDetail != null) { - LogHelper.Info($"杞--鍑哄簱--"); - continue; - } - - detailList.Add(outboundDetail); - } - - if (detailList.Count == 0) { - return; - } - - var startLocList = new List<TN_Location>(); - var endLocList = new List<TN_Location>(); - - var taskList = new List<TN_Task>(); - - 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.S_CODE == startLocCode) // 鎸囧畾锛氳捣鐐硅揣浣嶅彿 + .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) { - LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); + info = $"璧风偣浣嶇疆 '{startLocCode}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�; + LogHelper.Info(info); continue; + //return; } + + // 缁戝畾璐т綅鍜屽鍣ㄥ彿 + var locCntrRel = new TN_Loc_Container { + S_LOC_CODE = startLocCode, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_CNTR_TYPE = "鎵樼洏", + }; var endLoc = db.Queryable<TN_Location>() - .Where(a => a.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(a => Settings.AreaMap[AreaName.K绌烘墭瀛樻斁鍖篯.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) { - LogHelper.Info($"杞--鍑哄簱锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛丼_NO涓�'{detail.S_OO_NO}'锛岃姹侫rea涓�'{detail.S_END_AREA}'"); + info = "绌烘墭鍏ュ簱鏆傛椂娌℃湁鍚堥�鐨勮揣浣嶅彲浠ュ叆搴�; + LogHelper.Info(info); continue; } - detail.N_B_STATE = 2; - - var cntId = detail.S_CNTR_CODE; + var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�+ LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�+ + cntr.S_SOURCE = task.S_CODE; + cntr.T_MODIFY = DateTime.Now; using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + if (needInsertContainer) { + if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { + info = $"鎻掑叆瀹瑰櫒琛ㄥけ璐ワ細" + JsonConvert.SerializeObject(cntr); + tran.RollbackTran(); + LogHelper.Info(info); + continue; + } + } + else if (needUpdateContainer) { + if (db.Updateable<TN_Container>(cntr) + .UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) { + info = $"鏇存柊瀹瑰櫒琛ㄥけ璐ワ細" + JsonConvert.SerializeObject(cntr); + tran.RollbackTran(); + LogHelper.Info(info); + continue; + } + } + + if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info($"杞--鍑哄簱--淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚澶辫触锛�); + info = $"鎻掑叆瀹瑰櫒璐у搧淇℃伅琛ㄥけ璐ワ細鐗╂枡缂栫爜{cgDetail.S_ITEM_CODE}锛屽鍣ㄧ紪鐮亄cgDetail.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 { @@ -111,7 +177,7 @@ it.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; LogHelper.Info(info); continue; } @@ -122,67 +188,251 @@ it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; LogHelper.Info(info); continue; } if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; LogHelper.Info(info); continue; } tran.CommitTran(); - info = $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; LogHelper.Info(info); continue; } } + } catch (Exception ex) { LogHelper.InfoEx(ex); } + } - public static void CheckCheckOrder() { - var taskName = TaskName.鎶芥_鍑哄簱; + public static void CheckOutboundOrder() { var db = new SqlHelper<object>().GetInstance(); var info = ""; + + var taskName = TaskName.C鎴愬搧鑳跺嚭搴� + try { - var orderList = db.Queryable<TN_Check_Order>() + var orderList = db.Queryable<TN_Outbound_Order>() .Where(c => c.N_B_STATE == 1) .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) .ToList(); if (orderList.Count == 0) { - LogHelper.Info($"杞--{taskName}--鏆傛棤寰呮墽琛岀殑{taskName}鍗�); + info = $"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�; + LogHelper.Info(info); return; } - var detailList = new List<TN_Check_Detail>(); + var detailList = new List<TN_Outbound_Detail>(); foreach (var order in orderList) { - var doingCount = db.Queryable<TN_Check_Detail>() - .Count(d => d.S_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_Check_Detail>() - .Count(d => d.S_NO == order.S_NO); - LogHelper.Info($"杞--{taskName}--缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"); + 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); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Check_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable<TN_Outbound_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } - var checkDetailList = db.Queryable<TN_Check_Detail>() - .Where(a => a.S_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�+ var lastDetail = db.Queryable<TN_Outbound_Detail>() + .Where(d => d.S_OO_NO == order.S_NO && d.N_B_STATE == 2) // [NOTE] 鎴栬�鏀规垚鏌ask + .First(); + + if (lastDetail != null) { + info = $"杞锛歿taskName}锛歿taskName}鍗�{order.S_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛� + JsonConvert.SerializeObject(lastDetail); + LogHelper.Info(info); + continue; + } + + var outboundDetail = db.Queryable<TN_Outbound_Detail>() + .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�+ .First(); + + if (outboundDetail == null) { + info = $"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟"; + LogHelper.Info(info); + continue; + } + + detailList.Add(outboundDetail); + } + + if (detailList.Count == 0) { + // 涓婇潰娴佺▼宸茬粡鎵撳嵃杩囨棩蹇�+ return; + } + + 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(); + + if (startLoc == null) { + info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�; + LogHelper.Info(info); + continue; + } + + var endLoc = db.Queryable<TN_Location>() + .Where(a => a.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(); + + if (endLoc == null) { + info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛佸崟鍙�{detail.S_OO_NO}'瑕佹眰缁堢偣搴撳尯涓�{detail.S_END_AREA}'"; + LogHelper.Info(info); + continue; + } + + detail.N_B_STATE = 2; + + 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 + }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"杞锛歿taskName}锛氱敓鎴愪换鍔�{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}锛氱敓鎴愪换鍔�{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; + LogHelper.Info(info); + continue; + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"杞锛歿taskName}锛氱敓鎴愪换鍔�{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; + LogHelper.Info(info); + continue; + } + + tran.CommitTran(); + info = $"杞锛歿taskName}锛氱敓鎴愪换鍔�{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; + LogHelper.Info(info); + continue; + } + } + + + //// 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); + } + } + + public static void CheckCheckOrder() { + var db = new SqlHelper<object>().GetInstance(); + var info = ""; + + var taskName = TaskName.C鎶芥_鍑哄簱; + + try { + var orderList = db.Queryable<TN_Spot_Check>() + .Where(c => c.N_B_STATE == 1) + .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) + .ToList(); + + if (orderList.Count == 0) { + LogHelper.Info($"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓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}"); + + if (doingCount == allCount) { + order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц + db.Updateable<TN_Spot_Check>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + continue; + } + + var checkDetailList = db.Queryable<TN_SpotCheck_Detail>() + .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙� .ToList(); if (checkDetailList.Count == 0) { - LogHelper.Info($"杞--"); + LogHelper.Info($"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟"); continue; } @@ -198,7 +448,7 @@ .First(); if (startLoc == null) { - LogHelper.Info($"杞--{taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); + LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); continue; } @@ -208,22 +458,22 @@ .Where(a => a.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - LogHelper.Info($"杞--{taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); + LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); continue; } detail.N_B_STATE = 2; var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�+ LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + if (db.Updateable<TN_SpotCheck_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info($"杞--{taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); + LogHelper.Info($"杞锛歿taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); continue; } @@ -234,7 +484,7 @@ it.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; LogHelper.Info(info); continue; } @@ -246,20 +496,20 @@ it.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; LogHelper.Info(info); continue; } if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; LogHelper.Info(info); continue; } tran.CommitTran(); - info = $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; LogHelper.Info(info); continue; } @@ -271,40 +521,40 @@ } public static void CheckShiftOrder() { - var taskName = TaskName.绉诲簱; + var taskName = TaskName.Y绉诲簱; var db = new SqlHelper<object>().GetInstance(); var info = ""; try { - var orderList = db.Queryable<TN_Shift_Order>() + var orderList = db.Queryable<TN_Relocation_List>() .Where(c => c.N_B_STATE == 1) .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) .ToList(); if (orderList.Count == 0) { - LogHelper.Info($"杞--{taskName}--鏆傛棤寰呮墽琛岀殑{taskName}鍗�); + LogHelper.Info($"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�); return; } - var detailList = new List<TN_Shift_Detail>(); + var detailList = new List<TN_RelocationList_Detail>(); foreach (var order in orderList) { - var doingCount = db.Queryable<TN_Shift_Detail>() - .Count(d => d.S_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_Shift_Detail>() - .Count(d => d.S_NO == order.S_NO); - LogHelper.Info($"杞--{taskName}--缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"); + var doingCount = db.Queryable<TN_RelocationList_Detail>() + .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}"); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Shift_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable<TN_Relocation_List>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } - var checkDetailList = db.Queryable<TN_Shift_Detail>() - .Where(a => a.S_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�+ var checkDetailList = db.Queryable<TN_RelocationList_Detail>() + .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙� .ToList(); if (checkDetailList.Count == 0) { - LogHelper.Info($"杞--"); + LogHelper.Info($"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟"); continue; } @@ -317,10 +567,12 @@ 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(); if (startLoc == null) { - LogHelper.Info($"杞--{taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); + LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�); continue; } @@ -330,22 +582,22 @@ .Where(a => a.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - LogHelper.Info($"杞--{taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); + LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); continue; } detail.N_B_STATE = 2; var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName, detail.S_OO_NO); - LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+ LocationHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�+ LocationHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + if (db.Updateable<TN_RelocationList_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info($"杞--{taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); + LogHelper.Info($"杞锛歿taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); continue; } @@ -356,7 +608,7 @@ it.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; LogHelper.Info(info); continue; } @@ -368,20 +620,20 @@ it.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; LogHelper.Info(info); continue; } if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; LogHelper.Info(info); continue; } tran.CommitTran(); - info = $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; + info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; LogHelper.Info(info); continue; } -- Gitblit v1.9.1