From 4ac70fc8158aff8b27f572ef16a39af5c4d7e271 Mon Sep 17 00:00:00 2001 From: czw <selecti@yeah.net> Date: 星期三, 23 七月 2025 16:41:40 +0800 Subject: [PATCH] 1 --- 2025年6月12日/AuxAllWCS/Scripts/Custom.json | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Custom.json" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Custom.json" index 798418f..d4c81a8 100644 --- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Custom.json" +++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Custom.json" @@ -677,8 +677,8 @@ "Type": "VsCode", "Level": "Item", "Statement": "", - "EditCode": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing GZ.DB.Entity.OIDATABASE;\r\nusing GZ.DB.IRepository.OIDATABASE;\r\nusing GZ.DB.Repository.OIDATABASE;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n public partial class AutoThread\r\n {\r\n\r\n private static AutoThread _instance;\r\n\r\n // 绉佹湁鏋勯�鍑芥暟闃叉澶栭儴瀹炰緥鍖朶r\n private AutoThread() { }\r\n\r\n public static AutoThread Instance\r\n {\r\n get\r\n {\r\n if (_instance == null)\r\n {\r\n _instance = new AutoThread();\r\n }\r\n return _instance;\r\n }\r\n }\r\n\r\n // 绾跨▼瀹夊叏鐨勫鎵樼紦瀛榎r\n private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();\r\n\r\n // 鏂规硶鎵ц鍣╘r\n public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n {\r\n var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n {\r\n // 鑾峰彇鏂规硶淇℃伅\r\n var methodInfo = instance.GetType().GetMethod(\r\n methodName,\r\n BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n if (methodInfo == null)\r\n throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n // 鍒涘缓濮旀墭骞剁紦瀛榎r\n methodDelegate = Delegate.CreateDelegate(\r\n GetDelegateType(methodInfo),\r\n instance,\r\n methodInfo);\r\n\r\n _methodCache.TryAdd(cacheKey, methodDelegate);\r\n }\r\n\r\n // 鎵ц濮旀墭\r\n return methodDelegate.DynamicInvoke(args);\r\n }\r\n\r\n // 鏍规嵁鏂规硶绛惧悕鐢熸垚瀵瑰簲鐨勫鎵樼被鍨媆r\n private static Type GetDelegateType(MethodInfo methodInfo)\r\n {\r\n var parameterTypes = methodInfo.GetParameters()\r\n .Select(p => p.ParameterType)\r\n .ToList();\r\n\r\n if (methodInfo.ReturnType == typeof(void))\r\n {\r\n return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n }\r\n else\r\n {\r\n parameterTypes.Add(methodInfo.ReturnType);\r\n return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 閰嶇疆鍒濆鍖栥�\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n /// <param name=\"action\"></param>\r\n public void ThreadSettingInit(Tag tag, Action action)\r\n {\r\n Console.WriteLine(\"鍒濆鍖栭厤缃�绾跨▼ run \" + tag.Global.SettingsOver);\r\n if (tag.Global.SettingsOver == 0)\r\n {\r\n action?.Invoke();\r\n tag.Global.SettingsOver = 1;\r\n }\r\n else if (Settings.deviceInfos.Count == 0)\r\n {\r\n tag.Global.SettingsOver = 0;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 鎹烽『1 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS1(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS1 鎹烽『1 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『1\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1212_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)\r\n {\r\n //tag.Js1.D1212_LAST = 0; \r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1213_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)\r\n {\r\n //tag.Js1.D1213_LAST = 0;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 鎹烽『2 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS2(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS2 鎹烽『2 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『2\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1212_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)\r\n {\r\n //tag.Js2.D1212_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1213_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)\r\n {\r\n //tag.Js2.D1213_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n //TaskRepository ts = new TaskRepository();\r\n if (tag.wxr1.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R10)\r\n {\r\n tag.wxr1.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R10 = true;\r\n tag.wxr1.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1R 缁村笇灏� 鍙�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr1.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R11)\r\n {\r\n tag.wxr1.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R11 = true;\r\n tag.wxr1.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R10)\r\n {\r\n tag.wxr2.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R10 = true;\r\n tag.wxr2.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2R 缁村笇灏� 鍙�=================> \");\r\n\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R11)\r\n {\r\n tag.wxr2.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R11 = true;\r\n tag.wxr2.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)\r\n {\r\n Console.WriteLine($\"ThreadTaskRun 浠诲姟涓嬪彂 =================> \");\r\n LogHelper.Info(\"ThreadTaskRun 浠诲姟涓嬪彂\");\r\n\r\n ITaskRepository taskservice = new TaskRepository();\r\n try\r\n {\r\n LogHelper.Info(\"浠诲姟涓嬪彂 ARG 浠诲姟 杩涘叆\");\r\n #region AGV浠诲姟涓嬪彂銆俓r\n\r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"AGV\");\r\n if (tklist.Any())\r\n foreach (var tk in tklist.GroupBy(item =>\r\n {\r\n var ticks = item.T_CREATE.Ticks;\r\n return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n }).OrderBy(x => x.Key))\r\n {\r\n var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n foreach (var t in ts)\r\n {\r\n var b = false;\r\n b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);\r\n\r\n if (b)\r\n {\r\n t.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t);\r\n }\r\n }\r\n break;\r\n }\r\n //foreach (var tk in tklist.GroupBy(item =>\r\n //{\r\n // var ticks = item.T_CREATE.Ticks;\r\n // return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n //}).OrderBy(x => x.Key))\r\n //if (tklist.Any())\r\n //{\r\n\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n try\r\n {\r\n #region Rgv\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 鐢甸噺锛氥�{tag.RGV.R褰撳墠鐢甸噺}銆�鍏呯數鐘舵�锛氥�{tag.RGV.R鍏呯數鐘舵�}銆�鏁呴殰浠g爜锛氥�{tag.RGV.RgvrunError}銆慭");\r\n\r\n if (tag.RGV.taskend == 125)\r\n {\r\n System.Threading.Thread.Sleep(3000);\r\n return;\r\n }\r\n LogHelper.Info(\"浠诲姟涓嬪彂 Rgv 浠诲姟 杩涘叆\");\r\n\r\n var task1Isrun = false;\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n {\r\n task1Isrun = true;\r\n //if (tag.RGV.bit1taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n }\r\n var task2Isrun = false;\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n {\r\n task2Isrun = true;\r\n //if (tag.RGV.bit2taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n }\r\n if (task1Isrun || task2Isrun)\r\n {\r\n string mes = \"\";\r\n if (task1Isrun)\r\n mes += tag.RGV.ReadTask1No + \"鎵ц涓�..\";\r\n if (task2Isrun)\r\n mes += tag.RGV.ReadTask2No + \"鎵ц涓�..\";\r\n LogHelper.Info($\"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�\");\r\n System.Threading.Thread.Sleep(3000);\r\n return; \r\n }\r\n var thisOver = 0;\r\n TaskEntity task1 = null;\r\n TaskEntity task2 = null;\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask1No;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{tag.RGV.ReadTask1No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST锛歿tag.RGV.bit1taskOver_LAST}\");\r\n if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n {\r\n if (task1.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 1;\r\n if (task1.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task1.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask1No = 0;\r\n }\r\n else\r\n {\r\n task1.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit1taskOver = 0;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{task1.S_TASK_NO} 鐘舵�鍒囨崲涓簕task1.S_B_STATE}\");\r\n //tag.RGV.bit1taskOver_LAST = 1;\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task1);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV1宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask1No == 0)\r\n {\r\n LogHelper.Info($\"RGV 1宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask2No;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{tag.RGV.ReadTask2No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV2宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST锛歿tag.RGV.bit2taskOver_LAST}\");\r\n if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n {\r\n if (task2.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 2;\r\n if (task2.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task2.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask2No = 0;\r\n }\r\n else\r\n {\r\n task2.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit2taskOver = 0;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{task2.S_TASK_NO} 鐘舵�鍒囨崲涓簕task2.S_B_STATE}\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task2);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV2宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask2No == 0)\r\n {\r\n LogHelper.Info($\"RGV 2宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n\r\n\r\n //if (thisOver > 0)\r\n //{\r\n // var v2 = RedisHelper.Get<WriteGroupEntity>(\"RGVQueue\", out string rev);\r\n // if (v2 != null)\r\n // {\r\n // LogHelper.Info($\"RGVQueue 璇诲埌缁撴灉-{JsonConvert.SerializeObject(v2)} \\n 涓嬪彂鍓嶈繘琛屾竻闄ゃ�\");\r\n // var b = RedisHelper.Remove(\"RGVQueue\", out rev);\r\n // }\r\n //}\r\n\r\n ///1 鏈夎揣 灏� 鍙栥� 1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗竆r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\n if (task1 != null && task1.S_B_STATE != \"瀹屾垚\") //1鏈変换鍔r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 鏈変换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 涔熸湁浠诲姟{task2.S_TASK_NO}銆�寮�宸ヤ綅1 鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n //RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n //Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\");\r\n\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else //1鏈変换鍔� 2 娌′换鍔°� \r\n {\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�\");\r\n\r\n var leftSide = new List<string> { \"1023\", \"1020\" };\r\n var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n bool creT2 = false;\r\n\r\n // 2鍙�浼樺厛缁�1020 1008 1016\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (t2 != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n creT2 = true;\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n ////2 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈塡r\n //else if (leftSide.Contains(task1.S_START_LOC))\r\n //{\r\n // leftSide.Remove(task1.S_START_LOC);\r\n // var lsde = leftSide.FirstOrDefault();\r\n // t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n //else if (RightSide.Contains(task1.S_START_LOC))\r\n //{\r\n // RightSide.Remove(task1.S_START_LOC);\r\n // t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚�1002,1010 鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�125\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n else //1 鐩存帴鍗歌揣銆�\r\n //if (!creT2)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 娌℃湁鍚屼晶鍙栬揣浠诲姟 1宸ヤ綅鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> taskend 鍐�0\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 娌′换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 鏈変换鍔task2.S_TASK_NO}銆傚伐浣�鍗歌揣銆傘�\");\r\n //2 鍗歌揣銆俓r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n LogHelper.Info($\"{task2.S_TASK_NO}> taskend 鍐�25\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else if (tklist.Any()) //1mei 浠诲姟 2 娌′换鍔°�\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆備紭鍏�宸ヤ綅缁堢偣1017浠诲姟銆傘�\");\r\n //銆佷笅 1017浠诲姟 缁�鍙峰伐浣嶃�\r\n //var lss = tklist.Take(2).ToList();\r\n var e1017first = tklist.Find(x => x.S_START_LOC == \"1002\" || x.S_START_LOC == \"1010\" || x.S_START_LOC == \"1023\");\r\n //if (e1017first != null)\r\n //{\r\n // e1017first = tklist.FirstOrDefault();\r\n //}\r\n if (e1017first != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 浠诲姟宸ヤ綅2 娌′换鍔°� 1002 1010 1023鍙栬揣浠诲姟{e1017first.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 1;\r\n uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 杞崲鍚庝换鍔″彿{tno} 寮�鍐欏叆銆俓");\r\n tag.RGV.taskno1 = tno;\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}>寮�鍐欏叆 task1do>>{e1017first.S_START_LOC}銆俓");\r\n tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 鏇存柊浠诲姟銆俓");\r\n e1017first.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(e1017first);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> bit1taskOver_LAST 鍐�\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 鍐�25\");\r\n //tag.RGV.taskend=125\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else\r\n {\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (tklist != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 娌′换鍔″伐浣� 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n }\r\n LogHelper.Info($\"rgv 澶勭悊瀹屾垚銆倀askend 125\");\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n\r\n\r\n public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)\r\n {\r\n Console.WriteLine($\"ThreadGrats 鍏夋爡澶勭悊 =================> \");\r\n var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n TaskActRepository taskActRepository = new TaskActRepository();\r\n TaskRepository taskRepository = new TaskRepository();\r\n var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n foreach (var item in requires)\r\n {\r\n var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n if (tin == -1)\r\n {\r\n item.N_CREATEMETHOD = -1;\r\n taskActRepository.Update(item);\r\n continue;\r\n }\r\n //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n string loc = \"\";\r\n if (tin < 2)\r\n {\r\n loc = item.S_START_LOC;\r\n }\r\n else\r\n {\r\n loc = item.S_END_LOC;\r\n }\r\n if (loc == null) continue; else loc = loc.Trim();\r\n bool goin = tin % 2 == 0;\r\n bool continuuuuu = false;\r\n var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n if (dev != null)\r\n {\r\n var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n //杞﹁蛋浜� 寮�厜鏍匼r\n if (!goin)\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n //杞﹁杩涘叆浜や簰銆俓r\n else\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//璇诲叧闂姸鎬乗r\n if (tf?.ToLower() == \"true\")\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n if (continuuuuu)\r\n {\r\n LogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛乗");\r\n continueTask?.Invoke(new HaiKangOrderInfo\r\n {\r\n reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n taskCode = item.S_TASK_NO\r\n });\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n }\r\n System.Threading.Thread.Sleep(3000);\r\n //閲嶇疆淇″彿\r\n foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, 0) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n /// <summary>\r\n /// 1020 1023绌烘涓嬬嚎\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadEdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadEdown 20 23 = 绌轰笅妫�祴 =================> \");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 绌轰笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇 \");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n try\r\n {\r\n var listtep = new List<string>();\r\n if (Bssx == \"1020\")\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1003 == 1)\r\n {\r\n listtep = new List<string> { \"1012\", \"1004\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1004\", \"1012\" };\r\n }\r\n }\r\n else\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1005 == 1)\r\n {\r\n listtep = new List<string> { \"1014\", \"1006\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1006\", \"1014\" };\r\n }\r\n }\r\n\r\n foreach (var item in listtep)//(Bssx == \"1020\" ? new string[] { \"1004\", \"1012\" } : new string[] { \"1006\", \"1014\" }))\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0 && task == null)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"绌轰笂RGV\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{Bssx}>to {item}寮�鍒涘缓鎴愬姛\");\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n System.Threading.Thread.Sleep(1000);\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Error(ex.Message, ex);\r\n Console.WriteLine(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n\r\n foreach (var item in new string[] { \"1004\", \"1012\", \"1006\", \"1014\", \"1026\", \"1017\" })\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadDdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadDdown 08 10 ==================> 1026\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var item = \"1026\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1026\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg2);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg2);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n public void Thread0210Down(Tag tag)\r\n {\r\n Console.WriteLine($\"Thread0210Down ==================>\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var item = \"1017\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1017\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg1);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg1);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n\r\n public void Thread涓嬫枡浣嶆娴�Tag tag)\r\n {\r\n Console.WriteLine($\"Thread涓嬫枡浣嶆娴� =====>\");\r\n foreach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n {\r\n var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n if (RArrive == 1 && RArriveLast == 0)\r\n {\r\n if (ssx == \"1005\" && tag.SF涓嬫枡浣�WRelease1005 == 0)\r\n {\r\n tag.FNK1.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1005_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1005 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1003\" && tag.SF涓嬫枡浣�WRelease1003 == 0)\r\n {\r\n tag.FNK1.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1003_LAST = 1;\r\n\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1003 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1013\" && tag.SF涓嬫枡浣�WRelease1013 == 0)\r\n {\r\n tag.FNK2.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1013_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1013 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n else if (ssx == \"1011\" && tag.SF涓嬫枡浣�WRelease1011 == 0)\r\n {\r\n tag.FNK2.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1011_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1011 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n }\r\n else if (RArrive == 0 && RArriveLast == 1)\r\n {\r\n RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", $\"FNK1003051113Queue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadFNK1Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK1Over =====>\");\r\n if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n {\r\n tag.FNK1.D2215 = 0;\r\n //tag.FNK1.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1005 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"0\", out msg);\r\n }\r\n if (tag.FNK1.D2216 == 1)\r\n tag.FNK1.D2215 = 0;\r\n else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n //tag.FNK1.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n {\r\n tag.FNK1.D2210 = 0;\r\n //tag.FNK1.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n tag.SF涓嬫枡浣�WRelease1003 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"0\", out msg);\r\n }\r\n //else if (tag.FNK1.D2211 == 1)\r\n // tag.FNK1.D2210 = 0;\r\n else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n {\r\n //tag.FNK1.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK1.D2211 == 1)\r\n tag.FNK1.D2210 = 0;\r\n\r\n }\r\n public void ThreadFNK2Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK2Over =====>\");\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n tag.FNK2.D2215 = 0;\r\n //tag.FNK2.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1013 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n //tag.FNK2.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK2.D2216 == 1)\r\n tag.FNK2.D2215 = 0;\r\n\r\n if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n tag.FNK2.D2210 = 0;\r\n //tag.FNK2.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1011 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n {\r\n //tag.FNK2.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK2.D2211 == 1)\r\n tag.FNK2.D2210 = 0;\r\n\r\n }\r\n\r\n public void Thread1019Down(Tag tag)\r\n {\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}\");\r\n }\r\n public void Thread1025Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}\");\r\n }\r\n public void Thread1022Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1022 =====>\");\r\n Console.WriteLine($\"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}\");\r\n }\r\n public void Thread1030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}\");\r\n }\r\n public void Thread2030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇\");\r\n }\r\n\r\n\r\n }\r\n}\r\n", - "Code": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing GZ.DB.Entity.OIDATABASE;\r\nusing GZ.DB.IRepository.OIDATABASE;\r\nusing GZ.DB.Repository.OIDATABASE;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n public partial class AutoThread\r\n {\r\n\r\n private static AutoThread _instance;\r\n\r\n // 绉佹湁鏋勯�鍑芥暟闃叉澶栭儴瀹炰緥鍖朶r\n private AutoThread() { }\r\n\r\n public static AutoThread Instance\r\n {\r\n get\r\n {\r\n if (_instance == null)\r\n {\r\n _instance = new AutoThread();\r\n }\r\n return _instance;\r\n }\r\n }\r\n\r\n // 绾跨▼瀹夊叏鐨勫鎵樼紦瀛榎r\n private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();\r\n\r\n // 鏂规硶鎵ц鍣╘r\n public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n {\r\n var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n {\r\n // 鑾峰彇鏂规硶淇℃伅\r\n var methodInfo = instance.GetType().GetMethod(\r\n methodName,\r\n BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n if (methodInfo == null)\r\n throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n // 鍒涘缓濮旀墭骞剁紦瀛榎r\n methodDelegate = Delegate.CreateDelegate(\r\n GetDelegateType(methodInfo),\r\n instance,\r\n methodInfo);\r\n\r\n _methodCache.TryAdd(cacheKey, methodDelegate);\r\n }\r\n\r\n // 鎵ц濮旀墭\r\n return methodDelegate.DynamicInvoke(args);\r\n }\r\n\r\n // 鏍规嵁鏂规硶绛惧悕鐢熸垚瀵瑰簲鐨勫鎵樼被鍨媆r\n private static Type GetDelegateType(MethodInfo methodInfo)\r\n {\r\n var parameterTypes = methodInfo.GetParameters()\r\n .Select(p => p.ParameterType)\r\n .ToList();\r\n\r\n if (methodInfo.ReturnType == typeof(void))\r\n {\r\n return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n }\r\n else\r\n {\r\n parameterTypes.Add(methodInfo.ReturnType);\r\n return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 閰嶇疆鍒濆鍖栥�\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n /// <param name=\"action\"></param>\r\n public void ThreadSettingInit(Tag tag, Action action)\r\n {\r\n Console.WriteLine(\"鍒濆鍖栭厤缃�绾跨▼ run \" + tag.Global.SettingsOver);\r\n if (tag.Global.SettingsOver == 0)\r\n {\r\n action?.Invoke();\r\n tag.Global.SettingsOver = 1;\r\n }\r\n else if (Settings.deviceInfos.Count == 0)\r\n {\r\n tag.Global.SettingsOver = 0;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 鎹烽『1 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS1(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS1 鎹烽『1 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『1\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1212_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)\r\n {\r\n //tag.Js1.D1212_LAST = 0; \r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1213_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)\r\n {\r\n //tag.Js1.D1213_LAST = 0;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 鎹烽『2 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS2(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS2 鎹烽『2 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『2\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1212_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)\r\n {\r\n //tag.Js2.D1212_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1213_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)\r\n {\r\n //tag.Js2.D1213_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n //TaskRepository ts = new TaskRepository();\r\n if (tag.wxr1.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R10)\r\n {\r\n tag.wxr1.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R10 = true;\r\n tag.wxr1.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1R 缁村笇灏� 鍙�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr1.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R11)\r\n {\r\n tag.wxr1.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R11 = true;\r\n tag.wxr1.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R10)\r\n {\r\n tag.wxr2.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R10 = true;\r\n tag.wxr2.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2R 缁村笇灏� 鍙�=================> \");\r\n\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R11)\r\n {\r\n tag.wxr2.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R11 = true;\r\n tag.wxr2.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)\r\n {\r\n Console.WriteLine($\"ThreadTaskRun 浠诲姟涓嬪彂 =================> \");\r\n LogHelper.Info(\"ThreadTaskRun 浠诲姟涓嬪彂\");\r\n\r\n ITaskRepository taskservice = new TaskRepository();\r\n try\r\n {\r\n LogHelper.Info(\"浠诲姟涓嬪彂 ARG 浠诲姟 杩涘叆\");\r\n #region AGV浠诲姟涓嬪彂銆俓r\n\r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"AGV\");\r\n if (tklist.Any())\r\n foreach (var tk in tklist.GroupBy(item =>\r\n {\r\n var ticks = item.T_CREATE.Ticks;\r\n return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n }).OrderBy(x => x.Key))\r\n {\r\n var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n foreach (var t in ts)\r\n {\r\n var b = false;\r\n b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);\r\n\r\n if (b)\r\n {\r\n t.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t);\r\n }\r\n }\r\n break;\r\n }\r\n //foreach (var tk in tklist.GroupBy(item =>\r\n //{\r\n // var ticks = item.T_CREATE.Ticks;\r\n // return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n //}).OrderBy(x => x.Key))\r\n //if (tklist.Any())\r\n //{\r\n\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n try\r\n {\r\n #region Rgv\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 鐢甸噺锛氥�{tag.RGV.R褰撳墠鐢甸噺}銆�鍏呯數鐘舵�锛氥�{tag.RGV.R鍏呯數鐘舵�}銆�鏁呴殰浠g爜锛氥�{tag.RGV.RgvrunError}銆慭");\r\n\r\n if (tag.RGV.taskend == 125)\r\n {\r\n System.Threading.Thread.Sleep(3000);\r\n return;\r\n }\r\n LogHelper.Info(\"浠诲姟涓嬪彂 Rgv 浠诲姟 杩涘叆\");\r\n\r\n var task1Isrun = false;\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n {\r\n task1Isrun = true;\r\n //if (tag.RGV.bit1taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n }\r\n var task2Isrun = false;\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n {\r\n task2Isrun = true;\r\n //if (tag.RGV.bit2taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n }\r\n if (task1Isrun || task2Isrun)\r\n {\r\n string mes = \"\";\r\n if (task1Isrun)\r\n mes += tag.RGV.ReadTask1No + \"鎵ц涓�..\";\r\n if (task2Isrun)\r\n mes += tag.RGV.ReadTask2No + \"鎵ц涓�..\";\r\n LogHelper.Info($\"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�\");\r\n System.Threading.Thread.Sleep(3000);\r\n return; \r\n }\r\n var thisOver = 0;\r\n TaskEntity task1 = null;\r\n TaskEntity task2 = null;\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask1No;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{tag.RGV.ReadTask1No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST锛歿tag.RGV.bit1taskOver_LAST}\");\r\n if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n {\r\n if (task1.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 1;\r\n if (task1.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task1.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask1No = 0;\r\n }\r\n else\r\n {\r\n task1.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit1taskOver = 0;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{task1.S_TASK_NO} 鐘舵�鍒囨崲涓簕task1.S_B_STATE}\");\r\n //tag.RGV.bit1taskOver_LAST = 1;\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task1);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV1宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask1No == 0)\r\n {\r\n LogHelper.Info($\"RGV 1宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask2No;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{tag.RGV.ReadTask2No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV2宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST锛歿tag.RGV.bit2taskOver_LAST}\");\r\n if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n {\r\n if (task2.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 2;\r\n if (task2.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task2.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask2No = 0;\r\n }\r\n else\r\n {\r\n task2.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit2taskOver = 0;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{task2.S_TASK_NO} 鐘舵�鍒囨崲涓簕task2.S_B_STATE}\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task2);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV2宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask2No == 0)\r\n {\r\n LogHelper.Info($\"RGV 2宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n\r\n\r\n //if (thisOver > 0)\r\n //{\r\n // var v2 = RedisHelper.Get<WriteGroupEntity>(\"RGVQueue\", out string rev);\r\n // if (v2 != null)\r\n // {\r\n // LogHelper.Info($\"RGVQueue 璇诲埌缁撴灉-{JsonConvert.SerializeObject(v2)} \\n 涓嬪彂鍓嶈繘琛屾竻闄ゃ�\");\r\n // var b = RedisHelper.Remove(\"RGVQueue\", out rev);\r\n // }\r\n //}\r\n\r\n ///1 鏈夎揣 灏� 鍙栥� 1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗竆r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\n if (task1 != null && task1.S_B_STATE != \"瀹屾垚\") //1鏈変换鍔r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 鏈変换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 涔熸湁浠诲姟{task2.S_TASK_NO}銆�寮�宸ヤ綅1 鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n //RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n //Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\");\r\n\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else //1鏈変换鍔� 2 娌′换鍔°� \r\n {\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�\");\r\n\r\n var leftSide = new List<string> { \"1023\", \"1020\" };\r\n var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n bool creT2 = false;\r\n\r\n // 2鍙�浼樺厛缁�1020 1008 1016\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (t2 != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n creT2 = true;\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n ////2 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈塡r\n //else if (leftSide.Contains(task1.S_START_LOC))\r\n //{\r\n // leftSide.Remove(task1.S_START_LOC);\r\n // var lsde = leftSide.FirstOrDefault();\r\n // t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n //else if (RightSide.Contains(task1.S_START_LOC))\r\n //{\r\n // RightSide.Remove(task1.S_START_LOC);\r\n // t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚�1002,1010 鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�125\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n else //1 鐩存帴鍗歌揣銆�\r\n //if (!creT2)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 娌℃湁鍚屼晶鍙栬揣浠诲姟 1宸ヤ綅鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> taskend 鍐�0\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 娌′换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 鏈変换鍔task2.S_TASK_NO}銆傚伐浣�鍗歌揣銆傘�\");\r\n //2 鍗歌揣銆俓r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n LogHelper.Info($\"{task2.S_TASK_NO}> taskend 鍐�25\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else if (tklist.Any()) //1mei 浠诲姟 2 娌′换鍔°�\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆備紭鍏�宸ヤ綅缁堢偣1017浠诲姟銆傘�\");\r\n //銆佷笅 1017浠诲姟 缁�鍙峰伐浣嶃�\r\n //var lss = tklist.Take(2).ToList();\r\n var e1017first = tklist.Find(x => x.S_START_LOC == \"1002\" || x.S_START_LOC == \"1010\" || x.S_START_LOC == \"1023\");\r\n //if (e1017first != null)\r\n //{\r\n // e1017first = tklist.FirstOrDefault();\r\n //}\r\n if (e1017first != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 浠诲姟宸ヤ綅2 娌′换鍔°� 1002 1010 1023鍙栬揣浠诲姟{e1017first.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 1;\r\n uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 杞崲鍚庝换鍔″彿{tno} 寮�鍐欏叆銆俓");\r\n tag.RGV.taskno1 = tno;\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}>寮�鍐欏叆 task1do>>{e1017first.S_START_LOC}銆俓");\r\n tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 鏇存柊浠诲姟銆俓");\r\n e1017first.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(e1017first);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> bit1taskOver_LAST 鍐�\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 鍐�25\");\r\n //tag.RGV.taskend=125\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else\r\n {\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (tklist != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 娌′换鍔″伐浣� 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n }\r\n LogHelper.Info($\"rgv 澶勭悊瀹屾垚銆倀askend 125\");\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n\r\n\r\n public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)\r\n {\r\n Console.WriteLine($\"ThreadGrats 鍏夋爡澶勭悊 =================> \");\r\n var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n TaskActRepository taskActRepository = new TaskActRepository();\r\n TaskRepository taskRepository = new TaskRepository();\r\n var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n foreach (var item in requires)\r\n {\r\n var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n if (tin == -1)\r\n {\r\n item.N_CREATEMETHOD = -1;\r\n taskActRepository.Update(item);\r\n continue;\r\n }\r\n //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n string loc = \"\";\r\n if (tin < 2)\r\n {\r\n loc = item.S_START_LOC;\r\n }\r\n else\r\n {\r\n loc = item.S_END_LOC;\r\n }\r\n if (loc == null) continue; else loc = loc.Trim();\r\n bool goin = tin % 2 == 0;\r\n bool continuuuuu = false;\r\n var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n if (dev != null)\r\n {\r\n var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n //杞﹁蛋浜� 寮�厜鏍匼r\n if (!goin)\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n //杞﹁杩涘叆浜や簰銆俓r\n else\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//璇诲叧闂姸鎬乗r\n if (tf?.ToLower() == \"true\")\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n if (continuuuuu)\r\n {\r\n LogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛乗");\r\n continueTask?.Invoke(new HaiKangOrderInfo\r\n {\r\n reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n taskCode = item.S_TASK_NO\r\n });\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n }\r\n System.Threading.Thread.Sleep(3000);\r\n //閲嶇疆淇″彿\r\n foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, 0) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n /// <summary>\r\n /// 1020 1023绌烘涓嬬嚎\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadEdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadEdown 20 23 = 绌轰笅妫�祴 =================> \");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 绌轰笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇 \");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n try\r\n {\r\n var listtep = new List<string>();\r\n if (Bssx == \"1020\")\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1003 == 1)\r\n {\r\n listtep = new List<string> { \"1012\", \"1004\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1004\", \"1012\" };\r\n }\r\n }\r\n else\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1005 == 1)\r\n {\r\n listtep = new List<string> { \"1014\", \"1006\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1006\", \"1014\" };\r\n }\r\n }\r\n\r\n foreach (var item in listtep)//(Bssx == \"1020\" ? new string[] { \"1004\", \"1012\" } : new string[] { \"1006\", \"1014\" }))\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0 && task == null)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"绌轰笂RGV\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{Bssx}>to {item}寮�鍒涘缓鎴愬姛\");\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n System.Threading.Thread.Sleep(1000);\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Error(ex.Message, ex);\r\n Console.WriteLine(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n\r\n foreach (var item in new string[] { \"1004\", \"1012\", \"1006\", \"1014\", \"1026\", \"1017\" })\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadDdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadDdown 08 10 ==================> 1026\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var item = \"1026\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1026\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg2);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg2);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n public void Thread0210Down(Tag tag)\r\n {\r\n Console.WriteLine($\"Thread0210Down ==================>\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var item = \"1017\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1017\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg1);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg1);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n\r\n public void Thread涓嬫枡浣嶆娴�Tag tag)\r\n {\r\n Console.WriteLine($\"Thread涓嬫枡浣嶆娴� =====>\");\r\n foreach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n {\r\n var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n if (RArrive == 1 && RArriveLast == 0)\r\n {\r\n if (ssx == \"1005\" && tag.SF涓嬫枡浣�WRelease1005 == 0)\r\n {\r\n tag.FNK1.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1005_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1005 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1003\" && tag.SF涓嬫枡浣�WRelease1003 == 0)\r\n {\r\n tag.FNK1.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1003_LAST = 1;\r\n\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1003 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1013\" && tag.SF涓嬫枡浣�WRelease1013 == 0)\r\n {\r\n tag.FNK2.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1013_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1013 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n else if (ssx == \"1011\" && tag.SF涓嬫枡浣�WRelease1011 == 0)\r\n {\r\n tag.FNK2.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1011_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1011 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n }\r\n else if (RArrive == 0 && RArriveLast == 1)\r\n {\r\n RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", $\"FNK1003051113Queue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadFNK1Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK1Over =====>\");\r\n if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n {\r\n tag.FNK1.D2215 = 0;\r\n //tag.FNK1.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1005 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"0\", out msg);\r\n }\r\n if (tag.FNK1.D2216 == 1)\r\n tag.FNK1.D2215 = 0;\r\n else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n //tag.FNK1.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n {\r\n tag.FNK1.D2210 = 0;\r\n //tag.FNK1.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n tag.SF涓嬫枡浣�WRelease1003 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"0\", out msg);\r\n }\r\n //else if (tag.FNK1.D2211 == 1)\r\n // tag.FNK1.D2210 = 0;\r\n else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n {\r\n //tag.FNK1.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK1.D2211 == 1)\r\n tag.FNK1.D2210 = 0;\r\n\r\n }\r\n public void ThreadFNK2Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK2Over =====>\");\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n tag.FNK2.D2215 = 0;\r\n //tag.FNK2.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1013 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n //tag.FNK2.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK2.D2216 == 1)\r\n tag.FNK2.D2215 = 0;\r\n\r\n if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n tag.FNK2.D2210 = 0;\r\n //tag.FNK2.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1011 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n {\r\n //tag.FNK2.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK2.D2211 == 1)\r\n tag.FNK2.D2210 = 0;\r\n\r\n }\r\n\r\n public void Thread1019Down(Tag tag)\r\n {\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}\");\r\n }\r\n public void Thread1025Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}\");\r\n }\r\n public void Thread1022Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1022 =====>\");\r\n Console.WriteLine($\"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}\");\r\n }\r\n public void Thread1030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}\");\r\n }\r\n public void Thread2030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇\");\r\n }\r\n\r\n\r\n }\r\n}\r\n", + "EditCode": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing GZ.DB.Entity.OIDATABASE;\r\nusing GZ.DB.IRepository.OIDATABASE;\r\nusing GZ.DB.Repository.OIDATABASE;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n public static class ExtendClass\r\n {\r\n public static void Disnull(this TaskRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n public static void Disnull(this LocRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n public static void Disnull(this TaskActRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n public static void Disnull(this SYSRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n }\r\n public partial class AutoThread\r\n {\r\n\r\n private static AutoThread _instance;\r\n\r\n // 绉佹湁鏋勯�鍑芥暟闃叉澶栭儴瀹炰緥鍖朶r\n private AutoThread() { }\r\n\r\n public static AutoThread Instance\r\n {\r\n get\r\n {\r\n if (_instance == null)\r\n {\r\n _instance = new AutoThread();\r\n }\r\n return _instance;\r\n }\r\n }\r\n\r\n // 绾跨▼瀹夊叏鐨勫鎵樼紦瀛榎r\n private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();\r\n\r\n // 鏂规硶鎵ц鍣╘r\n public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n {\r\n var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n {\r\n // 鑾峰彇鏂规硶淇℃伅\r\n var methodInfo = instance.GetType().GetMethod(\r\n methodName,\r\n BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n if (methodInfo == null)\r\n throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n // 鍒涘缓濮旀墭骞剁紦瀛榎r\n methodDelegate = Delegate.CreateDelegate(\r\n GetDelegateType(methodInfo),\r\n instance,\r\n methodInfo);\r\n\r\n _methodCache.TryAdd(cacheKey, methodDelegate);\r\n }\r\n\r\n // 鎵ц濮旀墭\r\n return methodDelegate.DynamicInvoke(args);\r\n }\r\n\r\n // 鏍规嵁鏂规硶绛惧悕鐢熸垚瀵瑰簲鐨勫鎵樼被鍨媆r\n private static Type GetDelegateType(MethodInfo methodInfo)\r\n {\r\n var parameterTypes = methodInfo.GetParameters()\r\n .Select(p => p.ParameterType)\r\n .ToList();\r\n\r\n if (methodInfo.ReturnType == typeof(void))\r\n {\r\n return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n }\r\n else\r\n {\r\n parameterTypes.Add(methodInfo.ReturnType);\r\n return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 閰嶇疆鍒濆鍖栥�\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n /// <param name=\"action\"></param>\r\n public void ThreadSettingInit(Tag tag, Action action)\r\n {\r\n Console.WriteLine(\"鍒濆鍖栭厤缃�绾跨▼ run \" + tag.Global.SettingsOver);\r\n if (tag.Global.SettingsOver == 0)\r\n {\r\n action?.Invoke();\r\n tag.Global.SettingsOver = 1;\r\n }\r\n else if (Settings.deviceInfos.Count == 0)\r\n {\r\n tag.Global.SettingsOver = 0;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 鎹烽『1 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS1(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS1 鎹烽『1 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『1\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1212_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)\r\n {\r\n //tag.Js1.D1212_LAST = 0; \r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1213_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)\r\n {\r\n //tag.Js1.D1213_LAST = 0;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 鎹烽『2 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS2(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS2 鎹烽『2 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『2\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1212_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)\r\n {\r\n //tag.Js2.D1212_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1213_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)\r\n {\r\n //tag.Js2.D1213_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n //TaskRepository ts = new TaskRepository();\r\n if (tag.wxr1.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R10)\r\n {\r\n tag.wxr1.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R10 = true;\r\n tag.wxr1.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1R 缁村笇灏� 鍙�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr1.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R11)\r\n {\r\n tag.wxr1.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R11 = true;\r\n tag.wxr1.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R10)\r\n {\r\n tag.wxr2.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R10 = true;\r\n tag.wxr2.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2R 缁村笇灏� 鍙�=================> \");\r\n\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R11)\r\n {\r\n tag.wxr2.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R11 = true;\r\n tag.wxr2.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)\r\n {\r\n Console.WriteLine($\"ThreadTaskRun 浠诲姟涓嬪彂 =================> \");\r\n LogHelper.Info(\"ThreadTaskRun 浠诲姟涓嬪彂\");\r\n\r\n ITaskRepository taskservice = new TaskRepository();\r\n try\r\n {\r\n LogHelper.Info(\"浠诲姟涓嬪彂 ARG 浠诲姟 杩涘叆\");\r\n #region AGV浠诲姟涓嬪彂銆俓r\n\r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"AGV\");\r\n if (tklist.Any())\r\n foreach (var tk in tklist.GroupBy(item =>\r\n {\r\n var ticks = item.T_CREATE.Ticks;\r\n return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n }).OrderBy(x => x.Key))\r\n {\r\n var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n foreach (var t in ts)\r\n {\r\n var b = false;\r\n b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);\r\n\r\n if (b)\r\n {\r\n t.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t);\r\n }\r\n }\r\n break;\r\n }\r\n //foreach (var tk in tklist.GroupBy(item =>\r\n //{\r\n // var ticks = item.T_CREATE.Ticks;\r\n // return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n //}).OrderBy(x => x.Key))\r\n //if (tklist.Any())\r\n //{\r\n\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n try\r\n {\r\n #region Rgv\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 鐢甸噺锛氥�{tag.RGV.R褰撳墠鐢甸噺}銆�鍏呯數鐘舵�锛氥�{tag.RGV.R鍏呯數鐘舵�}銆�鏁呴殰浠g爜锛氥�{tag.RGV.RgvrunError}銆慭");\r\n\r\n if (tag.RGV.taskend == 125)\r\n {\r\n System.Threading.Thread.Sleep(3000);\r\n return;\r\n }\r\n LogHelper.Info(\"浠诲姟涓嬪彂 Rgv 浠诲姟 杩涘叆\");\r\n\r\n var task1Isrun = false;\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n {\r\n task1Isrun = true;\r\n //if (tag.RGV.bit1taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n }\r\n var task2Isrun = false;\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n {\r\n task2Isrun = true;\r\n //if (tag.RGV.bit2taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n }\r\n if (task1Isrun || task2Isrun)\r\n {\r\n string mes = \"\";\r\n if (task1Isrun)\r\n mes += tag.RGV.ReadTask1No + \"鎵ц涓�..\";\r\n if (task2Isrun)\r\n mes += tag.RGV.ReadTask2No + \"鎵ц涓�..\";\r\n LogHelper.Info($\"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�\");\r\n System.Threading.Thread.Sleep(3000);\r\n return; \r\n }\r\n var thisOver = 0;\r\n TaskEntity task1 = null;\r\n TaskEntity task2 = null;\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask1No;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{tag.RGV.ReadTask1No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST锛歿tag.RGV.bit1taskOver_LAST}\");\r\n if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n {\r\n if (task1.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 1;\r\n if (task1.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task1.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask1No = 0;\r\n }\r\n else\r\n {\r\n task1.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit1taskOver = 0;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{task1.S_TASK_NO} 鐘舵�鍒囨崲涓簕task1.S_B_STATE}\");\r\n //tag.RGV.bit1taskOver_LAST = 1;\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task1);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV1宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask1No == 0)\r\n {\r\n LogHelper.Info($\"RGV 1宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask2No;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{tag.RGV.ReadTask2No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV2宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST锛歿tag.RGV.bit2taskOver_LAST}\");\r\n if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n {\r\n if (task2.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 2;\r\n if (task2.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task2.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask2No = 0;\r\n }\r\n else\r\n {\r\n task2.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit2taskOver = 0;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{task2.S_TASK_NO} 鐘舵�鍒囨崲涓簕task2.S_B_STATE}\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task2);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV2宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask2No == 0)\r\n {\r\n LogHelper.Info($\"RGV 2宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n\r\n\r\n //if (thisOver > 0)\r\n //{\r\n // var v2 = RedisHelper.Get<WriteGroupEntity>(\"RGVQueue\", out string rev);\r\n // if (v2 != null)\r\n // {\r\n // LogHelper.Info($\"RGVQueue 璇诲埌缁撴灉-{JsonConvert.SerializeObject(v2)} \\n 涓嬪彂鍓嶈繘琛屾竻闄ゃ�\");\r\n // var b = RedisHelper.Remove(\"RGVQueue\", out rev);\r\n // }\r\n //}\r\n\r\n ///1 鏈夎揣 灏� 鍙栥� 1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗竆r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\n if (task1 != null && task1.S_B_STATE != \"瀹屾垚\") //1鏈変换鍔r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 鏈変换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 涔熸湁浠诲姟{task2.S_TASK_NO}銆�寮�宸ヤ綅1 鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n //RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n //Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\");\r\n\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else //1鏈変换鍔� 2 娌′换鍔°� \r\n {\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�\");\r\n\r\n var leftSide = new List<string> { \"1023\", \"1020\" };\r\n var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n bool creT2 = false;\r\n\r\n // 2鍙�浼樺厛缁�1020 1008 1016\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (t2 != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n creT2 = true;\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n ////2 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈塡r\n //else if (leftSide.Contains(task1.S_START_LOC))\r\n //{\r\n // leftSide.Remove(task1.S_START_LOC);\r\n // var lsde = leftSide.FirstOrDefault();\r\n // t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n //else if (RightSide.Contains(task1.S_START_LOC))\r\n //{\r\n // RightSide.Remove(task1.S_START_LOC);\r\n // t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚�1002,1010 鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�125\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n else //1 鐩存帴鍗歌揣銆�\r\n //if (!creT2)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 娌℃湁鍚屼晶鍙栬揣浠诲姟 1宸ヤ綅鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> taskend 鍐�0\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 娌′换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 鏈変换鍔task2.S_TASK_NO}銆傚伐浣�鍗歌揣銆傘�\");\r\n //2 鍗歌揣銆俓r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n LogHelper.Info($\"{task2.S_TASK_NO}> taskend 鍐�25\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else if (tklist.Any()) //1mei 浠诲姟 2 娌′换鍔°�\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆備紭鍏�宸ヤ綅缁堢偣1017浠诲姟銆傘�\");\r\n //銆佷笅 1017浠诲姟 缁�鍙峰伐浣嶃�\r\n //var lss = tklist.Take(2).ToList();\r\n var e1017first = tklist.Find(x => x.S_START_LOC == \"1002\" || x.S_START_LOC == \"1010\" || x.S_START_LOC == \"1023\");\r\n //if (e1017first != null)\r\n //{\r\n // e1017first = tklist.FirstOrDefault();\r\n //}\r\n if (e1017first != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 浠诲姟宸ヤ綅2 娌′换鍔°� 1002 1010 1023鍙栬揣浠诲姟{e1017first.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 1;\r\n uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 杞崲鍚庝换鍔″彿{tno} 寮�鍐欏叆銆俓");\r\n tag.RGV.taskno1 = tno;\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}>寮�鍐欏叆 task1do>>{e1017first.S_START_LOC}銆俓");\r\n tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 鏇存柊浠诲姟銆俓");\r\n e1017first.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(e1017first);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> bit1taskOver_LAST 鍐�\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 鍐�25\");\r\n //tag.RGV.taskend=125\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else\r\n {\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (tklist != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 娌′换鍔″伐浣� 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n }\r\n LogHelper.Info($\"rgv 澶勭悊瀹屾垚銆倀askend 125\");\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n\r\n\r\n public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)\r\n {\r\n Console.WriteLine($\"ThreadGrats 鍏夋爡澶勭悊 =================> \");\r\n var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n TaskActRepository taskActRepository = new TaskActRepository();\r\n TaskRepository taskRepository = new TaskRepository();\r\n var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n foreach (var item in requires)\r\n {\r\n var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n if (tin == -1)\r\n {\r\n item.N_CREATEMETHOD = -1;\r\n taskActRepository.Update(item);\r\n continue;\r\n }\r\n //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n string loc = \"\";\r\n if (tin < 2)\r\n {\r\n loc = item.S_START_LOC;\r\n }\r\n else\r\n {\r\n loc = item.S_END_LOC;\r\n }\r\n if (loc == null) continue; else loc = loc.Trim();\r\n bool goin = tin % 2 == 0;\r\n bool continuuuuu = false;\r\n var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n if (dev != null)\r\n {\r\n var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n //杞﹁蛋浜� 寮�厜鏍匼r\n if (!goin)\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n //杞﹁杩涘叆浜や簰銆俓r\n else\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//璇诲叧闂姸鎬乗r\n if (tf?.ToLower() == \"true\")\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n if (continuuuuu)\r\n {\r\n LogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛乗");\r\n continueTask?.Invoke(new HaiKangOrderInfo\r\n {\r\n reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n taskCode = item.S_TASK_NO\r\n });\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n }\r\n System.Threading.Thread.Sleep(3000);\r\n //閲嶇疆淇″彿\r\n foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, 0) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n /// <summary>\r\n /// 1020 1023绌烘涓嬬嚎\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadEdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadEdown 20 23 = 绌轰笅妫�祴 =================> \");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 绌轰笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇 \");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n try\r\n {\r\n var listtep = new List<string>();\r\n if (Bssx == \"1020\")\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1003 == 1)\r\n {\r\n listtep = new List<string> { \"1012\", \"1004\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1004\", \"1012\" };\r\n }\r\n }\r\n else\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1005 == 1)\r\n {\r\n listtep = new List<string> { \"1014\", \"1006\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1006\", \"1014\" };\r\n }\r\n }\r\n\r\n foreach (var item in listtep)//(Bssx == \"1020\" ? new string[] { \"1004\", \"1012\" } : new string[] { \"1006\", \"1014\" }))\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0 && task == null)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"绌轰笂RGV\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{Bssx}>to {item}寮�鍒涘缓鎴愬姛\");\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n System.Threading.Thread.Sleep(1000);\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Error(ex.Message, ex);\r\n Console.WriteLine(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n\r\n foreach (var item in new string[] { \"1004\", \"1012\", \"1006\", \"1014\", \"1026\", \"1017\" })\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadDdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadDdown 08 10 ==================> 1026\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var item = \"1026\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1026\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg2);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg2);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n public void Thread0210Down(Tag tag)\r\n {\r\n Console.WriteLine($\"Thread0210Down ==================>\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var item = \"1017\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1017\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg1);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg1);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n\r\n public void Thread涓嬫枡浣嶆娴�Tag tag)\r\n {\r\n Console.WriteLine($\"Thread涓嬫枡浣嶆娴� =====>\");\r\n foreach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n {\r\n var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n if (RArrive == 1 && RArriveLast == 0)\r\n {\r\n if (ssx == \"1005\" && tag.SF涓嬫枡浣�WRelease1005 == 0)\r\n {\r\n tag.FNK1.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1005_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1005 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1003\" && tag.SF涓嬫枡浣�WRelease1003 == 0)\r\n {\r\n tag.FNK1.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1003_LAST = 1;\r\n\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1003 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1013\" && tag.SF涓嬫枡浣�WRelease1013 == 0)\r\n {\r\n tag.FNK2.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1013_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1013 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n else if (ssx == \"1011\" && tag.SF涓嬫枡浣�WRelease1011 == 0)\r\n {\r\n tag.FNK2.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1011_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1011 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n }\r\n else if (RArrive == 0 && RArriveLast == 1)\r\n {\r\n RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", $\"FNK1003051113Queue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadFNK1Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK1Over =====>\");\r\n if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n {\r\n tag.FNK1.D2215 = 0;\r\n //tag.FNK1.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1005 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"0\", out msg);\r\n }\r\n if (tag.FNK1.D2216 == 1)\r\n tag.FNK1.D2215 = 0;\r\n else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n //tag.FNK1.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n {\r\n tag.FNK1.D2210 = 0;\r\n //tag.FNK1.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n tag.SF涓嬫枡浣�WRelease1003 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"0\", out msg);\r\n }\r\n //else if (tag.FNK1.D2211 == 1)\r\n // tag.FNK1.D2210 = 0;\r\n else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n {\r\n //tag.FNK1.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK1.D2211 == 1)\r\n tag.FNK1.D2210 = 0;\r\n\r\n }\r\n public void ThreadFNK2Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK2Over =====>\");\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n tag.FNK2.D2215 = 0;\r\n //tag.FNK2.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1013 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n //tag.FNK2.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK2.D2216 == 1)\r\n tag.FNK2.D2215 = 0;\r\n\r\n if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n tag.FNK2.D2210 = 0;\r\n //tag.FNK2.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1011 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n {\r\n //tag.FNK2.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK2.D2211 == 1)\r\n tag.FNK2.D2210 = 0;\r\n\r\n }\r\n\r\n public void Thread1019Down(Tag tag)\r\n {\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}\");\r\n }\r\n public void Thread1025Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}\");\r\n }\r\n public void Thread1022Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1022 =====>\");\r\n Console.WriteLine($\"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}\");\r\n }\r\n public void Thread1030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}\");\r\n }\r\n public void Thread2030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇\");\r\n }\r\n\r\n\r\n }\r\n}\r\n", + "Code": "using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Concurrent;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing GZ.Modular.Redis;\r\nusing GZ.DB.Entity.OIDATABASE;\r\nusing GZ.DB.IRepository.OIDATABASE;\r\nusing GZ.DB.Repository.OIDATABASE;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement;\r\nusing System.Windows.Interop;\r\nusing static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n public static class ExtendClass\r\n {\r\n public static void Disnull(this TaskRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n public static void Disnull(this LocRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n public static void Disnull(this TaskActRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n public static void Disnull(this SYSRepository repository)\r\n {\r\n repository.dbcontext.Dispose();\r\n repository = null;\r\n }\r\n }\r\n public partial class AutoThread\r\n {\r\n\r\n private static AutoThread _instance;\r\n\r\n // 绉佹湁鏋勯�鍑芥暟闃叉澶栭儴瀹炰緥鍖朶r\n private AutoThread() { }\r\n\r\n public static AutoThread Instance\r\n {\r\n get\r\n {\r\n if (_instance == null)\r\n {\r\n _instance = new AutoThread();\r\n }\r\n return _instance;\r\n }\r\n }\r\n\r\n // 绾跨▼瀹夊叏鐨勫鎵樼紦瀛榎r\n private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();\r\n\r\n // 鏂规硶鎵ц鍣╘r\n public static object InvokeMethod(object instance, string methodName, params object[] args)\r\n {\r\n var cacheKey = $\"{instance.GetType().FullName}_{methodName}\";\r\n\r\n if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))\r\n {\r\n // 鑾峰彇鏂规硶淇℃伅\r\n var methodInfo = instance.GetType().GetMethod(\r\n methodName,\r\n BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r\n\r\n if (methodInfo == null)\r\n throw new MissingMethodException($\"Method {methodName} not found\");\r\n\r\n // 鍒涘缓濮旀墭骞剁紦瀛榎r\n methodDelegate = Delegate.CreateDelegate(\r\n GetDelegateType(methodInfo),\r\n instance,\r\n methodInfo);\r\n\r\n _methodCache.TryAdd(cacheKey, methodDelegate);\r\n }\r\n\r\n // 鎵ц濮旀墭\r\n return methodDelegate.DynamicInvoke(args);\r\n }\r\n\r\n // 鏍规嵁鏂规硶绛惧悕鐢熸垚瀵瑰簲鐨勫鎵樼被鍨媆r\n private static Type GetDelegateType(MethodInfo methodInfo)\r\n {\r\n var parameterTypes = methodInfo.GetParameters()\r\n .Select(p => p.ParameterType)\r\n .ToList();\r\n\r\n if (methodInfo.ReturnType == typeof(void))\r\n {\r\n return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());\r\n }\r\n else\r\n {\r\n parameterTypes.Add(methodInfo.ReturnType);\r\n return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 閰嶇疆鍒濆鍖栥�\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n /// <param name=\"action\"></param>\r\n public void ThreadSettingInit(Tag tag, Action action)\r\n {\r\n Console.WriteLine(\"鍒濆鍖栭厤缃�绾跨▼ run \" + tag.Global.SettingsOver);\r\n if (tag.Global.SettingsOver == 0)\r\n {\r\n action?.Invoke();\r\n tag.Global.SettingsOver = 1;\r\n }\r\n else if (Settings.deviceInfos.Count == 0)\r\n {\r\n tag.Global.SettingsOver = 0;\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 鎹烽『1 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS1(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS1 鎹烽『1 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『1\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1212_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)\r\n {\r\n //tag.Js1.D1212_LAST = 0; \r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js1.D1213_LAST = 1;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)\r\n {\r\n //tag.Js1.D1213_LAST = 0;\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 鎹烽『2 淇″彿澶勭悊\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadJS2(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadJS2 鎹烽『2 淇″彿澶勭悊 =================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == \"Js鎹烽『2\");\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[0]\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1212_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)\r\n {\r\n //tag.Js2.D1212_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 4,\r\n endBit = VERX.location[1]\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n //tag.Js2.D1213_LAST = 1;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"1\", out string msg);\r\n }\r\n }\r\n if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)\r\n {\r\n //tag.Js2.D1213_LAST = 0;\r\n\r\n RedisHelper.Add($\"Js鎹烽『1.D1213_LAST\", \"0\", out string msg);\r\n }\r\n }\r\n }\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n //TaskRepository ts = new TaskRepository();\r\n if (tag.wxr1.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R10)\r\n {\r\n tag.wxr1.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R10 = true;\r\n tag.wxr1.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr1R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1R 缁村笇灏� 鍙�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"1\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr1.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr1.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr1.R11)\r\n {\r\n tag.wxr1.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr1.R11 = true;\r\n tag.wxr1.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 宸r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2L 缁村笇灏� 宸�=================> \");\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[0],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R44_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R10)\r\n {\r\n tag.wxr2.R10_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R10 = true;\r\n tag.wxr2.R44_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /// <summary>\r\n /// 缁村笇灏� 鍙砛r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void Threadwxr2R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2R 缁村笇灏� 鍙�=================> \");\r\n\r\n var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains(\"2\"));\r\n\r\n if (VERX != null)\r\n {\r\n if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)\r\n {\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n {\r\n requestType = 1,\r\n cntrCode = traycode,\r\n startBit = VERX.location[1],\r\n endBit = \"\"\r\n }));\r\n LogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n if (str.Contains(\"true\"))\r\n {\r\n tag.wxr2.R46_LAST = true;\r\n }\r\n }\r\n else\r\n {\r\n TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\"));\r\n }\r\n }\r\n else\r\n {\r\n if (tag.wxr2.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�\r\n {\r\n if (tag.wxr2.R11)\r\n {\r\n tag.wxr2.R11_LAST = false;\r\n }\r\n else\r\n if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))\r\n {\r\n //涓婃姤鏍¢獙銆俓r\n ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + \"mom-basic/dataTransmission/json/service/202\", requestJson);\r\n var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n {\r\n sceneType = 1,\r\n cntrCode = traycode,\r\n }));\r\n if (str.Contains(\"true\"))\r\n {\r\n //Conn.榛樿Redis.SetValue(\"缁村笇灏旀姄鑷�.R10\", \"true\", \"缁村笇灏旀姄鑷�Queue\");\r\n tag.wxr2.R11 = true;\r\n tag.wxr2.R46_LAST = false;\r\n }\r\n else\r\n {\r\n //鎶ヨ銆俓r\n }\r\n }\r\n else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin(\"544F4E\")); }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)\r\n {\r\n Console.WriteLine($\"ThreadTaskRun 浠诲姟涓嬪彂 =================> \");\r\n LogHelper.Info(\"ThreadTaskRun 浠诲姟涓嬪彂\");\r\n\r\n ITaskRepository taskservice = new TaskRepository();\r\n try\r\n {\r\n LogHelper.Info(\"浠诲姟涓嬪彂 ARG 浠诲姟 杩涘叆\");\r\n #region AGV浠诲姟涓嬪彂銆俓r\n\r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"AGV\");\r\n if (tklist.Any())\r\n foreach (var tk in tklist.GroupBy(item =>\r\n {\r\n var ticks = item.T_CREATE.Ticks;\r\n return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n }).OrderBy(x => x.Key))\r\n {\r\n var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();\r\n foreach (var t in ts)\r\n {\r\n var b = false;\r\n b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);\r\n\r\n if (b)\r\n {\r\n t.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t);\r\n }\r\n }\r\n break;\r\n }\r\n //foreach (var tk in tklist.GroupBy(item =>\r\n //{\r\n // var ticks = item.T_CREATE.Ticks;\r\n // return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));\r\n //}).OrderBy(x => x.Key))\r\n //if (tklist.Any())\r\n //{\r\n\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n try\r\n {\r\n #region Rgv\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 鐢甸噺锛氥�{tag.RGV.R褰撳墠鐢甸噺}銆�鍏呯數鐘舵�锛氥�{tag.RGV.R鍏呯數鐘舵�}銆�鏁呴殰浠g爜锛氥�{tag.RGV.RgvrunError}銆慭");\r\n\r\n if (tag.RGV.taskend == 125)\r\n {\r\n System.Threading.Thread.Sleep(3000);\r\n return;\r\n }\r\n LogHelper.Info(\"浠诲姟涓嬪彂 Rgv 浠诲姟 杩涘叆\");\r\n\r\n var task1Isrun = false;\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)\r\n {\r\n task1Isrun = true;\r\n //if (tag.RGV.bit1taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n }\r\n var task2Isrun = false;\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)\r\n {\r\n task2Isrun = true;\r\n //if (tag.RGV.bit2taskOver_LAST == 1)\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n }\r\n if (task1Isrun || task2Isrun)\r\n {\r\n string mes = \"\";\r\n if (task1Isrun)\r\n mes += tag.RGV.ReadTask1No + \"鎵ц涓�..\";\r\n if (task2Isrun)\r\n mes += tag.RGV.ReadTask2No + \"鎵ц涓�..\";\r\n LogHelper.Info($\"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�\");\r\n System.Threading.Thread.Sleep(3000);\r\n return; \r\n }\r\n var thisOver = 0;\r\n TaskEntity task1 = null;\r\n TaskEntity task2 = null;\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask1No;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{tag.RGV.ReadTask1No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST锛歿tag.RGV.bit1taskOver_LAST}\");\r\n if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)\r\n {\r\n if (task1.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 1;\r\n if (task1.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task1.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask1No = 0;\r\n }\r\n else\r\n {\r\n task1.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit1taskOver = 0;\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟{task1.S_TASK_NO} 鐘舵�鍒囨崲涓簕task1.S_B_STATE}\");\r\n //tag.RGV.bit1taskOver_LAST = 1;\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task1);\r\n LogHelper.Info($\"RGV 1宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV1宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask1No == 0)\r\n {\r\n LogHelper.Info($\"RGV 1宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆媆");\r\n if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)\r\n {\r\n var taskno = tag.RGV.ReadTask2No;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{tag.RGV.ReadTask2No}\");\r\n string tno = \"TN\" + (DateTime.Now.ToString(\"yy\")) + ((taskno.ToString()).PadLeft(8, '0'));\r\n task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);\r\n\r\n LogHelper.Info($\"RGV2宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST锛歿tag.RGV.bit2taskOver_LAST}\");\r\n if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)\r\n {\r\n if (task2.S_B_STATE != \"瀹屾垚\")\r\n {\r\n thisOver = 2;\r\n if (task2.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n {\r\n task2.S_B_STATE = \"瀹屾垚\";\r\n tag.RGV.ReadTask2No = 0;\r\n }\r\n else\r\n {\r\n task2.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n }\r\n tag.RGV.bit2taskOver = 0;\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟{task2.S_TASK_NO} 鐘舵�鍒囨崲涓簕task2.S_B_STATE}\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"1\", out string msg);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鍐欏鐞哱");\r\n taskservice.Update(task2);\r\n LogHelper.Info($\"RGV 2宸ヤ綅浠诲姟鏇存柊銆俓");\r\n }\r\n else\r\n {\r\n LogHelper.Info(\"RGV2宸ヤ綅浠诲姟宸茬粡瀹屾垚銆俓");\r\n }\r\n }\r\n }\r\n else if (tag.RGV.ReadTask2No == 0)\r\n {\r\n LogHelper.Info($\"RGV 2宸ヤ綅娌℃湁浠诲姟銆媆");\r\n }\r\n\r\n\r\n\r\n //if (thisOver > 0)\r\n //{\r\n // var v2 = RedisHelper.Get<WriteGroupEntity>(\"RGVQueue\", out string rev);\r\n // if (v2 != null)\r\n // {\r\n // LogHelper.Info($\"RGVQueue 璇诲埌缁撴灉-{JsonConvert.SerializeObject(v2)} \\n 涓嬪彂鍓嶈繘琛屾竻闄ゃ�\");\r\n // var b = RedisHelper.Remove(\"RGVQueue\", out rev);\r\n // }\r\n //}\r\n\r\n ///1 鏈夎揣 灏� 鍙栥� 1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗竆r\n var tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\n if (task1 != null && task1.S_B_STATE != \"瀹屾垚\") //1鏈変换鍔r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 鏈変换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 涔熸湁浠诲姟{task2.S_TASK_NO}銆�寮�宸ヤ綅1 鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n //RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n //Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\");\r\n\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else //1鏈変换鍔� 2 娌′换鍔°� \r\n {\r\n\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�\");\r\n\r\n var leftSide = new List<string> { \"1023\", \"1020\" };\r\n var RightSide = new List<string> { \"1002\", \"1008\", \"1010\", \"1016\" };\r\n bool creT2 = false;\r\n\r\n // 2鍙�浼樺厛缁�1020 1008 1016\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (t2 != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n creT2 = true;\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n ////2 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈塡r\n //else if (leftSide.Contains(task1.S_START_LOC))\r\n //{\r\n // leftSide.Remove(task1.S_START_LOC);\r\n // var lsde = leftSide.FirstOrDefault();\r\n // t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n //else if (RightSide.Contains(task1.S_START_LOC))\r\n //{\r\n // RightSide.Remove(task1.S_START_LOC);\r\n // t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != \"1017\");\r\n // if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆俓r\n // {\r\n // LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚�1002,1010 鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n // tag.RGV.workMod = 2;\r\n // tag.RGV.taskmod = 1;\r\n // tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n // tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n // t2.S_B_STATE = \"宸叉帹閫乗";\r\n // taskservice.Update(t2);\r\n // creT2 = true;\r\n // System.Threading.Thread.Sleep(750);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�125\");\r\n // RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n // LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n // Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n // }\r\n //}\r\n else //1 鐩存帴鍗歌揣銆�\r\n //if (!creT2)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 娌℃湁鍚屼晶鍙栬揣浠诲姟 1宸ヤ綅鍗歌揣銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));\r\n tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{task1.S_TASK_NO}> taskend 鍐�0\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (task2 != null && task2.S_B_STATE != \"瀹屾垚\")// 1 娌′换鍔� 2 鏈変换鍔°� \r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 鏈変换鍔task2.S_TASK_NO}銆傚伐浣�鍗歌揣銆傘�\");\r\n //2 鍗歌揣銆俓r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 2;\r\n tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{task2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n //tag.RGV.taskend = 125;\r\n LogHelper.Info($\"{task2.S_TASK_NO}> taskend 鍐�25\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else if (tklist.Any()) //1mei 浠诲姟 2 娌′换鍔°�\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆備紭鍏�宸ヤ綅缁堢偣1017浠诲姟銆傘�\");\r\n //銆佷笅 1017浠诲姟 缁�鍙峰伐浣嶃�\r\n //var lss = tklist.Take(2).ToList();\r\n var e1017first = tklist.Find(x => x.S_START_LOC == \"1002\" || x.S_START_LOC == \"1010\" || x.S_START_LOC == \"1023\");\r\n //if (e1017first != null)\r\n //{\r\n // e1017first = tklist.FirstOrDefault();\r\n //}\r\n if (e1017first != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 浠诲姟宸ヤ綅2 娌′换鍔°� 1002 1010 1023鍙栬揣浠诲姟{e1017first.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 1;\r\n tag.RGV.taskmod = 1;\r\n uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 杞崲鍚庝换鍔″彿{tno} 寮�鍐欏叆銆俓");\r\n tag.RGV.taskno1 = tno;\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}>寮�鍐欏叆 task1do>>{e1017first.S_START_LOC}銆俓");\r\n tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> 鏇存柊浠诲姟銆俓");\r\n e1017first.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(e1017first);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> bit1taskOver_LAST 鍐�\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 鍐�25\");\r\n //tag.RGV.taskend=125\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n else\r\n {\r\n var t2 = tklist.OrderBy(x => x.T_CREATE).ToList().Find(x => x.S_START_LOC == \"1020\" || x.S_START_LOC == \"1008\" || x.S_START_LOC == \"1016\");\r\n if (tklist != null)\r\n {\r\n LogHelper.Info($\"鏌ョ湅RGV1 娌′换鍔″伐浣� 娌′换鍔°� 鎵�020 1008 1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆俓");\r\n tag.RGV.workMod = 2;\r\n tag.RGV.taskmod = 1;\r\n tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));\r\n tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);\r\n t2.S_B_STATE = \"宸叉帹閫乗";\r\n taskservice.Update(t2);\r\n System.Threading.Thread.Sleep(750);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0\");\r\n RedisHelper.Add($\"RGV.bit2taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{t2.S_TASK_NO}> end 鍐�125\");\r\n Conn.榛樿Redis.SetValue(\"RGV.taskend\", \"125\", \"RGVQueue\", false);\r\n }\r\n }\r\n }\r\n }\r\n LogHelper.Info($\"rgv 澶勭悊瀹屾垚銆倀askend 125\");\r\n #endregion\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Info(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n\r\n\r\n public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)\r\n {\r\n Console.WriteLine($\"ThreadGrats 鍏夋爡澶勭悊 =================> \");\r\n var taskCOdes = new List<string> { \"Sarrive\", \"Srelease\", \"Earrive\", \"Erelease\" };\r\n TaskActRepository taskActRepository = new TaskActRepository();\r\n TaskRepository taskRepository = new TaskRepository();\r\n var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);\r\n foreach (var item in requires)\r\n {\r\n var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);\r\n if (tin == -1)\r\n {\r\n item.N_CREATEMETHOD = -1;\r\n taskActRepository.Update(item);\r\n continue;\r\n }\r\n //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);\r\n string loc = \"\";\r\n if (tin < 2)\r\n {\r\n loc = item.S_START_LOC;\r\n }\r\n else\r\n {\r\n loc = item.S_END_LOC;\r\n }\r\n if (loc == null) continue; else loc = loc.Trim();\r\n bool goin = tin % 2 == 0;\r\n bool continuuuuu = false;\r\n var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));\r\n if (dev != null)\r\n {\r\n var V = dev.location.ToList().FindIndex(x => x == loc) == 0;\r\n //杞﹁蛋浜� 寮�厜鏍匼r\n if (!goin)\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R02\" : \"R04\"), \"true\", dev.deviceName + \"Queue\");\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1222\" : \"D1223\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n //杞﹁杩涘叆浜や簰銆俓r\n else\r\n {\r\n if (dev.deviceType == 1)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//璇诲叧闂姸鎬乗r\n if (tf?.ToLower() == \"true\")\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n }\r\n\r\n }\r\n else if (dev.deviceType == 2)\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n continuuuuu = true;\r\n }\r\n else\r\n {\r\n LogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin ? \"鍏抽棴\" : \"寮�惎\")} 鐢宠銆俓" + string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), dev.deviceName + \"Queue\"));\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"D1220\" : \"D1221\"), \"1\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n if (continuuuuu)\r\n {\r\n LogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛乗");\r\n continueTask?.Invoke(new HaiKangOrderInfo\r\n {\r\n reqCode = item.S_ID.Replace(\"-\", \"\"),\r\n taskCode = item.S_TASK_NO\r\n });\r\n item.N_CREATEMETHOD = 1;\r\n taskActRepository.Update(item);\r\n }\r\n }\r\n System.Threading.Thread.Sleep(3000);\r\n //閲嶇疆淇″彿\r\n foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))\r\n {\r\n var tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".D1202\");\r\n int numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n if (TcpServer.GetBitdata(numm, 0) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1220\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1222\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n else if (TcpServer.GetBitdata(numm, 1) == 0)\r\n {\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1221\", \"0\", dev.deviceName + \"Queue\");\r\n Conn.榛樿Redis.SetValue(dev.deviceName + \".D1223\", \"0\", dev.deviceName + \"Queue\");\r\n }\r\n }\r\n\r\n }\r\n /// <summary>\r\n /// 1020 1023绌烘涓嬬嚎\r\n /// </summary>\r\n /// <param name=\"tag\"></param>\r\n public void ThreadEdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadEdown 20 23 = 绌轰笅妫�祴 =================> \");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1020\", \"1023\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 绌轰笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇 \");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n try\r\n {\r\n var listtep = new List<string>();\r\n if (Bssx == \"1020\")\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1003 == 1)\r\n {\r\n listtep = new List<string> { \"1012\", \"1004\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1004\", \"1012\" };\r\n }\r\n }\r\n else\r\n {\r\n if (tag.SF涓嬫枡浣�RArrive1005 == 1)\r\n {\r\n listtep = new List<string> { \"1014\", \"1006\" };\r\n }\r\n else\r\n {\r\n listtep = new List<string> { \"1006\", \"1014\" };\r\n }\r\n }\r\n\r\n foreach (var item in listtep)//(Bssx == \"1020\" ? new string[] { \"1004\", \"1012\" } : new string[] { \"1006\", \"1014\" }))\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0 && task == null)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"绌轰笂RGV\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{Bssx}>to {item}寮�鍒涘缓鎴愬姛\");\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n System.Threading.Thread.Sleep(1000);\r\n }\r\n catch (Exception ex)\r\n {\r\n LogHelper.Error(ex.Message, ex);\r\n Console.WriteLine(ex.Message + ex.StackTrace);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n\r\n foreach (var item in new string[] { \"1004\", \"1012\", \"1006\", \"1014\", \"1026\", \"1017\" })\r\n {\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"0\", $\"S{item}ReadQueue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadDdown(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadDdown 08 10 ==================> 1026\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1008\", \"1016\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n\r\n var item = \"1026\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1026\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg2);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg2);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"0\", $\"S{Bssx}ReadQueue\");\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n public void Thread0210Down(Tag tag)\r\n {\r\n Console.WriteLine($\"Thread0210Down ==================>\");\r\n TaskRepository taskRepository = new TaskRepository();\r\n foreach (var Bssx in new string[] { \"1002\", \"1010\" })\r\n {\r\n var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState\"), typeof(System.UInt16));\r\n var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.RtaskState_LAST\"), typeof(System.UInt16));\r\n var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{Bssx}Read.R鎵樼洏鐮乗"), typeof(System.String));\r\n Console.WriteLine($\"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇\");\r\n if (RtaskState == 3 && RtaskState_LAST == 0)\r\n {\r\n var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n string msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var item = \"1017\";\r\n var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽\"), typeof(System.UInt16));\r\n var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"S{item}Read.R5绌洪棽_LAST\"), typeof(System.UInt16));\r\n if (R5 == 5 && R5绌洪棽_LAST == 0)\r\n {\r\n task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != \"瀹屾垚\" && x.S_B_STATE != \"鍙栨秷\");\r\n msg = \"\";\r\n if (task != null)\r\n {\r\n Console.WriteLine($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n LogHelper.Info($\"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟\");\r\n continue;\r\n }\r\n var b = TaskProcess.CreateTask(\"\", Bssx, item, \"婊¤浆1017\", 5, new List<string> { R鎵樼洏鐮�}, \"RGV\");\r\n if (b)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"1\", out msg);\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"1\", out string msg1);\r\n //Conn.榛樿Redis.SetValue($\"S{Bssx}Read.RtaskState_LAST\", \"1\", $\"S{Bssx}ReadQueue\");\r\n //Conn.榛樿Redis.SetValue($\"S{item}Read.R5绌洪棽_LAST\", \"1\", $\"S{item}ReadQueue\");\r\n break;\r\n }\r\n }\r\n else if (R5 != 5 && R5绌洪棽_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{item}Read.R5绌洪棽_LAST\", \"0\", out string msg1);\r\n }\r\n }\r\n else if (RtaskState != 3 && RtaskState_LAST == 1)\r\n {\r\n RedisHelper.Add($\"S{Bssx}Read.RtaskState_LAST\", \"0\", out string msg);\r\n }\r\n System.Threading.Thread.Sleep(2000);\r\n }\r\n }\r\n\r\n\r\n public void Thread涓嬫枡浣嶆娴�Tag tag)\r\n {\r\n Console.WriteLine($\"Thread涓嬫枡浣嶆娴� =====>\");\r\n foreach (var ssx in new string[] { \"1003\", \"1005\", \"1011\", \"1013\" })\r\n {\r\n var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}\"), typeof(System.UInt16));\r\n var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($\"FNK1003051113.RArrive{ssx}_LAST\"), typeof(System.UInt16));\r\n if (RArrive == 1 && RArriveLast == 0)\r\n {\r\n if (ssx == \"1005\" && tag.SF涓嬫枡浣�WRelease1005 == 0)\r\n {\r\n tag.FNK1.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1005_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1005 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1003\" && tag.SF涓嬫枡浣�WRelease1003 == 0)\r\n {\r\n tag.FNK1.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1003_LAST = 1;\r\n\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1003 = 0;\r\n //tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n }\r\n else if (ssx == \"1013\" && tag.SF涓嬫枡浣�WRelease1013 == 0)\r\n {\r\n tag.FNK2.D2215 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1013_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1013 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n else if (ssx == \"1011\" && tag.SF涓嬫枡浣�WRelease1011 == 0)\r\n {\r\n tag.FNK2.D2210 = 1;\r\n //tag.SF涓嬫枡浣�RArrive1011_LAST = 1;\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"1\", out string msg);\r\n\r\n //tag.SF涓嬫枡浣�WRelease1011 = 0;\r\n //tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n }\r\n }\r\n else if (RArrive == 0 && RArriveLast == 1)\r\n {\r\n RedisHelper.Add($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", out string msg);\r\n //Conn.榛樿Redis.SetValue($\"FNK1003051113.RArrive{ssx}_LAST\", \"0\", $\"FNK1003051113Queue\");\r\n }\r\n }\r\n }\r\n\r\n public void ThreadFNK1Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK1Over =====>\");\r\n if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n {\r\n tag.FNK1.D2215 = 0;\r\n //tag.FNK1.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1005 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1005_LAST\", \"0\", out msg);\r\n }\r\n if (tag.FNK1.D2216 == 1)\r\n tag.FNK1.D2215 = 0;\r\n else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n //tag.FNK1.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n {\r\n tag.FNK1.D2210 = 0;\r\n //tag.FNK1.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n tag.SF涓嬫枡浣�WRelease1003 = 1;\r\n tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1003_LAST\", \"0\", out msg);\r\n }\r\n //else if (tag.FNK1.D2211 == 1)\r\n // tag.FNK1.D2210 = 0;\r\n else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n {\r\n //tag.FNK1.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK1.D2211 == 1)\r\n tag.FNK1.D2210 = 0;\r\n\r\n }\r\n public void ThreadFNK2Over(Tag tag)\r\n {\r\n Console.WriteLine($\"ThreadFNK2Over =====>\");\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n tag.FNK2.D2215 = 0;\r\n //tag.FNK2.D2212_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1013 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1013_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n //tag.FNK2.D2217_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2217_LAST\", \"0\", out string msg);\r\n\r\n if (tag.FNK2.D2216 == 1)\r\n tag.FNK2.D2215 = 0;\r\n\r\n if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n tag.FNK2.D2210 = 0;\r\n //tag.FNK2.D2217_LAST = 1;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"1\", out string msg);\r\n\r\n tag.SF涓嬫枡浣�WRelease1011 = 1;\r\n tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n System.Threading.Thread.Sleep(1000);\r\n RedisHelper.Add($\"FNK1003051113.RArrive1011_LAST\", \"0\", out msg);\r\n }\r\n else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)\r\n {\r\n //tag.FNK2.D2212_LAST = 0;\r\n RedisHelper.Add($\"p鍙戦偅绉�涓嬬嚎.D2212_LAST\", \"0\", out string msg);\r\n }\r\n if (tag.FNK2.D2211 == 1)\r\n tag.FNK2.D2210 = 0;\r\n\r\n }\r\n\r\n public void Thread1019Down(Tag tag)\r\n {\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}\");\r\n }\r\n public void Thread1025Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}\");\r\n }\r\n public void Thread1022Up(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1022 =====>\");\r\n Console.WriteLine($\"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}\");\r\n }\r\n public void Thread1030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}\");\r\n }\r\n public void Thread2030Down(Tag tag)\r\n {\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛� =====>\");\r\n Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇\");\r\n }\r\n\r\n\r\n }\r\n}\r\n", "CusMethod": { "Name": "", "Params": [], @@ -713,6 +713,6 @@ } ], "CreationTime": "2025-02-26 15:31:23", - "LastWriteTime": "2025-07-09 11:37:29", + "LastWriteTime": "2025-07-23 10:05:08", "HasSaved": true } \ No newline at end of file -- Gitblit v1.9.1