From 265e2fa111ae3e6b3ff242d2478d3facc06f7d6b Mon Sep 17 00:00:00 2001 From: pulg <plg@Haninfo> Date: 星期三, 02 七月 2025 18:01:14 +0800 Subject: [PATCH] 1 --- HH.WCS.QingXiNongfu/core/Monitor.cs | 499 +++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 336 insertions(+), 163 deletions(-) diff --git a/HH.WCS.QingXiNongfu/core/Monitor.cs b/HH.WCS.QingXiNongfu/core/Monitor.cs index 314be2c..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) //{ @@ -1026,6 +1030,8 @@ static List<string> ABlist = new List<string> { "YWLAQWJ", "YWLBQWJ" }; static List<string> CDlist = new List<string> { "YWLCQSX", "YWLDQWJ" }; static bool InworkLock = false; + //Dictionary<string, List<RowLock>> RGRowList = new Dictionary<string, List<RowLock>>(); + public static List<RowLock> RGRow = new List<RowLock>(); /// <summary> /// 鍘熸潗鏂�妫�祴鍚勬祦杞綅缃� 鍐欏叆鎵樼洏璐т綅s_type 涓�涓嬩竴涓洰鐨勫湴銆傚氨寮�涓浆銆� /// 鍘熺墿鏂欑焊绠憋紝鍏ュ簱鍫嗗彔鍖鸿浆杩�YWLRGDD--浜哄伐鍫嗗彔鍖�@@ -1043,6 +1049,7 @@ { try { + var lolist = LocationHelper.GetAreaNormalLocList(area);// LocationHelper.GetList<Location>(x => x.S_AREA_CODE == area && x.S_LOCK_STATE != "鎶ュ簾"); var lgrow = lolist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key); Dictionary<string, List<Location>> dsll = new Dictionary<string, List<Location>>(); @@ -1063,6 +1070,8 @@ if (!cntritems.Any()) continue; var cir1 = cntritems.First(); + + //鍙瓫閫夌焊绠辩墿鏂欑殑搴撳尯鏁版嵁銆� if (!string.IsNullOrEmpty(cir1.S_ITEM_NAME) && cir1.S_ITEM_NAME.Contains("绾哥-")) if (dsll.TryGetValue(cir1.S_ITEM_CODE, out List<Location> ll)) @@ -1123,12 +1132,33 @@ if (ABlist.Contains(EdnRarea)) { var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿� || x.S_LOCK_STATE == "鍑哄簱閿�)); - if (ls.Any()) + //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�)); + if (ls.Count() > 1) { LogHelper.Info($"{EdnRarea}浠诲姟鏁�绠″埗2"); 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(); + // if (ls.Count() > 2) + // { + // LogHelper.Info($"CD鍖哄叆搴撲换鍔$鍒舵渶澶ф暟3 {EdnRarea}"); + // continue; + // } + //} var cntritems = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE); if (!cntritems.Any()) continue; @@ -1167,17 +1197,19 @@ if (CDlist.Contains(EdnRarea)) { isCd = true; - inlockLis = LocationHelper.GetList<RowLock>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && x.S_LOCK_STATE == "鍏ュ簱閿�).ToList(); - if (inlockLis.Count() > 0) - { - inlock = inlockLis.FirstOrDefault(); - } + //inlockLis = LocationHelper.GetList<RowLock>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && x.S_LOCK_STATE == "鍏ュ簱閿�).ToList(); + //if (inlockLis.Count() > 0) + //{ + // inlock = inlockLis.FirstOrDefault(); + //} + inlock = RGRow.FirstOrDefault(); if (inlock != null) { //褰撳叆搴撶殑浠诲姟鑳芥斁婊′竴鎺掑苟涓旇繕鏈変綑鐨勬椂鍊�寮�浜屾帓 //鍏堝垽鏂捣鐐规湁澶氬皯鐩稿悓鐨�鑳藉叆鐨勭墿鏂� if (_cl.S_AREA_CODE == "YWLRGDD")//鍒ゆ柇璧风偣鏄惁鏄汉宸ュ爢鍙犲尯 { + inlockLis = RGRow.FindAll(e => e.S_AREA_CODE == EdnRarea && e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME).ToList(); //鐒跺悗鍒ゆ柇浜哄伐鍫嗗彔鍖洪渶瑕佸叆搴撳灏戞墭鍚屽搧绉嶇墿鏂�startMum //璐т綅 鎵樼洏 鐗╂枡琛ㄨ仈鏌� LogHelper.Info($"鏌ヨ捣鐐规湁澶氬皯鍚屽搧绉嶇殑鐗╂枡 寮�"); @@ -1187,6 +1219,7 @@ LogHelper.Info($"璧风偣瑕佸叆CD鐨勬湁澶氬皯鎵樼洏鏁伴噺涓簕lstCanOutL.Count()}"); //鍒ゆ柇缁堢偣鎺掕兘鍏ュ灏� 灏戜簬鍏ュ簱鎵樼洏鏁板垯澶氬紑涓�帓 EndMum var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "鏃� && inlockLis.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList(); + LogHelper.Info($"缁堢偣CD鎺掓湁澶氬皯绌烘墭鑳藉叆{lstCanOutL.Count()}"); if (lstCanOutL.Count <= EndMum.Count()) { arloclist = arloclist.FindAll(x => inlockLis.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); @@ -1202,6 +1235,33 @@ { arloclist = arloclist.FindAll(x => x.N_ROW == inlock.N_ROW).ToList(); } + } + else + { + if (_cl.S_AREA_CODE == "YWLRGDD") + { + //鏌ヨ鏄惁鏈夊凡缁忓叆浜嗙殑鎺�+ var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); + 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) + { + if (lstCanOutL.Count() <= EndMum.Count()) + { + arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); + } + } + } + } + } } foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key)) @@ -1267,12 +1327,24 @@ var sign = Settings.GetTimeStamp(); var res = TaskProcess.CreateTransport(sign, _cl.S_LOC_CODE, endbit.S_LOC_CODE, "鍘熺墿鏂欐惉杩�绾哥", _clrel.Select(x => x.S_CNTR_CODE).ToList(), 1, endbit.N_CURRENT_NUM + 1, 1, 50, Last);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); LogHelper.Info($"{r.Key}鍘熺墿鏂欐惉杩�{sign} 浠诲姟 锛屽垱寤簕res} "); - if (res && inlock == null && isCd) + if (CDlist.Contains(endbit.S_AREA_CODE) && res) { - var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; - LogHelper.Info($"鍘熺墿鏂欏叆搴�娣诲姞鎺掗攣淇℃伅{JsonConvert.SerializeObject(rrrr)} "); - WCSHelper.Do(db => db.Insertable(rrrr).ExecuteCommand()); + LogHelper.Info($"娣诲姞鍐呭瓨鎺掗攣"); + var ggf = inlockLis.Find(e => e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && e.S_AREA_CODE == endbit.S_AREA_CODE && e.N_ROW == endbit.N_ROW); + LogHelper.Info($"娣诲姞鍐呭瓨鎺掗攣 鏄惁鏌ヨ鍒版暟鎹�{JsonConvert.SerializeObject(ggf)}"); + if (ggf == null) + { + var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; + inlockLis.Add(rrrr); + LogHelper.Info($"娣诲姞鍐呭瓨鎺掗攣 娣诲姞鏁版嵁鍒板唴瀛樻帓閿佷腑:{JsonConvert.SerializeObject(inlockLis)}"); + } } + //if (res && inlock == null && isCd) + //{ + // var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; + // LogHelper.Info($"鍘熺墿鏂欏叆搴�娣诲姞鎺掗攣淇℃伅{JsonConvert.SerializeObject(rrrr)} "); + // WCSHelper.Do(db => db.Insertable(rrrr).ExecuteCommand()); + //} if (EdnRarea == "YWLWJJB") InworkLock = false; break; } @@ -1397,7 +1469,8 @@ { 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); @@ -1430,12 +1503,12 @@ var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 1 && x.SQL_State == "鎵ц涓�); if (!Syuworders.Any()) { + //姘寸嚎鏍囩鍏ュ簱 YwlBQ_CreInwork(SlocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ); } 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 == "鏃�) { @@ -1448,6 +1521,8 @@ LogHelper.CErrorLog($"{tk.SQL_WorkNo}-{tk.SQL_PLineNo} 閫�簱宸ュ崟寮�惎锛岀粦瀹氱殑 闆舵暣 鏍囪"); } Location Endbit = null; + // var hjs = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == SX_BQ.RK_BBHJQ).FindAll(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM == 0); + // var hjs = db.Queryable<Location>().Where(l => l.S_AREA_CODE == SX_BQ.RK_BBHJQ && l.S_LOCK_STATE.Trim() == "鏃�).ToList(); var hjs = LocationHelper.GetAreaNormalLocList(SX_BQ.RK_BBHJQ, true, false); Endbit = hjs.FindAll(x => x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); if (Endbit != null) @@ -1487,10 +1562,10 @@ { //return; ///璧风偣鏁版嵁銆� 缁堢偣搴撳尯 鍫嗗彔灞傛暟銆�- YwlPETK_CreInwork(PElocsFirst, "YWLTKMKQ", "鎻愭墸鍙夎繍", 3);//鎻愭墸鍏ュ簱--PE鑶�- YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "鏀剁缉鑶滃弶杩�, 1); // PE鍏ュ簱 --鎻愭墸 - //YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "鏀剁缉鑶滃弶杩�); - //YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "鏀剁缉鑶滃弶杩�);// PE涓嚭搴�+ YwlPETK_CreInwork(PElocsFirst, "YWLTKMKQ", "鏀剁缉鑶滃弶杩�, 2);//PE鑶�+ YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "鎻愭墸鍙夎繍", 1); //鎻愭墸 + //YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "鏀剁缉鑶滃弶杩�); + //YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "鏀剁缉鑶滃弶杩�);// PE涓嚭搴� var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2鎻愬崌鏈�鏀剁缉鑶� && x.WorkType == 1 && x.SQL_State == "鎵ц涓�); if (tklist.Count() > 0) @@ -1858,16 +1933,16 @@ { var s_type = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE).FirstOrDefault()?.N_BQ_TRAY_TYPE ?? 0; Location Endbit = null; - if (area == area/* WJ_BQ.RK_BQJBQ*/) + //if (area == area/* WJ_BQ.RK_BQJBQ*/) + //{ + var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, true, false); + Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); + if (Endbit != null) { - var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, true, false); - Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); - if (Endbit != null) - { - var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "鏍囩鍙夎繍-绾胯竟鏍囩閫�簱", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); - LogHelper.CSucessLog($"from {lastfull.S_LOC_CODE} to {Endbit.S_LOC_CODE} 鏍囩鍙夎繍-鎺ラ┏鏍囩閫�簱 锛屽垱寤簕re}"); - } + var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "鏍囩鍙夎繍-绾胯竟鏍囩閫�簱", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); + LogHelper.CSucessLog($"from {lastfull.S_LOC_CODE} to {Endbit.S_LOC_CODE} 鏍囩鍙夎繍-鎺ラ┏鏍囩閫�簱 锛屽垱寤簕re}"); } + // } //else //{ @@ -2074,7 +2149,6 @@ } } - /// <summary> /// 鍏ュ簱閫�簱銆�鐭ラ亾 闆跺ご婊℃墭銆傛甯稿尮閰嶃� /// </summary> @@ -2085,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); @@ -2105,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) { @@ -2247,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(); @@ -2741,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)) @@ -3717,16 +3762,22 @@ { LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}瀵瑰簲宸ュ崟鐨剓od.S_ROW} 鐗╂枡鏁伴噺涓嶈冻銆傝Е鍙戣浆杩愩�"); // 鍏堢湅鏄惁鏈夊埌璇ュ簱鍖虹殑杞繍浠诲姟銆� - var zxs = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "鎵ц" && X.S_END_AREA == od.S_ROW); - - //1.鏌ョ湅鐗╂枡鏄惁鍖归厤銆�- var itemTRUN = zxs.Any(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME); - if (itemTRUN) - { //鏈夊埌璇ュ簱鍖虹殑 鐗╂枡杞繍浠诲姟浜嗐� 涓嶉渶瑕佺户缁簡 銆�- + var zxs = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "鎵ц" && X.S_END_AREA == od.S_ROW).ToList(); + //鏌ヨ鏄惁鏈夐噸澶嶇殑宸ュ崟鍦ㄦ墽琛�+ var ggf = zxs.Find(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName); + if (ggf != null) + { LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}宸茬粡瀛樺湪杞繍浜嗘棤闇�Е鍙戣浆杩愩�"); - return; + continue; } + //1.鏌ョ湅鐗╂枡鏄惁鍖归厤銆�+ //var itemTRUN = zxs.Any(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME); + //if (itemTRUN) + //{ //鏈夊埌璇ュ簱鍖虹殑 鐗╂枡杞繍浠诲姟浜嗐� 涓嶉渶瑕佺户缁簡 銆�+ + // LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}宸茬粡瀛樺湪杞繍浜嗘棤闇�Е鍙戣浆杩愩�"); + // return; + //} //浜哄伐杞繍娌℃寚瀹氱墿鏂欙紝鎴戜細鑷姩鍐欏洖杞繍鍗�鐗╂枡鏁版嵁銆� //鎵綜D 鍖�鍝噷鏈夎繖涓墿鏂欍� @@ -3741,17 +3792,17 @@ { 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 == area && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName).ToList(); } - List<string> CRk = new List<string>() { "鍑哄簱閿�, "鍏ュ簱閿� }; - var EndMum = newDb.Queryable<Location>().Where(l => l.S_AREA_CODE == area && CRk.Contains(l.S_LOCK_STATE)).ToList(); - var RowLock = EndMum.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); - foreach (var item in RowLock) - { - lstCanOutL.RemoveAll(e => e.N_ROW == item.N_ROW); - } + //List<string> CRk = new List<string>() { "鍑哄簱閿�, "鍏ュ簱閿� }; + //var EndMum = newDb.Queryable<Location>().Where(l => l.S_AREA_CODE == area && CRk.Contains(l.S_LOCK_STATE)).ToList(); + //var RowLock = EndMum.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); + //foreach (var item in RowLock) + //{ + // lstCanOutL.RemoveAll(e => e.N_ROW == item.N_ROW); + //} if (lstCanOutL.Count() > 0) { - var LstCan = newDb.Queryable<LocCntrRel>().Where(a => lstCanOutL.Select(e => e.S_LOC_CODE).ToList().Contains(a.S_LOC_CODE)).ToList(); - var loc = lstCanOutL.Find(e => e.S_LOC_CODE == LstCan.OrderBy(c => c.T_CREATE).FirstOrDefault().S_LOC_CODE); + //var LstCan = newDb.Queryable<LocCntrRel>().Where(a => lstCanOutL.Select(e => e.S_LOC_CODE).ToList().Contains(a.S_LOC_CODE)).ToList(); + var loc = lstCanOutL.OrderBy(e => e.T_FULL_TIME).FirstOrDefault(); TrunStart.area = area; TrunStart.Row = loc.N_ROW; } @@ -3771,21 +3822,21 @@ } LogHelper.Info($"ZdzyABArea{od.SQL_WorkNo}瑙﹀彂杞繍銆傝浆杩愭潵婧愭槸{JsonConvert.SerializeObject(TrunStart)}"); if (TrunStart?.area != null) - WCSHelper.Do(db => + { + var ggft = new YWLZXtake() { - db.Insertable(new YWLZXtake - { - S_START_AREA = TrunStart.area, - N_START_ROW = TrunStart.Row, - S_END_AREA = od.S_ROW, - S_ZX_STATE = "鎵ц", - S_ITEM_CODE = od.SQL_ItemCode, - S_ITEM_NAME = od.SQL_ItemName, - S_CJ_NAME = od.S_CJ_NAME, - S_ZZ_AREA = (od.S_ROW == "YWLAQWJ" ? "YWLWJJB" : od.S_ROW) - }).ExecuteCommand(); - }); - + SQL_WorkNo = "CKD" + DateTime.Now.Ticks.ToString(), + S_START_AREA = TrunStart.area, + N_START_ROW = TrunStart.Row, + S_END_AREA = od.S_ROW, + S_ZX_STATE = "鎵ц", + S_ITEM_CODE = od.SQL_ItemCode, + S_ITEM_NAME = od.SQL_ItemName, + S_CJ_NAME = od.S_CJ_NAME, + S_ZZ_AREA = (od.S_ROW == "YWLAQWJ" ? "YWLWJJB" : od.S_ROW) + }; + var gf = newDb.Insertable(ggft).ExecuteCommand(); + } } } } @@ -3805,6 +3856,7 @@ /// </summary> public static void AutoRun13TSJ() { + //Action<YWLWorkOrder> _sAB娌$墿鏂欐垨鑰呬綑閲忎笉瓒冲紑濮嬭Е鍙戣窡鏍规嵁鑷姩杞繍_鍚嶅瓧瓒婇暱瓒婂ソ = (od) => //{ // LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}瀵瑰簲宸ュ崟鐨剓od.S_ROW} 鐗╂枡鏁伴噺涓嶈冻銆傝Е鍙戣浆杩愩�"); @@ -3922,29 +3974,77 @@ foreach (var area in v) //.Concat(od.S_ROW.Split('$')).Distinct()) { - var AreaRowlist = LocationHelper.GetAreaNormalLocList(area); - foreach (var item in AreaRowlist.GroupBy(x => x.N_ROW)) + if (ABlist.Contains(area)) { - var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); - if (rl == null) continue; - _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); - //鏉垮瀷鐩稿悓 - var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); - LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏绫诲瀷銆� + JsonConvert.SerializeObject(_clrel0)); - var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault(); - LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏涓婄殑鐗╂枡淇℃伅銆� + JsonConvert.SerializeObject(_clcntitem)); - if (_clcntitem != null) + //AreaRowlist = LocationHelper.GetAreaNormalLocList(area);YWLBQWJ + // var AreaRowlist = LocationHelper.GetAreaNormalLocList("YWLAQWJ").Union(LocationHelper.GetAreaNormalLocList("YWLBQWJ")).ToList(); + var db = new SqlHelper<object>().GetInstance(); + var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); + ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName && (o.S_AREA_CODE == "YWLAQWJ" || o.S_AREA_CODE == "YWLBQWJ")); + var lstCanOutL = db.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) { - LogHelper.Info("AutoRun13TSJ" + "鐩镐簰鏄惁鍖归厤 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME + "缁撴灉:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)); - if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName) + var rl = lstCanOutL.OrderBy(e => e.T_FULL_TIME).FirstOrDefault(); + _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); + //鏉垮瀷鐩稿悓 + var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); + if (rl != null) { StartBit = rl; - break; + } + } + else + { + LogHelper.Info($"AutoRun13TSJ 鏈哄彴:{pline} 鐗╂枡缂栫爜:{od.SQL_ItemCode}鐗╂枡鍚嶇О:{od.SQL_ItemName} AB鍖虹己鏂�); + } + + + //if (rl == null) continue; + //_clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); + ////鏉垮瀷鐩稿悓 + //var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); + //LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏绫诲瀷銆� + JsonConvert.SerializeObject(_clrel0)); + //var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault(); + //LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏涓婄殑鐗╂枡淇℃伅銆� + JsonConvert.SerializeObject(_clcntitem)); + //if (_clcntitem != null) + //{ + // LogHelper.Info("AutoRun13TSJ" + "鐩镐簰鏄惁鍖归厤 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME + "缁撴灉:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)); + // if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName) + // { + // StartBit = rl; + // break; + // } + //} + + } + else + { + var AreaRowlist = LocationHelper.GetAreaNormalLocList(area); + foreach (var item in AreaRowlist.GroupBy(x => x.N_ROW)) + { + var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); + if (rl == null) continue; + _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); + //鏉垮瀷鐩稿悓 + var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); + LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏绫诲瀷銆� + JsonConvert.SerializeObject(_clrel0)); + var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault(); + LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏涓婄殑鐗╂枡淇℃伅銆� + JsonConvert.SerializeObject(_clcntitem)); + if (_clcntitem != null) + { + LogHelper.Info("AutoRun13TSJ" + "鐩镐簰鏄惁鍖归厤 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME + "缁撴灉:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)); + if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName) + { + StartBit = rl; + break; + } } } } if (StartBit != null) + { break; + } } if (StartBit == null) { @@ -4110,6 +4210,11 @@ if (dsi.TryGetValue(area, out dictitems)) { var ill = dictitems.Find(x => x.Row == rl.N_ROW && x.ItemCode == _clcntitem.S_ITEM_CODE && x.ItemName == _clcntitem.S_ITEM_NAME && _clcntitem.S_CJ_NAME == x.S_CJ_NAME); + if (ill == null) + { + ill = dictitems.Find(x => x.Row == rl.N_ROW && x.ItemCode == _clcntitem.S_ITEM_CODE && x.ItemName == _clcntitem.S_ITEM_NAME); + } + if (ill != null) { if (rl.N_CURRENT_NUM > ill.ItemLayer) @@ -4151,6 +4256,29 @@ LogHelper.Info($"AutoRunABD abcd鐗╂枡姹囨�瀹屾垚 >>{ReadCCK}|| {dsi.Count}"); } + /// <summary> + /// 鏍煎紡鍖栧唴瀛樻帓閿�+ /// </summary> + public static void Qchc() + { + try + { + LogHelper.Info($"鍐呭瓨涓殑鎺掗攣琛ㄤ腑鐨勬暟鎹� + $"{JsonConvert.SerializeObject(RGRow)}"); + if (RGRow.Count() > 0) + { + var locs = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == "YWLRGDD" && x.S_LOCK_STATE == "鍑哄簱閿�).ToList(); + if (locs.Count() == 0) + { + RGRow = new List<RowLock>(); + LogHelper.Info($"鏍煎紡鍖栧唴瀛樹腑鐨勬帓閿� + $"{JsonConvert.SerializeObject(RGRow)}"); + } + } + } + catch (Exception ex) + { + LogHelper.Info($"鏍煎紡鍖栧唴瀛樹腑鐨勬帓閿�澶辫触" + $"{ex.Message}"); + } + } public static void chargeCCD() { var ods = LocationHelper.GetList<YWLWorkOrder>(x => x.WorkType == 2 && x.SQL_State == "鎵ц涓�); @@ -4217,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); @@ -4252,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) { @@ -4282,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}"); @@ -4317,6 +4489,7 @@ } } } + } } } -- Gitblit v1.9.1