From 8953f14db850deaf66782197a5d2bff35fe41e1a Mon Sep 17 00:00:00 2001 From: pulg <plg@Haninfo> Date: 星期三, 02 七月 2025 18:02:09 +0800 Subject: [PATCH] Merge branch 'master' of http://121.37.118.194:8000/r/WMSPrjInstance/HH-0014_NongFu_QingXi --- HH.WCS.QingXiNongfu/core/Monitor.cs | 230 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 133 insertions(+), 97 deletions(-) diff --git a/HH.WCS.QingXiNongfu/core/Monitor.cs b/HH.WCS.QingXiNongfu/core/Monitor.cs index c825c89..3b7bdac 100644 --- a/HH.WCS.QingXiNongfu/core/Monitor.cs +++ b/HH.WCS.QingXiNongfu/core/Monitor.cs @@ -430,13 +430,17 @@ var orders = WCSHelper.GetWorkOrder2(); var thisOrder = orders.Find(x => x.SQL_WorkNo == WorkNo); LogHelper.Info("绉诲簱瑙i攣 --褰撳墠宸ュ崟 sid:" + thisOrder?.S_ID); - if (thisOrder != null) - { - var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row); - LogHelper.Info($"绉诲簱瑙i攣 --鍏朵粬宸ュ崟 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID); - if (other != null) - j瑙i攣璧风偣搴撳尯鎺�= false; - } + var allarea_rows = orders.FindAll(x => x.S_ID != thisOrder.S_ID && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row); + LogHelper.Info("绉诲簱瑙i攣 --褰撳墠宸ュ崟 鐨勫悓搴撳尯鎺�鍏朵粬宸ュ崟:" + JsonConvert.SerializeObject(allarea_rows)); + if (allarea_rows.Any()) + j瑙i攣璧风偣搴撳尯鎺�= false; + //if (thisOrder != null) + //{ + // var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row); + // LogHelper.Info($"绉诲簱瑙i攣 --鍏朵粬宸ュ崟 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID); + // if (other != null) + // j瑙i攣璧风偣搴撳尯鎺�= false; + //} } //if (sign == 1) //{ @@ -1135,6 +1139,17 @@ continue; } } + if (CDlist.Contains(EdnRarea)) + { + var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_STATE == "鍏ュ簱閿�); + //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�)); + if (ls.Count() > 2) + { + LogHelper.Info($"{EdnRarea}浠诲姟鏁�绠″埗3"); + continue; + } + } + //else if (CDlist.Contains(EdnRarea)) //{ // var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�)).ToList(); @@ -1230,12 +1245,19 @@ ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == EdnRarea); var lstCanOutL = dbll.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(); LogHelper.Info($"缁堢偣鏈夌浉鍚岀殑鐗╂枡鐨勮揣浣嶆湁{lstCanOutL.Count()}"); + + var ca1 = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); + ca1.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == "YWLRGDD" && p.S_TYPE == EdnRarea); + var lstCanOutLSta = dbll.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(ca1.ToExpression()).ToList(); if (lstCanOutL.Count() > 0) { var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "鏃� && lstCanOutL.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList(); if (EndMum.Count() > 0) { - arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); + if (lstCanOutL.Count() <= EndMum.Count()) + { + arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); + } } } } @@ -1448,7 +1470,7 @@ try { // var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "鏃犺弻鏍囩鍑哄簱" && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList(); - var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "鏃犺弻鏍囩鍑哄簱" && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList(); + var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "鏃犺弻鏍囩鍑哄簱" && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).FindAll(x => x.OutNum > 0).OrderBy(x => x.TagOverTime).ToList(); if (!yuworders.Any()) { YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ); @@ -1487,7 +1509,6 @@ if (tklist.Count() > 0) { var tk = tklist.FirstOrDefault(); - var loc = LocationHelper.GetLoc(plc.location[0]); if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "鏃�) { @@ -2128,7 +2149,6 @@ } } - /// <summary> /// 鍏ュ簱閫�簱銆�鐭ラ亾 闆跺ご婊℃墭銆傛甯稿尮閰嶃� /// </summary> @@ -2139,15 +2159,14 @@ private static void YwlPETK_CreInwork(List<locCntItem> klocsFirst, string v, string v2, int v1 = 3) { bool ord = v2.Contains("鎻愭墸"); - var chi = new SqlHelper<object>().GetInstance(); - var newDb = chi.CopyNew(); - var yx = klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList(); - foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList()) + foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) { Location EndBit = null; - var rsfull = ptR.OrderBy(X => X.N_COL).ToList().FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();//璧风偣 + var ptrlist = ptR.OrderBy(X => X.N_COL).ToList(); + var rsfull = ptrlist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); if (rsfull != null) { + var cntrlist = ptrlist.FindAll(x => x.S_LOC_CODE == rsfull.S_LOC_CODE).Select(x => x.S_CNTR_CODE); var rklist = LocationHelper.GetRowLock(v); var inlock = rklist.Find(x => x.S_AREA_CODE == v && x.S_LOCK_SRC == (rsfull.S_NOTE + rsfull.HalfOrFull) && x.S_LOCK_STATE.Contains("鍏ュ簱閿�)); var NormalList = LocationHelper.GetAreaNormalLocList(v); @@ -2159,82 +2178,54 @@ { var srloclist = rs.OrderBy(x => x.N_COL).ToList(); var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); - EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); + EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && (x.N_CURRENT_NUM + cntrlist.Count()) <= Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); if (EndBit != null) break; } } else { - var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct().ToList(); + var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); var EptRowlist = NormalList.FindAll(x => !hasNum.Contains(x.N_ROW)); if (EptRowlist.Any()) { EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); } - else - { - if (hasNum.Any()) - { - //鏈夌浉鍚岀墿鏂�鐩稿悓鏍囩鐨勭户缁叆 - List<Location> lstCanOutL = new List<Location>(); - if (!string.IsNullOrEmpty(rsfull.S_BATCH_NO)) - { - 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((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && t.S_BATCH_NO == rsfull.S_BATCH_NO).ToList(); - - } - else - { - 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((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && string.IsNullOrEmpty(t.S_BATCH_NO)).ToList(); - } - if (lstCanOutL.Any()) - { - var loclist1 = NormalList.FindAll(x => lstCanOutL.Select(f => f.N_ROW).Distinct().ToList().Contains(x.N_ROW)); - foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1))) - { - var srloclist = rs.OrderBy(x => x.N_COL).ToList(); - var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); - EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); - if (EndBit != null) - break; - } - } - } - } } if (EndBit != null) { - var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-鍏ュ簱", new List<string> { rsfull.S_CNTR_CODE }, rsfull.N_CURRENT_NUM, EndBit.N_CURRENT_NUM + 1, 1, 62); + var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-鍏ュ簱", cntrlist.ToList(), rsfull.N_CURRENT_NUM + 1 - cntrlist.Count(), EndBit.N_CURRENT_NUM + 1, 1, 62); LogHelper.CSucessLog($"from {rsfull.S_LOC_CODE} to {EndBit.S_LOC_CODE} {(v2 + "-鍏ュ簱")} 锛屽垱寤簕res} "); - //if (res && inlock == null) - //{ - // var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW }; - // var db = new SqlHelper<object>().GetInstance(); - // db.Insertable(r).ExecuteCommand(); - // //else - // //{ - // // if (inlock.N_ROW != EndBit.N_ROW) - // // { - // // db.Deleteable(inlock).ExecuteCommand(); - // // var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First(); - // // if (row != null) - // // { - // // if (row.S_LOCK_SRC != r.S_LOCK_SRC) - // // { - // // db.Deleteable(row).ExecuteCommand(); - // // db.Insertable(r).ExecuteCommand(); - // // } - // // } - // // else db.Insertable(r).ExecuteCommand(); - // // } - // //} - //} + if (res && inlock == null) + { + var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW }; + var db = new SqlHelper<object>().GetInstance(); + db.Insertable(r).ExecuteCommand(); + //else + //{ + // if (inlock.N_ROW != EndBit.N_ROW) + // { + // db.Deleteable(inlock).ExecuteCommand(); + // var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First(); + // if (row != null) + // { + // if (row.S_LOCK_SRC != r.S_LOCK_SRC) + // { + // db.Deleteable(row).ExecuteCommand(); + // db.Insertable(r).ExecuteCommand(); + // } + // } + // else db.Insertable(r).ExecuteCommand(); + // } + //} + } } Thread.Sleep(1000); } } } + private static void YwlBQ_CreSXOutOrder(Settings.deviceInfo plc, List<YWLWorkOrder> yuworders) { @@ -2301,12 +2292,12 @@ if (order != null) { var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO); - if (Porder == null) - { - LogHelper.CErrorLog("SX鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); - yuworders.Remove(order); - goto retuse; - } + //if (Porder == null) + //{ + // LogHelper.CErrorLog("SX鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); + // yuworders.Remove(order); + // goto retuse; + //} var oto = new List<string>(); //if (!string.IsNullOrEmpty(order.TagOver)) // oto = order.TagOver.Split(',').ToList(); @@ -2795,12 +2786,12 @@ if (order != null) { var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO); - if (Porder == null) - { - LogHelper.CErrorLog("鏃犺弻鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); - yuworders.Remove(order); - goto retuse; - } + //if (Porder == null) + //{ + // LogHelper.CErrorLog("鏃犺弻鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); + // yuworders.Remove(order); + // goto retuse; + //} var oto = new List<string>(); //if (!string.IsNullOrEmpty(order.TagOver)) @@ -4354,6 +4345,8 @@ /// </summary> internal static void YWL_ZX_Turn() { + var dbcd = new SqlHelper<object>().GetInstance(); + foreach (var ODs in LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "鎵ц").GroupBy(x => x.S_START_AREA)) { var locS = LocationHelper.GetAreaNormalLocList(ODs.Key); @@ -4389,6 +4382,26 @@ } else { + if (od.N_END_ROW > 0) + { + var EndRow = dbcd.Queryable<Location>().Where(l => l.S_AREA_CODE == od.S_END_AREA && l.N_ROW == od.N_END_ROW && l.N_CURRENT_NUM == 0).ToList(); + if (EndRow.Count() == 0) + { + //缃负瀹屾垚銆� + od.S_ZX_STATE = "瀹屾垚"; + WCSHelper.Do(db => db.Updateable(od).UpdateColumns(x => new { x.S_ZX_STATE }).ExecuteCommand()); + } + } + else + { + var EndRow = dbcd.Queryable<Location>().Where(l => l.S_AREA_CODE == od.S_END_AREA && l.N_CURRENT_NUM == 0).ToList(); + if (EndRow.Count() == 0) + { + //缃负瀹屾垚銆� + od.S_ZX_STATE = "瀹屾垚"; + WCSHelper.Do(db => db.Updateable(od).UpdateColumns(x => new { x.S_ZX_STATE }).ExecuteCommand()); + } + } var lastful = rows.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); if (lastful != null) { @@ -4419,27 +4432,49 @@ string nextarea = !string.IsNullOrEmpty(od.S_ZZ_AREA) ? od.S_ZZ_AREA : od.S_END_AREA; var zzlocs = LocationHelper.GetAreaNormalLocList(nextarea); Location Endbit = null; - foreach (var zzrs in zzlocs.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) + if (od.N_END_ROW == 0 && zzlocs.Any()) { - var zzrloclist = zzrs.ToList(); - var _cl2 = zzrloclist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); - if (_cl2 != null) + foreach (var zzrs in zzlocs.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) { - var rel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE); - var cntrrel = ContainerHelper.GetCntrItemRel(rel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault(); - if (cntrrel == null) - continue; - if (cntrrel.S_ITEM_CODE == cir1.S_ITEM_CODE && cntrrel.S_ITEM_NAME == cir1.S_ITEM_NAME && cntrrel.S_CJ_NAME == cir1.S_CJ_NAME) + var zzrloclist = zzrs.ToList(); + var _cl2 = zzrloclist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); + if (_cl2 != null) { + var rel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE); + var cntrrel = ContainerHelper.GetCntrItemRel(rel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault(); + if (cntrrel == null) + continue; + if (cntrrel.S_ITEM_CODE == cir1.S_ITEM_CODE && cntrrel.S_ITEM_NAME == cir1.S_ITEM_NAME && cntrrel.S_CJ_NAME == cir1.S_CJ_NAME) + { + Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0)); + } + } + else Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0)); + if (Endbit != null) + { + LogHelper.Info($"鍏ヤ腑杞尯{nextarea}浣跨敤{Endbit.S_LOC_CODE}"); + break; } } - else - Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0)); - if (Endbit != null) + } + else + { + if (zzlocs.Any() && od.N_END_ROW > 0)//鐢ㄤ簬搴撳唴 姣斿A搴撴煇鎺掔Щ鍒癆搴撶殑鍙︿竴鎺� { - LogHelper.Info($"鍏ヤ腑杞尯{nextarea}浣跨敤{Endbit.S_LOC_CODE}"); - break; + zzlocs = zzlocs.FindAll(e => e.N_ROW == od.N_END_ROW); + // + var EndMt = dbcd.Queryable<Location>().Where(l => l.S_AREA_CODE == od.S_END_AREA && l.N_ROW == od.N_END_ROW && l.N_CURRENT_NUM > 0).ToList(); + if (EndMt.Any()) + { + var ggh = EndMt.OrderByDescending(e => e.N_COL).FirstOrDefault(); + zzlocs = zzlocs.FindAll(e => e.N_COL > ggh.N_COL).ToList(); + } + if (zzlocs.Any()) + { + Endbit = zzlocs.OrderBy(e => e.N_COL).FirstOrDefault(); + } + } } LogHelper.Info($"YWL_ZX_Turn from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 鎵惧埌绉诲簱缁堢偣銆媨Endbit?.S_LOC_CODE}"); @@ -4454,6 +4489,7 @@ } } } + } } } -- Gitblit v1.9.1