From fc25dda9baf3b5f4df23d35914f3dd343cf492e3 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 28 七月 2025 17:30:21 +0800 Subject: [PATCH] 优化WCSHelper / 序列号生成逻辑 , 添加强制任务处理模块 --- process/TaskProcess.cs | 223 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 190 insertions(+), 33 deletions(-) diff --git a/process/TaskProcess.cs b/process/TaskProcess.cs index adca1cd..35d6e15 100644 --- a/process/TaskProcess.cs +++ b/process/TaskProcess.cs @@ -14,41 +14,41 @@ #region 浠诲姟鐩稿叧 //--------------------------------------------------浠诲姟鐩稿叧-------------------------------------------------- /// <summary> - /// 鍙栬揣鍗歌揣瀹屾垚锛岀紦瀛樹綅鐘舵�鏇存柊 + /// 鍙栬揣鍗歌揣瀹屾垚,缂撳瓨浣嶇姸鎬佹洿鏂� /// </summary> /// <param name="mst"></param> /// <param name="load"></param> internal static void BufferLocUpdate(TN_Task mst, bool load) { //var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1; if (load) { - Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}"); - LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}"); - LocationHelper.UnbindLocCntr(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList()); + Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚,璧风偣瑙g粦瀹瑰櫒{mst.S_CNTR_CODE}"); + LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚,璧风偣瑙g粦瀹瑰櫒{mst.S_CNTR_CODE}"); + UnbindLocCntr(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList()); } else { - Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}"); - LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}"); - LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList()); + Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚,缁堢偣缁戝畾瀹瑰櫒{mst.S_CNTR_CODE}"); + LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚,缁堢偣缁戝畾瀹瑰櫒{mst.S_CNTR_CODE}"); + BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList()); } } /// <summary> - /// 浠诲姟鍙栨秷锛岀紦瀛樹綅鐘舵�鏇存柊 + /// 浠诲姟鍙栨秷,缂撳瓨浣嶇姸鎬佹洿鏂� /// </summary> /// <param name="mst"></param> internal static void BufferLocCancelUpdate(TN_Task mst) { - //浠诲姟鍙栨秷锛屽彇璐у畬鎴愬墠鐨勶紝璧风偣鐨刲oadingCount鍜岀粓鐐箄nLoadingCount閮芥竻闄わ紝鍙栬揣瀹屾垚鐨勫彧澶勭悊缁堢偣 + //浠诲姟鍙栨秷,鍙栬揣瀹屾垚鍓嶇殑,璧风偣鐨刲oadingCount鍜岀粓鐐箄nLoadingCount閮芥竻闄�鍙栬揣瀹屾垚鐨勫彧澶勭悊缁堢偣 if (WCSHelper.CheckActionRecordExist(mst.S_CODE, 4)) { - //鏍规嵁瀹㈡埛鐜板満瑕佹眰锛屽鏋滃彇璐у畬鎴愪换鍔″け璐ヤ汉宸ユ媺鍒扮粓鐐癸紝鎴戜滑灏卞綋鍗歌揣瀹屾垚澶勭悊锛涘鏋滄槸浜哄伐鎷夎蛋鍒板叾瀹冨尯鍩燂紝鎴戜滑灏辫В閿佺粓鐐癸紝鍒犻櫎鎵樼洏銆�+ //鏍规嵁瀹㈡埛鐜板満瑕佹眰,濡傛灉鍙栬揣瀹屾垚浠诲姟澶辫触浜哄伐鎷夊埌缁堢偣,鎴戜滑灏卞綋鍗歌揣瀹屾垚澶勭悊;濡傛灉鏄汉宸ユ媺璧板埌鍏跺畠鍖哄煙,鎴戜滑灏辫В閿佺粓鐐�鍒犻櫎鎵樼洏銆� //缁堢偣缁戝畾 BufferLocUpdate(mst, false); - LocationHelper.UnLockLoc(mst.S_END_LOC); + UnLockLoc(mst.S_END_LOC); } else { //璧风偣缁堢偣瑙i攣 - LocationHelper.UnLockLoc(mst.S_START_LOC); - LocationHelper.UnLockLoc(mst.S_END_LOC); + UnLockLoc(mst.S_START_LOC); + UnLockLoc(mst.S_END_LOC); } @@ -81,11 +81,11 @@ /// <param name="extData"></param> internal static void OperateReq(string no, int state, string forkliftNo, string extData = "") { if (state == 1101) { - //璇锋眰鍙栬揣锛�+ //璇锋眰鍙栬揣, } if (state == 1102) { - //璇锋眰鍗歌揣锛�- //鏍规嵁缁堢偣鍒ゆ柇锛屾槸cb02鐨勫叆鍙o紝鍒ゆ柇鍐呭瓨涓姸鎬侊紙瑕佺姸鎬佹椂闂达級锛屽厑璁稿嵏璐э紝閫氱煡agv鏀瑰弬鏁�+ //璇锋眰鍗歌揣, + //鏍规嵁缁堢偣鍒ゆ柇,鏄痗b02鐨勫叆鍙�鍒ゆ柇鍐呭瓨涓姸鎬�(瑕佺姸鎬佹椂闂� ,鍏佽鍗歌揣,閫氱煡agv鏀瑰弬鏁� var dic = new Dictionary<string, string>(); //< Req >< Order No = 'TN2302020002' ParamNo = '18' Param1 = '12' /></ Req > dic.Add("No", no); @@ -95,7 +95,165 @@ //鏀瑰畬鍙傛暟杞﹀瓙灏变細鑷繁鍗歌揣 } if (state == 1103) { - //澶ч搧妗嗗弶璧颁互鍚庨�鐭ワ紝鎴戜滑瑕侀�鐭ヨ緭閫佺嚎 + //澶ч搧妗嗗弶璧颁互鍚庨�鐭�鎴戜滑瑕侀�鐭ヨ緭閫佺嚎 + } + } + + /// <summary> + /// 鍙栬揣瀹岃В閿佽捣鐐�鍗歌揣瀹岃В閿佺粓鐐�鍙楠岄攣鐨勬潵婧�涔熷彲浠ヤ笉鏍¢獙 + /// </summary> + /// <param name="loc"></param> + /// <returns></returns> + public static bool UnLockLoc(string loc) { + LogHelper.Info("UnLockLoc:" + loc); + var res = false; + var db = new SqlHelper<object>().GetInstance(); + var model = db.Queryable<TN_Location>().Where(a => a.S_CODE == loc).First(); + if (model != null) { + model.S_LOCK_STATE = "鏃�; + model.N_LOCK_STATE = 0; + model.S_LOCK_OP = ""; + model.T_MODIFY = System.DateTime.Now; + res = db.Updateable(model).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() > 0; + LogHelper.Info("UnLockLoc:瑙i攣缁撴灉" + res); + } + else { + LogHelper.Info("UnLockLoc 澶辫触" + loc); + } + return res; + } + + /// <summary> + /// 璐т綅瑙g粦瀹瑰櫒 + /// </summary> + /// <param name="loc"></param> + /// <param name="cntrs"></param> + /// <returns></returns> + public static string UnbindLocCntr(string loc, List<string> cntrs) { + var db = new SqlHelper<object>().GetInstance(); + var logs = $"璐т綅:{loc},瀹瑰櫒:{JsonConvert.SerializeObject(cntrs)}"; + try { + var lcrList = db.Queryable<TN_Loc_Container>().Where(a => cntrs.Contains(a.S_CNTR_CODE) && a.S_LOC_CODE == loc).ToList(); + if (lcrList.Count == 0) { + LogHelper.Info($"璐т綅鏃犻渶瑙g粦瀹瑰櫒,鍦ㄦ暟鎹簱涓湭鎵惧埌{JsonConvert.SerializeObject(cntrs)}鐩稿叧鐨勮揣浣嶅鍣ㄥ叧绯昏〃淇℃伅"); + } + cntrs = lcrList.Select(a => a.S_CNTR_CODE).ToList(); + + var log = JsonConvert.SerializeObject(cntrs); + var location = db.Queryable<TN_Location>().First(a => a.S_CODE == loc); + if (location != null) { + location.N_CURRENT_NUM = 0; + location.S_LOCK_STATE = "鏃�; + location.N_LOCK_STATE = 0; + + using (var tran = db.Ado.UseTran()) { + if (db.Deleteable<TN_Loc_Container>().Where(it => cntrs.Contains(it.S_CNTR_CODE) && it.S_LOC_CODE == loc).ExecuteCommand() > 0) { + LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔�{log}"); + } + else { + tran.RollbackTran(); + + LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐�{log}"); + + return "璐т綅瑙g粦瀹瑰櫒澶辫触," + logs; + } + + log = JsonConvert.SerializeObject(location); + if (db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand() > 0) { + tran.CommitTran(); + + LogHelper.Info($"鏇存柊璐т綅琛ㄦ垚鍔�{log}"); + } + else { + tran.RollbackTran(); + + LogHelper.Info($"鏇存柊璐т綅琛ㄥけ璐�{log}"); + + return "璐т綅瑙g粦瀹瑰櫒澶辫触," + logs; + } + } + } + else { + LogHelper.Info($"鍦ㄦ暟鎹簱涓湭鎵惧埌璇ヨ揣浣�鏃犻渶鏇存柊,璐т綅:{loc}"); + } + return "璐т綅瑙g粦瀹瑰櫒鎴愬姛," + logs; + } + catch (Exception ex) { + LogHelper.Info($"鍙戠敓浜嗗紓甯�璐т綅瑙g粦瀹瑰櫒澶辫触,{ex.Message}"); + return "璐т綅缁戝畾瀹瑰櫒澶辫触," + logs; + } + } + + /// <summary> + /// 璐т綅缁戝畾瀹瑰櫒 + /// </summary> + /// <param name="loc"></param> + /// <param name="cntrs"></param> + /// <returns></returns> + public static string BindingLoc(string loc, List<string> cntrs) { + var db = new SqlHelper<object>().GetInstance(); + var logs = $"璐т綅:{loc},瀹瑰櫒:{JsonConvert.SerializeObject(cntrs)}"; + try { + // 鍒犻櫎宸茬粡缁戝畾杩囩殑瀹瑰櫒璁板綍 + var lcrList = db.Queryable<TN_Loc_Container>().Where(a => cntrs.Contains(a.S_CNTR_CODE) && a.S_LOC_CODE == loc).ToList(); + if (lcrList.Count > 0) { + cntrs = cntrs.Except(lcrList.Select(a => a.S_CNTR_CODE).ToList()).ToList(); + } + + var bindLocCntList = new List<TN_Loc_Container>(); + foreach (var item in cntrs) { + // 閽堝瀹瑰櫒绫诲瀷娣诲姞鐨勬柊閫昏緫 + var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == item).First(); + + if (cntr == null) { + LogHelper.Info($"璐т綅瑙g粦鏃�瀹瑰櫒{item}娌℃湁鍦ㄥ鍣ㄤ俊鎭〃涓煡鍒�涓嶈褰曞鍣ㄧ被鍨�); + bindLocCntList.Add(new TN_Loc_Container() { S_LOC_CODE = loc, S_CNTR_CODE = item }); + } + else { + bindLocCntList.Add(new TN_Loc_Container() { S_LOC_CODE = loc, S_CNTR_CODE = item, S_CNTR_TYPE = cntr.S_TYPE }); + } + } + + var log = JsonConvert.SerializeObject(bindLocCntList); + + using (var tran = db.Ado.UseTran()) { + if (db.Insertable(bindLocCntList).ExecuteCommand() <= 0) { + db.RollbackTran(); + LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐�{log}"); + return "璐т綅缁戝畾瀹瑰櫒澶辫触," + logs; + } + LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔�{log}"); + + var location = db.Queryable<TN_Location>().First(a => a.S_CODE == loc); + if (location != null) { + location.N_CURRENT_NUM += cntrs.Count; + location.S_LOCK_STATE = "鏃�; + location.N_LOCK_STATE = 0; + log = JsonConvert.SerializeObject(location); + + if (db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand() > 0) { + db.CommitTran(); + + LogHelper.Info($"鏇存柊璐т綅琛ㄦ垚鍔�{log}"); + } + else { + db.RollbackTran(); + + LogHelper.Info($"鏇存柊璐т綅琛ㄥけ璐�{log}"); + + return "璐т綅缁戝畾瀹瑰櫒澶辫触," + logs; + } + } + else { + db.RollbackTran(); + LogHelper.Info($"鏈壘鍒拌璐т綅{loc},鎴栬�宸查攣瀹�{log}"); + } + } + return "璐т綅缁戝畾瀹瑰櫒鎴愬姛," + logs; + } + catch (Exception ex) { + LogHelper.Info($"鍙戠敓浜嗗紓甯�璐т綅缁戝畾瀹瑰櫒澶辫触,"); + return "璐т綅缁戝畾瀹瑰櫒澶辫触," + ex.Message; } } @@ -109,7 +267,7 @@ internal static bool SendTask(TN_Task mst) { var result = false; switch (mst.N_SCHEDULE_TYPE) { - case 1: //閫氳繃NDC锛宧osttoagv璋冨害璁惧 + case 1: //閫氳繃NDC,hosttoagv璋冨害璁惧 return SendNDCTask(mst); case 5: //閫氳繃鏉ゥ璋冨害璁惧 return SendHanAoTask(mst); @@ -125,31 +283,30 @@ var taskType = mst.S_TYPE.Trim(); if (mst.N_B_STATE == 0) { - start = LocationHelper.GetAgvSite(mst.S_START_LOC); - end = LocationHelper.GetAgvSite(mst.S_END_LOC); + start = WCSHelper.GetAgvSite(mst.S_START_LOC); + end = WCSHelper.GetAgvSite(mst.S_END_LOC); + LogHelper.Info($"NDC鎺ㄩ�浠诲姟:{mst.S_CODE};start='{start}',end='{end}'"); - LogHelper.Info($"NDC鎺ㄩ�浠诲姟 {mst.S_CODE};" + "start=" + start + "end= " + end); - var startLoc = LocationHelper.GetLoc(mst.S_START_LOC); - var endLoc = LocationHelper.GetLoc(mst.S_END_LOC); + var startLoc = WCSHelper.GetLocation(mst.S_START_LOC); + var endLoc = WCSHelper.GetLocation(mst.S_END_LOC); var dic = new List<param>(); dic.Add(new param() { name = "IKey", value = "IKey" }); dic.Add(new param() { name = "From", value = start.ToString() }); dic.Add(new param() { name = "To", value = end.ToString() }); dic.Add(new param() { name = "FUNC", value = startLoc.N_LAYER.ToString() }); - dic.Add(new param() { name = "Ctype", value = "0" }); var res = NDCApi.AddOrderNew(1, 1, mst.S_CODE, dic);//娣诲姞鏂板懡浠� if (res != null && (res.err_code == 0 || res.err_code == 50009)) { - //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇 + //鎺ㄩ�鎴愬姛,淇敼浠诲姟浼樺厛绾� mst.N_B_STATE = 1; mst.S_B_STATE = TN_Task.GetStateStr(1); - WCSHelper.UpdateStatus(mst);//鏇存柊浠诲姟鐘舵� + WCSHelper.UpdateTaskState(mst);//鏇存柊浠诲姟鐘舵� result = true; - LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}"); + LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛:{mst.S_CODE};start='{mst.S_START_LOC}',end='{mst.S_END_LOC}'"); } else { - LogHelper.Info($"NDC鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};Res:" + JsonConvert.SerializeObject(res)); + LogHelper.Info($"NDC鎺ㄩ�浠诲姟澶辫触:{mst.S_CODE};Res:" + JsonConvert.SerializeObject(res)); } } return result; @@ -163,8 +320,8 @@ if (mst.N_B_STATE == 0) { //var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = mst.S_START_LOC, dst = mst.S_END_LOC }), "p2p"); - start = LocationHelper.GetAgvSite(mst.S_START_LOC); - end = LocationHelper.GetAgvSite(mst.S_END_LOC); + start = WCSHelper.GetAgvSite(mst.S_START_LOC); + end = WCSHelper.GetAgvSite(mst.S_END_LOC); var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = start, dst = end }), "p2pdst", "pgapi"); @@ -173,8 +330,8 @@ mst.N_B_STATE = 1; mst.S_B_STATE = TN_Task.GetStateStr(1); mst.S_EQ_TASK_CODE = code.ToString(); - WCSHelper.UpdateStatus(mst); - WCSHelper.UpdateEQNo(mst); + WCSHelper.UpdateTaskState(mst); + WCSHelper.UpdateEqTaskNo(mst); LogHelper.Info($"鍥借嚜鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE};" + "start=" + mst.S_START_LOC + "end= " + mst.S_END_LOC); } else { @@ -196,7 +353,7 @@ }; if (HanAo.CreateOrder(model)) { mst.N_B_STATE = 1; - WCSHelper.UpdateStatus(mst); + WCSHelper.UpdateTaskState(mst); LogHelper.Info($"鏉ゥ鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE};" + "start=" + model.frmPos + "end= " + model.toPos); return true; } -- Gitblit v1.9.1