From 766d0cae552e0e549b302a1763d113416346832a Mon Sep 17 00:00:00 2001 From: zxx <Zxx@HanInfo> Date: 星期二, 10 六月 2025 17:21:44 +0800 Subject: [PATCH] jushi --- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 205 insertions(+), 32 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs index 562e821..af40a22 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs @@ -1,4 +1,5 @@ 锘縰sing HH.WCS.JuShi.api; +using HH.WCS.JuShi.device; using HH.WCS.JuShi.process; using HH.WCS.JuShi.util; using HH.WCS.JuShi.wms; @@ -9,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using static HH.WCS.JuShi.device.S7Helper; @@ -178,43 +180,50 @@ { //bool result = false; //鎵鹃�妫�叆搴撳尯婊℃墭鐩樼殑璐т綅 - var db = new SqlHelper<Location>().GetInstance(); + var db = new SqlHelper<object>().GetInstance(); try { - var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹鍏ュ簱鍖�).FirstOrDefault(); - var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "RGV搴撳尯").FirstOrDefault(); - //涓夎〃鑱旀煡鏌ュ嚭鎵樼洏婊$殑 鎸夊垱寤烘椂闂撮『搴�- var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<Container>((p, c) => p.S_CNTR_CODE == c.S_CODE) - .Where((p, c) => c.C_FULL == "2") - .OrderBy((p, c) => p.T_CREATE) - .Select((p, c) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁 - .ToList(); + var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹鍏ュ簱鍖�).FirstOrDefault(); + var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "绔嬪簱鍏ュ簱鍖�).FirstOrDefault(); + //涓夎〃鑱旀煡鏌ュ嚭鎵樼洏婊$殑 鎸夊垱寤烘椂闂撮『搴�+ var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<Container>((p, c) => p.S_CNTR_CODE == c.S_CODE) + .Where((p, c) => c.C_FULL == "2") + .OrderBy((p, c) => p.T_CREATE) + .Select((p, c) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁 + .ToList(); - //鎵鹃�妫�叆搴撳尯鍐呮墭鐩樻弧浜嗙殑璐т綅 - var locList = db.Queryable<Location>() - .Where(p => p.S_AREA_CODE == reservoirs.areaCode && p.N_LOCK_STATE == 0) - .Where(s => locCntrs.Contains(s.S_CODE.Trim())) - .ToList(); + //鎵鹃�妫�叆搴撳尯鍐呮墭鐩樻弧浜嗙殑璐т綅 + var locList = db.Queryable<Location>() + .Where(p => p.S_AREA_CODE == reservoirs.areaCode && p.N_LOCK_STATE == 0 && p.C_ENABLE == "Y") + .Where(s => locCntrs.Contains(s.S_CODE.Trim())) + .ToList(); - if (locList.Any()) - { - //寤轰换鍔�- var startLoc = locList.FirstOrDefault(); - var endLoc = TaskProcess.InWorkTransport(reservoirs2.areaCode); + if (locList.Any()) + { + LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬬┖婊$姸鎬佹壘鍒拌揣浣峽JsonConvert.SerializeObject(locList)}"); + //寤轰换鍔�+ var startLoc = locList.FirstOrDefault(); + var endLoc = TaskProcess.InWorkTransport(reservoirs2.areaCode); + LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬫壘鍒扮粓鐐硅揣浣嶏細{JsonConvert.SerializeObject(endLoc)}"); + if (endLoc != null) + { + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); + LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬫壘鍒版墭鐩橈細{JsonConvert.SerializeObject(locCntrRel)}"); - var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == endLoc.S_CODE).First(); - TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鎽勫儚澶寸洃娴�, locCntrRel.S_CNTR_CODE, 1, 1); + TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鎽勫儚澶寸洃娴�, locCntrRel.S_CNTR_CODE, 1, 1); - } - } + } + + } + } catch (Exception ex) - { - Console.WriteLine("AutoReplenish:" + ex.Message + ex.StackTrace); - LogHelper.Error("AutoReplenish:" + ex.Message, ex); - throw; - } + { + Console.WriteLine("MonitorFullStatus:" + ex.Message + ex.StackTrace); + LogHelper.Error("MonitorFullStatus:" + ex.Message, ex); + throw; + } - + //return result; @@ -222,7 +231,12 @@ //甯歌閫佹绌轰簡鑷姩浠庨�妫�紦瀛樺尯鍙栦竴涓�杩囧幓 public static void AutoReplenish() { - var db = new SqlHelper<Location>().GetInstance(); + var db = new SqlHelper<object>().GetInstance(); + var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == "鑷姩琛ヨ揣").First(); + if (isusinglist.S_STATUS == 0) + { + return; + } try { var cgreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "甯歌閫佹鍖�).FirstOrDefault(); @@ -233,7 +247,8 @@ var hcreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹缂撳瓨鍖�).FirstOrDefault(); //鎵鹃�妫�紦瀛樺尯鏈夎揣鐨勮揣浣� var startloc = TaskProcess.OutWorkTransport(hcreservoirs.areaCode); - if (startloc!=null) + //LogHelper.Info($"AutoReplenish 鑷姩琛ヨ揣 璧风偣璐т綅{JsonConvert.SerializeObject(startloc)}"); + if (startloc != null) { //鍒涘缓閫佹浠诲姟 var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First(); @@ -245,7 +260,86 @@ } } - } + } + } + catch (Exception ex) + { + Console.WriteLine("AutoReplenish:" + ex.Message + ex.StackTrace); + LogHelper.Error("AutoReplenish:" + ex.Message, ex); + throw; + } + + } + //绌烘墭缂撳瓨鍖烘湁缁戝畾鐨勬墭鐩樺氨閫佸埌鎷嗘墭鏈�+ public static void AutoSendMachine() + { + var db = new SqlHelper<object>().GetInstance(); + var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == "鑷姩閫佹墭").First(); + if (isusinglist.S_STATUS == 0) + { + return; + } + try + { + var reservoirs1 = Settings.ReservoirAreas.Where(s => s.areaName == "3min绌烘墭鍖�).FirstOrDefault(); + var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "6min绌烘墭鍖�).FirstOrDefault(); + var linePlcInfo1 = Settings.linePlcInfos.Where(s => s.deviceNo == "1").FirstOrDefault(); + var linePlcInfo2 = Settings.linePlcInfos.Where(s => s.deviceNo == "2").FirstOrDefault(); + + //鏌ヨ姣忔帓鏈�悗涓�垪鏈夋墭鐩樼殑璐т綅 鏍规嵁琛屽垎鍖�鍐嶆壘姣忎竴琛岀殑鏈�悗涓�垪鏈夎揣鐨勮揣浣�+ var list = db.Queryable<Location>(). + Where(a => a.N_CURRENT_NUM > 0).Where(a => a.S_AREA_CODE.Trim() == reservoirs1.areaCode || a.S_AREA_CODE.Trim() == reservoirs2.areaCode) + .PartitionBy(a => a.N_ROW) + .OrderByDescending(a => a.N_COL).Take(1).ToList(); + if (list.Count > 0) + { + for (int i = 0; i < list.Count; i++) + { + //var loc = list[i]; + //鍒ゆ柇閫佸線3瀵歌繕鏄�瀵告媶鎵樻満 + string endLoc = null; + string dev = null; + if (list[i].S_AREA_CODE == reservoirs1.areaCode) + { + endLoc = linePlcInfo1.inLoca; + dev = "1"; + } + else if (list[i].S_AREA_CODE == reservoirs2.areaCode) + { + endLoc = linePlcInfo2.inLoca; + dev = "2"; + } + var endLocation = db.Queryable<Location>().Where(s => s.S_CODE == endLoc).First(); + if (endLocation == null || endLocation.N_LOCK_STATE != 0 || endLocation.C_ENABLE != "Y") + { + //LogHelper.Info($"鎷嗘墭鏈鸿揣浣峽endLoc}涓嶅瓨鍦ㄦ垨宸茶閿�); + return; + } + //鏍¢獙鏄惁鍏佽鏀捐揣 + var plcDeviceTable = S7Helper.plcDeviceTables; + LogHelper.Info($"鑷姩閫佹墭 鎷嗘墭鏈簕dev}:{plcDeviceTable.requestPut1}"); + if ((plcDeviceTable.requestPut1 && dev == "1") || + (plcDeviceTable.requestPut2 && dev == "2")) + { + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == list[i].S_CODE).First(); + + LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{list[i].S_CODE}缁堢偣:{endLoc}"); + var res = TaskProcess.CreateTransport(list[i].S_CODE, endLoc, "閫佹墭", locCntrRel.S_CNTR_CODE, 1, 1); + if (res) + { + LogHelper.Info($"璧风偣:{list[i].S_CODE}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛"); + } + else + { + LogHelper.Info($"璧风偣:{list[i].S_CODE}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触"); + } + } + else + { + LogHelper.Info($"鎷嗘墭鏈簕endLoc}涓嶅厑璁告斁妗�); + } + } + } } catch (Exception ex) { @@ -257,8 +351,87 @@ } + //浜х嚎鑷姩琛ョ┖鎵�+ public static void AutoRepairEmptyTray() + { + var db = new SqlHelper<object>().GetInstance(); + try + { + //鏌ヨ嚜鍔ㄨˉ鎵樿〃 + var autoLists = db.Queryable<AutoRepairEmptyTray>().ToList(); + foreach (var autolist in autoLists) + { + //鎵捐捣鐐�+ var priorityLoc = Settings.PriorityLocs.Where(s => s.Name == autolist.S_LOC_CODE).FirstOrDefault(); + var startLoc = db.Queryable<Location>() + .Where(s => s.S_CODE == priorityLoc.Location).First(); + if (startLoc != null && startLoc.N_LOCK_STATE == 0 && startLoc.C_ENABLE == "Y") + { + var plcDeviceTable = S7Helper.plcDeviceTables; + //鎵剧粓鐐�+ if (autolist.S_TYPE == "涓夊") + { + var linePlcInfo = Settings.linePlcInfos.Where(s => s.deviceNo == "1").FirstOrDefault(); + //鏍¢獙鏄惁鍏佽鏀捐揣 + var endLoc = db.Queryable<Location>() + .Where(s => s.S_CODE == linePlcInfo.outLoca).First(); + if (endLoc != null && endLoc.N_LOCK_STATE == 0 && endLoc.C_ENABLE == "Y") + { + if (plcDeviceTable.requestTake1) + { + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); + + LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}"); + var res = TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "閫佹墭", locCntrRel.S_CNTR_CODE, 1, 1); + if (res) + { + LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓鎴愬姛"); + } + else + { + LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓澶辫触"); + } + } + } + } + else if (autolist.S_TYPE == "鍏") + { + var linePlcInfo = Settings.linePlcInfos.Where(s => s.deviceNo == "2").FirstOrDefault(); + //鏍¢獙鏄惁鍏佽鏀捐揣 + var endLoc = db.Queryable<Location>() + .Where(s => s.S_CODE == linePlcInfo.outLoca).First(); + if (endLoc != null && endLoc.N_LOCK_STATE == 0 && endLoc.C_ENABLE == "Y") + { + if (plcDeviceTable.requestTake2) + { + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); + + LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}"); + var res = TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "閫佹墭", locCntrRel.S_CNTR_CODE, 1, 1); + if (res) + { + LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓鎴愬姛"); + } + else + { + LogHelper.Info($"璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}浠诲姟鍒涘缓澶辫触"); + } + } + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine("AutoRepairEmptyTray:" + ex.Message + ex.StackTrace); + LogHelper.Error("AutoRepairEmptyTray:" + ex.Message, ex); + throw; + } + } + } } -- Gitblit v1.9.1