From dc600c6298a3231e05875813ec0fa2fa18151d84 Mon Sep 17 00:00:00 2001 From: pulg <plg@Haninfo> Date: 星期一, 14 七月 2025 10:14:38 +0800 Subject: [PATCH] 1 --- HH.WCS.QingXiNongfu/process/DeviceProcess.cs | 807 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 697 insertions(+), 110 deletions(-) diff --git a/HH.WCS.QingXiNongfu/process/DeviceProcess.cs b/HH.WCS.QingXiNongfu/process/DeviceProcess.cs index c49bdd3..f85d37e 100644 --- a/HH.WCS.QingXiNongfu/process/DeviceProcess.cs +++ b/HH.WCS.QingXiNongfu/process/DeviceProcess.cs @@ -98,7 +98,9 @@ //缈绘枟鏈�- 鐡跺澂 else if (plc.deviceType == 5) { - AnalysisBottleCapTipper(data, plc); + + PpFdjData(data, plc); + // AnalysisBottleCapTipper(data, plc); } //缈绘枟鏈�- 鐡剁洊 4 姘寸洊銆� 鏃犺弻 else if (plc.deviceType <= 6) @@ -144,7 +146,6 @@ } } - private static void Analysis13(string data, deviceInfo plc) { //鐢ㄤ簬 鍑哄簱鏃�鏄惁鍙互鐩磋揪 鎻愬崌鏈恒� 00 鍚庨潰杩橀渶澧炲姞閫�枡宸ュ崟澶勭悊銆� @@ -313,7 +314,7 @@ si = "0"; } - else if (data.Contains("11"))// && (ods.Find(x => x.SQL_PLineNo.Contains("绾哥")) != null || plc.deviceName.Contains("T1")) + if (data.Contains("11"))// && (ods.Find(x => x.SQL_PLineNo.Contains("绾哥")) != null || plc.deviceName.Contains("T1")) { //if (!ods.Any()) // return; @@ -321,13 +322,22 @@ if (_cl.N_CURRENT_NUM > 0 || _clrel.Any()) { LogHelper.Info($" time锛歿_clrel0?.T_CREATE} = s_type锛歿_clrel0.S_TYPE}"); + //if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 10 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) + // goto ballll; + //plg 2025骞�鏈�3鏃� 鍘婚櫎10绉掓椂闂撮檺鍒� if (_clrel.Any()) - //if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 10 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) - // goto ballll; - //plg 2025骞�鏈�3鏃� 鍘婚櫎10绉掓椂闂撮檺鍒�- if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 3 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) - goto ballll; - + { + if (od?.SQL_PLineNo == "T1鎻愬崌鏈�) + { + if (!string.IsNullOrEmpty(_clrel0.S_TYPE)) + goto ballll; + } + else + { + if (DateTime.Now.Subtract(_clrel0.T_CREATE).TotalSeconds < 3 || !string.IsNullOrEmpty(_clrel0.S_TYPE)) + goto ballll; + } + } LocationHelper.DoAction(db => { db.Deleteable(_clrel).ExecuteCommand(); @@ -368,8 +378,10 @@ if (sBit != null) { var sign = Settings.GetTimeStamp(); - var res = TaskProcess.CreateTransport(sign, sBit.S_LOC_CODE, _cl.S_LOC_CODE, "鍘熺墿鏂欐惉杩�绾哥", new List<string> { _clrel.FirstOrDefault().S_CNTR_CODE }, sBit.N_CURRENT_NUM, 1, 1, 50);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); + var res = TaskProcess.CreateTransport(sign, sBit.S_LOC_CODE, _cl.S_LOC_CODE, "鍘熺墿鏂欐惉杩�绾哥", new List<string> { _clrel.FirstOrDefault().S_CNTR_CODE }, sBit.N_CURRENT_NUM, 1, 1, 60);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); LogHelper.Info($"鍘熺墿鏂欐惉杩�涓婃彁鍗囨満銆�{sign} 浠诲姟 锛屽垱寤簕res} "); + //var res = TaskProcess.CreateTransport(sign, sBit.S_LOC_CODE, _cl.S_LOC_CODE, "鍘熺墿鏂欐惉杩�绾哥", new List<string> { _clrel.FirstOrDefault().S_CNTR_CODE }, sBit.N_CURRENT_NUM, 1, 1, 50);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); + //LogHelper.Info($"鍘熺墿鏂欐惉杩�涓婃彁鍗囨満銆�{sign} 浠诲姟 锛屽垱寤簕res} "); } } } @@ -1723,18 +1735,51 @@ 鐘舵�2 閫佺┖瀹屾垚涔嬪悗涓虹姸鎬� 鐘舵�3 婊℃墭鍙栬蛋锛岄�绌轰箣鍓嶄负鐘舵�3锛屽紑鏈洪粯璁ょ姸鎬佷篃涓虹姸鎬� */ + //3F 00 12 22 0D 0A--鏃犱换鍔′俊鍙�+ //3F 00 11 22 0D 0A--A鍙e伐浣滀俊鍙�+ //3F 00 12 21 0D 0A--B鍙d俊鍙�+ //3F 00 11 21 0D 0A--A銆丅鍙e伐浣滀俊鍙�+ + //A鍙e浣嶄俊鍙�- 3F 00 10 0D 0A + //B鍙e浣嶄俊鍙�- 3F 00 20 0D 0A if (data.Length == 4) { - if (data.Substring(1, 1) == "1") + if (data == "1122")//A鍙e伐浣滀俊鍙� { - if (BottlePEMInfoFull(plc, plc.location[0])) + if (BottlePEMInfoFullTwo(plc, plc.location[0])) { - //璁惧娌℃湁鎵樼洏锛屾垨鑰呭凡缁忔湁浠诲姟锛屼笉澶勭悊婊℃墭淇″彿锛岃繑鍥炲凡缁忓彇璐у畬鎴�- //3F 00 11 0d 0a - //PlcHelper.SendHex(plc.address, "3F00110d0a"); + } } + else if (data == "1221")//B鍙e伐浣滀俊鍙�+ { + if (BottlePEMInfoFullTwo(plc, plc.location[1])) + { + + } + } + else if (data == "1121")//AB鍙e伐浣滀俊鍙�+ { + if (BottlePEMInfoFullTwo(plc, plc.location[0])) + { + + } + if (BottlePEMInfoFullTwo(plc, plc.location[1])) + { + + } + } + + //if (data.Substring(1, 1) == "1") + //{ + // if (BottlePEMInfoFull(plc, plc.location[0])) + // { + // //璁惧娌℃湁鎵樼洏锛屾垨鑰呭凡缁忔湁浠诲姟锛屼笉澶勭悊婊℃墭淇″彿锛岃繑鍥炲凡缁忓彇璐у畬鎴�+ // //3F 00 11 0d 0a + // //PlcHelper.SendHex(plc.address, "3F00110d0a"); + // } + //} //else if (data.Substring(1, 1) == "3") //{ // if (BottleCapInfoEmpty(plc, plc.location[0])) @@ -1743,13 +1788,13 @@ // } //} - if (data.Substring(3, 1) == "1") - { - if (BottlePEMInfoFull(plc, plc.location[1])) - { - //PlcHelper.SendHex(plc.address, "3F00210d0a"); - } - } + //if (data.Substring(3, 1) == "1") + //{ + // if (BottlePEMInfoFull(plc, plc.location[1])) + // { + // //PlcHelper.SendHex(plc.address, "3F00210d0a"); + // } + //} //else if (data.Substring(3, 1) == "3") //{ // if (BottleCapInfoEmpty(plc, plc.location[1])) @@ -1952,6 +1997,402 @@ } } } + } + } + private static object locko = new object(); + private static object lockoIn = new object(); + private static object lockoOut = new object(); + + /// <summary> + /// 鐡跺澂鏈�+ /// </summary> + /// <param name="plc"></param> + /// <param name="location"></param> + /// <returns></returns> + static bool BottlePEMInfoFullTwo(Settings.deviceInfo plc, string location) + { + try + { + lock (locko) + { + var chi = new SqlHelper<object>().GetInstance(); + var newDb = chi.CopyNew(); + Location endBit = null; + Location staBit = null; + bool SentTask = false; + if (location == "") + { + throw new Exception("璐т綅涓虹┖"); + } + var workOrder = WCSHelper.GetWorkOrder(plc.deviceName); + if (workOrder == null) + { + throw new Exception("娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); + } + //鍏堟煡璇㈣揣浣嶆湁娌℃湁璐� 婊$殑涓嬫弧 绌虹殑鍒欎笂绌�+ // = newDb.Queryable<Location>().FindAll(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM == 0); + var hojs = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == location).First(); + if (hojs != null && hojs.S_LOCK_STATE != "鏃�) + { + return false; + } + var bcpList = WCSHelper.BcpQyOrderList(plc.deviceName); + if (bcpList.Count() == 0) + { + throw new Exception("鏈垝鍒嗗搴旂殑鍖哄煙 鏌ョ湅杩欎釜浜х嚎鏄惁鍦ㄥ崐鎴愬搧鍖哄煙琛ㄨ繘琛岄厤缃�骞跺惎鐢�); + } + if (hojs.N_CURRENT_NUM == 0)//涓婃墭鐩�鍚﹀垯涓嬫墭鐩�+ { + //涓婃墭鐩�绌烘 + var jcjykk = bcpList.FindAll(e => e.S_CNTR_TYPE == "绌烘墭").OrderByDescending(g => g.N_PRI).ToList(); + var AreaList = jcjykk.Select(e => e.S_AREA_CODE).Distinct().ToList(); + foreach (var Area in AreaList) + { + var Row = jcjykk.FindAll(f => f.S_AREA_CODE == Area).Select(e => e.N_ROW).Distinct().ToList(); + //杩囩畻娉�璁$畻璧风偣 + var staList = GetOutWork(Area, Row); + if (staList.Any()) + { + foreach (var item in jcjykk) + { + Location sta = null; + var staLisL = staList.FindAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW).ToList(); + if (staLisL.Any()) + { + sta = staLisL.OrderByDescending(e => e.N_COL).First(); + } + if (sta != null) + { + staBit = sta; + break; + } + } + } + if (staBit != null) + { + break; + } + } + if (staBit != null) + { + var _ctrl = LocationHelper.GetLocCntrRel(staBit.S_LOC_CODE); + int StaLayer = staBit.N_CURRENT_NUM; + var carryCntrs = new List<string> { _ctrl.FirstOrDefault().S_CNTR_CODE };//DateTime.Now.ToString("yyMMddHHmmss") }; + var bb = TaskProcess.CreateTransport(workOrder.SQL_WorkNo, staBit.S_LOC_CODE, location, "娉ㄥ绌烘嫋-鍑哄簱", carryCntrs, StaLayer, 1, carryCntrs.Count, plc.taskPri); + if (bb) + { + SentTask = true; + } + } + if (SentTask) + { + return SentTask; + } + } + else + { + var time = LocationHelper.GetT_FULL_TIME(location); + LogHelper.Info(location + "锛氭墭鐩樻斁缃椂闂�(" + time + ") 璐т綅鎵樼洏鏁伴噺(" + hojs.N_CURRENT_NUM + ")"); + if (DateTime.Now.Subtract(time ?? DateTime.Now).TotalMinutes < 1) + { + for (var i = 0; i < plc.location.Length; i++) + { + if (location == plc.location[i]) + { + PlcHelper.SendHex(plc.address, "3F00" + (i + 1) + "0" + "0d0a"); + break; + } + } + return false; + } + + LocCntrRel _clrel = LocationHelper.GetLocCntrRel(hojs.S_LOC_CODE).FirstOrDefault(); + //涓婃墭鐩�婊℃ + var jcjykk = bcpList.FindAll(e => e.S_CNTR_TYPE == "婊℃墭").OrderByDescending(g => g.N_PRI).ToList(); + var AreaList = jcjykk.Select(e => e.S_AREA_CODE).Distinct().ToList(); + + //杩囩畻娉�璁$畻璧风偣 + foreach (var Area in AreaList) + { + var Row = jcjykk.Select(e => e.N_ROW).Distinct().ToList(); + var EndList = GetInWork(Area, Row, true, workOrder.SQL_ItemCode); + if (EndList.Any()) + { + foreach (var item in jcjykk) + { + Location End = null; + var EndListT = EndList.FindAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW).ToList(); + if (EndListT.Count() > 0) + { + End = EndListT.OrderBy(e => e.N_COL).First(); + } + if (End != null) + { + endBit = End; + break; + } + } + } + if (endBit != null) + { + break; + } + } + if (endBit != null) + { + var _ctrl = LocationHelper.GetLocCntrRel(location); + List<CntrItemRel> RItem = new List<CntrItemRel>(); + foreach (var item in _ctrl) + { + + var r = new CntrItemRel + { + S_CNTR_CODE = item.S_CNTR_CODE, + S_ITEM_CODE = workOrder.SQL_ItemCode, + S_ITEM_NAME = workOrder.SQL_ItemName, + F_QTY = workOrder.SQL_UsingNowTotal, + S_ORDER_NO = workOrder.SQL_WorkNo, + S_BATCH_NO = workOrder.SQL_BatchNo + }; + RItem.Add(r); + var cntrrel = ContainerHelper.GetCntrItemRel(item.S_CNTR_CODE).FirstOrDefault(); + if (cntrrel != null) + { + newDb.Deleteable<CntrItemRel>().Where(it => it.S_ID.Trim() == cntrrel.S_ID.Trim()).ExecuteCommand(); + } + } + var ggf = newDb.Insertable(RItem).ExecuteCommand(); + if (ggf > 0) + { + int endLayer = endBit.N_CURRENT_NUM + 1; + var carryCntrs = new List<string> { _ctrl.FirstOrDefault().S_CNTR_CODE };//DateTime.Now.ToString("yyMMddHHmmss") }; + var bb = TaskProcess.CreateTransport(workOrder.SQL_WorkNo, location, endBit.S_LOC_CODE, "娉ㄥ婊℃墭-鍏ュ簱", carryCntrs, 1, endLayer, carryCntrs.Count, plc.taskPri); + if (bb) + { + SentTask = true; + //瑙﹀彂鑷姩瑙g粦 + //var zdjb = jcjykk.FindAll(e => e.SQL_UsingNow == "Y").OrderByDescending(g => g.N_PRI).ToList(); + //foreach (var item in zdjb) + //{ + + //} + //var Jb = newDb.Queryable<Location>().Where(e => e.S_AREA_CODE == Area && Row.Contains(e.N_ROW)).ToList(); + ////鏌ヨ绗竴鎺掓槸鍚︽弧 骞朵笖绗簩鎺掑叆婊′笁涓悗瑙g粦绗竴鎺�+ ////1.鏌ヨ绗竴鎺掓槸鍚︽湁绌鸿揣浣�鏈�鍒欒烦杩�+ } + } + } + if (SentTask) + { + return SentTask; + } + + } + return true; + } + } + catch (Exception ex) + { + LogHelper.Info(plc.deviceName + $" 鎶ラ敊: {ex.Message}"); + return false; + } + } + + /// <summary> + /// 鐡跺澂绠楁硶--鍑哄簱 + /// </summary> + /// <param name="AreaCode"></param> + /// <param name="Row"></param> + /// <param name="ItemCode"></param> + /// <returns></returns> + public static List<Location> GetOutWork(string AreaCode, List<int> Row, bool InOutLock = true, string ItemCode = "") + { + var lstCanOutL = new List<Location>(); + try + { + var chi = new SqlHelper<object>().GetInstance(); + var newDb = chi.CopyNew(); + var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); + if (string.IsNullOrEmpty(ItemCode))//绠楃┖鎵� + { + ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && string.IsNullOrEmpty(t.S_ITEM_CODE) && o.S_AREA_CODE == AreaCode); + ca.AndIF(Row.Count() > 0, (o, p, t) => Row.Contains(o.N_ROW)); + lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).LeftJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList(); + } + else//绠楁弧鎵�+ { + ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == ItemCode && o.S_AREA_CODE == AreaCode); + ca.AndIF(Row.Count() > 0, (o, p, t) => Row.Contains(o.N_ROW)); + lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList(); + } + //鍦板爢涓撻棬绠楁硶杩囨护 + if (lstCanOutL.Count() > 0) + { + var Inloca = Expressionable.Create<Location>(); + Inloca.And(it => it.S_AREA_CODE == AreaCode); + Inloca.AndIF(Row.Count() > 0, o => Row.Contains(o.N_ROW)); + var locationInLock = newDb.Queryable<Location>().Where(Inloca.ToExpression()).ToList(); + //绌洪棿閿�鎺掗櫎涓�暣鎺�+ var KjLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "绌洪棿閿�).ToList(); + if (KjLick.Count() > 0) + { + foreach (var item in KjLick) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW); + } + } + if (InOutLock) + { + var CkLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "鍑哄簱閿�).ToList(); + if (CkLick.Count() > 0) + { + foreach (var item in CkLick) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW); + } + } + var OutLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "鍏ュ簱閿�).ToList(); + if (OutLick.Count() > 0) + { + foreach (var item in OutLick) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW); + } + } + } + + + } + return lstCanOutL; + } + catch (Exception ex) + { + LogHelper.Info("鐡跺澂绠楁硶" + $" 鎶ラ敊: {ex.Message}"); + return lstCanOutL; + } + } + + /// <summary> + /// 鐡跺澂绠楁硶--鍏ュ簱 + /// </summary> + /// <param name="AreaCode"></param> + /// <param name="Row"></param> + /// <param name="ItemCode"></param> + /// <returns></returns> + public static List<Location> GetInWork(string AreaCode, List<int> Row, bool InOutLock = true, string ItemCode = "", string Jt = "") + { + var lstCanOutL = new List<Location>(); + try + { + lock (lockoIn) + { + var chi = new SqlHelper<object>().GetInstance(); + var newDb = chi.CopyNew(); + var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); + ca.And((o, p, t) => o.N_CURRENT_NUM == 0 && o.S_LOCK_STATE == "鏃� && string.IsNullOrEmpty(p.S_CNTR_CODE) && string.IsNullOrEmpty(t.S_ITEM_CODE) && o.S_AREA_CODE == AreaCode); + ca.AndIF(Row.Count() > 0, (o, p, t) => Row.Contains(o.N_ROW)); + lstCanOutL = newDb.Queryable<Location>().LeftJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).LeftJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList(); + + var Inloca = Expressionable.Create<Location>(); + Inloca.And(it => it.S_AREA_CODE == AreaCode); + Inloca.AndIF(Row.Count() > 0, o => Row.Contains(o.N_ROW)); + var locationInLock = newDb.Queryable<Location>().Where(Inloca.ToExpression()).ToList(); + + //鍦板爢涓撻棬绠楁硶杩囨护 + if (lstCanOutL.Count() > 0) + { + //绌洪棿閿�鎺掗櫎涓�暣鎺�+ var KjLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "绌洪棿閿�).ToList(); + if (KjLick.Count() > 0) + { + foreach (var item in KjLick) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW); + } + } + + //鑾峰彇鎸囧畾搴撳尯 鎸囧畾鎺�婊$殑璐т綅 鐒跺悗鎺掗櫎 姣旀渶澶у垪杩樺皬鐨勭┖璐т綅 + var Mhw = locationInLock.FindAll(e => e.N_CURRENT_NUM > 0).ToList(); + if (Mhw.Count() > 0) + { + var RowLis = Mhw.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); + foreach (var item in RowLis) + { + var MaxCol = Mhw.FindAll(e => e.N_ROW == item.N_ROW).OrderByDescending(c => c.N_COL).FirstOrDefault(); + if (MaxCol != null) + { + if (!string.IsNullOrEmpty(ItemCode) && AreaCode == "QXPPXXQ") + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL < MaxCol.N_COL); + } + else if (AreaCode == "QXPPXXQ" && Jt == "缈绘枟鏈�) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL > MaxCol.N_COL); + } + //if (!string.IsNullOrEmpty(ItemCode) && AreaCode == "QXPPXXQ") + //{ + // lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL < MaxCol.N_COL); + //} + //else + //{ + // lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW && e.N_COL > MaxCol.N_COL); + //} + } + } + + //鎺掗櫎鍒殑鐗╂枡鎵�湪鐨勬帓 + if (!string.IsNullOrEmpty(ItemCode)) + { + var fzRow = Mhw.Select(e => e.N_ROW).Distinct().ToList(); + foreach (var item in fzRow) + { + var mtlo = Mhw.FindAll(e => e.N_ROW == item).FirstOrDefault(); + if (mtlo != null) + { + var _clrel = LocationHelper.GetLocCntrRel(mtlo.S_LOC_CODE).FirstOrDefault(); + if (_clrel != null) + { + var cntritems = ContainerHelper.GetCntrItemRel(_clrel.S_CNTR_CODE).FirstOrDefault(); + if (cntritems != null) + { + if (cntritems.S_ITEM_CODE != ItemCode) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == mtlo.S_AREA_CODE && e.N_ROW == mtlo.N_ROW); + } + } + } + + } + } + } + } + if (InOutLock) + { + var CkLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "鍑哄簱閿�).ToList(); + if (KjLick.Count() > 0) + { + foreach (var item in KjLick) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW); + } + } + var OutLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "鍏ュ簱閿�).ToList(); + if (KjLick.Count() > 0) + { + foreach (var item in KjLick) + { + lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW); + } + } + } + } + return lstCanOutL; + } + } + catch (Exception ex) + { + LogHelper.Info("鐡跺澂绠楁硶" + $" 鎶ラ敊: {ex.Message}"); + return lstCanOutL; } } @@ -2710,7 +3151,6 @@ //灏辨煡鐪嬫湁娌℃湁绌虹殑鎺掍簡銆� //if (endBit != null) /// 瀵绘壘鏈弧鎺掞紝 鐩存帴杩斿洖缁撴灉銆� return endBit; - //LogHelper.Info(" _tempList over锛�); //杩欓噷寮� 瀵绘壘绌烘帓 Empty: @@ -3481,26 +3921,27 @@ } if (endBit == null && _tempList.Any()) { - LogHelper.Info(" ar_RplaceRow over锛�); - var ar_RplaceRows = LocationHelper.GetLocList(x => x.S_AREA_CODE != area1 && x.S_AREA_CODE.Contains(are) && x.S_LOCK_STATE != "鎶ュ簾");//.Select(x => x.N_ROW).Distinct(); - //var ar_RplaceRow1 = ar_RplaceRows.FindAll(x => x.S_LOCK_STATE != "鏃�).Select(x => x.N_ROW).Distinct(); - IEnumerable<int> ar_RplaceRow1 = ar_RplaceRows.FindAll(x => "鍏ュ簱閿�鍑哄簱閿�.Contains(x.S_LOCK_STATE?.Trim())).Select(x => x.N_ROW).Distinct(); - LogHelper.Info(" 鏈夐攣鎺�- " + JsonConvert.SerializeObject(ar_RplaceRow1)); //LogHelper.Info(" 鏈夐攣鎺�- " + JsonConvert.SerializeObject(ar_RplaceRow1)); - var ar_RplaceRow2 = ar_RplaceRows.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); - LogHelper.Info(" 鏈夎揣鎺掞細 - " + JsonConvert.SerializeObject(ar_RplaceRow2)); - var ar_RplaceRow_rowlock = LocationHelper.GetRowLock(x => x.S_AREA_CODE.Contains(are))?.Select(x => x.N_ROW); + LogHelper.Info(" ar_RplaceRow over锛� + JsonConvert.SerializeObject(_tempList.Select(x => x.N_ROW).Distinct())); + //var ar_RplaceRows = LocationHelper.GetLocList(x => x.S_AREA_CODE != area1 && x.S_AREA_CODE.Contains(are) && x.S_LOCK_STATE != "鎶ュ簾");//.Select(x => x.N_ROW).Distinct(); + // //var ar_RplaceRow1 = ar_RplaceRows.FindAll(x => x.S_LOCK_STATE != "鏃�).Select(x => x.N_ROW).Distinct(); + //IEnumerable<int> ar_RplaceRow1 = ar_RplaceRows.FindAll(x => "鍏ュ簱閿�鍑哄簱閿�.Contains(x.S_LOCK_STATE?.Trim())).Select(x => x.N_ROW).Distinct(); + //LogHelper.Info(" 鏈夐攣鎺�- " + JsonConvert.SerializeObject(ar_RplaceRow1)); //LogHelper.Info(" 鏈夐攣鎺�- " + JsonConvert.SerializeObject(ar_RplaceRow1)); + //var ar_RplaceRow2 = ar_RplaceRows.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); + //LogHelper.Info(" 鏈夎揣鎺掞細 - " + JsonConvert.SerializeObject(ar_RplaceRow2)); + //var ar_RplaceRow_rowlock = LocationHelper.GetRowLock(x => x.S_AREA_CODE.Contains(are))?.Select(x => x.N_ROW); - var ar_RplaceRow = ar_RplaceRow1.Concat(ar_RplaceRow2).Concat(ar_RplaceRow_rowlock).Distinct(); + //var ar_RplaceRow = ar_RplaceRow1.Concat(ar_RplaceRow2).Concat(ar_RplaceRow_rowlock).Distinct(); - if (ar_RplaceRow.Any()) - { - LogHelper.Info("鎺掗櫎闈炵┖鎺�- " + JsonConvert.SerializeObject(ar_RplaceRow)); - _tempList.RemoveAll(x => ar_RplaceRow.Contains(x.N_ROW)); - } - if (_tempList.Any())//涓変釜搴撳尯鐨勪氦闆嗙┖鎺�- { - endBit = _tempList.OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); - } + //if (ar_RplaceRow.Any()) + //{ + // LogHelper.Info("鎺掗櫎闈炵┖鎺�- " + JsonConvert.SerializeObject(ar_RplaceRow)); + // _tempList.RemoveAll(x => ar_RplaceRow.Contains(x.N_ROW)); + //} + //if (_tempList.Any())//涓変釜搴撳尯鐨勪氦闆嗙┖鎺�+ //{ + // endBit = _tempList.OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); + //} + endBit = _tempList.OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); } #endregion @@ -3719,6 +4160,214 @@ return result; } + public static void PpFdjData(string Data, Settings.deviceInfo plc) + { + try + { + if (Data.Length == 2) + { + if (Data == "11") + { + BottlePpFdjFullTwo(plc, plc.location[0]); + } + } + } + catch (Exception ex) + { + + throw; + } + } + private static object lockoPp = new object(); + /// <summary> + /// 鐡跺澂缈绘枟鏈�+ /// </summary> + /// <param name="plc"></param> + /// <param name="location"></param> + /// <returns></returns> + static bool BottlePpFdjFullTwo(Settings.deviceInfo plc, string location) + { + try + { + lock (lockoPp) + { + var chi = new SqlHelper<object>().GetInstance(); + var newDb = chi.CopyNew(); + Location endBit = null; + Location staBit = null; + bool SentTask = false; + if (location == "") + { + throw new Exception("璐т綅涓虹┖"); + } + var workOrder = WCSHelper.GetWorkOrder(plc.deviceName); + if (workOrder == null) + { + throw new Exception("娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); + } + //鍏堟煡璇㈣揣浣嶆湁娌℃湁璐� 婊$殑涓嬫弧 绌虹殑鍒欎笂绌�+ // = newDb.Queryable<Location>().FindAll(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM == 0); + var hojs = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == location).First(); + if (hojs != null && hojs.S_LOCK_STATE != "鏃�) + { + return false; + } + var bcpList = WCSHelper.BcpQyOrderList(plc.deviceName); + if (bcpList.Count() == 0) + { + throw new Exception("鏈垝鍒嗗搴旂殑鍖哄煙 鏌ョ湅杩欎釜浜х嚎鏄惁鍦ㄥ崐鎴愬搧鍖哄煙琛ㄨ繘琛岄厤缃�骞跺惎鐢�); + } + if (hojs.N_CURRENT_NUM == 0)//涓婃墭鐩�鍚﹀垯涓嬫墭鐩�+ { + //涓婃墭鐩�婊℃墭 + var jcjykk = bcpList.FindAll(e => e.S_CNTR_TYPE == "婊℃墭").OrderByDescending(g => g.N_PRI).ToList(); + var AreaList = jcjykk.Select(e => e.S_AREA_CODE).Distinct().ToList(); + foreach (var Area in AreaList) + { + var Row = jcjykk.FindAll(f => f.S_AREA_CODE == Area).Select(e => e.N_ROW).Distinct().ToList(); + //杩囩畻娉�璁$畻璧风偣 + var staList = GetOutWork(Area, Row, true, workOrder.SQL_ItemCode); + if (staList.Any()) + { + foreach (var item in jcjykk) + { + Location sta = null; + var staLisL = staList.FindAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW).ToList(); + if (staLisL.Any()) + { + if (item.S_AREA_CODE != "QXPPXXQ") + { + sta = staLisL.OrderByDescending(e => e.N_COL).First(); + } + else + { + sta = staLisL.OrderBy(e => e.N_COL).First(); + } + + } + if (sta != null) + { + staBit = sta; + break; + } + } + } + if (staBit != null) + { + break; + } + } + if (staBit != null) + { + var _ctrl = LocationHelper.GetLocCntrRel(staBit.S_LOC_CODE); + int StaLayer = staBit.N_CURRENT_NUM; + var carryCntrs = new List<string> { _ctrl.FirstOrDefault().S_CNTR_CODE };//DateTime.Now.ToString("yyMMddHHmmss") }; + var bb = TaskProcess.CreateTransport(workOrder.SQL_WorkNo, staBit.S_LOC_CODE, location, "鐡跺澂缈绘枟鏈烘弧鎵�鍑哄簱", carryCntrs, StaLayer, 1, carryCntrs.Count, plc.taskPri); + if (bb) + { + SentTask = true; + } + } + if (SentTask) + { + return SentTask; + } + } + else + { + var time = LocationHelper.GetT_FULL_TIME(location); + LogHelper.Info(location + "锛氭墭鐩樻斁缃椂闂�(" + time + ") 璐т綅鎵樼洏鏁伴噺(" + hojs.N_CURRENT_NUM + ")"); + if (DateTime.Now.Subtract(time ?? DateTime.Now).TotalMinutes < 1) + { + PlcHelper.SendHex(plc.address, "3F00110D0A"); + return false; + } + LocCntrRel _clrel = LocationHelper.GetLocCntrRel(hojs.S_LOC_CODE).FirstOrDefault(); + //涓嬫墭鐩�绌烘 + var jcjykk = bcpList.FindAll(e => e.S_CNTR_TYPE == "绌烘墭").OrderByDescending(g => g.N_PRI).ToList(); + var AreaList = jcjykk.Select(e => e.S_AREA_CODE).Distinct().ToList(); + + //杩囩畻娉�璁$畻璧风偣 + foreach (var Area in AreaList) + { + var Row = jcjykk.Select(e => e.N_ROW).Distinct().ToList(); + var EndList = GetInWork(Area, Row, true, "", "缈绘枟鏈�); + if (EndList.Any()) + { + foreach (var item in jcjykk) + { + Location End = null; + var EndListT = EndList.FindAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW).ToList(); + if (EndListT.Count() > 0) + { + if (item.S_AREA_CODE != "QXPPXXQ") + { + End = EndListT.OrderBy(e => e.N_COL).First(); + } + else + { + End = EndListT.OrderByDescending(e => e.N_COL).First(); + } + } + if (End != null) + { + endBit = End; + break; + } + } + } + if (endBit != null) + { + break; + } + } + if (endBit != null) + { + var _ctrl = LocationHelper.GetLocCntrRel(location); + var ggf = 0; + foreach (var item in _ctrl) + { + var cntrrel = ContainerHelper.GetCntrItemRel(item.S_CNTR_CODE).FirstOrDefault(); + if (cntrrel != null) + { + ggf = newDb.Deleteable<CntrItemRel>().Where(it => it.S_ID.Trim() == cntrrel.S_ID.Trim()).ExecuteCommand(); + } + } + //if (ggf > 0) + //{ + int endLayer = endBit.N_CURRENT_NUM + 1; + var carryCntrs = new List<string> { _ctrl.FirstOrDefault().S_CNTR_CODE }; + var bb = TaskProcess.CreateTransport(workOrder.SQL_WorkNo, location, endBit.S_LOC_CODE, "鐡跺澂缈绘枟鏈虹┖鎵�鍏ュ簱", carryCntrs, 1, endLayer, carryCntrs.Count, plc.taskPri); + if (bb) + { + SentTask = true; + //瑙﹀彂鑷姩瑙g粦 + //var zdjb = jcjykk.FindAll(e => e.SQL_UsingNow == "Y").OrderByDescending(g => g.N_PRI).ToList(); + //foreach (var item in zdjb) + //{ + + //} + //var Jb = newDb.Queryable<Location>().Where(e => e.S_AREA_CODE == Area && Row.Contains(e.N_ROW)).ToList(); + ////鏌ヨ绗竴鎺掓槸鍚︽弧 骞朵笖绗簩鎺掑叆婊′笁涓悗瑙g粦绗竴鎺�+ ////1.鏌ヨ绗竴鎺掓槸鍚︽湁绌鸿揣浣�鏈�鍒欒烦杩�+ } + // } + } + if (SentTask) + { + return SentTask; + } + + } + return true; + } + } + catch (Exception ex) + { + LogHelper.Info(plc.deviceName + $" 鎶ラ敊: {ex.Message}"); + return false; + } + } @@ -3735,7 +4384,6 @@ internal static void AnalysisBottleCapTipper(string data, Settings.deviceInfo plc) { - //LogHelper.Info($"{plc.deviceName}-{plc.address}-{plc.deviceType}-data:{data}銆�"); bool containsKey = true; int llll = 0; if (!FJD_wwwwFD.TryGetValue(plc.deviceName.Trim(), out llll)) @@ -3751,46 +4399,8 @@ bool flag = data.Length == 2; if (flag) { - //LogHelper.Info(string.Concat(new string[] - //{ - // "缈绘枟鏈洪棬 ", - // plc.deviceNo[1], - // " - 淇″彿锛�", - // data, - // " 闂ㄧ姸鎬侊細锛�寮�鍏筹級 ", - // data.Substring(3, 1) - // }), "鑷姩闂�); - string s = "2";// data.Substring(3, 1); + string s = "2"; - //bool flag4 = DeviceProcess.doorStatus.Keys.Contains(plc.deviceNo[1]); - //if (flag4) - //{ - // DeviceProcess.doorStatus[plc.deviceNo[1]].info = s; - // DeviceProcess.doorStatus[plc.deviceNo[1]].modify = DateTime.Now; - //} - //else - //{ - // DeviceProcess.doorStatus.Add(plc.deviceNo[1], new DeviceProcess.signalInfo - // { - // info = data.Substring(3, 1), - // modify = DateTime.Now - // }); - //} - //if (data.Substring(1, 1) == "1") - //{ - // LogHelper.Info(plc.location[0] + "璇诲埌11淇″彿銆傦紙12淇″彿鎸佺画鏁伴噺锛夛細" + llll); - // if (llll < 10) - // { - // llll = 0; - // LogHelper.Info(plc.deviceName + "璇诲埌11淇″彿,鎴栬繛缁�2淇″彿涓嶈冻10娆�); - // if (containsKey) - // FJD_wwwwFD[plc.deviceName.Trim()] = llll; - // else FJD_wwwwFD.Add(plc.deviceName.Trim(), llll); - - // return; - // } - //} - //else if (data.Substring(1, 1) == "0" || data.Substring(1, 1) == "2") { LogHelper.Info(plc.location[0] + $"璇诲埌1 0/2淇″彿銆傦紙1 0/2淇″彿鎸佺画鏁伴噺锛夛細" + llll); @@ -3800,11 +4410,7 @@ else FJD_wwwwFD.Add(plc.deviceName.Trim(), llll); } - //if (llll < 10) - //{ - // LogHelper.Info(plc.deviceName + "璇诲埌11淇″彿 ,鎴栬繛缁�2淇″彿涓嶈冻10娆�" + llll + "娆�"); - // return; - //} + LogHelper.Info(plc.deviceName + "鏌ョ湅缈绘枟楦$┖绛愪綅" + (data.Substring(1, 1) == "1").ToString() + LocationHelper.CheckLocFree(plc.location[0]).ToString(), "缈绘枟鏈�); bool flag5 = data.Substring(1, 1) == "1" && LocationHelper.CheckLocFree(plc.location[0]) && s == "2"; @@ -3817,15 +4423,7 @@ } else { - //if (llll > 10) - //{ - // LogHelper.Info(plc.deviceName + "浜ょ缁欑炕鏂椾俊鍙峰悗杩樻病鏈夌炕鏂�, "缈绘枟鏈�); - // return; - //} - //else - //{ - // LogHelper.Info(plc.deviceName + "浜ょ缁欑炕鏂椾俊鍙峰悗 宸茬炕鏂�" + llll, "缈绘枟鏈�); - //} + WorkOrder workOrder = WCSHelper.GetWorkOrder(plc.deviceName); bool flag7 = workOrder == null; @@ -3880,21 +4478,17 @@ if (flag11 > 30) { - //if (data.Substring(1, 1) == "1") - //{ + LogHelper.Info(plc.location[0] + "璇诲埌11淇″彿銆傦紙1 0/2淇″彿鎸佺画鏁伴噺锛夛細" + llll); - //if (flag11 < 3.0) + if (llll < 0) { - //llll = 0; + LogHelper.Info(plc.deviceName + "璇诲埌11淇″彿,浣嗘槸娌″嚭鐜拌繃1 0/2"); - //if (containsKey) - // FJD_wwwwFD[plc.deviceName.Trim()] = llll; - //else FJD_wwwwFD.Add(plc.deviceName.Trim(), llll); + return; } - //} var b = TaskProcess.FDJTakeEmpyt2(plc, workOrder); @@ -3908,20 +4502,13 @@ } else { - ///- LogHelper.Info($"{plc.deviceName} 璐т綅 {plc.location} 婊℃鍗歌揣涓嶈冻30S缂撳啿鏃堕棿銆�"); - - //if (time != null && DateTime.Now.Subtract(time ?? DateTime.Now).TotalSeconds < 30) - //{ LogHelper.Info($"缈绘枟鏈烘弧妗嗘斁涓嬫椂闂磠time}涓嶈冻30绉� 鍥炲啓缈绘枟淇″彿", "缈绘枟鏈�); PlcHelper.SendHex(plc.address, $"3f 00 11 0d 0a"); - if (containsKey) FJD_wwwwFD[plc.deviceName.Trim()] = 0; else FJD_wwwwFD.Add(plc.deviceName.Trim(), 0); - return; - //} } } } -- Gitblit v1.9.1