From 83109bffe17f4cf877bb9546065723835a3c6b7d Mon Sep 17 00:00:00 2001 From: lss <Lss@HanInfo> Date: 星期三, 18 六月 2025 17:30:38 +0800 Subject: [PATCH] 货位禁用添加,国自安全交互流程变更 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs | 209 +++++++++++++++++++++++++++++++-------------------- 1 files changed, 127 insertions(+), 82 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs index 95b74ba..ac7cbf3 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs @@ -38,12 +38,12 @@ public static object _lockCreateTask = new object(); + public static object _lockCreateItem = new object(); /// <summary> /// 绔嬪簱浠诲姟涓嬪彂=銆嬪垱寤轰换鍔� /// </summary> /// <param name="model"></param> /// <returns></returns> - internal static Result Createtask(CreateTask model) { Result result = new Result() { code = "0", msg = "鍒涘缓鎴愬姛" }; @@ -170,10 +170,10 @@ if (startloc != null) { Start = startloc.S_CODE; - var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).FirstOrDefault(); + var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).OrderBy(a => a.T_CREATE).FirstOrDefault(); if (CntrRel != null) { - if (CntrRel.S_CNTR_CODE!= partData.rfid) + if (CntrRel.S_CNTR_CODE != partData.rfid) { result.code = "1"; result.msg = $"鏍规嵁璧风偣锛歿Start}鑾峰彇鎵樼洏:{CntrRel.S_CNTR_CODE}涓庝笅鍙戞墭鐩橈細{partData.rfid}涓嶄竴鑷达紝璇锋鏌ユ墭鐩樼爜鏄惁姝g‘"; @@ -184,7 +184,7 @@ { CntrCode = CntrRel.S_CNTR_CODE; } - + } //else //{ @@ -693,23 +693,63 @@ try { string[] state = new string[] { "鍙栨秷", "澶辫触", "閿欒", "瀹屾垚" }; - //鎵惧埌浠诲姟 - var task = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO.Trim() == model.task_no && !state.Contains(a.S_B_STATE)).First(); - if (task != null) + if (model.type == "1") { - if (model.type == "1" || model.type == "2") + //鎵惧埌浠诲姟 + var task = db.Queryable<WCSTask>().Where(a => a.S_START_LOC.Trim() == model.loc && !state.Contains(a.S_B_STATE)).ToList(); + if (task.Count > 0) { - NDCApi.ChangeOrderParam(task.S_CODE.Trim(), 6, "1"); + foreach (var item in task) + { + var taskAction = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == item.S_CODE).OrderByDescending(a => a.T_CREATE).First(); + if (taskAction.N_ACTION_CODE == 1101) + { + NDCApi.ChangeOrderParam(item.S_CODE.Trim(), 6, "1"); + return result; + } + result.code = "1"; + result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴旂敵璇峰彇璐х姸鎬佷换鍔�; + AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no); + return result; + } } - + else + { + result.code = "1"; + result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴斾换鍔�; + AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no); + return result; + } } - else + else if (model.type == "2") { - result.code = "1"; - result.msg = $"鏍规嵁涓嬪彂浠诲姟鍙穥model.task_no}鏈壘鍒板搴斾换鍔�; - AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no); - return result; + //鎵惧埌浠诲姟 + var task = db.Queryable<WCSTask>().Where(a => a.S_END_LOC.Trim() == model.loc && !state.Contains(a.S_B_STATE)).ToList(); + if (task.Count > 0) + { + foreach (var item in task) + { + var taskAction = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == item.S_CODE).OrderByDescending(a => a.T_CREATE).First(); + if (taskAction.N_ACTION_CODE == 1103) + { + NDCApi.ChangeOrderParam(item.S_CODE.Trim(), 6, "1"); + return result; + } + } + result.code = "1"; + result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴旂敵璇峰嵏璐х姸鎬佷换鍔�; + AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no); + return result; + } + else + { + result.code = "1"; + result.msg = $"鏍规嵁涓嬪彂璐т綅{model.loc}鏈壘鍒板搴斾换鍔�; + AddErrorInfo("鏈壘鍒颁换鍔�, result.msg, "", model.task_no); + return result; + } } + return result; } catch (Exception ex) @@ -729,6 +769,7 @@ /// <returns></returns> internal static Result TrayItembind(TrayItembind model) { + Result result = new Result() { code = "200", msg = "浜у嚭淇℃伅涓嬪彂鎴愬姛" }; if (model == null) { @@ -737,29 +778,34 @@ AddErrorInfo("鍙傛暟涓虹┖", result.msg); return result; } - try + lock (_lockCreateItem) { - //鍒涘缓鎵樼洏鏁版嵁缁戝畾鍏崇郴 - if (ContainerHelper.CreateCntrItem(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime)) + try { - //鍒涘缓鎴愬姛娴佺▼ - } - else - { - result.code = "1"; - result.msg = "浜у嚭淇℃伅涓嬪彂澶辫触锛屾墭鐩樼墿鏂欑粦瀹氬叧绯诲垱寤哄け璐�; - AddErrorInfo("鍒涘缓缁戝畾鍏崇郴澶辫触", result.msg, "Mes"); + + //鍒涘缓鎵樼洏鏁版嵁缁戝畾鍏崇郴 + if (ContainerHelper.CreateCntrItem(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime)) + { + //鍒涘缓鎴愬姛娴佺▼ + } + else + { + result.code = "1"; + result.msg = "浜у嚭淇℃伅涓嬪彂澶辫触锛屾墭鐩樼墿鏂欑粦瀹氬叧绯诲垱寤哄け璐�; + AddErrorInfo("鍒涘缓缁戝畾鍏崇郴澶辫触", result.msg, "Mes"); + return result; + } return result; } - return result; + catch (Exception ex) + { + result.code = "1"; + result.msg = ex.ToString(); + LogHelper.Error("TrayItembind Error锛� + ex.ToString(), ex); + return result; + } } - catch (Exception ex) - { - result.code = "1"; - result.msg = ex.ToString(); - LogHelper.Error("TrayItembind Error锛� + ex.ToString(), ex); - return result; - } + } @@ -874,13 +920,8 @@ return result; } - //鍒ゆ柇鏈夋棤鐩稿悓鐗╂枡鎺� loc = StorageCompute(itemcode, areacode); - //if (loc == null) - //{ - // //鏃犵浉鍚岀墿鏂欐帓鎵剧┖鎺�- // loc = emptyRow(areacode); - //} + if (loc != null) { End = loc.S_CODE; @@ -1219,7 +1260,7 @@ if (startloc.N_LAYER == 3) { //鍙犵洏璐т綅璁$畻鍙犵洏璐т綅 - var dploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鍙犵洏" && a.N_LAYER == startloc.N_LAYER && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList(); + var dploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鍙犵洏" && a.N_LAYER == startloc.N_LAYER && a.S_WH_CODE.Trim() == startloc.S_WH_CODE && a.C_ENABLE == "Y").ToList(); if (dploc.Count > 0) { // LogHelper.Info($"鑾峰彇鍙犵洏璐т綅:{JsonConvert.SerializeObject(dploc)}"); @@ -1250,7 +1291,7 @@ else if (startloc.S_NOTE == "PB") { //鎵惧潡鑳跺爢鍙犲尯 - var KjDploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鐗囪兌鍫嗗彔浣� && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList(); + var KjDploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鐗囪兌鍫嗗彔浣� && a.S_WH_CODE.Trim() == startloc.S_WH_CODE && a.C_ENABLE == "Y").ToList(); if (KjDploc.Count > 0) { loc = KjDploc.FindAll(a => a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM < 6).OrderByDescending(a => a.N_CURRENT_NUM).FirstOrDefault(); @@ -1644,7 +1685,7 @@ } else { - if (db.Updateable(new LocCntrRel() { S_CNTR_CODE = model.Rfid, S_LOC_CODE = Start }).UpdateColumns().ExecuteCommand() <= 0) + if (db.Insertable(new LocCntrRel() { S_CNTR_CODE = model.Rfid, S_LOC_CODE = Start }).ExecuteCommand() <= 0) { result.code = "1"; result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾璐т綅{Start}澶辫触"; @@ -1703,7 +1744,6 @@ { //loc = EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0); loc = FindEndcolByLocList(EndLocs); - } else @@ -2094,7 +2134,7 @@ var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.Data.start_loc_code).First(); - var endloc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == model.Data.end_loc_code && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0).First(); + var endloc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == model.Data.end_loc_code && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); //鍒ゆ柇妤煎眰鏄惁鐩哥瓑锛屽鏋滀笉鐩稿悓闇�鐢熸垚鍒嗘浠诲姟杩涜鐢垫璋冪敤 @@ -2153,8 +2193,8 @@ Z_TYPE = 6 }; - - if (WCSHelper.CreateTask(wcsTask) ) + + if (WCSHelper.CreateTask(wcsTask)) { LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); var device = Settings.deviceInfos.Where(a => a.TN_Location == startloc.S_CODE).FirstOrDefault(); @@ -2167,7 +2207,7 @@ { LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{endloc.S_CODE},鏈壘鍒板搴旇揣浣�); } - if (device!=null&&loc!=null) + if (device != null && loc != null) { int value = 0; if (loc.N_LAYER == 1) value = 1; @@ -2177,10 +2217,10 @@ ModbusHelper.WriteSingleRegister(40089, value, device.address, 1024); ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024); } - + //LocationHelper.LockLoc(startloc.S_CODE, 2); //LocationHelper.LockLoc(endloc.S_CODE, 1); - + } else { @@ -2298,54 +2338,59 @@ } string loc = model.LocationNum; var db = new SqlHelper<object>().GetInstance(); - try + lock (_lockCreateItem) { - var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First(); - if (location != null) + try { - var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).First(); - - if (loccntr != null) + var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First(); + if (location != null) { - string cntrcode = loccntr.S_CNTR_CODE; - var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First(); - if (CntrItem != null) + var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).First(); + + if (loccntr != null) { - //娓呴櫎鎵樼洏鐗╂枡缁戝畾鍏崇郴 - db.Deleteable<CntrItemDetail>().Where(it => it.S_CNTR_CODE.Trim() == CntrItem.S_CNTR_CODE).ExecuteCommand(); + string cntrcode = loccntr.S_CNTR_CODE; + var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First(); + if (CntrItem != null) + { + //娓呴櫎鎵樼洏鐗╂枡缁戝畾鍏崇郴 + db.Deleteable<CntrItemDetail>().Where(it => it.S_CNTR_CODE.Trim() == CntrItem.S_CNTR_CODE).ExecuteCommand(); + } + else + { + LogHelper.Info($"ClearLocCntr 鎵樼洏{cntrcode}鏃犵墿鏂欑粦瀹氬叧绯�); + } + if (LocationHelper.UnBindingLoc(loc, new List<string>() { cntrcode })) + { + LogHelper.Info($"娓呴櫎鎵樼洏璐т綅鍏崇郴鎴愬姛"); + } + } else { - LogHelper.Info($"ClearLocCntr 鎵樼洏{cntrcode}鏃犵墿鏂欑粦瀹氬叧绯�); + LogHelper.Info($"ClearLocCntr 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�); } - if (LocationHelper.UnBindingLoc(loc, new List<string>() { cntrcode })) - { - LogHelper.Info($"娓呴櫎鎵樼洏璐т綅鍏崇郴鎴愬姛"); - } - } else { - LogHelper.Info($"ClearLocCntr 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�); + result.code = "1"; + result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�; + AddErrorInfo("璐т綅涓虹┖", result.msg, Source); + return result; } } - else + catch (Exception ex) { + LogHelper.Info($"ClearLocCntr Error锛歿ex}"); + db.Ado.CommitTran(); result.code = "1"; - result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�; - AddErrorInfo("璐т綅涓虹┖", result.msg, Source); + result.msg = $"Error锛歿ex}"; return result; + } } - catch (Exception ex) - { - LogHelper.Info($"ClearLocCntr Error锛歿ex}"); - db.Ado.CommitTran(); - result.code = "1"; - result.msg = $"Error锛歿ex}"; - return result; - - } + + return result; } @@ -2542,7 +2587,7 @@ internal static Location StorageCompute(string itemcode, string areacode) { var db = new SqlHelper<object>().GetInstance(); - Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).First(); + Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); //鏌ヨ鎵�湁鏈夋墭鐩樼殑鎺掓病閿佺殑鎺� // var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); // if (list.Count > 0) @@ -2739,7 +2784,7 @@ lock (_lockLocation) { - var loc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First(); + var loc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y").First(); if (loc != null) { End = loc; @@ -2812,7 +2857,7 @@ Location other = null; //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆 //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴灞傝涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�- other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0).FirstOrDefault(); + other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").FirstOrDefault(); //if (full == null) //{ // //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣� -- Gitblit v1.9.1