From 9ddec4808631025d36d3c5a816d55ef77a29d4c7 Mon Sep 17 00:00:00 2001 From: lss <2538410689@qq.com> Date: 星期三, 16 七月 2025 17:30:30 +0800 Subject: [PATCH] 111 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs | 1497 ++++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 962 insertions(+), 535 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..68fe676 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; @@ -19,6 +20,7 @@ using static HH.WCS.JiaTong.api.ApiModel; using static HH.WCS.JiaTong.api.OtherModel; using static HH.WCS.JiaTong.LISTA.process.HttpModel; +using static HH.WCS.JiaTong.util.Settings; namespace HH.WCS.JiaTong.api { @@ -35,16 +37,17 @@ #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 = "鍒涘缓鎴愬姛" }; if (model == null) { @@ -117,8 +120,8 @@ #endregion - Location endloc = new Location(); - Location startloc = new Location(); + Location endloc = null; + Location startloc = null; lock (_lockCreateTask) { if (taskData.taskType == 1) //鍑哄簱娴佺▼锛岄�杩囩墿鏂欐満鍙拌绠楃嚎杈硅揣浣�@@ -159,6 +162,7 @@ result.msg = $"Putin==> 浠诲姟璧风偣:{taskData.pickStation}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; LogHelper.Info($"Putin==> {result.msg}"); AddErrorInfo("璐т綅鏌ユ壘澶辫触", result.msg, Source); + return result; } } else if (taskData.taskType == 2)//鍏ュ簱娴佺▼锛岀洿鎺ヤ娇鐢ㄨ捣鐐硅揣浣嶅拰缁堢偣璐т綅鐢熸垚浠诲姟锛岃捣鐐归渶瑕佹湁鎵樼洏 @@ -168,18 +172,22 @@ 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 - //{ - // result.code = "1"; - // result.msg = $"鏍规嵁璧风偣{Start},鏈壘鍒版墭鐩樿揣浣嶇粦瀹氬叧绯�; - // AddErrorInfo("鎵樼洏鏌ユ壘澶辫触", result.msg, Source); - // return result; - //} } else @@ -299,8 +307,31 @@ } else if (startArea.N_FLOOR != endArea.N_FLOOR) { - //妤煎眰鐢垫鍒嗛厤 - var elevatorLoc = LocationHelper.GetElevatorLoc(); + string deviceName = "鐢垫1"; + if (startloc.S_WH_CODE == "103") + { + deviceName = "鐢垫2"; + } + var eleLoc = Settings.deviceInfos.Where(a => a.deviceName.Trim() == deviceName).FirstOrDefault(); + if (eleLoc == null) + { + result.code = "1"; + result.msg = $"鏈壘鍒颁粨搴搟startloc.S_WH_CODE}鎵�搴旂殑鐢垫锛岃妫�煡閰嶇疆鏂囦欢"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } + //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級 + string[] state = new string[] { "鎵ц涓�, "寮�鍙栬揣", "鍙栬揣瀹屾垚", "寮�鍗歌揣", "鍗歌揣瀹屾垚" }; + + + var elevatorLoc = db.Queryable<Location>().Where(a => a.S_CODE == eleLoc.TN_Location).First(); + if (elevatorLoc == null) + { + result.code = "1"; + result.msg = $"鏍规嵁鐢垫閰嶇疆鏂囦欢璐т綅锛歿eleLoc.TN_Location}鏈壘鍒板浜庤揣浣嶆暟鎹紝璇锋鏌ヨ揣浣嶈〃"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } if (elevatorLoc != null) { //鍒涘缓wcs鍒嗘浠诲姟 @@ -552,6 +583,15 @@ AddErrorInfo("搴撳尯鏌ユ壘澶辫触", result.msg); return result; } + int pri = 1; + var area = Settings.wareLoc.Where(a => a.AreaCode == endloc.S_WH_CODE).First(); + if (area != null) + { + if (area.XbAreaCodes.Contains(endloc.S_AREA_CODE)) + { + pri = 2; + } + } //鍒涘缓wcs浠诲姟 var wcsTask = new WCSTask { @@ -566,7 +606,7 @@ S_END_AREA = endloc.S_AREA_CODE, N_SCHEDULE_TYPE = 1, S_CNTR_CODE = CntrCode, - N_PRIORITY = taskData.priority, + N_PRIORITY = pri, Z_TYPE = n_type, N_START_LAYER = 1, N_END_LAYER = 1, @@ -598,7 +638,7 @@ } } } - + return result; } @@ -716,6 +756,7 @@ /// <returns></returns> internal static Result TrayItembind(TrayItembind model) { + Result result = new Result() { code = "200", msg = "浜у嚭淇℃伅涓嬪彂鎴愬姛" }; if (model == null) { @@ -724,33 +765,209 @@ 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.CreateCntrItemTray(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime, model.PowderType)) + { + //鍒涘缓鎴愬姛娴佺▼ + } + else + { + result.code = "1"; + result.msg = "浜у嚭淇℃伅涓嬪彂澶辫触锛屾墭鐩樼墿鏂欑粦瀹氬叧绯诲垱寤哄け璐�; + AddErrorInfo("鍒涘缓缁戝畾鍏崇郴澶辫触", result.msg, "Mes"); + return result; + } return result; } + catch (Exception ex) + { + result.code = "1"; + result.msg = ex.ToString(); + LogHelper.Error("TrayItembind Error锛� + ex.ToString(), ex); + return result; + } + } + + + + } + + public static object _Point = new object(); + /// <summary> + /// 鐐瑰鐐规帴鍙�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static Result Point(PointModel model) + { + Result result = new Result() { code = "200", msg = "鍏ュ钩搴撲换鍔′笅鍙戞垚鍔� }; + string Source = "Mes"; + + if (model == null) + { + result.code = "1"; + result.msg = "鍙傛暟涓簄ull"; + AddErrorInfo("鍙傛暟涓虹┖", result.msg, Source); + return result; + } + //1.鍑哄钩搴擄紝2鍏ュ钩搴擄紝3骞冲簱绌哄伐瑁呭懠鍙紝4骞冲簱浣欐枡鍥炲簱锛�绮夋枡绌烘墭杩斿洖銆�+ var db = new SqlHelper<object>().GetInstance(); + string type = ""; + Location startloc = null; + Location endloc = null; + switch (model.Status) + { + case "1": + type = "鍑哄钩搴�; + break; + case "2": + type = "鍏ュ钩搴�; + break; + case "3": + type = "骞冲簱绌哄伐瑁呭懠鍙�; + break; + case "4": + type = "骞冲簱浣欐枡鍥炲簱"; + break; + case "5": + type = "绮夋枡绌烘墭杩斿洖"; + break; + } + if (string.IsNullOrEmpty(type)) + { + result.code = "1"; + result.msg = $"浠诲姟绫诲瀷{model.Status},涓嶅湪瑙勫畾鑼冨洿"; + AddErrorInfo("浠诲姟绫诲瀷閿欒", result.msg, Source); + return result; + } + + try + { + lock (_Point) + { + startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.InitialLocation).First(); + if (startloc == null) + { + result.code = "1"; + result.msg = $"鏍规嵁璧风偣{model.InitialLocation},鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; + AddErrorInfo("璐т綅鏌ユ壘澶辫触", result.msg, Source); + return result; + } + else + { + //鍒ゆ柇璧风偣鏄惁缁戝畾鍏朵粬鎵樼洏 + var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).OrderBy(a => a.T_CREATE).FirstOrDefault(); + if (CntrRel != null) + { + if (CntrRel.S_CNTR_CODE != model.Rfid) + { + result.code = "1"; + result.msg = $"鏍规嵁璧风偣锛歿model.InitialLocation}鑾峰彇鎵樼洏:{CntrRel.S_CNTR_CODE}涓庝笅鍙戞墭鐩橈細{model.Rfid}涓嶄竴鑷达紝璇锋鏌ユ墭鐩樼爜鏄惁姝g‘"; + AddErrorInfo("鎵樼洏鐮佹牎妫�け璐�, result.msg, Source); + return result; + } + } + else + { + LocationHelper.BindingLoc(startloc.S_CODE, new List<string> { model.Rfid }); + } + } + endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First(); + if (endloc == null) + { + result.code = "1"; + result.msg = $"鏍规嵁缁堢偣{model.TargetLocation},鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; + AddErrorInfo("璐т綅鏌ユ壘澶辫触", result.msg, Source); + return result; + } + + + #region 鍒涘缓浠诲姟 + if (endloc != null && startloc != null) + { + if (startloc.N_LOCK_STATE != 0) + { + result.code = "1"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{startloc.S_CODE}鏈夐攣"; + AddErrorInfo("璐т綅鏈夐攣", result.msg, Source); + return result; + } + //鍒涘缓wcs浠诲姟 + var wcsTask = new WCSTask + { + S_CODE = WCSHelper.GenerateTaskNo(), + S_TYPE = type, + S_EQ_NO = model.TaskNumber, + S_START_LOC = startloc.S_CODE, + S_END_LOC = endloc.S_CODE, + S_START_WH = startloc.S_WH_CODE, + S_START_AREA = startloc.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 = model.Rfid, + N_START_LAYER = 1, + N_END_LAYER = 1, + N_PRIORITY = 1, + Z_TYPE = 5 + }; + LogHelper.Info("鍒涘缓鐐瑰鐐逛换鍔★細" + JsonConvert.SerializeObject(wcsTask)); + if (WCSHelper.CreateTask(wcsTask)) + { + if (type == "骞冲簱浣欐枡鍥炲簱") + { //鍒涘缓浠诲姟鎴愬姛 鏇存柊浣欐枡淇℃伅 + var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); + if (CntrItem != null) + { + CntrItem.F_WEIGHT = model.Weight.ToString(); + CntrItem.S_BS_TYPE = "浣欐枡"; + //CntrItem.F_QTY = float.Parse(model.qty); + //CntrItem.S_ITEM_STATE = model..QualityStatus; + + db.Updateable(CntrItem).UpdateColumns(a => new { a.F_WEIGHT, a.S_BS_TYPE }).ExecuteCommand(); + } + } + + LocationHelper.LockLoc(startloc.S_CODE, 2); + LocationHelper.LockLoc(endloc.S_CODE, 1); + LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); + } + else + { + result.code = "1"; + result.msg = $"浠诲姟鍒涘缓澶辫触"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } + } + else + { + result.code = "1"; + result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣"; + return result; + } + #endregion + + } + return result; } catch (Exception ex) { result.code = "1"; result.msg = ex.ToString(); - LogHelper.Error("TrayItembind Error锛� + ex.ToString(), ex); + LogHelper.Error("Putin Error锛� + ex.ToString(), ex); return result; } - - } + public static object _Putin = new object(); /// <summary> /// 鍏ュ钩搴� /// </summary> @@ -773,177 +990,177 @@ return result; } var db = new SqlHelper<object>().GetInstance(); - Location loc = new Location(); + Location loc = null; string Start = model.InitialLocation; //璧风偣璐т綅 string itemcode = model.PartNumber; //鐗╂枡缂栫爜 string areacode = ""; try { - - #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�- var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); - if (cntritem == null) + lock (_Putin) { - result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�; - LogHelper.Info($"ItemBack锛歿result.msg}"); - AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source); - return result; - } - #endregion - - #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏 - var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); - if (CntrLoc != null) - { - if (CntrLoc.S_LOC_CODE != Start) + #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�+ var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); + if (cntritem == null) { - result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�; LogHelper.Info($"ItemBack锛歿result.msg}"); - AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source); + AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source); return result; } - } - else - { - LocationHelper.BindingLoc(Start, new List<string> { model.Rfid }); - //LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�); - //result.code = "1"; - //result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�; - //AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg); - //return result; - } - // Console.WriteLine("鏌ヨ璐т綅缁戝畾鍏崇郴"); - //鍒ゆ柇鎵樼洏涓庤揣浣嶆槸鍚︽湁缁戝畾鍏崇郴锛屽鏋滄病鏈夊垯杩涜缁戝畾 - // var cntrloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); - // Console.WriteLine($"鑾峰彇缁戝畾鍏崇郴:{JsonConvert.SerializeObject(cntrloc)}"); - //if (cntrloc == null) - //{ - // // Console.WriteLine("缁戝畾鎵樼洏"); - // List<string> cntrs = new List<string>() { model.Rfid }; + #endregion - // LocationHelper.BindingLoc(Start, cntrs); - //} - //else - //{ - - // if (cntrloc.S_LOC_CODE != Start) - // { - - // LogHelper.Info($"Putin==>鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�); - // result.code = "1"; - // result.msg = $"鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�; - // } - - //} - #endregion - - #region 鏍规嵁璧风偣璐т綅鐨勪粨搴撶紪鐮�鑾峰彇骞冲簱缂栫爜,骞惰绠楀叆搴撹揣浣�- string End = ""; - var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First(); - if (startloc != null) - { - //鏍规嵁浠撳簱 璁$畻搴撳尯 - var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault(); - if (whcode != null) + #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏 + var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); + if (CntrLoc != null) { - areacode = whcode.PMK; + if (CntrLoc.S_LOC_CODE != Start) + { + + result.code = "1"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}"; + LogHelper.Info($"ItemBack锛歿result.msg}"); + AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source); + return result; + } } else { - result.code = "1"; - result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�; - LogHelper.Info($"Putin==> {result.msg}"); - AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); - return result; + LocationHelper.BindingLoc(Start, new List<string> { model.Rfid }); + //LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�); + //result.code = "1"; + //result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�; + //AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg); + //return result; } - - //鍒ゆ柇鏈夋棤鐩稿悓鐗╂枡鎺�- loc = StorageCompute(itemcode, areacode); - //if (loc == null) + // Console.WriteLine("鏌ヨ璐т綅缁戝畾鍏崇郴"); + //鍒ゆ柇鎵樼洏涓庤揣浣嶆槸鍚︽湁缁戝畾鍏崇郴锛屽鏋滄病鏈夊垯杩涜缁戝畾 + // var cntrloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); + // Console.WriteLine($"鑾峰彇缁戝畾鍏崇郴:{JsonConvert.SerializeObject(cntrloc)}"); + //if (cntrloc == null) //{ - // //鏃犵浉鍚岀墿鏂欐帓鎵剧┖鎺�- // loc = emptyRow(areacode); + // // Console.WriteLine("缁戝畾鎵樼洏"); + // List<string> cntrs = new List<string>() { model.Rfid }; + + // LocationHelper.BindingLoc(Start, cntrs); //} - if (loc != null) + //else + //{ + + // if (cntrloc.S_LOC_CODE != Start) + // { + + // LogHelper.Info($"Putin==>鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�); + // result.code = "1"; + // result.msg = $"鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�; + // } + + //} + #endregion + + #region 鏍规嵁璧风偣璐т綅鐨勪粨搴撶紪鐮�鑾峰彇骞冲簱缂栫爜,骞惰绠楀叆搴撹揣浣�+ string End = ""; + var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First(); + if (startloc != null) { - End = loc.S_CODE; + //鏍规嵁浠撳簱 璁$畻搴撳尯 + var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault(); + if (whcode != null) + { + areacode = whcode.PMK; + } + else + { + result.code = "1"; + result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�; + LogHelper.Info($"Putin==> {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } + + + loc = StorageCompute(itemcode, areacode); + + if (loc != null) + { + End = loc.S_CODE; + } + else + { + + result.code = "1"; + result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�; + LogHelper.Info($"Putin==> {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } } else { result.code = "1"; - result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�; + result.msg = $"浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; LogHelper.Info($"Putin==> {result.msg}"); - AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source); return result; } - } - else - { + #endregion - result.code = "1"; - result.msg = $"浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; - LogHelper.Info($"Putin==> {result.msg}"); - AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source); - return result; - } - #endregion - - #region 鍒涘缓浠诲姟 - if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End)) - { - if (startloc.N_LOCK_STATE != 0) + #region 鍒涘缓浠诲姟 + if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End)) { - 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 = startloc.S_WH_CODE, - S_START_AREA = startloc.S_AREA_CODE, - S_END_WH = loc.S_WH_CODE, - S_END_AREA = loc.S_AREA_CODE, - N_CNTR_COUNT = 1, - N_SCHEDULE_TYPE = 1, - S_CNTR_CODE = model.Rfid, - N_START_LAYER = 1, - N_END_LAYER = 1, - Z_TYPE = n_type - }; - LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask)); - if (WCSHelper.CreateTask(wcsTask)) - { - //LocationHelper.LockLoc(Start, 2); - //LocationHelper.LockLoc(End, 1); - LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); + if (startloc.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 = startloc.S_WH_CODE, + S_START_AREA = startloc.S_AREA_CODE, + S_END_WH = loc.S_WH_CODE, + S_END_AREA = loc.S_AREA_CODE, + N_CNTR_COUNT = 1, + N_SCHEDULE_TYPE = 1, + S_CNTR_CODE = model.Rfid, + N_START_LAYER = 1, + N_END_LAYER = 1, + N_PRIORITY = 1, + Z_TYPE = n_type + }; + LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask)); + if (WCSHelper.CreateTask(wcsTask)) + { + //LocationHelper.LockLoc(Start, 2); + //LocationHelper.LockLoc(End, 1); + LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); + } + else + { + result.code = "1"; + result.msg = $"浠诲姟鍒涘缓澶辫触"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } } else { result.code = "1"; - result.msg = $"浠诲姟鍒涘缓澶辫触"; - AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣"; return result; } + #endregion + } - else - { - result.code = "1"; - result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣"; - return result; - } - #endregion return result; } @@ -956,6 +1173,7 @@ } } + public static object _PutOut = new object(); /// <summary> /// 鍑哄钩搴� /// </summary> @@ -982,102 +1200,139 @@ string Start = ""; string End = ""; string CntrCode = ""; - string itemcode = model.PartNumber; string cntrType = ""; string areacode = ""; var db = new SqlHelper<object>().GetInstance(); #endregion - try { - - #region 鏍规嵁鐗╂枡缂栫爜瑙勫垯 璁$畻鍑哄簱搴撳尯 - //绮夋枡浠庡钩搴撳嚭搴擄紝鍏朵粬鐗╂枡闇�浠庢殏瀛樺尯鍑哄簱 - var locJt = db.Queryable<Location>().Where(a => a.S_AREA_CODE == model.WorkCenter).First(); - if (locJt == null) + lock (_PutOut) { - result.code = "1"; - result.msg = $"鏍规嵁鏈哄彴缂栫爜锛歿model.WorkCenter}鏈壘鍒板搴旇揣浣�; - LogHelper.Info($"Putin==> {result.msg}"); - AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); - return result; - } - //鏍规嵁浠撳簱 璁$畻搴撳尯 - var whcode = Settings.wareLoc.Where(a => a.AreaCode == locJt.S_WH_CODE).FirstOrDefault(); - if (whcode != null) - { - if (model.PartNumber.StartsWith("4X")) + #region 鏍规嵁鐗╂枡缂栫爜瑙勫垯 璁$畻鍑哄簱搴撳尯 + //绮夋枡浠庡钩搴撳嚭搴擄紝鍏朵粬鐗╂枡闇�浠庢殏瀛樺尯鍑哄簱 + var locJt = db.Queryable<Location>().Where(a => a.S_AREA_CODE == model.WorkCenter).First(); + if (locJt == null) { - areacode = whcode.PMK; - cntrType = "PM"; + result.code = "1"; + result.msg = $"鏍规嵁鏈哄彴缂栫爜锛歿model.WorkCenter}鏈壘鍒板搴旇揣浣�; + LogHelper.Info($"Putin==> {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; } - else + //鏍规嵁浠撳簱 璁$畻搴撳尯 + var whcode = Settings.wareLoc.Where(a => a.AreaCode == locJt.S_WH_CODE).FirstOrDefault(); + if (whcode != null) { - if (model.PartNumber.StartsWith("3")) + if (model.PartNumber.StartsWith("4X")) { - cntrType = "RC"; - areacode = whcode.ZCW; + areacode = whcode.PMK; + cntrType = "PM"; + } + else if (model.PartNumber.StartsWith("32")) + { + areacode = whcode.ZCW2; } else { + if (model.PartNumber.StartsWith("3")) + { + cntrType = "RC"; + areacode = whcode.ZCW; + } + else + { - result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�; - LogHelper.Info($"ItemBack锛歿result.msg}"); - AddErrorInfo("鐗╂枡缂栫爜鏍煎紡閿欒", result.msg, Source); - return result; + result.code = "1"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�; + LogHelper.Info($"ItemBack锛歿result.msg}"); + AddErrorInfo("鐗╂枡缂栫爜鏍煎紡閿欒", result.msg, Source); + return result; + } } - } - } - else - { - result.code = "1"; - result.msg = $"鏍规嵁缁堢偣搴撳尯浠撳簱缂栫爜锛歿locJt.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�; - LogHelper.Info($"Putin==> {result.msg}"); - AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); - return result; - } - #endregion - - #region 鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅锛岄�寰�嚎杈逛綅缃�- var Endloc = new Location(); - //鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅 - var loc = airlift(areacode, itemcode, model.PartLevel); - if (loc != null) - { - Start = loc.S_CODE; - //鏍规嵁鍑哄簱璐т綅鎵惧埌缁戝畾鎵樼洏锛岃幏鍙栧叆鏈哄彴璐т綅 - var CntrRel = LocationHelper.GetLocCntrRel(loc.S_CODE).FirstOrDefault(); - CntrCode = CntrRel.S_CNTR_CODE; - Endloc = Computeloc(CntrCode, model.WorkCenter, cntrType); - if (Endloc != null) - { - End = Endloc.S_CODE; } else { result.code = "1"; - result.msg = $"Computeloc==銆嬫牴鎹満鍙扮紪鐮侊細{model.WorkCenter},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�; + result.msg = $"鏍规嵁缁堢偣搴撳尯浠撳簱缂栫爜锛歿locJt.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�; + LogHelper.Info($"Putin==> {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } + #endregion + + #region 鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅锛岄�寰�嚎杈逛綅缃�+ Location Endloc = null; + + //鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅 + var loc = airlift(areacode, itemcode, model.PartLevel, model.PowderType); + if (loc != null) + { + Start = loc.S_CODE; + + var CntrRel = LocationHelper.GetLocCntrRel(loc.S_CODE).FirstOrDefault(); + CntrCode = CntrRel.S_CNTR_CODE; + //缁欑粓鐐圭敤缁堢偣锛屾病缁欑粓鐐圭敤鏈哄彴搴撳尯璁$畻璐т綅 + if (string.IsNullOrEmpty(model.TargetLocation)) + { + + Endloc = Computeloc(CntrCode, model.WorkCenter, cntrType); + if (Endloc != null) + { + End = Endloc.S_CODE; + } + else + { + result.code = "1"; + result.msg = $"Computeloc==銆嬫牴鎹満鍙扮紪鐮侊細{model.WorkCenter},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�; + LogHelper.Info($"ItemBack锛歿result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } + } + else + { + + Endloc = db.Queryable<Location>().Where(a => a.S_CODE == model.TargetLocation).First(); + if (Endloc != null) + { + End = Endloc.S_CODE; + } + else + { + result.code = "1"; + result.msg = $"Computeloc==銆嬫牴鎹粓鐐硅揣浣嶏細{model.TargetLocation} 鏈壘鍒拌揣浣嶆暟鎹紝璇锋鏌ヨ揣浣嶈〃"; + LogHelper.Info($"ItemBack锛歿result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } + } + + } + else + { + + result.code = "1"; + result.msg = $"浠诲姟鐗╂枡:{itemcode}鎵句笉鍒板搴斿簱瀛�; LogHelper.Info($"ItemBack锛歿result.msg}"); AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } - } - else - { + #endregion - result.code = "1"; - result.msg = $"浠诲姟鐗╂枡:{itemcode}鎵句笉鍒板搴斿簱瀛�; - LogHelper.Info($"ItemBack锛歿result.msg}"); - AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); - return result; - } - #endregion - - #region 浠诲姟鍒涘缓 - if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End)) - { + #region 浠诲姟鍒涘缓 + if (string.IsNullOrEmpty(Start)) + { + 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"; @@ -1102,6 +1357,7 @@ S_CNTR_CODE = CntrCode, N_START_LAYER = 1, N_END_LAYER = 1, + N_PRIORITY = 1, Z_TYPE = n_type }; @@ -1119,16 +1375,12 @@ AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); return result; } - } - else - { - result.code = "1"; - result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣"; + + #endregion + return result; } - #endregion - return result; } catch (Exception ex) { @@ -1163,9 +1415,8 @@ string Start = model.InitialLocation; string itemcode = ""; int endlayer = 1; - Location loc = new Location(); + Location loc = null; string areacode = ""; - WCSTask mst = new WCSTask(); List<WCSTask> msts = new List<WCSTask>(); #endregion @@ -1173,45 +1424,26 @@ { lock (_lockEmpty) { - #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�- //var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); - //if (CntrLoc != null) - //{ - // if (CntrLoc.S_LOC_CODE != Start) - // { - // LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}"); - // result.code = "1"; - // result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}"; - // AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg); - // return result; - // } - //} - //else - //{ - // LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�); - // result.code = "1"; - // result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�; - // AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg); - // return result; - //} - #endregion + #region 鏍规嵁璐т綅妤煎眰鍒ゆ柇锛�妤煎幓寰�彔鐩樹綅 鍏朵粬鐨勫洖搴� var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First(); if (startloc != null) { - if (startloc.N_LAYER == 3) + if (!string.IsNullOrEmpty(startloc.S_NOTE1)) { //鍙犵洏璐т綅璁$畻鍙犵洏璐т綅 - 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(); + var dploc = db.Queryable<Location>().Where(a => a.S_NOTE1.Trim() == startloc.S_NOTE1 + "鍙犵洏" && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList(); if (dploc.Count > 0) { // LogHelper.Info($"鑾峰彇鍙犵洏璐т綅:{JsonConvert.SerializeObject(dploc)}"); 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($"{startloc.S_NOTE1}鍙犵洏浣嶏紝閮藉凡缁忔湁閿佹垨鑰呭凡缁忓彔婊★紝璇锋鏌ヨ揣浣嶇姸鎬�); result.code = "1"; - result.msg = $"鍙犵洏璐т綅涓嶅彲鐢�; + result.msg = $"{startloc.S_NOTE1}鍙犵洏璐т綅涓嶅彲鐢紝缁堢偣搴撳尯娌℃湁鍙敤璐т綅锛岃妫�煡閿佺姸鎬佸拰鏁伴噺"; AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } @@ -1222,9 +1454,41 @@ } else { - + // LogHelper.Info($"鏍规嵁璐т綅妤煎眰锛歿startloc.N_LAYER}锛屼粨搴撶紪鐮侊細{startloc.S_WH_CODE}锛岃揣浣嶅娉細鍙犵洏锛屾湭鎵惧埌鍙犵洏璐т綅"); result.code = "1"; - result.msg = $"鍙犵洏璐т綅涓嶅彲鐢�; + result.msg = $"{startloc.S_NOTE1}鍙犵洏璐т綅涓嶅彲鐢紝鏈壘鍒板彲鍙犵洏璐т綅"; + LogHelper.Info($"鏍规嵁璐т綅澶囨敞锛歿startloc.S_NOTE1}鍙犵洏锛岃揣浣嶄粨搴�{startloc.S_WH_CODE}锛屾壘涓嶅埌鍙犵洏璐т綅"); + AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source); + return result; + } + } + else 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) + { + // LogHelper.Info($"鑾峰彇鍙犵洏璐т綅:{JsonConvert.SerializeObject(dploc)}"); + 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 = $"鍙犵洏璐т綅涓嶅彲鐢紝缁堢偣搴撳尯娌℃湁鍙敤璐т綅锛岃妫�煡閿佺姸鎬佸拰鏁伴噺"; + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } + else + { + endlayer = loc.N_CURRENT_NUM + 1; + } + } + else + { + // LogHelper.Info($"鏍规嵁璐т綅妤煎眰锛歿startloc.N_LAYER}锛屼粨搴撶紪鐮侊細{startloc.S_WH_CODE}锛岃揣浣嶅娉細鍙犵洏锛屾湭鎵惧埌鍙犵洏璐т綅"); + result.code = "1"; + result.msg = $"鍙犵洏璐т綅涓嶅彲鐢紝鏈壘鍒板彲鍙犵洏璐т綅"; LogHelper.Info($"鏍规嵁璐т綅澶囨敞锛氬彔鐩橈紝璐т綅妤煎眰:{startloc.N_LAYER},璐т綅浠撳簱:{startloc.S_WH_CODE}锛屾壘涓嶅埌鍙犵洏璐т綅"); AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source); return result; @@ -1233,14 +1497,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,22 +1540,33 @@ { result.code = "1"; result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�; - LogHelper.Info($"Putin==> {result.msg}"); + LogHelper.Info($" {result.msg}"); AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); return result; } #endregion //鍥炲簱璐т綅璁$畻搴撳尯璐т綅 + if (string.IsNullOrEmpty(areacode)) + { + result.code = "1"; + result.msg = $"璧风偣璐т綅{startloc.S_CODE}鏃犳硶鎵惧埌鍥炲簱搴撳尯锛岃妫�煡璧风偣璐т綅"; + LogHelper.Info($" {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + } loc = StorageCompute(itemcode, areacode); - //if (loc == null) - //{ - // loc = emptyRow(areacode); - // if (loc == null) - // { - // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁绌烘帓"); - // } - //} + if (loc == null) + { + + result.code = "1"; + result.msg = $"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅"; + LogHelper.Info($" {result.msg}"); + AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source); + return result; + // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅"); + + } //else //{ @@ -1304,7 +1581,6 @@ } else { - result.code = "1"; result.msg = $"Empty==> 浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; LogHelper.Info($"{result.msg}"); @@ -1313,7 +1589,7 @@ } #endregion - #region 鍒涘缓浠诲姟 + #region 鍒涘缓浠诲姟 if (startloc != null && loc != null) { if (startloc.N_LOCK_STATE != 0 && loc.N_LOCK_STATE != 0) @@ -1323,6 +1599,7 @@ AddErrorInfo("璐т綅鏈夐攣", result.msg); return result; } + LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅涓虹┖锛� + JsonConvert.SerializeObject(loc)); //鍒涘缓wcs浠诲姟 var wcsTask = new WCSTask { @@ -1340,6 +1617,8 @@ S_CNTR_CODE = model.Rfid, N_START_LAYER = 1, N_END_LAYER = endlayer, + N_PRIORITY = 1, + S_B_STATE = "绛夊緟鎺ㄩ�", Z_TYPE = 5 }; LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟锛� + JsonConvert.SerializeObject(wcsTask)); @@ -1350,12 +1629,18 @@ // 绌烘墭鍥炲簱鍒ゆ柇鎵樼洏鏈夋棤缁戝畾鐗╂枡淇℃伅 濡傛灉鏈夊垯鍒犻櫎 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 { result.code = "1"; - result.msg = $"浠诲姟鍒涘缓澶辫触"; + result.msg = $"浠诲姟鍒涘缓澶辫触锛岃妫�煡璧风偣璐т綅鐘舵�鍚庨噸鏂颁笅鍙�; AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); return result; } @@ -1404,11 +1689,11 @@ #region 鍙橀噺 string Start = ""; string End = model.TargetLocation; - + string areacode = ""; string cntrcode = ""; - Location startloc = new Location(); - // startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType); + Location startloc = null; + // startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType); #endregion try @@ -1418,9 +1703,19 @@ #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 +1729,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 +1748,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; } } @@ -1497,6 +1798,7 @@ N_START_LAYER = 1, N_END_LAYER = 1, Z_TYPE = 5, + N_PRIORITY = 1, S_NOTE = "绮夋枡" }; LogHelper.Info("鍒涘缓鍛煎彨绌烘墭浠诲姟锛� + JsonConvert.SerializeObject(wcsTask)); @@ -1562,9 +1864,8 @@ string Start = model.InitialLocation; string End = ""; string itemcode = model.PartNumber; - Location loc = new Location(); + Location loc = null; string areacode = ""; - WCSTask mst = new WCSTask(); List<WCSTask> msts = new List<WCSTask>(); #endregion @@ -1572,34 +1873,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 +1891,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 +1921,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 +1951,6 @@ { //loc = EndLocs.Find(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0); loc = FindEndcolByLocList(EndLocs); - } else @@ -1749,6 +2023,7 @@ S_CNTR_CODE = model.Rfid, N_START_LAYER = 1, N_END_LAYER = 1, + N_PRIORITY = 1, Z_TYPE = 5 }; @@ -1803,9 +2078,6 @@ } #endregion } - - - return result; } @@ -2003,6 +2275,7 @@ S_CNTR_CODE = CntrCode, N_START_LAYER = 1, N_END_LAYER = 1, + N_PRIORITY = 1, // N_TYPE = n_type @@ -2049,11 +2322,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 +2340,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,62 +2350,56 @@ 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) { - result.code = "1"; result.msg = $"璧风偣{model.Data.start_loc_code}鏈煡璇㈢粦瀹氭墭鐩�; LogHelper.Info($"callfixture:鍒涘缓绌哄伐瑁呭懠鍙换鍔�=>{result.msg}"); AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source); return result; } - - // var startArea = db.Queryable<Area>().Where(a => a.S_CODE.Trim() == startloc.S_AREA_CODE).First(); - //var endArea = db.Queryable<Area>().Where(a => a.S_CODE.Trim() == endloc.S_AREA_CODE).First(); - - //string dtcode = "DT-01"; - ////妤煎眰鐢垫鍒嗛厤 - //var Diantiloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == dtcode).First(); - //if (Diantiloc == null) - //{ - // result.code = "1"; - // result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹揣浣嶇紪鐮�{dtcode}鏈壘鍒扮數姊揣浣�; - // AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source); - // return result; - //} - + string deviceName = "鐢垫1"; + if (startloc.S_WH_CODE == "103") + { + deviceName = "鐢垫2"; + } + var eleLoc = Settings.deviceInfos.Where(a => a.deviceName.Trim() == deviceName).FirstOrDefault(); + if (eleLoc == null) + { + result.code = "1"; + result.msg = $"鏈壘鍒颁粨搴搟startloc.S_WH_CODE}鎵�搴旂殑鐢垫锛岃妫�煡閰嶇疆鏂囦欢"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級 - var elevatorLoc = LocationHelper.GetElevatorLoc(); + string[] state = new string[] { "鎵ц涓�, "寮�鍙栬揣", "鍙栬揣瀹屾垚", "寮�鍗歌揣", "鍗歌揣瀹屾垚" }; - //鍒涘缓wcs鍒嗘浠诲姟 + + var elevatorLoc = db.Queryable<Location>().Where(a => a.S_CODE == eleLoc.TN_Location).First(); + if (elevatorLoc == null) + { + result.code = "1"; + result.msg = $"鏍规嵁鐢垫閰嶇疆鏂囦欢璐т綅锛歿eleLoc.TN_Location}鏈壘鍒板浜庤揣浣嶆暟鎹紝璇锋鏌ヨ揣浣嶈〃"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } + int mst = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("鐢垫") && state.Contains(a.S_B_STATE) && (a.S_END_LOC == elevatorLoc.S_CODE || a.S_START_LOC == elevatorLoc.S_CODE)).Count(); + if (mst > 0) + { + result.code = "1"; + result.msg = $"鐢垫瀛樺湪浠诲姟锛屼笉鍏佽鍒涘缓鐢垫浠诲姟"; + AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source); + return result; + } 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", + S_TYPE = "1妤肩數姊惉杩�, S_EQ_NO = model.Data.task_no, S_START_LOC = elevatorLoc.S_CODE, S_END_LOC = endloc.S_CODE, @@ -2143,16 +2411,39 @@ N_SCHEDULE_TYPE = 1, S_CNTR_CODE = cntr.S_CNTR_CODE, N_END_LAYER = 1, - Z_TYPE = 6 + Z_TYPE = 6, + N_PRIORITY = 1, + S_B_STATE = "鐢垫鎺ㄩ�" }; - 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,13 +2467,54 @@ { result.code = "1"; - result.msg = $"鐗╂枡涓绘暟鎹垱寤哄け璐�閿欒淇℃伅锛歿ex}"; + result.msg = $"鐢垫鎼繍浠诲姟鍒涘缓澶辫触 閿欒淇℃伅锛歿ex}"; LogHelper.Error("鐐瑰鐐逛换鍔�Error锛� + ex.ToString(), ex); return result; } } + + /// <summary> + /// 鐢垫浠诲姟鎺ㄩ� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static Result DT(DTModel model) + { + Result result = new Result() { code = "200", msg = "鐢垫浠诲姟鎺ㄩ�鎴愬姛" }; + string Source = "WMS"; + if (model == null) + { + result.code = "1"; + result.msg = "鍙傛暟涓簄ull"; + AddErrorInfo("鍙傛暟涓虹┖", result.msg, Source); + return result; + } + try + { + if (model.prepare == "1") + { + var db = new SqlHelper<object>().GetInstance(); + //淇敼瀵瑰簲鐢垫浠诲姟杩涜鎺ㄩ� + return result; + } + else + { + result.code = "1"; + result.msg = $"涓�ゼ鐢垫鎼繍浠诲姟鎺ㄩ�澶辫触 prepare{model.prepare}涓嶄负1"; + LogHelper.Info(result.msg); + return result; + } + } + catch (Exception ex) + { + result.code = "1"; + result.msg = $"鐢垫浠诲姟鎺ㄩ�澶辫触 閿欒淇℃伅锛歿ex}"; + LogHelper.Error("鐐瑰鐐逛换鍔�Error锛� + ex.ToString(), ex); + return result; + } + } /// <summary> /// 璐т綅淇℃伅涓婁紶 /// </summary> @@ -2270,53 +2602,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; } @@ -2340,58 +2678,47 @@ var db = new SqlHelper<object>().GetInstance(); try { - var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First(); - if (location != null) + lock (_lockCreateItem) { - var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).ToList(); - if (loccntr.Count > 0) + var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First(); + if (location != null) { - foreach (var item in loccntr) + var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc.Trim()).ToList(); + if (loccntr.Count > 0) { - string cntrcode = item.S_CNTR_CODE; - LocationHelper.UnBindingLoc(loc, new List<string>() { cntrcode }); - var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First(); - if (CntrItem != null) + var cntrcodes = loccntr.Select(a => a.S_CNTR_CODE.Trim()).ToList(); + if (LocationHelper.Clear(loc, cntrcodes)) { - db.Deleteable<Container>().Where(it => it.S_CODE == item.S_CNTR_CODE).ExecuteCommand(); - // db.Deleteable<LocCntrRel>().Where(it => it.S_LOC_CODE.Trim() == loc).ExecuteCommand(); - if (db.Deleteable<CntrItemDetail>().Where(it => it.S_CNTR_CODE == cntrcode).ExecuteCommand() > 0) - { - LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎鎴愬姛"); - } - else - { - LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎澶辫触"); - result.code = "1"; - result.msg = "搴撲綅娓呴櫎澶辫触"; - AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source); - return result; - } + LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎鎴愬姛"); } else { - LogHelper.Info($"搴撳尯娓呯┖=銆嬫墭鐩�{cntrcode}鏃犵墿鏂欐暟鎹�); - + LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎澶辫触"); + result.code = "1"; + result.msg = "搴撲綅娓呴櫎澶辫触"; + AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source); + return result; } + } - + else + { + result.code = "1"; + result.msg = $" ClearLoc 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�; + AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source); + return result; + + } + } + else { result.code = "1"; - result.msg = $" ClearLoc 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�; - AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source); + result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�; + AddErrorInfo("璐т綅涓虹┖", result.msg, Source); return result; - } - - } - else - { - result.code = "1"; - result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�; - AddErrorInfo("璐т綅涓虹┖", result.msg, Source); - return result; } } catch (Exception ex) @@ -2415,30 +2742,30 @@ var db = new SqlHelper<HangChaAGV>().GetInstance(); DeviceInfoModel device = new DeviceInfoModel(); - List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//鍙犵洏鏈烘姤閿欎俊鎭�- // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv鎶ラ敊淇℃伅 + // List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//鍙犵洏鏈烘姤閿欎俊鎭�+ // 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; + //foreach (var dpjInfo in DeviceProcess.DpjInfoDirectory) + //{ + // deviceInfos.Add(new DeviceInfos() { Device = dpjInfo.Value.DeviceName, DeviceInfo = dpjInfo.Value.ErrorInfo }); + //} + // device.DeviceInfos = deviceInfos; //鑾峰彇杞﹁締鎶ヨ淇℃伅 var agvDeviceInfo = db.Queryable<HangChaAGV>().ToList(); if (agvDeviceInfo.Count > 0) { device.AgvQty = agvDeviceInfo.Count; - device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || a.agvErrCode != "0" || a.faildCode != "0").Count; - device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count; - device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count; - foreach (var agv in agvDeviceInfo) - { - string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvErrCode, agv.errCode2, agv.faildCode); - deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo }); - } + device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || int.Parse(a.errCode2) > 1 || int.Parse(a.faildCode) > 1).Count; + device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.errCode2 == "1").Count; + device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "0" && a.errCode2 == "0" && a.faildCode == "1").Count; + //foreach (var agv in agvDeviceInfo) + //{ + // string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode); + // deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo }); + //} } - device.DeviceInfos = deviceInfos; + // device.DeviceInfos = deviceInfos; return device; } @@ -2446,56 +2773,65 @@ /// <summary> /// agv灏忚溅鏁呴殰鐮佸鐞� /// </summary> + ///<param name="agvNo">杞﹀彿</param> /// <param name="errCode1">閿欒鐮�</param> /// <param name="errCode2">閿欒鐮�</param> /// <param name="faildCode">閿欒鐮�</param> /// <returns></returns> - private static string GetAgvAlarmSendCodeTwo(string errCode1, string errCode2, string faildCode) + private static string GetAgvAlarmSendCodeTwo(string agvNo, string errCode1, string errCode2, string faildCode) { string result = ""; //灏嗘姤璀︿俊鎭暣鍚�- string binSW1 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(22, '0'); + string binSW1 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(25, '0'); string binSW2 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(20, '0'); string binFc = Convert.ToString(int.Parse(errCode1), 2).PadLeft(16, '0'); var arr1 = binSW1.ToArray(); var arr2 = binSW2.ToArray(); var arr3 = binFc.ToArray(); - for (int i = 0; i <= arr1.Length; i++) + var AgvError = Settings.agvError.Where(a => a.agvNo.Contains(agvNo)).FirstOrDefault(); + if (AgvError != null) { - if (arr1[i] == '1') + for (int i = 0; i <= arr1.Length; i++) { - var ErrorInfo = Settings.agvErrorCode1.Where(a => a.ErrorCode == i).FirstOrDefault(); - if (ErrorInfo != null) + if (arr1[i] == '1') { - result = result + "," + $"{ErrorInfo.ErrorInfo}"; - } + var ErrorInfo = AgvError.AgvErrorCode1.Find(a => a.ErrorCode == i); + if (ErrorInfo != null) + { + result = result + "," + $"{ErrorInfo.ErrorInfo}"; + } + } + } + for (int i = 0; i <= arr2.Length; i++) + { + if (arr1[i] == '1') + { + var ErrorInfo = AgvError.AgvErrorCode2.Find(a => a.ErrorCode == i); + if (ErrorInfo != null) + { + result = result + "," + $"{ErrorInfo.ErrorInfo}"; + } + + } + } + for (int i = 0; i <= arr3.Length; i++) + { + if (arr1[i] == '1') + { + var ErrorInfo = AgvError.AgvFaildCode.Find(a => a.ErrorCode == i); + if (ErrorInfo != null) + { + result = result + "," + $"{ErrorInfo.ErrorInfo}"; + } + + } } } - for (int i = 0; i <= arr2.Length; i++) + else { - if (arr1[i] == '1') - { - var ErrorInfo = Settings.agvErrorCode2.Where(a => a.ErrorCode == i).FirstOrDefault(); - if (ErrorInfo != null) - { - result = result + "," + $"{ErrorInfo.ErrorInfo}"; - } - } - } - for (int i = 0; i <= arr3.Length; i++) - { - if (arr1[i] == '1') - { - var ErrorInfo = Settings.agvFaildCode.Where(a => a.ErrorCode == i).FirstOrDefault(); - if (ErrorInfo != null) - { - result = result + "," + $"{ErrorInfo.ErrorInfo}"; - } - - } } return result; } @@ -2503,7 +2839,7 @@ #region 鍚堣偉浣抽�涓氬姟鏂规硶 - + /// <summary> /// 鎵樼洏鍏ュ簱绠楁硶 /// </summary> @@ -2512,53 +2848,26 @@ /// <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(); - //鏌ヨ鎵�湁鏈夋墭鐩樼殑鎺掓病閿佺殑鎺�- // 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(); - // if (cntr != null) - // { - // //鏌ヨ鎵樼洏鐗╂枡淇℃伅 - // var iteminfo = ContainerHelper.GetCntrItemRel(cntr.S_CNTR_CODE).FirstOrDefault(); + Location result = null; + // 867C567A-183C-413B-9891-15D8F6DE1620 - // if (string.IsNullOrEmpty(itemcode))//绌烘墭鍏ュ簱 - // { - // if (iteminfo == null) - // { - // //鐗╂枡鐩稿悓鍏ヨ揣浣嶅悗涓�綅璐т綅 - // result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE.Trim() == areacode && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM == 0).First(); - // } - // } - // else//婊℃嫋鍏ュ簱 - // { - // if (iteminfo != null) - // { - // if (iteminfo.S_ITEM_CODE == itemcode) - // { - // //鐗╂枡鐩稿悓鍏ヨ揣浣嶅悗涓�綅璐т綅 - // result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE.Trim() == areacode && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM == 0).First(); + // var aaa = db.Deleteable<Location>(a => a.S_ID == "867C567A-183C-413B-9891-15D8F6DE1620").ExecuteCommand(); + // var aaa = db.Deleteable<Location>(a => a.S_ID.Trim() == "867C567A-183C-413B-9891-15D8F6DE1620").ExecuteCommand(); - // } - // } - // } - // if (result != null) - // { - // return result; - // } - // } - // else - // { - // LogHelper.Info($"鏍规嵁璐х墿缂栫爜{list[i].S_CODE}鏈壘鍒版墭鐩樿揣浣嶇粦瀹氬叧绯�); - // } - // } - //} + //LogHelper.Info($"鏂规硶锛歋torageCompute"); + var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE == areacode && a.N_LOCK_STATE == 0).ToList(); + // LogHelper.Info($"鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅闆嗗悎锛氭牴鎹簱鍖虹紪鐮侊細{areacode}" + list.Count); + //list.RemoveAll(a => string.IsNullOrEmpty(a.S_CODE.Trim()) || a.S_CODE == null || string.IsNullOrWhiteSpace(a.S_CODE.Trim())); + // list = list.FindAll(a => a.N_ROW > 0 && a.N_COL > 0); + //LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅闆嗗悎杩囨护锛� + list.Count); + + if (list.Count > 0) + { + result = FindEndcolByLocList(list); + } + return result; } @@ -2569,8 +2878,10 @@ /// <param name="areacode"></param> /// <param name="itemcode"></param> /// <param name="level">鐗╂枡绛夌骇</param> + /// <param name="powderType">鏈哄瀷</param> /// <returns></returns> - internal static Location airlift(string areacode, string itemcode, string level = "") + internal static Location + airlift(string areacode, string itemcode, string level, string powderType) { var db = new SqlHelper<object>().GetInstance(); Location result = null; @@ -2627,8 +2938,8 @@ //} #endregion - var loc = LocationHelper.GetLocByItemCode(areacode, itemcode, level); - LogHelper.Info($"airlift=>鏍规嵁搴撳尯缂栫爜:{areacode}锛岀墿鏂欑紪鐮�{itemcode},鐗╂枡绛夌骇璁$畻鍑烘湁鎵樼洏璐т綅{JsonConvert.SerializeObject(loc)}"); + var loc = LocationHelper.GetLocByItemCode(areacode, itemcode, level, powderType); + LogHelper.Info($"airlift=>鏍规嵁搴撳尯缂栫爜:{areacode}锛岀墿鏂欑紪鐮�{itemcode},鏈哄瀷{powderType},鐗╂枡绛夌骇璁$畻鍑烘湁鎵樼洏璐т綅{JsonConvert.SerializeObject(loc)}"); // result = FindStartcolByLoclist(loc); if (loc.Count > 0) { @@ -2673,10 +2984,25 @@ else { return ContainerHelper.CreateCntrItem(taskData.pickStation, partData.rfid, partData.partNumber, partData.partDesc, partData.partType, taskData.carrierType, partData.lotNumber, taskData.wmsLot, partData.weight, partData.unit, - taskData.tyreType, taskData.supplier, taskData.receiveLot, taskData.subpool, partData.productionTime, partData.maturityTime, taskData.level); + taskData.tyreType, taskData.supplier, taskData.receiveLot, taskData.subpool, partData.productionTime, partData.maturityTime, taskData.level, partData.qty, partData.qtyCfg); } } + + //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> /// 鏍规嵁鎵樼洏缂栫爜锛屾満鍙扮紪鐮侊紝宸ヨ绫诲瀷璁$畻鏈哄彴绾胯竟鍖哄煙 @@ -2687,7 +3013,7 @@ /// <returns></returns> internal static Location Computeloc(string cntrcode, string jtcode, string cntrType) { - Location End = new Location(); + Location End = null; var db = new SqlHelper<object>().GetInstance(); @@ -2695,12 +3021,16 @@ 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(); - if (loc != null) + if (string.IsNullOrEmpty(cntrType)) { - End = loc; + End = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First(); } else + { + End = 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(); + } + + if (End == null) { LogHelper.Info($"Computeloc==銆嬫牴鎹満鍙板垎缁勶細{jtcode},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�); } @@ -2748,6 +3078,48 @@ } /// <summary> + /// 鍚堣偉浣抽�鎺ュ彛璋冪敤淇℃伅 + /// </summary> + /// <param name="source">绯荤粺鏉ユ簮</param> + /// <param name="name">鎺ュ彛鍚嶇О</param> + /// <param name="type">璇锋眰鍦板潃绫诲瀷</param> + /// <param name="body">璇锋眰鍙傛暟</param> + /// <param name="url">璇锋眰鍦板潃</param> + /// <param name="err">閿欒淇℃伅</param> + /// <returns></returns> + public static bool AddInfo(string source, string name, string body, string err, string type, string url) + { + bool result = false; + var db = new SqlHelper<object>().GetInstance(); + try + { + var error = new GT_Interface_Exc + { + S_SOURCE = source, + S_NAME = name, + S_TYPE = type, + S_URL = url, + S_BODY = body, + S_ERR = err + }; + if (result = db.Insertable<GT_Interface_Exc>(error).ExecuteCommand() > 0) + { + + } + //else + //{ + // //娣诲姞澶辫触閲嶆柊娣诲姞 + // AddErrorInfo(errorInfo, remake, areacode, taskno); + //} + } + catch (Exception ex) + { + LogHelper.Info($"AddInfo Error:{ex.Message}"); + } + return result; + } + + /// <summary> /// 鎵剧粓鐐圭┖璐т綅 /// </summary> /// <param name="locations"></param> @@ -2762,12 +3134,15 @@ var rows = locations.Select(a => a.N_ROW).Distinct().ToList(); for (int i = 0; i < rows.Count; i++) { + var rowList = locations.Where(r => r.N_ROW == rows[i]).ToList(); + // LogHelper.Info($"褰撳墠鎺�{rows[i]},鑾峰緱璐т綅{JsonConvert.SerializeObject(rowList)}"); if (rowList.Count(a => a.N_CURRENT_NUM == 0) > 0) { 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) //{ @@ -2784,6 +3159,59 @@ // other = db.Queryable<Location>().OrderBy(a => a.N_LAYER).Where(a => (string.IsNullOrEmpty(a.C_ENABLE) || a.C_ENABLE.Trim() != "绂佺敤") && a.S_AREA_CODE == other.S_AREA_CODE && a.N_ROW == other.N_ROW && a.N_COL > other.N_COL).First(); // //LogHelper.Info($"绂佺敤閫夋嫨鍚庝竴涓揣浣峽result}", "鎴愬搧"); //} + + if (other != null) + { + if (other.S_CODE != null && !string.IsNullOrEmpty(other.S_CODE)) + { + end = other; + break; + } + } + } + } + return end; + } + catch (Exception) + { + + throw; + } + + } + + /// <summary> + /// 鎵剧粓鐐圭┖璐т綅璁$畻鎺掗攣 + /// </summary> + /// <param name="locations"></param> + /// <returns></returns> + internal static Location FindEndcolByLocListLock(List<Location> locations) + { + try + { + var db = new SqlHelper<object>().GetInstance(); + Location end = null; + //鏍规嵁缁堢偣璐т綅鎵剧┖闂茶揣浣�+ var rows = locations.Select(a => a.N_ROW).Distinct().ToList(); + for (int i = 0; i < rows.Count; i++) + { + var rowList = locations.Where(r => r.N_ROW == rows[i]).ToList(); + if (rowList.Count(a => a.S_LOCK_STATE != "鏃�) == 0 && rowList.Count(a => a.N_CURRENT_NUM == 0) > 0) + { + Location other = null; + //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆 + //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴浣嶈涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�+ var full = rowList.OrderByDescending(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 1).FirstOrDefault(); + if (full == null) + { + //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣�+ other = rowList.OrderBy(a => a.N_COL).FirstOrDefault(); + } + else + { + other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_COL > full.N_COL).FirstOrDefault(); + } + if (other != null) { end = other; @@ -2886,7 +3314,6 @@ { lock (AGVDeviceReceiveLock) { - var db = new SqlHelper<HangChaAGV>().GetInstance(); var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo).First(); if (agvDeviceInfo == null) -- Gitblit v1.9.1