From 79db8fda0f71b65dfe1e1c72f307b29efc565126 Mon Sep 17 00:00:00 2001 From: lss <2538410689@qq.com> Date: 星期一, 04 八月 2025 17:31:22 +0800 Subject: [PATCH] 111 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs | 275 +++++++++++++++++++++++++++++-------------------------- 1 files changed, 145 insertions(+), 130 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 04c62d7..0155ac0 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs @@ -6,6 +6,7 @@ using HH.WCS.JiaTong.wms; using Newtonsoft.Json; using NLog.Fluent; +using NModbus; using S7.Net; using SqlSugar; using System; @@ -37,9 +38,9 @@ #region 浣抽�鍚堣偉鎺ュ彛涓氬姟 - - public static object _lockCreateTask = new object(); public static object _lockCreateItem = new object(); + public static object _lockCreateTask = new object(); + /// <summary> /// 绔嬪簱浠诲姟涓嬪彂=銆嬪垱寤轰换鍔� /// </summary> @@ -146,6 +147,19 @@ AddErrorInfo("瀵绘壘鍑哄簱璐т綅澶辫触", result.msg, Source); return result; } + + //endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == taskData.dropStation).First(); + //if (endloc != null) + //{ + // End = taskData.dropStation; + //} + //else + //{ + // result.code = "1"; + // result.msg = $"鏍规嵁缁堢偣{End},鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; + // AddErrorInfo("璐т綅鏌ユ壘澶辫触", result.msg, Source); + // return result; + //} } else { @@ -154,6 +168,8 @@ AddErrorInfo("鍒涘缓鎵樼洏澶辫触", result.msg, Source); return result; } + + } else { @@ -213,7 +229,7 @@ } else if (taskData.taskType == 3)//绉诲簱娴佺▼锛岀洿鎺ヤ娇鐢ㄨ捣鐐硅揣浣嶅拰缁堢偣璐т綅鐢熸垚浠诲姟锛� { - note = "鍑哄簱"; + note = "鍏ュ簱"; //鍒涘缓鎵樼洏鐗╂枡缁戝畾淇℃伅锛屽苟璁$畻缁堢偣璐т綅 startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == taskData.pickStation).First(); if (startloc != null) @@ -799,16 +815,15 @@ 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"; @@ -816,104 +831,66 @@ AddErrorInfo("鍙傛暟涓虹┖", result.msg, Source); return result; } + //1.鍑哄钩搴擄紝2鍏ュ钩搴擄紝3骞冲簱绌哄伐瑁呭懠鍙紝4骞冲簱浣欐枡鍥炲簱锛�绮夋枡绌烘墭杩斿洖銆� var db = new SqlHelper<object>().GetInstance(); - Location loc = null; + 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; + } - string Start = model.InitialLocation; //璧风偣璐т綅 - string itemcode = model.PartNumber; //鐗╂枡缂栫爜 - string areacode = ""; try { - lock (_Putin) + lock (_Point) { - #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�- var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First(); - if (cntritem == null) + startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.InitialLocation).First(); + if (startloc == null) { result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�; - LogHelper.Info($"ItemBack锛歿result.msg}"); - AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source); + result.msg = $"鏍规嵁璧风偣{model.InitialLocation},鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; + 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) + endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First(); + if (endloc == 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); + result.msg = $"鏍规嵁缁堢偣{model.TargetLocation},鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃"; + AddErrorInfo("璐т綅鏌ユ壘澶辫触", result.msg, Source); return result; } - #endregion #region 鍒涘缓浠诲姟 - if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End)) + if (endloc != null && startloc != null) { if (startloc.N_LOCK_STATE != 0) { result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{Start}鏈夐攣"; + result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{startloc.S_CODE}鏈夐攣"; AddErrorInfo("璐т綅鏈夐攣", result.msg, Source); return result; } @@ -921,27 +898,40 @@ var wcsTask = new WCSTask { S_CODE = WCSHelper.GenerateTaskNo(), - S_TYPE = "鍏ュ钩搴�, + S_TYPE = type, S_EQ_NO = model.TaskNumber, - S_START_LOC = Start, - S_END_LOC = End, + 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 = loc.S_WH_CODE, - S_END_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 = model.Rfid, N_START_LAYER = 1, N_END_LAYER = 1, N_PRIORITY = 1, - Z_TYPE = n_type + Z_TYPE = 5 }; - LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask)); + LogHelper.Info("鍒涘缓鐐瑰鐐逛换鍔★細" + JsonConvert.SerializeObject(wcsTask)); if (WCSHelper.CreateTask(wcsTask)) { - //LocationHelper.LockLoc(Start, 2); - //LocationHelper.LockLoc(End, 1); + 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(); + } + } + + LogHelper.Info("鍒涘缓浠诲姟鎴愬姛"); } else @@ -2236,18 +2226,8 @@ if (startloc != null) { Start = model.InitialLocation; - var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).FirstOrDefault(); - if (CntrRel != null) - { - CntrCode = CntrRel.S_CNTR_CODE; - } - else - { - result.code = "1"; - result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹捣鐐箋model.InitialLocation}鏈壘鍒板搴旇揣浣嶇粦瀹氭墭鐩樻墭鐩�; - AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source); - return result; - } + + } endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First(); if (endloc != null) @@ -2748,30 +2728,62 @@ 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 }); - } + //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) + var agvDeviceInfos = db.Queryable<HangChaAGV>().ToList(); + if (agvDeviceInfos.Count > 0) { - device.AgvQty = agvDeviceInfo.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) + int chargeQty = 0; + int runQty = 0; + int Errorqty = 0; + foreach (var item in agvDeviceInfos) { - string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode); - deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo }); + + string[] battery = item.agvBattery.Split(',').ToArray(); + LogHelper.Info($"杞﹁締淇℃伅涓婃姤 杞﹀彿锛歿item.agvNo},battery:{JsonConvert.SerializeObject(battery)},閿欒鐮侊細{item.agvErrCode}銆亄item.errCode2}銆亄item.faildCode}"); + if (battery.Count() > 3) + { + if (battery[1] == "1") + { runQty++; } + if (battery[2] == "1") + { chargeQty++; } + if (!string.IsNullOrEmpty(item.agvErrCode) && int.Parse(item.agvErrCode) > 1) + { + Errorqty++; + break; + } + if (!string.IsNullOrEmpty(item.errCode2) && int.Parse(item.errCode2) > 1) + { + Errorqty++; + break; + } + if (!string.IsNullOrEmpty(item.faildCode) && int.Parse(item.faildCode) > 1) + { + Errorqty++; + break; + } + } + } + device.AgvQty = agvDeviceInfos.Count; + device.AgvErrorQty = Errorqty; + device.AgvChargeQty = chargeQty; + device.AgvRunQty = runQty; + //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; } @@ -3312,16 +3324,16 @@ /// </summary> /// <param name="forkliftNo"></param> /// <param name="battery"></param> - /// <param name="agvCurrTaskInfo"></param> /// <param name="errCode"></param> /// <param name="errCode2"></param> /// <param name="faildCode"></param> internal static void AGVDeviceReceiveSet(string forkliftNo, string battery, string errCode, string errCode2, string faildCode) { - lock (AGVDeviceReceiveLock) + + try { var db = new SqlHelper<HangChaAGV>().GetInstance(); - var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo).First(); + var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo.Trim()).First(); if (agvDeviceInfo == null) { var agvInfo = new HangChaAGV() @@ -3337,11 +3349,7 @@ } else { - //鍒ゆ柇涓棿琛ㄤ俊鎭湁鏃犲彉鍖栵紝鏃犲彉鍖栦笉鏇存柊涓棿琛�- if (agvDeviceInfo.agvErrCode == errCode && agvDeviceInfo.errCode2 == errCode2 && agvDeviceInfo.faildCode == faildCode) - { - return; - } + agvDeviceInfo.agvBattery = battery; // agvDeviceInfo.agvCurrTaskInfo = agvCurrTaskInfo; agvDeviceInfo.agvErrCode = errCode; @@ -3352,9 +3360,16 @@ //if (int.Parse(agvDeviceInfo.agvBattery) >= 1000) // agvDeviceInfo.agvRunStatus = ""; db.Updateable(agvDeviceInfo).UpdateColumns(a => new - { a.agvBattery, a.agvCurrTaskInfo, a.agvErrCode, a.errCode2, a.faildCode, a.agvRunStatus }).ExecuteCommand(); + { a.agvBattery, a.agvErrCode, a.errCode2, a.faildCode }).ExecuteCommand(); } } + catch (Exception ex) + { + + LogHelper.Info($"AGVDeviceReceiveSet:Error:{ex}"); + } + + } #region 鏁版嵁妯″瀷 -- Gitblit v1.9.1