From 2b29f2810099d2beeb01c7d15d1ae64ce88d17a2 Mon Sep 17 00:00:00 2001 From: lss <Lss@HanInfo> Date: 星期二, 24 六月 2025 17:39:01 +0800 Subject: [PATCH] 入库算法优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs | 432 ++++++++++++++++++++++++++++++----------------------- 1 files changed, 245 insertions(+), 187 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 a2e791d..9f74766 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs @@ -12,6 +12,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection.Emit; +using System.Runtime.CompilerServices; using System.ServiceModel; using System.Threading; using System.Threading.Tasks; @@ -35,14 +36,14 @@ #region 浣抽�鍚堣偉鎺ュ彛涓氬姟 - + 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 = "鍒涘缓鎴愬姛" }; @@ -159,6 +160,7 @@ result.msg = $"Putin==> 浠诲姟璧风偣:{taskData.pickStation}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; LogHelper.Info($"Putin==> {result.msg}"); AddErrorInfo("璐т綅鏌ユ壘澶辫触", result.msg, Source); + return result; } } else if (taskData.taskType == 2)//鍏ュ簱娴佺▼锛岀洿鎺ヤ娇鐢ㄨ捣鐐硅揣浣嶅拰缁堢偣璐т綅鐢熸垚浠诲姟锛岃捣鐐归渶瑕佹湁鎵樼洏 @@ -168,10 +170,21 @@ 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) { - CntrCode = CntrRel.S_CNTR_CODE; + if (CntrRel.S_CNTR_CODE != partData.rfid) + { + result.code = "1"; + result.msg = $"鏍规嵁璧风偣锛歿Start}鑾峰彇鎵樼洏:{CntrRel.S_CNTR_CODE}涓庝笅鍙戞墭鐩橈細{partData.rfid}涓嶄竴鑷达紝璇锋鏌ユ墭鐩樼爜鏄惁姝g‘"; + AddErrorInfo("鎵樼洏鐮佹牎妫�け璐�, result.msg, Source); + return result; + } + else + { + CntrCode = CntrRel.S_CNTR_CODE; + } + } //else //{ @@ -598,7 +611,7 @@ } } } - + return result; } @@ -716,6 +729,7 @@ /// <returns></returns> internal static Result TrayItembind(TrayItembind model) { + Result result = new Result() { code = "200", msg = "浜у嚭淇℃伅涓嬪彂鎴愬姛" }; if (model == null) { @@ -724,29 +738,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; - } + } @@ -861,13 +880,9 @@ return result; } - //鍒ゆ柇鏈夋棤鐩稿悓鐗╂枡鎺�+ loc = StorageCompute(itemcode, areacode); - //if (loc == null) - //{ - // //鏃犵浉鍚岀墿鏂欐帓鎵剧┖鎺�- // loc = emptyRow(areacode); - //} + if (loc != null) { End = loc.S_CODE; @@ -988,7 +1003,6 @@ string areacode = ""; var db = new SqlHelper<object>().GetInstance(); #endregion - try { @@ -1011,6 +1025,10 @@ { areacode = whcode.PMK; cntrType = "PM"; + } + else if (model.PartNumber.StartsWith("32")) + { + areacode = whcode.ZCW2; } else { @@ -1076,56 +1094,60 @@ #endregion #region 浠诲姟鍒涘缓 - if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End)) + if (string.IsNullOrEmpty(Start)) { - if (loc.N_LOCK_STATE != 0) - { - result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋Start}鏈夐攣"; - AddErrorInfo("璐т綅鏈夐攣", result.msg, Source); - return result; - } - //鍒涘缓wcs浠诲姟 - var wcsTask = new WCSTask - { - S_CODE = WCSHelper.GenerateTaskNo(), - S_TYPE = "鍑哄钩搴�, - S_EQ_NO = model.TaskNumber, - S_START_LOC = Start, - S_END_LOC = End, - S_START_WH = loc.S_WH_CODE, - S_START_AREA = loc.S_AREA_CODE, - S_END_WH = Endloc.S_WH_CODE, - S_END_AREA = Endloc.S_AREA_CODE, - N_CNTR_COUNT = 1, - N_SCHEDULE_TYPE = 1, - S_CNTR_CODE = CntrCode, - N_START_LAYER = 1, - N_END_LAYER = 1, - Z_TYPE = n_type + result.code = "1"; + result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣"; + return result; + } + if (string.IsNullOrEmpty(End)) + { + result.code = "1"; + result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫嵏璐х偣"; + return result; + } + if (loc.N_LOCK_STATE != 0) + { + result.code = "1"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋Start}鏈夐攣"; + AddErrorInfo("璐т綅鏈夐攣", result.msg, Source); + return result; + } + //鍒涘缓wcs浠诲姟 + var wcsTask = new WCSTask + { + S_CODE = WCSHelper.GenerateTaskNo(), + S_TYPE = "鍑哄钩搴�, + S_EQ_NO = model.TaskNumber, + S_START_LOC = Start, + S_END_LOC = End, + S_START_WH = loc.S_WH_CODE, + S_START_AREA = loc.S_AREA_CODE, + S_END_WH = Endloc.S_WH_CODE, + S_END_AREA = Endloc.S_AREA_CODE, + N_CNTR_COUNT = 1, + N_SCHEDULE_TYPE = 1, + S_CNTR_CODE = CntrCode, + N_START_LAYER = 1, + N_END_LAYER = 1, + Z_TYPE = n_type - }; - LogHelper.Info("鍒涘缓鍑哄钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask)); - if (WCSHelper.CreateTask(wcsTask)) - { - LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); - //LocationHelper.LockLoc(Start, 2); - //LocationHelper.LockLoc(End, 1); - } - else - { - result.code = "1"; - result.msg = $"浠诲姟鍒涘缓澶辫触"; - AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); - return result; - } + }; + LogHelper.Info("鍒涘缓鍑哄钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask)); + if (WCSHelper.CreateTask(wcsTask)) + { + LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); + //LocationHelper.LockLoc(Start, 2); + //LocationHelper.LockLoc(End, 1); } else { result.code = "1"; - result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣"; + result.msg = $"浠诲姟鍒涘缓澶辫触"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); return result; } + #endregion return result; @@ -1203,6 +1225,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 && a.C_ENABLE == "Y").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).ToList(); if (dploc.Count > 0) { @@ -1210,8 +1233,9 @@ loc = dploc.FindAll(a => a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM < 6).OrderByDescending(a => a.N_CURRENT_NUM).FirstOrDefault(); if (loc == null) { + LogHelper.Info($"涓夋ゼ璐т綅鍙犵洏浣嶏紝閮藉凡缁忔湁閿佹垨鑰呭凡缁忓彔婊★紝璇锋鏌ヨ揣浣嶇姸鎬�); result.code = "1"; - result.msg = $"鍙犵洏璐т綅涓嶅彲鐢�; + result.msg = $"鍙犵洏璐т綅涓嶅彲鐢紝缁堢偣搴撳尯娌℃湁鍙敤璐т綅锛岃妫�煡閿佺姸鎬佸拰鏁伴噺"; AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } @@ -1222,9 +1246,9 @@ } else { - + // LogHelper.Info($"鏍规嵁璐т綅妤煎眰锛歿startloc.N_LAYER}锛屼粨搴撶紪鐮侊細{startloc.S_WH_CODE}锛岃揣浣嶅娉細鍙犵洏锛屾湭鎵惧埌鍙犵洏璐т綅"); result.code = "1"; - result.msg = $"鍙犵洏璐т綅涓嶅彲鐢�; + result.msg = $"鍙犵洏璐т綅涓嶅彲鐢紝鏈壘鍒板彲鍙犵洏璐т綅"; LogHelper.Info($"鏍规嵁璐т綅澶囨敞锛氬彔鐩橈紝璐т綅妤煎眰:{startloc.N_LAYER},璐т綅浠撳簱:{startloc.S_WH_CODE}锛屾壘涓嶅埌鍙犵洏璐т綅"); AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source); return result; @@ -1233,14 +1257,16 @@ 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 && a.C_ENABLE == "Y").ToList(); var KjDploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鐗囪兌鍫嗗彔浣� && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).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(); if (loc == null) { + LogHelper.Info($"鐗囪兌鍫嗗彔浣嶏紝閮藉凡缁忔湁閿佹垨鑰呭凡缁忓彔婊★紝璇锋鏌ヨ揣浣嶇姸鎬�); result.code = "1"; - result.msg = $"鍙犵洏璐т綅涓嶅彲鐢�; + result.msg = $"鍙犵洏璐т綅涓嶅彲鐢紝缁堢偣搴撳尯娌℃湁鍙敤璐т綅锛岃妫�煡閿佺姸鎬佸拰鏁伴噺"; AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } @@ -1274,7 +1300,7 @@ { result.code = "1"; result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�; - LogHelper.Info($"Putin==> {result.msg}"); + LogHelper.Info($" {result.msg}"); AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } @@ -1282,14 +1308,18 @@ //鍥炲簱璐т綅璁$畻搴撳尯璐т綅 loc = StorageCompute(itemcode, areacode); - //if (loc == null) - //{ - // loc = emptyRow(areacode); - // if (loc == null) - // { - // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁绌烘帓"); - // } - //} + if (loc == null) + { + loc = emptyRow(areacode); + if (loc == null) + { + result.code = "1"; + result.msg = $"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅"; + LogHelper.Info($" {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅"); + } + } //else //{ @@ -1350,6 +1380,12 @@ // 绌烘墭鍥炲簱鍒ゆ柇鎵樼洏鏈夋棤缁戝畾鐗╂枡淇℃伅 濡傛灉鏈夊垯鍒犻櫎 var itemcntr = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); if (itemcntr != null) { db.Deleteable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).ExecuteCommand(); } + var container = db.Queryable<Container>().Where(a => a.S_CODE.Trim() == model.Rfid).First(); + if (container == null) + { + container = new Container { S_CODE = model.Rfid }; + db.Insertable<Container>(container).ExecuteCommand(); + } LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); } else @@ -1404,23 +1440,35 @@ #region 鍙橀噺 string Start = ""; string End = model.TargetLocation; - + string areacode = ""; string cntrcode = ""; Location startloc = new Location(); - // startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType); + // startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType); #endregion try { lock (_lockcallfixture) { + + #region 鏍规嵁浠撳簱缂栫爜鍒ゆ柇搴撳尯 骞惰绠楀嚭搴撹揣浣� var endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == End).First(); //鏍规嵁浠撳簱 璁$畻搴撳尯 - if (endloc != null) { + #region 鏍¢獙缁堢偣鏄惁鍙� + if (endloc.N_CURRENT_NUM >= 1 || endloc.N_LOCK_STATE != 0) + { + result.code = "1"; + result.msg = $"缁堢偣璐т綅锛歿End}涓嶅彲鐢�; + LogHelper.Info($"Putin==> {result.msg}"); + AddErrorInfo("璐т綅涓嶅彲鐢�, result.msg, Source); + return result; + } + #endregion + var whcode = Settings.wareLoc.Where(a => a.AreaCode == endloc.S_WH_CODE).FirstOrDefault(); if (whcode != null) { @@ -1434,10 +1482,9 @@ AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } - //璁$畻鍑哄簱鎵樼洏 - startloc = LocationHelper.GetLocByAreacode(areacode,model.CarrierType); + startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType); if (startloc != null) { var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == startloc.S_CODE).First(); @@ -1454,7 +1501,14 @@ AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source); return result; } - + } + else + { + result.code = "1"; + result.msg = $"鍒涘缓绌哄伐瑁呭懠鍙换鍔�=>鏍规嵁搴撳尯锛歿areacode}锛屾墭鐩樼被鍨嬶細{model.CarrierType}鎵句笉鍒板搴旂┖鎵�; + LogHelper.Info($"callfixture:{result.msg}"); + AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source); + return result; } } @@ -1572,34 +1626,7 @@ { lock (_lockItemBack) { - #region 浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�- //浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�- //msts = WCSHelper.GetTaskBycntrcode(model.Rfid); - //if (msts.Count() > 0) - //{ - // msts.RemoveAll(a => string.IsNullOrEmpty(a.S_CNTR_CODE)); - // mst = msts.OrderByDescending(a => a.T_CREATE).FirstOrDefault(); - //} - //if (mst != null) - //{ - // areacode = mst.S_START_AREA; - //} - //else - //{ - // result.code = "1"; - // result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鏈壘鍒版墭鐩樺嚭搴撲换鍔�; - // AddErrorInfo("鏌ユ壘浠诲姟澶辫触", result.msg); - // return result; - //} - //if (string.IsNullOrEmpty(areacode)) - //{ - // LogHelper.Info($"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鎵惧埌鍑哄簱浠诲姟{mst.S_CODE}鐨勮捣鐐瑰簱鍖轰负绌�); - // result.code = "1"; - // result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鎵惧埌鍑哄簱浠诲姟{mst.S_CODE}鐨勮捣鐐瑰簱鍖轰负绌�; - // AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg); - // return result; - //} - #endregion + #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚� var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); @@ -1617,7 +1644,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}澶辫触"; @@ -1647,17 +1674,18 @@ // loc = emptyRow(areacode); //} } + else if (model.PartNumber.StartsWith("32")) + { + areacode = whcode.ZCW2; + } else { - - if (model.PartNumber.StartsWith("3")) { areacode = whcode.ZCW; } else { - result.code = "1"; result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�; LogHelper.Info($"ItemBack锛歿result.msg}"); @@ -1676,7 +1704,6 @@ { //loc = EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0); loc = FindEndcolByLocList(EndLocs); - } else @@ -1803,9 +1830,6 @@ } #endregion } - - - return result; } @@ -2049,11 +2073,11 @@ /// </summary> /// <param name="model"></param> /// <returns></returns> - internal static Result CreatelevatorTask(Elevator model) + internal static Result CreatelevatorTask(ElevatorModel model) { - Result result = new Result() { code = "200", msg = "鐐瑰鐐逛换鍔″垱寤烘垚鍔� }; - string Source = "MES"; - if (model == null) + Result result = new Result() { code = "200", msg = "鐢垫鎼繍浠诲姟鍒涘缓鎴愬姛" }; + string Source = "WMS"; + if (model.Data == null) { result.code = "1"; result.msg = "鍙傛暟涓簄ull"; @@ -2067,6 +2091,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 && a.C_ENABLE == "Y").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(); @@ -2076,11 +2101,10 @@ if (startloc.N_LOCK_STATE != 0) { result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋startloc.S_CODE}鏈夐攣"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋startloc.S_CODE}鏈夐攣锛岀數姊湁鍏朵粬浠诲姟锛岃绛夊緟鐢垫浠诲姟瀹屾垚"; AddErrorInfo("璐т綅鏈夐攣", result.msg, Source); return result; } - var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == startloc.S_CODE).First(); if (cntr == null) { @@ -2109,26 +2133,7 @@ //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級 var elevatorLoc = LocationHelper.GetElevatorLoc(); - //鍒涘缓wcs鍒嗘浠诲姟 var wcsTask = new WCSTask - { - - S_CODE = WCSHelper.GenerateTaskNo(), - S_TYPE = "鐢垫1", - S_EQ_NO = model.Data.task_no, - S_START_LOC = startloc.S_CODE, - S_END_LOC = elevatorLoc.S_CODE, - N_CNTR_COUNT = 1, - S_START_WH = startloc.S_WH_CODE, - S_START_AREA = startloc.S_AREA_CODE, - S_END_WH = elevatorLoc.S_WH_CODE, - S_END_AREA = elevatorLoc.S_AREA_CODE, - N_SCHEDULE_TYPE = 1, - S_CNTR_CODE = cntr.S_CNTR_CODE, - N_END_LAYER = 1, - Z_TYPE = 6 - }; - var wcsTask1 = new WCSTask { S_CODE = WCSHelper.GenerateTaskNo(), S_TYPE = "鐢垫2", @@ -2146,13 +2151,34 @@ Z_TYPE = 6 }; - LogHelper.Info("鍒涘缓浠诲姟锛� + JsonConvert.SerializeObject(wcsTask), "CreateTask"); - if (WCSHelper.CreateTask(wcsTask) && WCSHelper.CreateTask(wcsTask1)) + + if (WCSHelper.CreateTask(wcsTask)) { + LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); + var device = Settings.deviceInfos.Where(a => a.TN_Location == startloc.S_CODE).FirstOrDefault(); + var loc = LocationHelper.GetLocByLoc(endloc.S_CODE); + if (device == null) + { + LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{startloc.S_CODE},鏈壘鍒板搴旂數姊厤缃枃浠�); + } + if (loc == null) + { + LogHelper.Info($"鏍规嵁浠诲姟璧风偣:{endloc.S_CODE},鏈壘鍒板搴旇揣浣�); + } + if (device != null && loc != null) + { + int value = 0; + if (loc.N_LAYER == 1) value = 1; + else if (loc.N_LAYER == 2) value = 3; + else if (loc.N_LAYER == 3) value = 5; + + 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); - LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); + } else { @@ -2176,7 +2202,7 @@ { result.code = "1"; - result.msg = $"鐗╂枡涓绘暟鎹垱寤哄け璐�閿欒淇℃伅锛歿ex}"; + result.msg = $"鐢垫鎼繍浠诲姟鍒涘缓澶辫触 閿欒淇℃伅锛歿ex}"; LogHelper.Error("鐐瑰鐐逛换鍔�Error锛� + ex.ToString(), ex); return result; } @@ -2270,53 +2296,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) { + var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).First(); - string cntrcode = loccntr.S_CNTR_CODE; - var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First(); - if (CntrItem != null) + if (loccntr != null) { + 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}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�); } - } 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; } @@ -2374,7 +2406,7 @@ } } - + } else { @@ -2416,14 +2448,14 @@ DeviceInfoModel device = new DeviceInfoModel(); List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//鍙犵洏鏈烘姤閿欎俊鎭�- // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv鎶ラ敊淇℃伅 + // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv鎶ラ敊淇℃伅 //鑾峰彇鍐呭瓨涓彔鐩樻満鐨勬姤閿欎俊鎭� foreach (var dpjInfo in DeviceProcess.DpjInfoDirectory) { deviceInfos.Add(new DeviceInfos() { Device = dpjInfo.Value.DeviceName, DeviceInfo = dpjInfo.Value.ErrorInfo }); } - // device.DeviceInfos = deviceInfos; + // device.DeviceInfos = deviceInfos; //鑾峰彇杞﹁締鎶ヨ淇℃伅 var agvDeviceInfo = db.Queryable<HangChaAGV>().ToList(); if (agvDeviceInfo.Count > 0) @@ -2503,7 +2535,7 @@ #region 鍚堣偉浣抽�涓氬姟鏂规硶 - + /// <summary> /// 鎵樼洏鍏ュ簱绠楁硶 /// </summary> @@ -2512,14 +2544,24 @@ /// <returns></returns> internal static Location StorageCompute(string itemcode, string areacode) { + //Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).First(); 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 = new Location(); + var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).ToList(); + if (list.Count > 0) + { + FindEndcolByLocList(list); + + } //鏌ヨ鎵�湁鏈夋墭鐩樼殑鎺掓病閿佺殑鎺�- // 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) + + // 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) //{ + // for (int i = 0; i < list.Count; i++) // { + // LogHelper.Info($"鏈夋墭鐩樻帓鍙穥list[i].N_ROW}锛岀墿鏂欑紪鐮亄itemcode},搴撳尯{areacode}"); // //鏌ヨ璐т綅缁戝畾鎵樼洏 // var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == list[i].S_CODE).First(); @@ -2677,6 +2719,21 @@ } } + + //internal static bool CreateCntrLoc(taskData taskData) + //{ + // if ( taskData == null) + // { + // LogHelper.Info($"CreateCntrIteminfo==> 绔嬪簱浠诲姟涓嬪彂鍙傛暟鏈夌┖锛屽垱寤虹墿鏂欐墭鐩樼粦瀹氬叧绯诲け璐�); + // return false; + // } + // else + // { + // LocationHelper.BindingLoc(taskData.pickStation,new List<string>() { taskData.rfid }); + + // } + + //} private static object _lockLocation = new object(); /// <summary> /// 鏍规嵁鎵樼洏缂栫爜锛屾満鍙扮紪鐮侊紝宸ヨ绫诲瀷璁$畻鏈哄彴绾胯竟鍖哄煙 @@ -2767,7 +2824,8 @@ { Location other = null; //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆 - //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴灞傝涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�+ + // other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").FirstOrDefault(); other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0).FirstOrDefault(); //if (full == null) //{ -- Gitblit v1.9.1