From 53d582ad41d8450b21045b2d862a532ecc57a9ba Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 26 五月 2025 17:29:57 +0800 Subject: [PATCH] 抽检移库基本测完,添加TCP模拟测试输送线产品下线的逻辑 --- device/TcpClientHelper.cs | 83 +++++++ models/TN_RelocationList_Detail.cs | 24 ++ Program.cs | 18 + device/ProductionLineDevice.cs | 8 /dev/null | 11 - core/Monitor.cs | 202 ++++++++++++++++--- config/config.json | 40 +++ models/TN_SpotCheck_Detail.cs | 30 +++ .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f1cb2527-5e7a-4ff5-bd94-7e85a024df58.vsidx | 0 core/WCSCore.cs | 20 + HH.WCS.Mobox3.DSZSH.csproj | 5 models/TN_Spot_Check.cs | 26 ++ models/TN_Relocation_List.cs | 20 ++ .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/06d8e01f-6afb-4384-90b8-31f0488cd604.vsidx | 0 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/67e4ef9b-7188-43f4-a60f-46c9a1d6bd44.vsidx | 0 util/Settings.cs | 27 ++ api/ApiHelper.cs | 60 +++-- Models/TN_CG_Detail.cs | 8 process/TaskProcess.cs | 16 + .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/21a5a3a3-5cdb-4cd3-a5e2-25be17fb4dfe.vsidx | 0 20 files changed, 500 insertions(+), 98 deletions(-) diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/06d8e01f-6afb-4384-90b8-31f0488cd604.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/06d8e01f-6afb-4384-90b8-31f0488cd604.vsidx new file mode 100644 index 0000000..4d1fb68 --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/06d8e01f-6afb-4384-90b8-31f0488cd604.vsidx Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/21a5a3a3-5cdb-4cd3-a5e2-25be17fb4dfe.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/21a5a3a3-5cdb-4cd3-a5e2-25be17fb4dfe.vsidx new file mode 100644 index 0000000..a87405c --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/21a5a3a3-5cdb-4cd3-a5e2-25be17fb4dfe.vsidx Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/49ec3933-2a6b-4835-ab77-24f5cfc05e26.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/49ec3933-2a6b-4835-ab77-24f5cfc05e26.vsidx deleted file mode 100644 index c0d9b1a..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/49ec3933-2a6b-4835-ab77-24f5cfc05e26.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/67e4ef9b-7188-43f4-a60f-46c9a1d6bd44.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/67e4ef9b-7188-43f4-a60f-46c9a1d6bd44.vsidx new file mode 100644 index 0000000..4d375c1 --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/67e4ef9b-7188-43f4-a60f-46c9a1d6bd44.vsidx Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/72178599-9865-468a-a3b6-7e0cf3fce2a8.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/72178599-9865-468a-a3b6-7e0cf3fce2a8.vsidx deleted file mode 100644 index d2fec1f..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/72178599-9865-468a-a3b6-7e0cf3fce2a8.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/848a02bc-1e77-4a4d-8129-5fd396f4d138.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/848a02bc-1e77-4a4d-8129-5fd396f4d138.vsidx deleted file mode 100644 index 1ab47db..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/848a02bc-1e77-4a4d-8129-5fd396f4d138.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/c30fdd47-6615-4811-b8bd-dfc4b98d2d2f.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/c30fdd47-6615-4811-b8bd-dfc4b98d2d2f.vsidx deleted file mode 100644 index 47a5694..0000000 --- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/c30fdd47-6615-4811-b8bd-dfc4b98d2d2f.vsidx +++ /dev/null Binary files differ diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f1cb2527-5e7a-4ff5-bd94-7e85a024df58.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f1cb2527-5e7a-4ff5-bd94-7e85a024df58.vsidx new file mode 100644 index 0000000..c8264a7 --- /dev/null +++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f1cb2527-5e7a-4ff5-bd94-7e85a024df58.vsidx Binary files differ diff --git a/HH.WCS.Mobox3.DSZSH.csproj b/HH.WCS.Mobox3.DSZSH.csproj index 5b3a82c..09c07a9 100644 --- a/HH.WCS.Mobox3.DSZSH.csproj +++ b/HH.WCS.Mobox3.DSZSH.csproj @@ -236,13 +236,16 @@ <Compile Include="core\WCSCore.cs" /> <Compile Include="core\WMSCore.cs" /> <Compile Include="device\TcpClientHelper.cs" /> + <Compile Include="models\TN_RelocationList_Detail.cs" /> + <Compile Include="models\TN_Relocation_List.cs" /> + <Compile Include="models\TN_SpotCheck_Detail.cs" /> + <Compile Include="models\TN_Spot_Check.cs" /> <Compile Include="process\TaskProcess.cs" /> <Compile Include="util\SqlHelper.cs" /> <Compile Include="models\TN_Container_Item.cs" /> <Compile Include="models\TN_Check_Detail.cs" /> <Compile Include="models\TN_Check_Order.cs" /> <Compile Include="models\TN_Inbound_Order.cs" /> - <Compile Include="models\TN_Order_Task.cs" /> <Compile Include="models\TN_Outbound_Order.cs" /> <Compile Include="models\TN_Outbound_Detail.cs" /> <Compile Include="models\TN_Shift_Detail.cs" /> diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs index f705e15..9a9a2a9 100644 --- a/Models/TN_CG_Detail.cs +++ b/Models/TN_CG_Detail.cs @@ -69,10 +69,10 @@ /// </summary> public string S_QUALITY_GRADE { get; set; } = string.Empty; - /// <summary> - /// 浜х嚎鍙�- /// </summary> - public int N_PRODUCT_LINE { get; set; } = 0; // NOTE 鍚庣画MES鍙兘浼氭彁渚涳紝鍏堝垱寤� + ///// <summary> + ///// 浜х嚎鍙�+ ///// </summary> + //public int N_PRODUCT_LINE { get; set; } = 0; // NOTE 鍚庣画MES鍙兘浼氭彁渚涳紝鍏堝垱寤� // ---------------- diff --git a/Models/TN_Order_Task.cs b/Models/TN_Order_Task.cs deleted file mode 100644 index 58e79b9..0000000 --- a/Models/TN_Order_Task.cs +++ /dev/null @@ -1,11 +0,0 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace HH.WCS.Mobox3.DSZSH.models { - public class TN_Order_Task { - - } -} diff --git a/Program.cs b/Program.cs index e3e9b9b..d8c574e 100644 --- a/Program.cs +++ b/Program.cs @@ -26,6 +26,9 @@ // 4.0 寮�惎Modbus //StartModbus(); + // TCP娴嬭瘯 + //TcpClientHelper.Link("127.0.0.1", 8550); + // 5.0 寮�惎绾跨▼ var rc = HostFactory.Run(x => { x.Service<WorkThread>(s => { @@ -52,7 +55,7 @@ Console.WriteLine("Startup ApiController"); Task.Run(() => { - var url = Settings.WebApiUrl; // 杩愯鏃朵慨鏀�config.json 鏃犳晥 + var url = Settings.WebApiUrl; Console.WriteLine(url); using (WebApp.Start<Startup>(url)) { @@ -67,10 +70,12 @@ /// </summary> private static void StartTcp() { - var tcpServerIP = Settings.TcpServerIp; // 杩愯鏃朵慨鏀�config.json 鏃犳晥 - var tcpServerPort = Settings.TcpServerPort; // 杩愯鏃朵慨鏀�config.json 鏃犳晥 + var tcpServerIP = Settings.TcpServerIp; + var tcpServerPort = Settings.TcpServerPort; new TcpServer(tcpServerIP, tcpServerPort); - + //var res = TcpClientHelper.Init(tcpServerIP, tcpServerPort); + //var res = TcpClientHelper.Init(tcpServerIP, 8550); + //LogHelper.Info($"TcpClient杩炴帴" + (res ? "鎴愬姛" : "澶辫触")); } /// <summary> @@ -97,7 +102,7 @@ private static void StartModbus() { // 鎵�湁鐨凪odbus璁惧 - var allPLCDevice = Settings.ProductionLines; // 杩愯鏃朵慨鏀�config.json 鏃犳晥 + var allPLCDevice = Settings.ProductionLines; if (allPLCDevice.Count > 0) { foreach (var item in allPLCDevice) { @@ -115,6 +120,9 @@ tasks.Add(GetTask(WCSCore.Dispatch)); + // 娴嬭瘯锛氭墭鐩樹笅绾�+ tasks.Add(GetTask(Monitor.CheckInbound)); + // 杞锛氬嚭搴撳崟鐘舵� tasks.Add(GetTask(Monitor.CheckOutboundOrder)); diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index 9c71a92..0d86eb0 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -45,6 +45,7 @@ var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == model.StartLoc) // 鎸囧畾锛氳捣鐐硅揣浣嶅彿 .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 0) // 璧风偣缁戝畾鍓嶆病鏈夊鍣� .First(); if (startLoc == null) { @@ -59,12 +60,6 @@ S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_CNTR_TYPE = "濂借繍绠�, }; - - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { - info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel); - LogHelper.Info(info); - return NewSimpleResult(4, info); - } // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖� var endLoc = db.Queryable<TN_Location>() @@ -87,6 +82,13 @@ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { + if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { + info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel); + tran.RollbackTran(); + LogHelper.Info(info); + return NewSimpleResult(4, info); + } + if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, @@ -266,7 +268,9 @@ // TODO 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 var endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[AreaName.绌烘墭瀛樻斁鍖篯.Contains(a.S_AREA_CODE)) + .Where(l => Settings.AreaMap[AreaName.绌烘墭瀛樻斁鍖篯.Contains(l.S_AREA_CODE)) + .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(a => a.N_CURRENT_NUM == 0) .OrderBy(l => l.N_LAYER) .First(); @@ -361,9 +365,11 @@ // TODO 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 var endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[AreaName.绌虹瀛樻斁鍖篯.Contains(a.S_AREA_CODE)) - .OrderBy(l => l.N_LAYER) - .OrderBy(l => l.S_AREA_CODE).First(); + .Where(l => Settings.AreaMap[AreaName.绌虹瀛樻斁鍖篯.Contains(l.S_AREA_CODE)) + .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(a => a.N_CURRENT_NUM == 0) + .OrderBy(l => new { l.N_LAYER }) + .First(); if (endLoc == null) { return NewSimpleResult(4, $"鏆傛椂娌℃湁绗﹀悎鏉′欢鐨勭粓鐐规斁璐т綅"); @@ -451,10 +457,10 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(a.S_AREA_CODE)) + .Where(l => Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(l.S_AREA_CODE)) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 .First(); if (endLoc == null) { @@ -542,10 +548,10 @@ } var endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(a.S_AREA_CODE)) + .Where(l => Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(l.S_AREA_CODE)) .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE)) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0) + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 0) .First(); if (endLoc == null) { @@ -707,7 +713,8 @@ var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == locCntrRel.S_LOC_CODE) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 1) .First(); if (startLoc == null) { @@ -719,16 +726,16 @@ var endLoc = new TN_Location(); if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[AreaName.婊℃墭瀛樻斁鍖篯.Contains(a.S_AREA_CODE)) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 + .Where(l => Settings.AreaMap[AreaName.婊℃墭瀛樻斁鍖篯.Contains(l.S_AREA_CODE)) + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 .First(); } else if (locCntrRel.S_CNTR_TYPE == "濂借繍绠�) { endLoc = db.Queryable<TN_Location>() - .Where(a => Settings.AreaMap[AreaName.婊$瀛樻斁鍖篯.Contains(a.S_AREA_CODE)) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0) + .Where(l => Settings.AreaMap[AreaName.婊$瀛樻斁鍖篯.Contains(l.S_AREA_CODE)) + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 0) .First(); } else { @@ -827,7 +834,8 @@ var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == locCntrRel.S_LOC_CODE) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 1) .First(); if (startLoc == null) { @@ -839,7 +847,8 @@ var endLoc = db.Queryable<TN_Location>() .Where(l => l.S_AREA_CODE == model.EndArea) .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0).First(); + .Where(a => a.N_CURRENT_NUM == 0) + .First(); if (endLoc == null) { return NewSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); @@ -915,6 +924,7 @@ var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == model.StartLoc) .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 1) .First(); var locCntrRel = db.Queryable<TN_Loc_Container>() diff --git a/config/config.json b/config/config.json index 3aa016c..e40371a 100644 --- a/config/config.json +++ b/config/config.json @@ -128,7 +128,7 @@ "Id": "2", "Name": "鎵樼洏浜х嚎2", "PlcIp": "127.0.0.1", - "PlcPort": 502, + "PlcPort": 503, "SlaveId": 2, "OnLoc": [ "CX21" @@ -141,7 +141,7 @@ "Id": "3", "Name": "濂借繍绠变骇绾�", "PlcIp": "127.0.0.1", - "PlcPort": 502, + "PlcPort": 504, "SlaveId": 3, "OnLoc": [ "CX31" @@ -154,7 +154,7 @@ "Id": "4", "Name": "濂借繍绠变骇绾�", "PlcIp": "127.0.0.1", - "PlcPort": 502, + "PlcPort": 505, "SlaveId": 4, "OnLoc": [ "CX41" @@ -163,5 +163,39 @@ "CX42" ] } + ], + "ProdAgvSite": [ + { + "Code": "work111", + "ProdId": 0 + }, + { + "Code": "work112", + "ProdId": 0 + }, + { + "Code": "work121", + "ProdId": 1 + }, + { + "Code": "work122", + "ProdId": 1 + }, + { + "Code": "work131", + "ProdId": 2 + }, + { + "Code": "work132", + "ProdId": 2 + }, + { + "Code": "work141", + "ProdId": 3 + }, + { + "Code": "work142", + "ProdId": 3 + } ] } \ No newline at end of file diff --git a/core/Monitor.cs b/core/Monitor.cs index 728acbe..ccb2fd5 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -4,37 +4,167 @@ using System.Text; using System.Threading.Tasks; +using HH.WCS.Mobox3.DSZSH.device; using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.util; using HH.WCS.Mobox3.DSZSH.wms; +using Microsoft.Win32; + using Newtonsoft.Json; namespace HH.WCS.Mobox3.DSZSH.core { public class Monitor { + public class ItemData { + public string item_code { get; set; } + public string batch_no { get; set;} + public string cntr_code { get; set; } + } + public static void CheckInbound() { var taskName = TaskName.鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱; var db = new SqlHelper<object>().GetInstance(); var info = ""; try { // 鏌ヤ骇绾挎槸鍚︽湁鐗╂枡淇℃伅 + foreach (var prod in Settings.ProductionLines) { + if (int.Parse(prod.Id) > 1) break; // TEST - var itemCode = ""; - var batchNo = ""; - var cntrCode = ""; - var startLocCode = ""; + //var prodDevice = new ProductionLineDevice(prod); // TODO 寰呴渶姹傜‘瀹氬悗鍐嶅鐞�+ //TcpClientHelper.Link("127.0.0.1", 8550); // 鐢ㄤ簬娴嬭瘯 + TcpClientHelper.Link(prod.PlcIp, prod.PlcPort); - var cgDetail = new TN_CG_Detail { - S_ITEM_CODE = itemCode, - S_BATCH_NO = batchNo, - S_CNTR_CODE = cntrCode, - }; + // TCPClient浼犻�淇℃伅鐨勬椂鍊欙紝涓嶈鐢ㄦ柇鐐归樆濉炵▼搴�+ // {"item_code":"CG1001","batch_no":"BN1001","cntr_code":"CN2505111"} + if (!TcpClientHelper.TryReadProductionLine(out byte[] read)) { + info = $"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}锛氳鍙栦骇绾夸俊鎭け璐�; + LogHelper.Info(info); + continue; + } - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == startLocCode) // 鎸囧畾锛氳捣鐐硅揣浣嶅彿 - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .First(); + // 3. 灏嗗瘎瀛樺櫒鍊艰浆鎹负瀛楄妭鏁扮粍 + //byte[] bytes = TcpClientHelper.ConvertRegistersToBytes(registers); - + // 4. 灏嗗瓧鑺傛暟缁勮浆鎹负瀛楃涓�+ string result = TcpClientHelper.ConvertBytesToString(read); + + //var itemData = BitConverter.ToString(read); + LogHelper.Info($"璇诲彇鐨勪骇绾夸俊鎭瘂result}"); + var data = JsonConvert.DeserializeObject<ItemData>(result); + + LogHelper.Info(JsonConvert.SerializeObject(data)); + + var itemCode = data.item_code; + var batchNo = data.batch_no; + var cntrCode = data.cntr_code; + + var startLocCode = prod.OffLoc[0]; // 鐢ㄤ簬娴嬭瘯 + //var startLocCode = "CX01"; // 鐢ㄤ簬娴嬭瘯 + + var cgDetail = new TN_CG_Detail { + S_ITEM_CODE = itemCode, + S_BATCH_NO = batchNo, + S_CNTR_CODE = cntrCode, + }; + + var startLoc = db.Queryable<TN_Location>() + .Where(l => l.S_CODE == startLocCode) // 鎸囧畾锛氳捣鐐硅揣浣嶅彿 + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 0) + .First(); + + if (startLoc == null) { + info = $"璧风偣浣嶇疆 '{startLocCode}' 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�; + LogHelper.Info(info); + continue; + //return; + } + + // 缁戝畾璐т綅鍜屽鍣ㄥ彿 + var locCntrRel = new TN_Loc_Container { + S_LOC_CODE = startLocCode, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + S_CNTR_TYPE = "鎵樼洏", + }; + + //if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { + // info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel); + // LogHelper.Info(info); + // continue; + // //return; + //} + + // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖�+ var endLoc = db.Queryable<TN_Location>() + .Where(a => Settings.AreaMap[AreaName.绌烘墭瀛樻斁鍖篯.Contains(a.S_AREA_CODE)) + .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(a => a.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 + .OrderBy(l => l.N_LAYER) + .First(); + + if (endLoc == null) { + info = "绌烘墭鍏ュ簱鏆傛椂娌℃湁鍚堥�鐨勮揣浣嶅彲浠ュ叆搴�; + LogHelper.Info(info); + continue; + } + + var cntId = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + + LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ + using (var tran = db.Ado.UseTran()) { + if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"鎻掑叆瀹瑰櫒璐у搧淇℃伅琛ㄥけ璐ワ細鐗╂枡缂栫爜{cgDetail.S_ITEM_CODE}锛屽鍣ㄧ紪鐮亄cgDetail.S_CNTR_CODE}"; + LogHelper.Info(info); + continue; + } + + if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅缂栫爜{locCntrRel.S_LOC_CODE}锛屽鍣ㄧ紪鐮亄locCntrRel.S_CNTR_CODE}"; + LogHelper.Info(info); + continue; + } + + if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { + it.N_LOCK_STATE, + it.S_LOCK_STATE, + it.S_LOCK_OP, + it.T_MODIFY + }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; + LogHelper.Info(info); + continue; + } + + if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { + it.N_LOCK_STATE, + it.S_LOCK_STATE, + it.S_LOCK_OP, + it.T_MODIFY + }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; + LogHelper.Info(info); + continue; + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; + LogHelper.Info(info); + continue; + } + + tran.CommitTran(); + info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; + LogHelper.Info(info); + continue; + } + } } catch (Exception ex) { @@ -107,6 +237,8 @@ var startLoc = db.Queryable<TN_Location>() .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 1) .First(); if (startLoc == null) { @@ -190,7 +322,7 @@ var info = ""; try { - var orderList = db.Queryable<TN_Check_Order>() + var orderList = db.Queryable<TN_Spot_Check>() .Where(c => c.N_B_STATE == 1) .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) .ToList(); @@ -200,22 +332,22 @@ return; } - var detailList = new List<TN_Check_Detail>(); + var detailList = new List<TN_SpotCheck_Detail>(); foreach (var order in orderList) { - var doingCount = db.Queryable<TN_Check_Detail>() - .Count(d => d.S_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_Check_Detail>() - .Count(d => d.S_NO == order.S_NO); + var doingCount = db.Queryable<TN_SpotCheck_Detail>() + .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�+ var allCount = db.Queryable<TN_SpotCheck_Detail>() + .Count(d => d.S_OO_NO == order.S_NO); LogHelper.Info($"杞--{taskName}--缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Check_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable<TN_Spot_Check>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } - var checkDetailList = db.Queryable<TN_Check_Detail>() - .Where(a => a.S_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�+ var checkDetailList = db.Queryable<TN_SpotCheck_Detail>() + .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙� .ToList(); if (checkDetailList.Count == 0) { @@ -258,7 +390,7 @@ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + if (db.Updateable<TN_SpotCheck_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"杞--{taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); continue; @@ -312,7 +444,7 @@ var db = new SqlHelper<object>().GetInstance(); var info = ""; try { - var orderList = db.Queryable<TN_Shift_Order>() + var orderList = db.Queryable<TN_Relocation_List>() .Where(c => c.N_B_STATE == 1) .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) .ToList(); @@ -322,22 +454,22 @@ return; } - var detailList = new List<TN_Shift_Detail>(); + var detailList = new List<TN_RelocationList_Detail>(); foreach (var order in orderList) { - var doingCount = db.Queryable<TN_Shift_Detail>() - .Count(d => d.S_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_Shift_Detail>() - .Count(d => d.S_NO == order.S_NO); + var doingCount = db.Queryable<TN_RelocationList_Detail>() + .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�+ var allCount = db.Queryable<TN_RelocationList_Detail>() + .Count(d => d.S_OO_NO == order.S_NO); LogHelper.Info($"杞--{taskName}--缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}"); if (doingCount == allCount) { order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable<TN_Shift_Order>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + db.Updateable<TN_Relocation_List>(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); continue; } - var checkDetailList = db.Queryable<TN_Shift_Detail>() - .Where(a => a.S_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�+ var checkDetailList = db.Queryable<TN_RelocationList_Detail>() + .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙� .ToList(); if (checkDetailList.Count == 0) { @@ -354,6 +486,8 @@ var startLoc = db.Queryable<TN_Location>() .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 + .Where(l => l.N_CURRENT_NUM == 1) .First(); if (startLoc == null) { @@ -380,7 +514,7 @@ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + if (db.Updateable<TN_RelocationList_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"杞--{taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�); continue; diff --git a/core/WCSCore.cs b/core/WCSCore.cs index 5fbf07f..e5a61f9 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -127,9 +127,19 @@ try { ModbusHelper.Relink(); - var prodLineInfo = Settings.ProductionLines[0]; + //var loc = db.Queryable<TN_Location>() + // .Where(l => l.S_AGV_SITE == model.station_name && Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(l.S_AREA_CODE)) + // .First(); - var prodLineDevice = new ProductionLineDevice(prodLineInfo.PlcIp, prodLineInfo.PlcPort); + if (!Settings.AgvSite_ProdLineCodeMap.TryGetValue(model.station_name, out int prodIndex)) { + info = $"AGV 绔欑偣{model.station_name}涓嶆槸鍚堟硶鐨勪骇绾挎帴椹充綅绔欑偣"; + LogHelper.Info(info); + return NewReturnResult(1, info); + } + + var prodLineInfo = Settings.ProductionLines[prodIndex]; + + var prodLineDevice = new ProductionLineDevice(prodLineInfo); if (!prodLineDevice.LoadDeviceStateOk()) { info = "涓庝骇绾胯澶囬�璁け璐�; LogHelper.Info(info); @@ -155,7 +165,7 @@ return NewReturnResult(3, info); } - if (model.apply_code == "5") { + if (model.apply_code == "5") { // 璇锋眰鍙栬揣 if (prodLineDevice.FullOffline != 1) { info = $"褰撳墠杈撻�绾挎弧鏂欎笅绾夸俊鍙蜂笉涓�锛屾棤娉曞彇璐�; LogHelper.Info(info); @@ -173,7 +183,7 @@ return NewReturnResult(0, info); } - else if (model.apply_code == "1") { + else if (model.apply_code == "1") { // 璇锋眰鍗歌揣 if (prodLineDevice.AllowAgvPlacePallet != 1) { info = $"褰撳墠杈撻�绾垮厑璁告斁鎵樼洏淇″彿涓嶄负1锛屾棤娉曟斁璐�; LogHelper.Info(info); @@ -191,7 +201,7 @@ return NewReturnResult(0, info); } else { - info = $"褰撳墠杈撻�绾垮厑璁�; + info = $"褰撳墠AGV璇锋眰鐮佷笉涓�5鍙栬揣 鎴�1鍗歌揣"; LogHelper.Info(info); return NewReturnResult(8, info); } diff --git a/device/ProductionLineDevice.cs b/device/ProductionLineDevice.cs index 4eaf326..c22a7d7 100644 --- a/device/ProductionLineDevice.cs +++ b/device/ProductionLineDevice.cs @@ -22,10 +22,14 @@ Port = port; Id = id; } + + public ProductionLineDevice(Config.ProductionLine line) { + Ip = line.PlcIp; + Port = line.PlcPort; + Id = line.Id; + } public string Id { get; set; } - - /// <summary> /// 绯荤粺鐘舵�锛�鏈湴 1鑱斿姩(AGV妯″紡) 2鏁呴殰 diff --git a/device/TcpClientHelper.cs b/device/TcpClientHelper.cs index 740887e..bfdcc2c 100644 --- a/device/TcpClientHelper.cs +++ b/device/TcpClientHelper.cs @@ -64,7 +64,6 @@ lock (_linkLock) { try { - // 鑻ocket瀛樺湪浣嗗疄闄呭凡鏂紑锛屽己鍒舵竻鐞� if (_clientSocket != null && (_clientSocket.Poll(0, SelectMode.SelectRead) && _clientSocket.Available == 0)) { SafeCloseSocket(); @@ -72,13 +71,18 @@ // 鍘熸湁閫昏緫 if (_clientSocket != null && _clientSocket.Connected) { - LogHelper.Info($"鐢垫宸茶繛鎺ワ紝鏃犻渶閲嶈繛锛孖P锛歿ip}锛岀鍙o細{port}"); - return false; + //if (ip == _ip && port == _port) { + LogHelper.Info($"浜х嚎宸茶繛鎺ワ紝鏃犻渶閲嶈繛锛孖P锛歿ip}锛岀鍙o細{port}"); + return false; + //} + + //LogHelper.Info($"oldIP={_ip};newIP={ip};oldPort={_port};newPort={port}"); + //SafeCloseSocket(); } return Init(ip, port); } catch (Exception ex) { - LogHelper.Error($"鐢垫閲嶈繛澶辫触锛孖P锛歿ip}锛岀鍙o細{port}锛屽紓甯革細{ex.Message}", ex); + LogHelper.Error($"浜х嚎閲嶈繛澶辫触锛孖P锛歿ip}锛岀鍙o細{port}锛屽紓甯革細{ex.Message}", ex); return false; } } @@ -210,6 +214,77 @@ } } + /// <summary> + /// {\"item_code\":\"CG1001\",\"batch_no\":\"BN1001\",\"cntr_code\":\"CN2505111\"}<br/> + /// {"item_code":"CG1001","batch_no":"BN1001","cntr_code":"CN2505111"} + /// </summary> + /// <param name="read"></param> + /// <returns></returns> + public static bool TryReadProductionLine(out byte[] read) { + read = null; + try { + if (_clientSocket != null && _clientSocket?.Connected == true) { + if (!_receivedDataQueue.TryGetValue($"{_ip}:{_port}", out byte[] result)) { + LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐�); + //read = result; + return false; + } + LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹垚鍔燂細{BitConverter.ToString(result)}"); + read = result; + return true; + } + else { + //LogHelper.Info($"_clientSocket={_clientSocket} connected={_clientSocket?.Connected}"); + Link(_ip, _port); + LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐ワ紙鏈繛鎺ワ級锛屽噯澶囬噸杩�); + return false; + } + } + catch (Exception ex) { + //LogHelper.Error($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐ワ紙鍙戠敓浜嗗紓甯革細{JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", ex); + LogHelper.InfoEx(ex); + return false; + /* 寮傚父澶勭悊 */ + } + + //return false; + } + + /// <summary> + /// 灏哅odbus瀵勫瓨鍣ㄦ暟缁勮浆鎹负瀛楄妭鏁扮粍 + /// </summary> + /// <param name="registers">Modbus瀵勫瓨鍣ㄦ暟缁�/param> + /// <returns>瀛楄妭鏁扮粍</returns> + public static byte[] ConvertRegistersToBytes(ushort[] registers) { + // 姣忎釜瀵勫瓨鍣ㄦ槸16浣�2瀛楄妭)锛屾墍浠ユ�瀛楄妭鏁版槸瀵勫瓨鍣ㄦ暟閲忕殑2鍊�+ byte[] bytes = new byte[registers.Length * 2]; + + for (int i = 0; i < registers.Length; i++) { + // Modbus浣跨敤澶х搴忥紝楂樹綅瀛楄妭鍦ㄥ墠 + bytes[i * 2] = (byte)(registers[i] >> 8); // 楂樹綅瀛楄妭 + bytes[i * 2 + 1] = (byte)(registers[i] & 0xFF); // 浣庝綅瀛楄妭 + } + + return bytes; + } + + /// <summary> + /// 灏嗗瓧鑺傛暟缁勮浆鎹负瀛楃涓�+ /// </summary> + /// <param name="bytes">瀛楄妭鏁扮粍</param> + /// <returns>杞崲鍚庣殑瀛楃涓�/returns> + public static string ConvertBytesToString(byte[] bytes) { + // 鏌ユ壘绗竴涓�x00瀛楄妭(瀛楃涓茬粨鏉熺)鐨勪綅缃�+ int length = Array.IndexOf(bytes, (byte)0); + if (length < 0) length = bytes.Length; // 濡傛灉娌℃湁缁撴潫绗︼紝浣跨敤鍏ㄩ儴瀛楄妭 + + // 鏍规嵁璁惧浣跨敤鐨勭紪鐮佽浆鎹�甯歌鐨勬湁ASCII鎴朥TF-8) + // 杩欓噷浣跨敤ASCII缂栫爜浣滀负绀轰緥锛屽疄闄呭簲鏍规嵁璁惧鏂囨。纭畾缂栫爜鏂瑰紡 + return Encoding.ASCII.GetString(bytes, 0, length); + + // 濡傛灉鏄疷TF-8缂栫爜锛屼娇鐢ㄤ笅闈㈣繖琛屼唬鏇夸笂闈㈤偅琛�+ // return Encoding.UTF8.GetString(bytes, 0, length); + } public static bool WriteElevatorDownOk(byte[] sends) { try { diff --git a/models/TN_RelocationList_Detail.cs b/models/TN_RelocationList_Detail.cs new file mode 100644 index 0000000..1977cb8 --- /dev/null +++ b/models/TN_RelocationList_Detail.cs @@ -0,0 +1,24 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HH.WCS.Mobox3.DSZSH.models { + public class TN_RelocationList_Detail : BaseModel { + public string S_OO_NO { get; set; } + public string S_ITEM_CODE { get; set; } + public string S_ITEM_NAME { get; set; } + + //public string S_LOC_CODE { get; set; } + + public string S_CNTR_CODE { get; set; } + + public string S_BATCH_NO { get; set; } + public string S_END_AREA { get; set; } + /// <summary> + /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 + /// </summary> + public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�+ } +} diff --git a/models/TN_Relocation_List.cs b/models/TN_Relocation_List.cs new file mode 100644 index 0000000..ff76c85 --- /dev/null +++ b/models/TN_Relocation_List.cs @@ -0,0 +1,20 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HH.WCS.Mobox3.DSZSH.models { + public class TN_Relocation_List : BaseModel { + public string S_NO { get; set; } + //public string S_ITEM_CODE { get; set; } + //public string S_ITEM_NAME { get; set; } + //public string S_BATCH_NO { get; set; } + //public int N_COUNT { get; set; } + public string S_END_AREA { get; set; } + /// <summary> + /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 + /// </summary> + public int N_B_STATE { get; set; } = 0; // 鍒涘缓鍚庨渶瑕佺‘璁ゆ墽琛�+ } +} diff --git a/models/TN_SpotCheck_Detail.cs b/models/TN_SpotCheck_Detail.cs new file mode 100644 index 0000000..0765fc1 --- /dev/null +++ b/models/TN_SpotCheck_Detail.cs @@ -0,0 +1,30 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using SqlSugar; + +namespace HH.WCS.Mobox3.DSZSH.models { + /// <summary> + /// 鎶芥鍗曟槑缁�+ /// </summary> + [SugarTable("TN_SpotCheck_Detail")] + public class TN_SpotCheck_Detail : BaseModel { + public string S_OO_NO { get; set; } + public string S_ITEM_CODE { get; set; } + public string S_ITEM_NAME { get; set; } + + //public string S_LOC_CODE { get; set; } + + public string S_CNTR_CODE { get; set; } + + public string S_BATCH_NO { get; set; } + public string S_END_AREA { get; set; } + /// <summary> + /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 + /// </summary> + public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�+ } +} diff --git a/models/TN_Spot_Check.cs b/models/TN_Spot_Check.cs new file mode 100644 index 0000000..9c3302e --- /dev/null +++ b/models/TN_Spot_Check.cs @@ -0,0 +1,26 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using SqlSugar; + +namespace HH.WCS.Mobox3.DSZSH.models { + /// <summary> + /// 鎶芥鍗�+ /// </summary> + [SugarTable("TN_Spot_Check")] + public class TN_Spot_Check : BaseModel { + public string S_NO { get; set; } + //public string S_ITEM_CODE { get; set; } + //public string S_ITEM_NAME { get; set; } + //public string S_BATCH_NO { get; set; } + //public int N_COUNT { get; set; } + public string S_END_AREA { get; set; } + /// <summary> + /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚 + /// </summary> + public int N_B_STATE { get; set; } = 0; // 鍒涘缓鍚庨渶瑕佺‘璁ゆ墽琛�+ } +} diff --git a/process/TaskProcess.cs b/process/TaskProcess.cs index a8a0c33..638f618 100644 --- a/process/TaskProcess.cs +++ b/process/TaskProcess.cs @@ -7,6 +7,7 @@ using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.wms; using HH.WCS.Mobox3.DSZSH; +using HH.WCS.Mobox3.DSZSH.util; namespace HH.WCS.Mobox3.DSZSH.process { internal class TaskProcess { @@ -111,6 +112,9 @@ var result = false; var start = "0"; var end = "0"; var taskType = mst.S_TYPE.Trim(); + + //var db = new SqlHelper<object>().GetInstance(); + if (mst.N_B_STATE == 0) { start = LocationHelper.GetAgvSite(mst.S_START_LOC); end = LocationHelper.GetAgvSite(mst.S_END_LOC); @@ -119,6 +123,18 @@ // end = LocationHelper.GetAgvSite(mst.S_END_LOC, true); //} + // 浠诲姟涓嬪彂鍚庯紝鏃犺AGV鏄惁鎺ュ彈锛宻tate 閮芥槸2浜嗭紝灏辩畻鏆傚仠鏃犳祹浜庝簨 + // 濡傛灉鍚庣画闇�璁╂殏鍋滅殑浠诲姟涓嶅啀鍒嗗彂锛岄偅涔堝繀椤绘敼鍙樼幇鏈夌殑state鍒ゆ柇鏈哄埗 + + //if (mst.S_TYPE == TaskName.绉诲簱) { + // var detail = db.Queryable<TN_RelocationList_Detail>() + // .Where(d => d.S_CNTR_CODE == mst.S_CNTR_CODE).First(); + + // if (detail == null) { + + // } + //} + LogHelper.Info($"NDC鎺ㄩ�浠诲姟 {mst.S_CODE};" + "start=" + start + "end= " + end); var startLoc = LocationHelper.GetLoc(mst.S_START_LOC); var endLoc = LocationHelper.GetLoc(mst.S_END_LOC); diff --git a/util/Settings.cs b/util/Settings.cs index 70de35d..f5b2934 100644 --- a/util/Settings.cs +++ b/util/Settings.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.IO; +using HH.WCS.Mobox3.DSZSH.util; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -16,7 +18,7 @@ public static List<Config.Area> Areas { get; set; } = new List<Config.Area>(); public static List<Config.Task> Tasks { get; set; } = new List<Config.Task>(); public static List<Config.ProductionLine> ProductionLines { get; set; } = new List<Config.ProductionLine>(); - + public static List<Config.ProdAgvSite> ProdAgvSites { get; set; } = new List<Config.ProdAgvSite>(); /// <summary> /// 搴撳尯瀛楀吀锛堝姞杞藉悗灏变笉鍙橈級 /// </summary> @@ -61,6 +63,11 @@ Tasks = root.Tasks; ProductionLines = root.ProductionLines; + ProdAgvSites = root.ProdAgvSite; + foreach (var item in ProdAgvSites) { + AgvSite_ProdLineCodeMap.Add(item.Code, item.ProdId); + } + } catch (FileNotFoundException) { LogHelper.Info("JSON 鏂囦欢鏈壘鍒�); @@ -87,12 +94,16 @@ } private static void LoadProdLines() { - foreach (var prod in ProductionLines) { - - } + //var db = new SqlHelper<object>().GetInstance(); + //for (int i = 0; i < ProductionLines.Count; i++) { + // var line = ProductionLines[i]; + // // 閫氳繃OnLoc OffLoc鎵惧埌AGVsite鐒跺悗鍐欏叆瀛楀吀 + //} } } + + // [Convert JSON to C# Classes Online - Json2CSharp Toolkit](https://json2csharp.com/) public class Config { @@ -100,6 +111,11 @@ public class Area { public string Name { get; set; } public List<string> Codes { get; set; } + } + + public class ProdAgvSite { + public string Code { get; set; } + public int ProdId { get; set; } } public class ProductionLine { @@ -121,6 +137,7 @@ public List<Area> Areas { get; set; } public List<Task> Tasks { get; set; } public List<ProductionLine> ProductionLines { get; set; } + public List<ProdAgvSite> ProdAgvSite { get; set; } } public class Task { @@ -128,6 +145,8 @@ public List<string> StartAreas { get; set; } public List<string> EndAreas { get; set; } } + + } public class AreaName { -- Gitblit v1.9.1