From 8f0f149d607a7246fa25e81340602ce5e47398fe Mon Sep 17 00:00:00 2001 From: pulg <plg@Haninfo> Date: 星期四, 10 七月 2025 18:14:38 +0800 Subject: [PATCH] 1 --- HH.WCS.QingXiNongfu/TableSetting.json | 3 HH.WCS.QingXiNongfu/wms/WCSHelper.cs | 12 HH.WCS.QingXiNongfu/settings.xml | 9 HH.WCS.QingXiNongfu/Program.cs | 4 HH.WCS.QingXiNongfu/bin/Debug/settings.xml | 9 HH.WCS.QingXiNongfu/wms/WMSModel.cs | 3 HH.WCS.QingXiNongfu/api/ApiHelper.cs | 175 +++--- HH.WCS.QingXiNongfu/process/DeviceProcess.cs | 350 +++++++++++++ HH.WCS.QingXiNongfu/bin/Debug/TableSetting.json | 3 HH.WCS.QingXiNongfu/core/Monitor.cs | 867 ++++++++++++++++++++-------------- HH.WCS.QingXiNongfu/process/TaskProcess.cs | 21 HH.WCS.QingXiNongfu/wms/WCSModel.cs | 30 + 12 files changed, 997 insertions(+), 489 deletions(-) diff --git a/HH.WCS.QingXiNongfu/Program.cs b/HH.WCS.QingXiNongfu/Program.cs index b6a4111..7bfcb5c 100644 --- a/HH.WCS.QingXiNongfu/Program.cs +++ b/HH.WCS.QingXiNongfu/Program.cs @@ -760,8 +760,8 @@ GetTask(Monitor.AutoRunABD), GetTask(Monitor.AutoRun13TSJ), GetTask(Monitor.ZdzyABArea), - // GetTask(Monitor.Qchc), - + + //GetTask(Monitor.AutoTK_PE),//鎻愭墸 - PE鑶滃嚭鍏ュ簱 //GetTask(Monitor.chargeCCD),//YWL 鍏ュ簱宸ュ崟銆傛湭浣跨敤銆�diff --git a/HH.WCS.QingXiNongfu/TableSetting.json b/HH.WCS.QingXiNongfu/TableSetting.json index 64c36a8..4c380e6 100644 --- a/HH.WCS.QingXiNongfu/TableSetting.json +++ b/HH.WCS.QingXiNongfu/TableSetting.json @@ -20,5 +20,6 @@ "搴撳簱杞繍": "TN_0068", "棰嗘枡鍗曞瓙琛�: "TN_0053", "鍘熺墿鏂欏伐鍗曡〃": "TN_0066", - "AGV璁惧淇℃伅": "TN_0042" + "AGV璁惧淇℃伅": "TN_0042", + "鍗婃垚鍝佸尯鍩熻〃": "TN_0076" } \ No newline at end of file diff --git a/HH.WCS.QingXiNongfu/api/ApiHelper.cs b/HH.WCS.QingXiNongfu/api/ApiHelper.cs index 02e1d75..1972bd6 100644 --- a/HH.WCS.QingXiNongfu/api/ApiHelper.cs +++ b/HH.WCS.QingXiNongfu/api/ApiHelper.cs @@ -3,21 +3,12 @@ using HH.WCS.QingXigongchang.util; using HH.WCS.QingXigongchang.wms; using Newtonsoft.Json; -using NLog.Fluent; using System; using System.Collections.Generic; -using System.Data.SqlClient; using System.Linq; -using System.Reflection; -using System.Reflection.Emit; -using System.Runtime.ConstrainedExecution; -using System.Security.Cryptography; using System.Threading; -using System.Threading.Tasks; using System.Web.Http; -using System.Web.Security; using static HH.WCS.QingXigongchang.api.ApiModel; -using static HH.WCS.QingXigongchang.dispatch.NDC; namespace HH.WCS.QingXigongchang.api { @@ -789,20 +780,20 @@ } } } - if (!string.IsNullOrEmpty(item.Trim())) - if (!"J,F".Contains(SQL_UsingNow) || String.IsNullOrEmpty(SQL_UsingNow)) - { - if (locd.S_AREA_CODE.StartsWith("PP")) - { - SQL_UsingNow = "F"; - } - else if (locd.S_AREA_CODE.Contains("JCJY")) - { - SQL_UsingNow = "J"; - } - else - return SimpleResult.Error("鎸囨槑 鍗充骇鍜岄潪鍗充骇鐨勫弬鏁�JF 娌℃湁鏄庣‘" + SQL_UsingNow); - } + //if (!string.IsNullOrEmpty(item.Trim())) + // if (!"J,F".Contains(SQL_UsingNow) || String.IsNullOrEmpty(SQL_UsingNow)) + // { + // if (locd.S_AREA_CODE.StartsWith("PP")) + // { + // SQL_UsingNow = "F"; + // } + // else if (locd.S_AREA_CODE.Contains("JCJY")) + // { + // SQL_UsingNow = "J"; + // } + // else + // return SimpleResult.Error("鎸囨槑 鍗充骇鍜岄潪鍗充骇鐨勫弬鏁�JF 娌℃湁鏄庣‘" + SQL_UsingNow); + // } result.resultCode = 0; //LocationHelper.BindingLoc(loc.Trim(), "1".Split(',').ToList()); @@ -820,77 +811,75 @@ { return SimpleResult.Error(loc + " 璐т綅 arco a,r,c,o 鎸囧畾涓嶆槑"); } - + var row = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.S_LOCK_STATE != "鏃� && x.S_LOCK_STATE != "鎶ュ簾"); + //var rowloc = row.Find(x => x.S_LOCK_STATE != "鏃�); + if (row.Any()) { - var row = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.S_LOCK_STATE != "鏃� && x.S_LOCK_STATE != "鎶ュ簾"); - //var rowloc = row.Find(x => x.S_LOCK_STATE != "鏃�); - if (row.Any()) - { - result.resultCode = -1; - result.resultMsg = $"鎵��鍖哄煙{row.FirstOrDefault().S_LOC_CODE}鎺掓湁{row.FirstOrDefault().S_LOCK_STATE}鐘舵�, 涓嶈兘杩涜缁戝畾"; - return result; - } - if (BindORUnbind) - { - Location e = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.N_CURRENT_NUM > 0).LastOrDefault();//浠庡乏寰�彸鏈�悗涓�釜婊′綅銆� - if (e != null) - { - var rel = LocationHelper.GetLocCntrRel(e.S_LOC_CODE); - if (rel.FirstOrDefault()?.S_TYPE != item) - { - LogHelper.Info($"{e.S_LOC_CODE} 浣嶇疆鐨�鐗╂枡{rel.FirstOrDefault()?.S_TYPE} 涓庢湰娆$粦瀹歿item} 涓嶇銆�缁堟缁戝畾"); - result.resultCode = -1; - result.resultMsg = $"{e.S_LOC_CODE} 浣嶇疆鐨�鐗╂枡{rel.FirstOrDefault()?.S_TYPE} 涓庢湰娆$粦瀹歿item} 涓嶇銆�缁堟缁戝畾"; - return result; - } - } - LocationHelper.DoAction(db => - { - var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - int li = 0; - foreach (var __loc in _locs) - { - if (__loc.N_CAPACITY <= __loc.N_CURRENT_NUM) - continue; - if (li >= s.Length) - li = 0; - string end = s[li].ToString(); - db.Insertable<LocCntrRel>(new LocCntrRel - { - S_LOC_CODE = __loc.S_LOC_CODE.Trim(), - S_CNTR_CODE = SQL_UsingNow + Settings.GetTimeStamp() + end, - S_TYPE = item - }).ExecuteCommand(); - __loc.N_CURRENT_NUM++; - if (__loc.N_CURRENT_NUM > __loc.N_CAPACITY) - __loc.N_CURRENT_NUM = __loc.N_CAPACITY; - __loc.T_FULL_TIME = DateTime.Now; - - db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME }).ExecuteCommand(); - li++; - } - return true; - }); - } - else - { - LocationHelper.DoAction(db => - { - foreach (var __loc in _locs) - { - if (0 == __loc.N_CURRENT_NUM) - continue; - db.Deleteable<LocCntrRel>().Where(it => it.S_LOC_CODE == __loc.S_LOC_CODE.Trim()).ExecuteCommand(); - - __loc.N_CURRENT_NUM = 0; - __loc.T_FULL_TIME = null; - __loc.T_EMPTY_TIME = DateTime.Now; - db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_EMPTY_TIME, it.T_FULL_TIME }).ExecuteCommand(); - } - return true; - }); - } + result.resultCode = -1; + result.resultMsg = $"鎵��鍖哄煙{row.FirstOrDefault().S_LOC_CODE}鎺掓湁{row.FirstOrDefault().S_LOCK_STATE}鐘舵�, 涓嶈兘杩涜缁戝畾"; + return result; } + if (BindORUnbind) + { + Location e = _locs.FindAll(x => x.S_AREA_CODE == locd.S_AREA_CODE && x.N_ROW == locd.N_ROW && x.N_CURRENT_NUM > 0).LastOrDefault();//浠庡乏寰�彸鏈�悗涓�釜婊′綅銆� + if (e != null) + { + var rel = LocationHelper.GetLocCntrRel(e.S_LOC_CODE); + if (rel.FirstOrDefault()?.S_TYPE != item) + { + LogHelper.Info($"{e.S_LOC_CODE} 浣嶇疆鐨�鐗╂枡{rel.FirstOrDefault()?.S_TYPE} 涓庢湰娆$粦瀹歿item} 涓嶇銆�缁堟缁戝畾"); + result.resultCode = -1; + result.resultMsg = $"{e.S_LOC_CODE} 浣嶇疆鐨�鐗╂枡{rel.FirstOrDefault()?.S_TYPE} 涓庢湰娆$粦瀹歿item} 涓嶇銆�缁堟缁戝畾"; + return result; + } + } + LocationHelper.DoAction(db => + { + var s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + int li = 0; + foreach (var __loc in _locs) + { + if (__loc.N_CAPACITY <= __loc.N_CURRENT_NUM) + continue; + if (li >= s.Length) + li = 0; + string end = s[li].ToString(); + db.Insertable<LocCntrRel>(new LocCntrRel + { + S_LOC_CODE = __loc.S_LOC_CODE.Trim(), + S_CNTR_CODE = SQL_UsingNow + Settings.GetTimeStamp() + end, + S_TYPE = item + }).ExecuteCommand(); + __loc.N_CURRENT_NUM++; + if (__loc.N_CURRENT_NUM > __loc.N_CAPACITY) + __loc.N_CURRENT_NUM = __loc.N_CAPACITY; + __loc.T_FULL_TIME = DateTime.Now; + + db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_FULL_TIME }).ExecuteCommand(); + li++; + } + return true; + }); + } + else + { + LocationHelper.DoAction(db => + { + foreach (var __loc in _locs) + { + if (0 == __loc.N_CURRENT_NUM) + continue; + db.Deleteable<LocCntrRel>().Where(it => it.S_LOC_CODE == __loc.S_LOC_CODE.Trim()).ExecuteCommand(); + + __loc.N_CURRENT_NUM = 0; + __loc.T_FULL_TIME = null; + __loc.T_EMPTY_TIME = DateTime.Now; + db.Updateable<Location>(__loc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_EMPTY_TIME, it.T_FULL_TIME }).ExecuteCommand(); + } + return true; + }); + } + } lable_end: return result; @@ -1240,7 +1229,7 @@ } } if (startBit == null) - return SimpleResult.Error("") ; + return SimpleResult.Error(""); locList = LocationHelper.GetAreaNormalLocList("鍏ュ簱鍖�); foreach (var item in locList.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key)) { diff --git a/HH.WCS.QingXiNongfu/bin/Debug/TableSetting.json b/HH.WCS.QingXiNongfu/bin/Debug/TableSetting.json index 64c36a8..4c380e6 100644 --- a/HH.WCS.QingXiNongfu/bin/Debug/TableSetting.json +++ b/HH.WCS.QingXiNongfu/bin/Debug/TableSetting.json @@ -20,5 +20,6 @@ "搴撳簱杞繍": "TN_0068", "棰嗘枡鍗曞瓙琛�: "TN_0053", "鍘熺墿鏂欏伐鍗曡〃": "TN_0066", - "AGV璁惧淇℃伅": "TN_0042" + "AGV璁惧淇℃伅": "TN_0042", + "鍗婃垚鍝佸尯鍩熻〃": "TN_0076" } \ No newline at end of file diff --git a/HH.WCS.QingXiNongfu/bin/Debug/settings.xml b/HH.WCS.QingXiNongfu/bin/Debug/settings.xml index a0d5f42..8bb2509 100644 --- a/HH.WCS.QingXiNongfu/bin/Debug/settings.xml +++ b/HH.WCS.QingXiNongfu/bin/Debug/settings.xml @@ -61,9 +61,10 @@ <![CDATA[ [ {"address":"10.140.3.164","deviceName":"550","FuLeLineNo":"闈掓邯鎴愬搧浠換X1杈撻�绾�,"deviceNo":[],"location":["CX-2","CX-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, - {"address":"10.140.3.163","deviceName":"娉ㄥ鏈�,"deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, + +{"address":"10.140.9.168","deviceName":"娉ㄥ鏈�,"deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, - {"address":"10.140.3.175","deviceName":"娉ㄥ鏈�","deviceNo":["","664"],"location":["ZSJ3-1","ZSJ3-2"],"deviceType":8,"enable":1}, + {"address":"10.140.9.169","deviceName":"娉ㄥ鏈�","deviceNo":["","664"],"location":["ZSJ3-1","ZSJ3-2"],"deviceType":8,"enable":1}, {"address":"10.140.3.176","deviceName":"娉ㄥ鏈�","deviceNo":["","666"],"location":["ZSJ4-1","ZSJ4-2"],"deviceType":8,"enable":1}, @@ -87,7 +88,7 @@ {"address":"10.140.3.178","deviceName":"CX4","FuLeLineNo":"闈掓邯鎴愬搧浠換X4杈撻�绾�,"deviceNo":[],"location":["CX4-2","CX4-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, - {"address":"10.140.3.165","deviceName":"5L娉ㄥ鏈�,"deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, + {"address":"10.140.9.167","deviceName":"5L娉ㄥ鏈�,"deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, {"address":"10.140.3.167","deviceName":"5L缈绘枟鏈�,"deviceNo":["","998"],"location":["5LFDJ"],"deviceType":5,"enable":1}, {"address":"10.140.3.155","deviceName":"闂╬lc2","deviceNo":["2"],"location":[],"deviceType":1,"enable":1}, @@ -127,7 +128,7 @@ {"address":"10.140.3.187","deviceName":"鐡剁洊5L缈绘枟鏈�,"deviceNo":["","187"],"location":["SXFDJ-1"],"deviceType":10,"areaPriy":["PGMKCK"],"enable":1}, - {"address":"10.140.9.167","deviceName":"T2鎻愬崌鏈�,"deviceNo":[""],"taskPri":50,"location":["YWLT2TSJ"],"areaPriy":["YWLT2TSJCD"],"deviceType":13,"enable":1}, + {"address":"10.140.9.163","deviceName":"T2鎻愬崌鏈�,"deviceNo":[""],"taskPri":50,"location":["YWLT2TSJ"],"areaPriy":["YWLT2TSJCD"],"deviceType":13,"enable":1}, {"address":"10.140.9.168","deviceName":"T1鎻愬崌鏈�,"deviceNo":[""],"taskPri":50,"location":["YWLT1TSJ"],"areaPriy":["YWLT1TSJCD"],"deviceType":13,"enable":1}, ]]]> diff --git a/HH.WCS.QingXiNongfu/core/Monitor.cs b/HH.WCS.QingXiNongfu/core/Monitor.cs index 569c8a8..972758d 100644 --- a/HH.WCS.QingXiNongfu/core/Monitor.cs +++ b/HH.WCS.QingXiNongfu/core/Monitor.cs @@ -1051,7 +1051,7 @@ { 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); + var lgrow = lolist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList(); Dictionary<string, List<Location>> dsll = new Dictionary<string, List<Location>>(); foreach (var rows in lgrow) { @@ -1120,12 +1120,12 @@ //鏌ヨ浠诲姟鏁� List<string> AreaLi = new List<string>() { "YWLBQWJ", "YWLWJJB" }; var db = new SqlHelper<object>().GetInstance(); - var list = db.Queryable<Location>().Where(a => AreaLi.Contains(a.S_AREA_CODE) && a.S_LOCK_STATE == "鍏ュ簱閿�).ToList(); - if (list.Count() >= 2) - { - LogHelper.Info($"CreateTransport- CreateTask Error" + $"缁堢偣搴撳尯涓篩WLRGDD鎴栬�YWLWJJB 鍒欐渶澶氬彧鑳界敓鎴愪袱涓换鍔�); - continue; - } + //var list = db.Queryable<Location>().Where(a => AreaLi.Contains(a.S_AREA_CODE) && a.S_LOCK_STATE == "鍏ュ簱閿�).ToList(); + //if (list.Count() >= 3) + //{ + // LogHelper.Info($"CreateTransport- CreateTask Error" + $"缁堢偣搴撳尯涓篩WLRGDD鎴栬�YWLWJJB 鍒欐渶澶氬彧鑳界敓鎴愪袱涓换鍔�); + // continue; + //} } string Last = string.Join(",", ccr.Skip(1)); @@ -1211,14 +1211,14 @@ 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 ProRow = lstCanOutLSta.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); + var ProRow = lstCanOutL.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); //杩欎簺鎺掕兘鍏ョ殑璐т綅鏁� 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(); //鏌ヨ姣忎竴鎺掓渶澶х殑鍒�灏忎簬杩欎簺鍒楃殑 涓嶅厑璁稿叆 foreach (var item in ProRow) { - var MaxCol = lstCanOutLSta.FindAll(d => d.N_ROW == item.N_ROW).OrderByDescending(f => f.N_COL).First(); + var MaxCol = lstCanOutL.FindAll(d => d.N_ROW == item.N_ROW).OrderByDescending(f => f.N_COL).First(); EndMum.RemoveAll(f => f.N_ROW == item.N_ROW && f.N_COL < MaxCol.N_COL); } if (EndMum.Count() > 0) @@ -1452,7 +1452,7 @@ } } var locsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏍囩-") && x.S_TYPE == WJ_BQ.RK_BBHJQ); - var SblocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏍囩-") && x.S_NOTE.Contains("姘�) && x.S_TYPE == WJ_BQ.RK_BBHJQ); + var SblocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏍囩-") && x.S_NOTE.Contains("姘�) && !x.S_NOTE.Contains("楗枡") && x.S_TYPE == SX_BQ.RK_BBHJQ); var SlocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏍囩-") && x.S_TYPE == SX_BQ.RK_BBHJQ); var TKlocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鎻愭墸-")); var PElocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏀剁缉鑶�")); @@ -1464,31 +1464,31 @@ //} var TASKs = new List<Task>(); - var task1 = Task.Run(() => + //var task1 = Task.Run(() => + //{ + try { - 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).OrderBy(x => x.TagOverTime).ToList(); + if (LocLock(WJ_BQ.RK_BBHJQ)) { - // 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 (LocLock(WJ_BQ.RK_BBHJQ)) - { - //鏍囩鍏ュ簱 - YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ); - } - if (yuworders.Any()) - { - LogHelper.Info($" 鏃犺弻鍑哄簱 宸ュ崟寮�惎涓�"); - // 鏍囩鍑哄簱銆傝揣鏋剁洿鎺ュ嚭鍒扮嚎杈�- YwlBQ_CreWJOutOrder(); - } - // 鏍囩鏃犺弻閫�簱銆� - YwlBQ_CreWJTK(); + //鏍囩鍏ュ簱 + YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ); } - catch (Exception ex) + if (yuworders.Any()) { - LogHelper.Error(ex.Message, ex); + LogHelper.Info($" 鏃犺弻鍑哄簱 宸ュ崟寮�惎涓�"); + // 鏍囩鍑哄簱銆傝揣鏋剁洿鎺ュ嚭鍒扮嚎杈�+ YwlBQ_CreWJOutOrder(); } - }); + // 鏍囩鏃犺弻閫�簱銆� + YwlBQ_CreWJTK(); + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } + //}); var task11 = Task.Run(() => { @@ -1527,11 +1527,11 @@ var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 1 && x.SQL_State == "鎵ц涓�); - if (LocLock(SX_BQ.RK_BBHJQ)) - { - //姘寸嚎鏍囩鍏ュ簱 - YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ); - } + //if (LocLock(SX_BQ.RK_BBHJQ)) + //{ + // //姘寸嚎鏍囩鍏ュ簱 + // YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ); + //} if (tklist.Count() > 0) { var tk = tklist.FirstOrDefault(); @@ -1569,271 +1569,278 @@ LogHelper.Error(ex.Message, ex); } }); - var task3 = Task.Run(() => + //var task3 = Task.Run(() => + //{ + try { - try + //return; + if (LocLock("YWLTKMKQ")) { - //return; YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "鎻愭墸鍙夎繍");//鎻愭墸 涓按 閫�簱銆�- YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "鎻愭墸鍙夎繍", 1);//鎻愭墸涓按鍑哄簱 - YwlPEZsOutOrder("YWLTKMKQ", "YWLZSXBKQ", "涓按鑶滃弶杩�, 1);//涓按鍑哄簱 } - catch (Exception ex) - { - LogHelper.Error(ex.Message, ex); - } - }); - var task4 = Task.Run(() => + YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "鎻愭墸鍙夎繍", 1);//鎻愭墸涓按鍑哄簱 + + YwlPEZsOutOrder("YWLTKMKQ", "YWLZSXBKQ", "涓按鑶滃弶杩�, 1);//涓按鍑哄簱 + } + catch (Exception ex) { - try + LogHelper.Error(ex.Message, ex); + } + //}); + //var task4 = Task.Run(() => + //{ + try + { + //return; + ///璧风偣鏁版嵁銆� 缁堢偣搴撳尯 鍫嗗彔灞傛暟銆�+ if (LocLock("YWLTKMKQ")) { - //return; - ///璧风偣鏁版嵁銆� 缁堢偣搴撳尯 鍫嗗彔灞傛暟銆� YwlPETK_CreInwork(PElocsFirst, "YWLTKMKQ", "鏀剁缉鑶滃弶杩�, 2);//PE鑶� YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "鎻愭墸鍙夎繍", 1); //鎻愭墸 - //YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "鏀剁缉鑶滃弶杩�); - //YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "鏀剁缉鑶滃弶杩�);// PE涓嚭搴�+ } + //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) + var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2鎻愬崌鏈�鏀剁缉鑶� && x.WorkType == 1 && x.SQL_State == "鎵ц涓�); + if (tklist.Count() > 0) + { + LogHelper.Info("-鏀剁缉鑶� 閫�簱锛�); + var tk = tklist.FirstOrDefault(); + + var loc = LocationHelper.GetLoc(plc.location[0]); + if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "鏃�) { - LogHelper.Info("-鏀剁缉鑶� 閫�簱锛�); - var tk = tklist.FirstOrDefault(); - - var loc = LocationHelper.GetLoc(plc.location[0]); - if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "鏃�) + var rr_clrel = LocationHelper.GetLocCntrRel(loc.S_LOC_CODE); + if (rr_clrel.FirstOrDefault()?.S_TYPE == BQ_PRA.B && DateTime.Now.Subtract(rr_clrel.FirstOrDefault()?.T_CREATE ?? DateTime.Now).TotalSeconds > 10) { - var rr_clrel = LocationHelper.GetLocCntrRel(loc.S_LOC_CODE); - if (rr_clrel.FirstOrDefault()?.S_TYPE == BQ_PRA.B && DateTime.Now.Subtract(rr_clrel.FirstOrDefault()?.T_CREATE ?? DateTime.Now).TotalSeconds > 10) + var cir = ContainerHelper.GetCntrItemRel(rr_clrel.FirstOrDefault().S_CNTR_CODE).FirstOrDefault(); + if (cir == null) + { LogHelper.CErrorLog($"{loc.S_LOC_CODE} 娌℃湁鎵樼洏鐗╂枡鏁版嵁锛侊紒"); return; } + var s_type = cir?.N_BQ_TRAY_TYPE ?? 0; + if (s_type == 0) { - var cir = ContainerHelper.GetCntrItemRel(rr_clrel.FirstOrDefault().S_CNTR_CODE).FirstOrDefault(); - if (cir == null) - { LogHelper.CErrorLog($"{loc.S_LOC_CODE} 娌℃湁鎵樼洏鐗╂枡鏁版嵁锛侊紒"); return; } - var s_type = cir?.N_BQ_TRAY_TYPE ?? 0; - if (s_type == 0) - { - LogHelper.CErrorLog($"{tk.SQL_WorkNo}-{tk.SQL_PLineNo} 閫�簱宸ュ崟寮�惎锛岀粦瀹氱殑 闆舵暣 鏍囪"); - } - Location Endbit = null; - //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) - //{ - // var re = TaskProcess.CreateTransport("", loc.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "鏀剁缉鑶滃弶杩�T2閫�簱", rr_clrel.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); - // LogHelper.CSucessLog($"from {loc.S_LOC_CODE} to {Endbit.S_LOC_CODE} 鏍囩鍙夎繍-T2閫�簱 锛屽垱寤簕re}"); - //} - string v = "YWLTKMKQ"; - var rklist = LocationHelper.GetRowLock(v); - int hof = (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3)); - - var inlock = rklist.Find(x => x.S_LOCK_SRC == (cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim() + hof) && x.S_LOCK_STATE.Contains("鍏ュ簱閿�)); - Location EndBit = null; - var NormalList = LocationHelper.GetAreaNormalLocList(v); - //鏈夊叆搴撻攣鎺掋� 鑳藉叆灏卞叆銆備笉鑳藉氨绛夈� - if (inlock != null) - { - var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); - foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * -1)) - { - var srloclist = rs.OrderBy(x => x.N_COL).ToList(); - var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); - if (lastfull != null) - { - var c = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); - var xcirs = ContainerHelper.GetCntrItemRel(c.FirstOrDefault().S_CNTR_CODE); - if (!xcirs.Any()) continue; - var xcir = xcirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); - if (cir.S_ITEM_CODE != xcir.S_ITEM_CODE || cir.S_ITEM_NAME != xcir.S_ITEM_NAME || xcir.S_CJ_NAME != cir.S_CJ_NAME) - continue; - } - EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, 3) && 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(); - var EptRowlist = NormalList.FindAll(x => !hasNum.Contains(x.N_ROW)); - if (EptRowlist.Any()) - { - EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (-1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); - } - } - if (EndBit != null) - { - var res = TaskProcess.CreateTransport("", loc.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, "鏀剁缉鑶滃弶杩�鍏ュ簱", new List<string> { cir.S_CNTR_CODE }, 1, EndBit.N_CURRENT_NUM + 1, 1, 62); - LogHelper.CSucessLog($"from {loc.S_LOC_CODE} to {EndBit.S_LOC_CODE} {("鏀剁缉鑶滃弶杩�鍏ュ簱")} 锛屽垱寤簕res} "); - - if (res && inlock == null) - { - var r = new RowLock { S_LOCK_SRC = (cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim() + hof), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW }; - 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); - + LogHelper.CErrorLog($"{tk.SQL_WorkNo}-{tk.SQL_PLineNo} 閫�簱宸ュ崟寮�惎锛岀粦瀹氱殑 闆舵暣 鏍囪"); } - } - } - else - //YwlPETKOutOrder("YWLTKMKQ", "", "PE鍙夎繍");// PE灏忓嚭搴�- { - LogHelper.Info("-鏀剁缉鑶� 鍑哄簱锛�); - var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2鎻愬崌鏈�鏀剁缉鑶� && 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(); - if (!yuworders.Any()) - { - LogHelper.Info("-鏀剁缉鑶� 鍑哄簱锛佹病鏈夊嚭搴撳崟銆�); - return; - } - var ploc = plc.location[0]; - retuse: - var order = yuworders.FirstOrDefault(); - if (yuworders.Count() > 0) - { - //var Cjsj = LocationHelper.GetList<CjTimeOrder>(x => yuworders.Select(c => c.S_CJ_NAME).ToList().Contains(x.S_CJ_NAME) && yuworders.Select(c => c.SQL_ItemCode).ToList().Contains(x.S_ITEM_CODE)); - //if (Cjsj.Count() > 0) + Location Endbit = null; + //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) //{ - // var Cj = Cjsj.OrderBy(e => e.T_CJ_TIME).ToList().FirstOrDefault(); - // order = yuworders.Find(e => e.S_CJ_NAME == Cj.S_CJ_NAME && e.SQL_ItemCode == Cj.S_ITEM_CODE); + // var re = TaskProcess.CreateTransport("", loc.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "鏀剁缉鑶滃弶杩�T2閫�簱", rr_clrel.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); + // LogHelper.CSucessLog($"from {loc.S_LOC_CODE} to {Endbit.S_LOC_CODE} 鏍囩鍙夎繍-T2閫�簱 锛屽垱寤簕re}"); //} - } - if (order != null) - { - var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO); - if (Porder == null) - { - LogHelper.CErrorLog("灏忔按鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); - yuworders.Remove(order); - goto retuse; - } - var oto = new List<string>(); - //if (!string.IsNullOrEmpty(order.TagOver)) - // oto = order.TagOver.Split(',').ToList(); - var oic = order.SQL_ItemCode?.Trim(); - var oin = order.SQL_ItemName?.Trim(); - if (string.IsNullOrEmpty(oic) || string.IsNullOrEmpty(oin)) - { - LogHelper.CErrorLog("灏忔按鍑哄簱锛� + (order.SQL_WorkNo) + "娌℃湁銆愭寚瀹氱墿鏂欙紱"); - goto retuse; - } - LogHelper.Info("-鏀剁缉鑶� 鍑哄簱锛� + oic + oin); - string v = "YWLTKMKQ"; - int ord = -1; - locCntItem StartBit = null; - Location EndBit = null; - CntrItemRel cir = null; var rklist = LocationHelper.GetRowLock(v); - var outlock = rklist.Find(x => x.S_AREA_CODE == v && x.S_LOCK_SRC == (oic + "&" + oin) && x.S_LOCK_STATE.Contains("鍑哄簱閿�)); - var NormalList = LocationHelper.GetAreaNormalLocList(v); - if (outlock != null) - { - NormalList = NormalList.FindAll(x => outlock.N_ROW == (x.N_ROW)); - } - var taglist = new List<string>() { oic }; - foreach (var item in NormalList.GroupBy(X => X.N_ROW).OrderBy(x => x.Key * ord)) - { - locCntItem Temp = null; - var y = item.OrderBy(x => x.N_COL).ToList(); - var lastfull = y.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); - if (lastfull != null) - { - var CNTR = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); - if (!CNTR.Any()) continue; - var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); - if (!cirs.Any()) continue; - cir = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); - LogHelper.Info($"鏀剁缉鑶�鍑哄簱锛亄item.Key}鎺�[{cir.S_ITEM_CODE}-{order.SQL_ItemCode}] [{cir.S_ITEM_NAME}-{order.SQL_ItemName}] [{cir.S_CJ_NAME}-{order.S_CJ_NAME}] {(cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName)}"); - if (cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName) - { - //plg 2025骞�鏈�3鏃�09:08:10 - Temp = new locCntItem - { - N_CURRENT_NUM = lastfull.N_CURRENT_NUM, - S_CNTR_CODE = cir.S_CNTR_CODE, - S_LOC_CODE = lastfull.S_LOC_CODE, - HalfOrFull = (cir.N_BQ_TRAY_TYPE == .5 ? 1 : (cir.N_BQ_TRAY_TYPE == .75 ? 2 : 3)), - S_NOTE = cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim(), - S_CJ_NAME = cir.S_CJ_NAME - }; - if (outlock != null) - { - StartBit = Temp; - break; - } - } - if (Temp != null) - { - if (StartBit == null) - StartBit = Temp; - else if (StartBit.HalfOrFull > Temp.HalfOrFull) - { - StartBit = Temp; - } - if (StartBit.HalfOrFull == 1) break; - } - } - } - if (StartBit != null) - { - var tagLoc = StartBit; - // 鐩存帴鍑烘彁鍗囨満浣�+ int hof = (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3)); - LogHelper.Info(order.SQL_PLineNo + $"-鏀剁缉鑶滃嚭搴擄紒缁堢偣{ploc}-{DeviceProcess.doorStatus[ploc]?.info}"); - if (!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1") + var inlock = rklist.Find(x => x.S_LOCK_SRC == (cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim() + hof) && x.S_LOCK_STATE.Contains("鍏ュ簱閿�)); + Location EndBit = null; + var NormalList = LocationHelper.GetAreaNormalLocList(v); + //鏈夊叆搴撻攣鎺掋� 鑳藉叆灏卞叆銆備笉鑳藉氨绛夈� + if (inlock != null) + { + var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); + foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * -1)) { - var loc = LocationHelper.GetLoc(ploc); - LogHelper.Info(order.SQL_PLineNo + $"-鏀剁缉鑶滃嚭搴擄紒缁堢偣{loc.N_CURRENT_NUM}-{loc.S_LOCK_STATE}"); - if (loc.N_CURRENT_NUM == 0 && loc.S_LOCK_STATE == "鏃�) + var srloclist = rs.OrderBy(x => x.N_COL).ToList(); + var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); + if (lastfull != null) { - var re = TaskProcess.CreateTransport("", tagLoc.S_LOC_CODE.Trim(), loc.S_LOC_CODE, "鏀剁缉鑶滃弶杩�璐ф灦鍑烘彁鍗囨満", new List<string> { tagLoc.S_CNTR_CODE }, StartBit.N_CURRENT_NUM, 1, 1, 62); - LogHelper.CSucessLog($"from {tagLoc.S_LOC_CODE} to {loc.S_LOC_CODE} 鏀剁缉鑶滃弶杩�璐ф灦鍑烘彁鍗囨満 锛屽垱寤簕re} "); - //if (re) - //{ - // oto.Add(oic); - // if (outlock == null) - // { - // var r = new RowLock { S_LOCK_SRC = (StartBit.S_NOTE /*+ StartBit.HalfOrFull*/), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍑哄簱閿�, S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW }; - // db.Insertable(r).ExecuteCommand(); - // } - //} + var c = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); + var xcirs = ContainerHelper.GetCntrItemRel(c.FirstOrDefault().S_CNTR_CODE); + if (!xcirs.Any()) continue; + var xcir = xcirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); + if (cir.S_ITEM_CODE != xcir.S_ITEM_CODE || cir.S_ITEM_NAME != xcir.S_ITEM_NAME || xcir.S_CJ_NAME != cir.S_CJ_NAME) + continue; } + EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, 3) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); + if (EndBit != null) + break; } } else { - LogHelper.Info(order.SQL_PLineNo + "-鏀剁缉鑶� 鍑哄簱锛�娌℃湁鍙敤鐗╂枡"); + 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 * (-1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); + } } - var set1 = new HashSet<string>(oto); - var set2 = new HashSet<string>(taglist); - - if (set1.SetEquals(set2)) + if (EndBit != null) { - //order.OutNum++; + var res = TaskProcess.CreateTransport("", loc.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, "鏀剁缉鑶滃弶杩�鍏ュ簱", new List<string> { cir.S_CNTR_CODE }, 1, EndBit.N_CURRENT_NUM + 1, 1, 62); + LogHelper.CSucessLog($"from {loc.S_LOC_CODE} to {EndBit.S_LOC_CODE} {("鏀剁缉鑶滃弶杩�鍏ュ簱")} 锛屽垱寤簕res} "); - order.OutNum--; - order.TagOverTime = DateTime.Now; - //order.TagOver = string.Empty; - db.Updateable(order).UpdateColumns(it => new { /*it.TagOver,*/it.OutNum, it.TagOverTime }).ExecuteCommand(); - LogHelper.CSucessLog($"{order.SQL_PLineNo}-{order.SQL_LinkLineNO} 鏍囩瀹屾垚銆傞噸缃暟鎹�); + if (res && inlock == null) + { + var r = new RowLock { S_LOCK_SRC = (cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim() + hof), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW }; + 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); + } } } - catch (Exception ex) + else + //YwlPETKOutOrder("YWLTKMKQ", "", "PE鍙夎繍");// PE灏忓嚭搴� { - LogHelper.Error(ex.Message, ex); + LogHelper.Info("-鏀剁缉鑶� 鍑哄簱锛�); + var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2鎻愬崌鏈�鏀剁缉鑶� && 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(); + if (!yuworders.Any()) + { + LogHelper.Info("-鏀剁缉鑶� 鍑哄簱锛佹病鏈夊嚭搴撳崟銆�); + return; + } + var ploc = plc.location[0]; + retuse: + var order = yuworders.FirstOrDefault(); + if (yuworders.Count() > 0) + { + //var Cjsj = LocationHelper.GetList<CjTimeOrder>(x => yuworders.Select(c => c.S_CJ_NAME).ToList().Contains(x.S_CJ_NAME) && yuworders.Select(c => c.SQL_ItemCode).ToList().Contains(x.S_ITEM_CODE)); + //if (Cjsj.Count() > 0) + //{ + // var Cj = Cjsj.OrderBy(e => e.T_CJ_TIME).ToList().FirstOrDefault(); + // order = yuworders.Find(e => e.S_CJ_NAME == Cj.S_CJ_NAME && e.SQL_ItemCode == Cj.S_ITEM_CODE); + //} + } + if (order != null) + { + var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO); + if (Porder == null) + { + LogHelper.CErrorLog("灏忔按鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); + yuworders.Remove(order); + goto retuse; + } + var oto = new List<string>(); + //if (!string.IsNullOrEmpty(order.TagOver)) + // oto = order.TagOver.Split(',').ToList(); + var oic = order.SQL_ItemCode?.Trim(); + var oin = order.SQL_ItemName?.Trim(); + if (string.IsNullOrEmpty(oic) || string.IsNullOrEmpty(oin)) + { + LogHelper.CErrorLog("灏忔按鍑哄簱锛� + (order.SQL_WorkNo) + "娌℃湁銆愭寚瀹氱墿鏂欙紱"); + goto retuse; + } + LogHelper.Info("-鏀剁缉鑶� 鍑哄簱锛� + oic + oin); + + string v = "YWLTKMKQ"; + int ord = -1; + locCntItem StartBit = null; + Location EndBit = null; + CntrItemRel cir = null; + var rklist = LocationHelper.GetRowLock(v); + var outlock = rklist.Find(x => x.S_AREA_CODE == v && x.S_LOCK_SRC == (oic + "&" + oin) && x.S_LOCK_STATE.Contains("鍑哄簱閿�)); + var NormalList = LocationHelper.GetAreaNormalLocList(v); + if (outlock != null) + { + NormalList = NormalList.FindAll(x => outlock.N_ROW == (x.N_ROW)); + } + var taglist = new List<string>() { oic }; + foreach (var item in NormalList.GroupBy(X => X.N_ROW).OrderBy(x => x.Key * ord)) + { + locCntItem Temp = null; + var y = item.OrderBy(x => x.N_COL).ToList(); + var lastfull = y.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); + if (lastfull != null) + { + var CNTR = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); + if (!CNTR.Any()) continue; + var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); + if (!cirs.Any()) continue; + cir = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); + LogHelper.Info($"鏀剁缉鑶�鍑哄簱锛亄item.Key}鎺�[{cir.S_ITEM_CODE}-{order.SQL_ItemCode}] [{cir.S_ITEM_NAME}-{order.SQL_ItemName}] [{cir.S_CJ_NAME}-{order.S_CJ_NAME}] {(cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName)}"); + if (cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName) + { + //plg 2025骞�鏈�3鏃�09:08:10 + Temp = new locCntItem + { + N_CURRENT_NUM = lastfull.N_CURRENT_NUM, + S_CNTR_CODE = cir.S_CNTR_CODE, + S_LOC_CODE = lastfull.S_LOC_CODE, + HalfOrFull = (cir.N_BQ_TRAY_TYPE == .5 ? 1 : (cir.N_BQ_TRAY_TYPE == .75 ? 2 : 3)), + S_NOTE = cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim(), + S_CJ_NAME = cir.S_CJ_NAME + }; + if (outlock != null) + { + StartBit = Temp; + break; + } + } + if (Temp != null) + { + if (StartBit == null) + StartBit = Temp; + else if (StartBit.HalfOrFull > Temp.HalfOrFull) + { + StartBit = Temp; + } + if (StartBit.HalfOrFull == 1) break; + } + } + } + if (StartBit != null) + { + var tagLoc = StartBit; + // 鐩存帴鍑烘彁鍗囨満浣�+ + LogHelper.Info(order.SQL_PLineNo + $"-鏀剁缉鑶滃嚭搴擄紒缁堢偣{ploc}-{DeviceProcess.doorStatus[ploc]?.info}"); + if (!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1") + { + var loc = LocationHelper.GetLoc(ploc); + LogHelper.Info(order.SQL_PLineNo + $"-鏀剁缉鑶滃嚭搴擄紒缁堢偣{loc.N_CURRENT_NUM}-{loc.S_LOCK_STATE}"); + if (loc.N_CURRENT_NUM == 0 && loc.S_LOCK_STATE == "鏃�) + { + var re = TaskProcess.CreateTransport("", tagLoc.S_LOC_CODE.Trim(), loc.S_LOC_CODE, "鏀剁缉鑶滃弶杩�璐ф灦鍑烘彁鍗囨満", new List<string> { tagLoc.S_CNTR_CODE }, StartBit.N_CURRENT_NUM, 1, 1, 62); + LogHelper.CSucessLog($"from {tagLoc.S_LOC_CODE} to {loc.S_LOC_CODE} 鏀剁缉鑶滃弶杩�璐ф灦鍑烘彁鍗囨満 锛屽垱寤簕re} "); + if (re) + { + oto.Add(oic); + //if (outlock == null) + //{ + // var r = new RowLock { S_LOCK_SRC = (StartBit.S_NOTE /*+ StartBit.HalfOrFull*/), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍑哄簱閿�, S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW }; + // db.Insertable(r).ExecuteCommand(); + //} + } + } + } + } + else + { + LogHelper.Info(order.SQL_PLineNo + "-鏀剁缉鑶� 鍑哄簱锛�娌℃湁鍙敤鐗╂枡"); + } + var set1 = new HashSet<string>(oto); + var set2 = new HashSet<string>(taglist); + + if (set1.SetEquals(set2)) + { + //order.OutNum++; + + order.OutNum--; + order.TagOverTime = DateTime.Now; + //order.TagOver = string.Empty; + db.Updateable(order).UpdateColumns(it => new { /*it.TagOver,*/it.OutNum, it.TagOverTime }).ExecuteCommand(); + LogHelper.CSucessLog($"{order.SQL_PLineNo}-{order.SQL_LinkLineNO} 鏍囩瀹屾垚銆傞噸缃暟鎹�); + } + } } - }); + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + } + // }); // Task.WaitAll(task1, task2, task3, task4); LogHelper.CoCo(DateTime.Now + "鏍囩-鎻愭墸-PE鑶� Over=============== ", ConsoleColor.Cyan); } @@ -1875,16 +1882,24 @@ { continue; } - 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 == cir.S_ITEM_CODE && t.S_ITEM_NAME == cir.S_ITEM_NAME && t.S_CJ_NAME == cir.S_CJ_NAME && o.S_AREA_CODE == v2); 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(); Location EndBit = null; var NormalList = LocationHelper.GetAreaNormalLocList(v2); - NormalList = NormalList.FindAll(e => lstCanOutL.Select(c => c.N_ROW).ToList().Contains(e.N_ROW)); + if (lstCanOutL.Any()) + { + var NormalListt = NormalList.FindAll(e => lstCanOutL.Select(c => c.N_ROW).ToList().Contains(e.N_ROW)); + var lastfull = NormalListt.FindAll(x => x.N_CURRENT_NUM > 0).ToList(); + if (lastfull.Count() > 0) + { + NormalList = NormalListt; + } + } + //鏈夊叆搴撻攣鎺掋� 鑳藉叆灏卞叆銆備笉鑳藉氨绛夈� - if (NormalList.Count() > 0) + if (NormalList.Count() > 0 && lstCanOutL.Any()) { var loclist1 = NormalList.ToList(); foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * -1)) @@ -1911,11 +1926,9 @@ LogHelper.CSucessLog($"from {lastfull1.S_LOC_CODE} to {EndBit.S_LOC_CODE} {v3}-閫�簱 锛屽垱寤簕res} "); } - } } } - //鎵ц閫�簱銆傘�銆� Console.WriteLine($"{v.FirstOrDefault()?.S_LOC_CODE} 闇�閫�簱-- 鑷姩閫�簱-鏈疄鐜�); } @@ -2122,39 +2135,61 @@ { NormalList2 = NormalList2.FindAll(e => e.N_ROW == 2).ToList(); } + if (EndBit == null && NormalList2.Count() > 0) + { + var NormalList3 = NormalList2.FindAll(e => e.N_CURRENT_NUM == 0).ToList(); + + var ManLoc = NormalList2.FindAll(e => e.N_CURRENT_NUM > 0).ToList(); + if (ManLoc.Count() > 0) + { + var MaxCol = ManLoc.OrderByDescending(e => e.N_COL).ToList().FirstOrDefault(); + LogHelper.Info($"鎻愭墸鍑哄簱 鑾峰彇鏈�ぇ鍒�{MaxCol.N_COL} "); + NormalList3 = NormalList3.FindAll(e => e.N_COL > MaxCol.N_COL).ToList(); + var srloclist = NormalList3.OrderBy(x => x.N_COL).FirstOrDefault(); + EndBit = srloclist; + } + else + { + var srloclist = NormalList2.OrderBy(x => x.N_COL).FirstOrDefault(); + EndBit = srloclist; + } + } //if (inlock != null) //{ // var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); - foreach (var rs in NormalList2.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) - { - var srloclist = rs.OrderBy(x => x.N_COL).ToList(); - var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); - if (lastfull != null) - { - var CNTR = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); - if (!CNTR.Any()) continue; - if (CNTR.Find(x => x.S_TYPE == BQ_PRA.B) != null) continue; - var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); - if (!cirs.Any()) continue; - var cir2 = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); - if (cir2.S_ITEM_CODE != od.SQL_ItemCode || cir2.S_ITEM_NAME != od.SQL_ItemName || StartBit.HalfOrFull != (cir.N_BQ_TRAY_TYPE == .5 ? 1 : (cir.N_BQ_TRAY_TYPE == .75 ? 2 : 3))) - continue; - EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v3) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); - } - if (EndBit != null) - break; - } + + //foreach (var rs in NormalList2.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) + //{ + // var srloclist = rs.OrderBy(x => x.N_COL).ToList(); + // var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM == 0).LastOrDefault(); + // if (lastfull != null) + // { + // var CNTR = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); + // if (!CNTR.Any()) continue; + // if (CNTR.Find(x => x.S_TYPE == BQ_PRA.B) != null) continue; + // var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); + // if (!cirs.Any()) continue; + // var cir2 = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); + // // if (cir2.S_ITEM_CODE != od.SQL_ItemCode || cir2.S_ITEM_NAME != od.SQL_ItemName || StartBit.HalfOrFull != (cir.N_BQ_TRAY_TYPE == .5 ? 1 : (cir.N_BQ_TRAY_TYPE == .75 ? 2 : 3))) + // //if (cir2.S_ITEM_CODE != od.SQL_ItemCode || cir2.S_ITEM_NAME != od.SQL_ItemName) + // // continue; + // EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v3) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); + // } + // if (EndBit != null) + // break; //} - //else - if (EndBit == null) - { - var hasNum = NormalList2.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); - var EptRowlist = NormalList2.FindAll(x => !hasNum.Contains(x.N_ROW)); - if (EptRowlist.Any()) - { - EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); - } - } + + ////} + ////else + //if (EndBit == null) + //{ + // var hasNum = NormalList2.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); + // var EptRowlist = NormalList2.FindAll(x => !hasNum.Contains(x.N_ROW)); + // if (EptRowlist.Any()) + // { + // EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); + // } + //} //foreach (var item in sLocs.GroupBy(X => X.N_ROW).OrderBy(x => x.Key * ord)) //{ @@ -2292,35 +2327,53 @@ //if (inlock != null) //{ // var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); - - var srloclist = NormalList2.OrderBy(x => x.N_COL).ToList(); - var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); - if (lastfull != null) + if (EndBit == null && NormalList2.Count() > 0) { - var CNTR = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); - if (!CNTR.Any()) continue; - if (CNTR.Find(x => x.S_TYPE == BQ_PRA.B) != null) continue; - var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); - if (!cirs.Any()) continue; - var cir2 = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); - if (cir2.S_ITEM_CODE != od.SQL_ItemCode || cir2.S_ITEM_NAME != od.SQL_ItemName) - continue; - EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v3) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); - } - if (EndBit != null) - break; + var NormalList3 = NormalList2.FindAll(e => e.N_CURRENT_NUM == 0).ToList(); - //} - //else - if (EndBit == null) - { - var hasNum = NormalList2.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); - var EptRowlist = NormalList2.FindAll(x => !hasNum.Contains(x.N_ROW)); - if (EptRowlist.Any()) + var ManLoc = NormalList2.FindAll(e => e.N_CURRENT_NUM > 0).ToList(); + if (ManLoc.Count() > 0) { - EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); + var MaxCol = ManLoc.OrderByDescending(e => e.N_COL).ToList().FirstOrDefault(); + LogHelper.Info($"涓按鍑哄簱 鑾峰彇鏈�ぇ鍒�{MaxCol.N_COL} "); + NormalList3 = NormalList3.FindAll(e => e.N_COL > MaxCol.N_COL).ToList(); + var srloclist = NormalList3.OrderBy(x => x.N_COL).FirstOrDefault(); + EndBit = srloclist; + } + else + { + var srloclist = NormalList2.OrderBy(x => x.N_COL).FirstOrDefault(); + EndBit = srloclist; } } + //var srloclist = NormalList2.OrderBy(x => x.N_COL).ToList(); + //var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); + //if (lastfull != null) + //{ + // var CNTR = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == lastfull.S_LOC_CODE); + // if (!CNTR.Any()) continue; + // if (CNTR.Find(x => x.S_TYPE == BQ_PRA.B) != null) continue; + // var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); + // if (!cirs.Any()) continue; + // var cir2 = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); + // if (cir2.S_ITEM_CODE != od.SQL_ItemCode || cir2.S_ITEM_NAME != od.SQL_ItemName) + // continue; + // EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v3) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); + //} + //if (EndBit != null) + // break; + + ////} + ////else + //if (EndBit == null) + //{ + // var hasNum = NormalList2.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); + // var EptRowlist = NormalList2.FindAll(x => !hasNum.Contains(x.N_ROW)); + // if (EptRowlist.Any()) + // { + // EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); + // } + //} //foreach (var item in sLocs.GroupBy(X => X.N_ROW).OrderBy(x => x.Key * ord)) //{ @@ -2388,6 +2441,7 @@ private static void YwlPETK_CreInwork(List<locCntItem> klocsFirst, string v, string v2, int v1 = 3) { bool ord = v2.Contains("鎻愭墸"); + var db = new SqlHelper<object>().GetInstance(); foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) { Location EndBit = null; @@ -2399,18 +2453,67 @@ 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); - //鏈夊叆搴撻攣鎺掋� 鑳藉叆灏卞叆銆備笉鑳藉氨绛夈� - if (inlock != null) + + //鏌ヨ鏄惁鏈夊凡缁忓叆浜嗙殑鎺�+ 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 == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && t.S_CJ_NAME == rsfull.S_CJ_NAME && o.S_AREA_CODE == v); + 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) { - var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); - foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1))) + //var ProRow = lstCanOutL.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); + ////杩欎簺鎺掕兘鍏ョ殑璐т綅鏁�+ //var EndMum = db.Queryable<Location>().Where(l => l.S_AREA_CODE == v && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "鏃� && ProRow.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList(); + + ////鏌ヨ姣忎竴鎺掓渶澶х殑鍒�灏忎簬杩欎簺鍒楃殑 涓嶅厑璁稿叆 + //foreach (var item in ProRow) + //{ + // var MaxCol = lstCanOutL.FindAll(d => d.N_ROW == item.N_ROW).OrderByDescending(f => f.N_COL).First(); + // EndMum.RemoveAll(f => f.N_ROW == item.N_ROW && f.N_COL < MaxCol.N_COL); + //} + //if (EndMum.Count() > 0) + //{ + //if (lstCanOutL.Count() <= EndMum.Count()) + //{ + // NormalList = NormalList.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); + //} + //var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); + foreach (var rs in lstCanOutL.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 + cntrlist.Count()) <= Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0)); - if (EndBit != null) - break; + + var zuidad = NormalList.FindAll(e => e.N_ROW == srloclist.FirstOrDefault().N_ROW).ToList(); + if (zuidad.Any()) + { + var lastfull = zuidad.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); + var EndBitList = zuidad.FindAll(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)).ToList(); + if (EndBitList.Count() > 0) + { + EndBit = EndBitList.OrderBy(e => e.N_COL).FirstOrDefault(); + if (EndBit != null) + break; + } + } } + if (EndBit == null) + { + 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 + //{ + // 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 { @@ -2421,39 +2524,84 @@ EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); } } + + ////鏈夊叆搴撻攣鎺掋� 鑳藉叆灏卞叆銆備笉鑳藉氨绛夈� + //if (inlock != null) + //{ + // var loclist1 = NormalList.FindAll(x => inlock.N_ROW == (x.N_ROW)); + // var Khw = loclist1.FindAll(f => f.N_CURRENT_NUM == 0).ToList(); + // if (Khw.Count() == 0) + // { + // db.Deleteable(inlock).ExecuteCommand(); + // } + + // 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 + 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(); + // 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(); + // } + //} if (EndBit != null) { 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(); - // } - //} - } + // 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 }; + //if (res && inlock == null) + //{ + // 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(); + // //} + // //} + //} + //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) @@ -4631,7 +4779,11 @@ var db = new SqlHelper<object>().GetInstance(); od.TagOverTime = DateTime.Now; od.TagOver = StartBit.S_AREA_CODE; - var ggf = db.Updateable(od).UpdateColumns(it => new { it.TagOverTime, it.TagOver }).ExecuteCommand(); + if (od.OutNum >= StartBit.N_CURRENT_NUM) + { + od.OutNum = od.OutNum - StartBit.N_CURRENT_NUM; + } + var ggf = db.Updateable(od).UpdateColumns(it => new { it.TagOverTime, it.TagOver, it.OutNum }).ExecuteCommand(); LogHelper.Info($"涓婃彁鍗囨満浠诲姟 鏇存柊宸ュ崟鐨勬椂闂村奖鍝嶈鏁� {ggf}"); var r = new RowLock { S_LOCK_SRC = od.SQL_ItemCode, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍑哄簱閿�, S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW }; @@ -4699,6 +4851,7 @@ } } + // list = new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" }; foreach (var area in list.Distinct()) { var AreaRowlist = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == area && x.N_CURRENT_NUM > 0); diff --git a/HH.WCS.QingXiNongfu/process/DeviceProcess.cs b/HH.WCS.QingXiNongfu/process/DeviceProcess.cs index 3efb1c9..402373f 100644 --- a/HH.WCS.QingXiNongfu/process/DeviceProcess.cs +++ b/HH.WCS.QingXiNongfu/process/DeviceProcess.cs @@ -1757,7 +1757,7 @@ } } - else if (data == "1121")//B鍙e伐浣滀俊鍙�+ else if (data == "1121")//AB鍙e伐浣滀俊鍙� { if (BottlePEMInfoFullTwo(plc, plc.location[0])) { @@ -1998,11 +1998,11 @@ } } private static object locko = new object(); + private static object lockoIn = new object(); + private static object lockoOut = new object(); static bool BottlePEMInfoFullTwo(Settings.deviceInfo plc, string location) { - - try { lock (locko) @@ -2010,6 +2010,8 @@ var chi = new SqlHelper<object>().GetInstance(); var newDb = chi.CopyNew(); Location endBit = null; + Location staBit = null; + bool SentTask = false; if (location == "") { throw new Exception("璐т綅涓虹┖"); @@ -2019,25 +2021,162 @@ { throw new Exception("娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟"); } - if (workOrder.SQL_UsingNow == "Y")//鍗充骇鍗崇敤 + //鍏堟煡璇㈣揣浣嶆湁娌℃湁璐� 婊$殑涓嬫弧 绌虹殑鍒欎笂绌�+ // = 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 != "鏃�) { - //鏌ヨ 鍗婃垚鍝佸尯鍩熻〃 BcpQyOrder - + return false; } - else//闈炲嵆浜у嵆鐢�+ var bcpList = WCSHelper.BcpQyOrderList(plc.deviceName); + if (bcpList.Count() == 0) { - + throw new Exception("鏈垝鍒嗗搴旂殑鍖哄煙 鏌ョ湅杩欎釜浜х嚎鏄惁鍦ㄥ崐鎴愬搧鍖哄煙琛ㄨ繘琛岄厤缃�骞跺惎鐢�); } - if (endBit != null) + if (hojs.N_CURRENT_NUM == 0)//涓婃墭鐩�鍚﹀垯涓嬫墭鐩� { - var _ctrl = LocationHelper.GetLocCntrRel(location); - 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); + //涓婃墭鐩�绌烘 + 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) + { + 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) + { + 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) { @@ -2046,6 +2185,189 @@ } } + /// <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 = "") + { + 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) + { + 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; + } + } + //鐡跺澂婊″叆搴� static bool BottlePEMInfoFull(Settings.deviceInfo plc, string location) diff --git a/HH.WCS.QingXiNongfu/process/TaskProcess.cs b/HH.WCS.QingXiNongfu/process/TaskProcess.cs index fa6bcc9..1fcc535 100644 --- a/HH.WCS.QingXiNongfu/process/TaskProcess.cs +++ b/HH.WCS.QingXiNongfu/process/TaskProcess.cs @@ -417,16 +417,14 @@ goto vvv; } - if (mst.S_TYPE.Trim() == "J绌虹摱鍧�鍑哄簱") - { - mst.S_CNTRS = "J" + Settings.GetTimeStamp(); - } - - if (mst.S_TYPE.Trim() == "F绌虹摱鍧�鍑哄簱") - { - mst.S_CNTRS = "F" + Settings.GetTimeStamp(); - } - + //if (mst.S_TYPE.Trim() == "J绌虹摱鍧�鍑哄簱") + //{ + // mst.S_CNTRS = "J" + Settings.GetTimeStamp(); + //} + //if (mst.S_TYPE.Trim() == "F绌虹摱鍧�鍑哄簱") + //{ + // mst.S_CNTRS = "F" + Settings.GetTimeStamp(); + //} //鎴愬搧绌烘 涓嶉渶瑕佺粦绛� if (!mst.S_TYPE.Trim().Contains("鎴愬搧-绌烘墭涓婄嚎") && mst.S_TYPE.Trim() != "婊$摱鍧�鍏ュ簱" @@ -846,7 +844,6 @@ return true; }); } - } else if (mst.S_TYPE.Trim() == "绌虹摱鍧�鍑哄簱" || mst.S_TYPE.Trim().Contains("鐡剁洊-绌轰笂鏈�) || mst.S_TYPE.Trim().Contains("缈绘枟鏈哄彨婊�)) { @@ -1309,7 +1306,7 @@ "start DD ", start.ToString(), "-", - TRow + FRow }), ""); } else diff --git a/HH.WCS.QingXiNongfu/settings.xml b/HH.WCS.QingXiNongfu/settings.xml index a0d5f42..8bb2509 100644 --- a/HH.WCS.QingXiNongfu/settings.xml +++ b/HH.WCS.QingXiNongfu/settings.xml @@ -61,9 +61,10 @@ <![CDATA[ [ {"address":"10.140.3.164","deviceName":"550","FuLeLineNo":"闈掓邯鎴愬搧浠換X1杈撻�绾�,"deviceNo":[],"location":["CX-2","CX-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, - {"address":"10.140.3.163","deviceName":"娉ㄥ鏈�,"deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, + +{"address":"10.140.9.168","deviceName":"娉ㄥ鏈�,"deviceNo":["","666"],"location":["ZSJ1-1","ZSJ1-2"],"deviceType":8,"enable":1}, - {"address":"10.140.3.175","deviceName":"娉ㄥ鏈�","deviceNo":["","664"],"location":["ZSJ3-1","ZSJ3-2"],"deviceType":8,"enable":1}, + {"address":"10.140.9.169","deviceName":"娉ㄥ鏈�","deviceNo":["","664"],"location":["ZSJ3-1","ZSJ3-2"],"deviceType":8,"enable":1}, {"address":"10.140.3.176","deviceName":"娉ㄥ鏈�","deviceNo":["","666"],"location":["ZSJ4-1","ZSJ4-2"],"deviceType":8,"enable":1}, @@ -87,7 +88,7 @@ {"address":"10.140.3.178","deviceName":"CX4","FuLeLineNo":"闈掓邯鎴愬搧浠換X4杈撻�绾�,"deviceNo":[],"location":["CX4-2","CX4-1"],"areaPriy":["QX-01","QX-02","QX-03","QX-04","QX-05","QX-06","QX-07","QX-08","QX-09","QX-10","QX-11","QX-12","QX-13","QX-14","QX-15","QX-16","QX-19",],"deviceType":9,"enable":1}, - {"address":"10.140.3.165","deviceName":"5L娉ㄥ鏈�,"deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, + {"address":"10.140.9.167","deviceName":"5L娉ㄥ鏈�,"deviceNo":["","665"],"location":["5LZSJ1-1","5LZSJ1-2"],"deviceType":8,"enable":1}, {"address":"10.140.3.167","deviceName":"5L缈绘枟鏈�,"deviceNo":["","998"],"location":["5LFDJ"],"deviceType":5,"enable":1}, {"address":"10.140.3.155","deviceName":"闂╬lc2","deviceNo":["2"],"location":[],"deviceType":1,"enable":1}, @@ -127,7 +128,7 @@ {"address":"10.140.3.187","deviceName":"鐡剁洊5L缈绘枟鏈�,"deviceNo":["","187"],"location":["SXFDJ-1"],"deviceType":10,"areaPriy":["PGMKCK"],"enable":1}, - {"address":"10.140.9.167","deviceName":"T2鎻愬崌鏈�,"deviceNo":[""],"taskPri":50,"location":["YWLT2TSJ"],"areaPriy":["YWLT2TSJCD"],"deviceType":13,"enable":1}, + {"address":"10.140.9.163","deviceName":"T2鎻愬崌鏈�,"deviceNo":[""],"taskPri":50,"location":["YWLT2TSJ"],"areaPriy":["YWLT2TSJCD"],"deviceType":13,"enable":1}, {"address":"10.140.9.168","deviceName":"T1鎻愬崌鏈�,"deviceNo":[""],"taskPri":50,"location":["YWLT1TSJ"],"areaPriy":["YWLT1TSJCD"],"deviceType":13,"enable":1}, ]]]> diff --git a/HH.WCS.QingXiNongfu/wms/WCSHelper.cs b/HH.WCS.QingXiNongfu/wms/WCSHelper.cs index 8904e2a..080ae78 100644 --- a/HH.WCS.QingXiNongfu/wms/WCSHelper.cs +++ b/HH.WCS.QingXiNongfu/wms/WCSHelper.cs @@ -2,6 +2,7 @@ using SqlSugar; using System; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; namespace HH.WCS.QingXigongchang.wms @@ -27,7 +28,16 @@ return order; } - //public static + /// <summary> + /// 鍗婃垚鍝佸尯鍩熻〃 + /// </summary> + /// <param name="lineNo"></param> + /// <returns></returns> + public static List<BcpQyOrder> BcpQyOrderList(string lineNo) + { + var order = new SqlHelper<BcpQyOrder>().GetList(a => a.SQL_PLineNo == lineNo && (a.C_ENABLE == "Y")).OrderByDescending(c => c.N_PRI).ToList(); + return order; + } public static List<WorkOrder> GetWorkOrder(Expression<Func<WorkOrder, bool>> expression) { diff --git a/HH.WCS.QingXiNongfu/wms/WCSModel.cs b/HH.WCS.QingXiNongfu/wms/WCSModel.cs index dba41a6..d91d58b 100644 --- a/HH.WCS.QingXiNongfu/wms/WCSModel.cs +++ b/HH.WCS.QingXiNongfu/wms/WCSModel.cs @@ -292,6 +292,36 @@ /// 浜х嚎鍙� /// </summary> public string SQL_PLineNo { get; set; } + + /// <summary> + /// 搴撳尯 + /// </summary> + public string S_AREA_CODE { get; set; } + + /// <summary> + /// 鎺�+ /// </summary> + public int N_ROW { get; set; } + + /// <summary> + /// 鍗充骇鍗崇敤 N Y --鐜板湪鍙樻垚鏄惁鏄嚜鍔ㄨВ缁�+ /// </summary> + public string SQL_UsingNow { get; set; } + + /// <summary> + /// 鏄惁鍚敤 N Y + /// </summary> + public string C_ENABLE { get; set; } + + /// <summary> + /// 浼樺厛绾�+ /// </summary> + public int N_PRI { get; set; } + + /// <summary> + /// 鎵樼洏绫诲瀷 绌烘/婊℃ + /// </summary> + public string S_CNTR_TYPE { get; set; } } [SuGG("鍘傚鏃堕棿琛�)] diff --git a/HH.WCS.QingXiNongfu/wms/WMSModel.cs b/HH.WCS.QingXiNongfu/wms/WMSModel.cs index 46da2dc..7c84f86 100644 --- a/HH.WCS.QingXiNongfu/wms/WMSModel.cs +++ b/HH.WCS.QingXiNongfu/wms/WMSModel.cs @@ -137,6 +137,8 @@ { get; set; } + + public string C_ENABLE { get; set; } //public string S_DEEP { get; set; } [SugarColumn(IsIgnore = true)] @@ -178,6 +180,7 @@ public string S_TYPE { get; set; } + [SugarColumn(IsIgnore = true)] [Navigate(NavigateType.OneToOne, nameof(S_CNTR_CODE))] public CntrItemRel CntrItemRel { get; set; } -- Gitblit v1.9.1