From f3c8f980269b7f8fd9556c9076e06ca1461796e8 Mon Sep 17 00:00:00 2001 From: lss <2538410689@qq.com> Date: 星期二, 15 七月 2025 17:30:55 +0800 Subject: [PATCH] 1111 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs | 279 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 232 insertions(+), 47 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 b40756c..04c62d7 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs @@ -47,7 +47,7 @@ /// <returns></returns> internal static Result Createtask(CreateTask model) { - + Result result = new Result() { code = "0", msg = "鍒涘缓鎴愬姛" }; if (model == null) { @@ -188,7 +188,7 @@ } } - + } else { @@ -585,13 +585,13 @@ } int pri = 1; var area = Settings.wareLoc.Where(a => a.AreaCode == endloc.S_WH_CODE).First(); - if (area != null) + if (area != null) { if (area.XbAreaCodes.Contains(endloc.S_AREA_CODE)) { pri = 2; } - } + } //鍒涘缓wcs浠诲姟 var wcsTask = new WCSTask { @@ -795,6 +795,182 @@ + } + + public static object _Point = new object(); + /// <summary> + /// 鍏ュ钩搴�+ /// </summary> + /// <param name="model"></param> + /// <param name="n_type">0:pda涓嬪彂浠诲姟锛�:mes涓嬪彂浠诲姟</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; + } + var db = new SqlHelper<object>().GetInstance(); + Location loc = null; + + string Start = model.InitialLocation; //璧风偣璐т綅 + string itemcode = model.PartNumber; //鐗╂枡缂栫爜 + string areacode = ""; + try + { + lock (_Putin) + { + #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}鏃犵粦瀹氱墿鏂欐暟鎹�; + 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) + { + + result.code = "1"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}"; + LogHelper.Info($"ItemBack锛歿result.msg}"); + AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source); + return result; + } + } + else + { + LocationHelper.BindingLoc(Start, new List<string> { model.Rfid }); + } + + #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) + { + 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 = $"浠诲姟璧风偣:{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) + { + 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 = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣"; + return result; + } + #endregion + + } + + return result; + } + catch (Exception ex) + { + result.code = "1"; + result.msg = ex.ToString(); + LogHelper.Error("Putin Error锛� + ex.ToString(), ex); + return result; + } } public static object _Putin = new object(); @@ -1093,19 +1269,19 @@ #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) { @@ -1122,7 +1298,7 @@ } else { - + Endloc = db.Queryable<Location>().Where(a => a.S_CODE == model.TargetLocation).First(); if (Endloc != null) { @@ -1137,7 +1313,7 @@ return result; } } - + } else { @@ -1448,7 +1624,7 @@ N_START_LAYER = 1, N_END_LAYER = endlayer, N_PRIORITY = 1, - S_B_STATE="绛夊緟鎺ㄩ�", + S_B_STATE = "绛夊緟鎺ㄩ�", Z_TYPE = 5 }; LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟锛� + JsonConvert.SerializeObject(wcsTask)); @@ -2586,12 +2762,12 @@ 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; + 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.agvErrCode, agv.errCode2, agv.faildCode); + string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode); deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo }); } } @@ -2603,56 +2779,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; } @@ -2701,7 +2886,7 @@ /// <param name="level">鐗╂枡绛夌骇</param> /// <param name="powderType">鏈哄瀷</param> /// <returns></returns> - internal static Location + internal static Location airlift(string areacode, string itemcode, string level, string powderType) { var db = new SqlHelper<object>().GetInstance(); @@ -2844,18 +3029,18 @@ { if (string.IsNullOrEmpty(cntrType)) { - 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(); + 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} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�); } - + } return End; } -- Gitblit v1.9.1