From 82e5d2df096e55f1142106657668b87c8cfedda3 Mon Sep 17 00:00:00 2001
From: czw <selecti@yeah.net>
Date: 星期一, 23 六月 2025 09:09:01 +0800
Subject: [PATCH] aux

---
 2025年6月12日/AuxAllWCS/AutoThread.cs                         | 1369 ++++++++++++++++++++++++++
 2025年6月12日/AuxAllWCS/Build/Project/AuxAllWCS.csproj        |   44 
 2025年6月12日/AuxAllWCS/RunTime/Code/自定义类.cs                  |    5 
 2025年6月12日/AuxAllWCS/Build/Project/代码/界面事件.cs              |  114 -
 2025年6月12日/AuxAllWCS/AuxAllWCS.json                        |    2 
 2025年6月12日/AuxAllWCS/Devices/PlcConfig                     |   19 
 2025年6月12日/AuxAllWCS/RunTime/Code/VS自定义类/AutoThread.cs     | 1369 ++++++++++++++++++++++++++
 2025年6月12日/AuxAllWCS/Devices/设备通信.json                     |    2 
 2025年6月12日/AuxAllWCS/Scripts/Custom.json                   |   31 
 2025年6月12日/AuxAllWCS/Build/Project/代码/自定义类.cs              |   12 
 2025年6月12日/AuxAllWCS/Build/Project/代码/ViewModel.cs         |    5 
 2025年6月12日/AuxAllWCS/Build/Project/代码/VS自定义类/AutoThread.cs |    7 
 2025年6月12日/AuxAllWCS/Net/Conn.json                         |    2 
 2025年6月12日/AuxAllWCS/Scripts/Script.json                   |   86 
 14 files changed, 2,892 insertions(+), 175 deletions(-)

diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AutoThread.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AutoThread.cs"
new file mode 100644
index 0000000..1551ace
--- /dev/null
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AutoThread.cs"
@@ -0,0 +1,1369 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Collections.Concurrent;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using GZ.Modular.Redis;
+using GZ.DB.Entity.OIDATABASE;
+using GZ.DB.IRepository.OIDATABASE;
+using GZ.DB.Repository.OIDATABASE;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+using System.Windows.Interop;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
+
+namespace GZ.Projects.AuxAllWCS
+{
+    public partial class AutoThread
+    {
+
+        private static AutoThread _instance;
+
+        // 绉佹湁鏋勯�鍑芥暟闃叉澶栭儴瀹炰緥鍖�+        private AutoThread() { }
+
+        public static AutoThread Instance
+        {
+            get
+            {
+                if (_instance == null)
+                {
+                    _instance = new AutoThread();
+                }
+                return _instance;
+            }
+        }
+
+        // 绾跨▼瀹夊叏鐨勫鎵樼紦瀛�+        private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();
+
+        // 鏂规硶鎵ц鍣�+        public static object InvokeMethod(object instance, string methodName, params object[] args)
+        {
+            var cacheKey = $"{instance.GetType().FullName}_{methodName}";
+
+            if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))
+            {
+                // 鑾峰彇鏂规硶淇℃伅
+                var methodInfo = instance.GetType().GetMethod(
+                    methodName,
+                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+
+                if (methodInfo == null)
+                    throw new MissingMethodException($"Method {methodName} not found");
+
+                // 鍒涘缓濮旀墭骞剁紦瀛�+                methodDelegate = Delegate.CreateDelegate(
+                    GetDelegateType(methodInfo),
+                    instance,
+                    methodInfo);
+
+                _methodCache.TryAdd(cacheKey, methodDelegate);
+            }
+
+            // 鎵ц濮旀墭
+            return methodDelegate.DynamicInvoke(args);
+        }
+
+        // 鏍规嵁鏂规硶绛惧悕鐢熸垚瀵瑰簲鐨勫鎵樼被鍨�+        private static Type GetDelegateType(MethodInfo methodInfo)
+        {
+            var parameterTypes = methodInfo.GetParameters()
+                .Select(p => p.ParameterType)
+                .ToList();
+
+            if (methodInfo.ReturnType == typeof(void))
+            {
+                return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());
+            }
+            else
+            {
+                parameterTypes.Add(methodInfo.ReturnType);
+                return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());
+            }
+        }
+
+        /// <summary>
+        /// 閰嶇疆鍒濆鍖栥�
+        /// </summary>
+        /// <param name="tag"></param>
+        /// <param name="action"></param>
+        public void ThreadSettingInit(Tag tag, Action action)
+        {
+            Console.WriteLine("鍒濆鍖栭厤缃�绾跨▼ run " + tag.Global.SettingsOver);
+            if (tag.Global.SettingsOver == 0)
+            {
+                action?.Invoke();
+                tag.Global.SettingsOver = 1;
+            }
+            else if (Settings.deviceInfos.Count == 0)
+            {
+                tag.Global.SettingsOver = 0;
+            }
+        }
+
+        /// <summary>
+        /// 鎹烽『1 淇″彿澶勭悊
+        /// </summary>
+        /// <param name="tag"></param>
+        public void ThreadJS1(Tag tag)
+        {
+            Console.WriteLine($"ThreadJS1 鎹烽『1 淇″彿澶勭悊 =================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js鎹烽『1");
+
+            if (VERX != null)
+            {
+                if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[0]
+                    }));
+                    LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js1.D1212_LAST = 1;
+                        RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)
+                {
+                    //tag.Js1.D1212_LAST = 0; 
+                    RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "0", out string msg);
+                }
+                if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[1]
+                    }));
+                    LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js1.D1213_LAST = 1;
+                        RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)
+                {
+                    //tag.Js1.D1213_LAST = 0;
+                    RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "0", out string msg);
+                }
+            }
+        }
+        /// <summary>
+        /// 鎹烽『2 淇″彿澶勭悊
+        /// </summary>
+        /// <param name="tag"></param>
+        public void ThreadJS2(Tag tag)
+        {
+            Console.WriteLine($"ThreadJS2 鎹烽『2 淇″彿澶勭悊 =================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js鎹烽『2");
+
+            if (VERX != null)
+            {
+                if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[0]
+                    }));
+                    LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js2.D1212_LAST = 1;
+
+                        RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)
+                {
+                    //tag.Js2.D1212_LAST = 0;
+
+                    RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "0", out string msg);
+                }
+                if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[1]
+                    }));
+                    LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js2.D1213_LAST = 1;
+
+                        RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)
+                {
+                    //tag.Js2.D1213_LAST = 0;
+
+                    RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "0", out string msg);
+                }
+            }
+        }
+        /// <summary>
+        /// 缁村笇灏� 宸�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr1L(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr1L 缁村笇灏� 宸�=================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[0],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr1.R44_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    //TaskRepository ts = new TaskRepository();
+                    if (tag.wxr1.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr1.R10)
+                        {
+                            tag.wxr1.R10_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr1.R10 = true;
+                                tag.wxr1.R44_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁村笇灏� 鍙�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr1R(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr1R 缁村笇灏� 鍙�=================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[1],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr1.R46_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    if (tag.wxr1.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr1.R11)
+                        {
+                            tag.wxr1.R11_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr1.R11 = true;
+                                tag.wxr1.R46_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁村笇灏� 宸�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr2L(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr2L 缁村笇灏� 宸�=================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[0],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr2.R44_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    if (tag.wxr2.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr2.R10)
+                        {
+                            tag.wxr2.R10_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr2.R10 = true;
+                                tag.wxr2.R44_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁村笇灏� 鍙�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr2R(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr2R 缁村笇灏� 鍙�=================> ");
+
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[1],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr2.R46_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    if (tag.wxr2.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr2.R11)
+                        {
+                            tag.wxr2.R11_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr2.R11 = true;
+                                tag.wxr2.R46_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+
+        public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)
+        {
+            Console.WriteLine($"ThreadTaskRun 浠诲姟涓嬪彂 =================> ");
+            LogHelper.Info("ThreadTaskRun 浠诲姟涓嬪彂");
+
+            ITaskRepository taskservice = new TaskRepository();
+            try
+            {
+                LogHelper.Info("浠诲姟涓嬪彂  ARG 浠诲姟 杩涘叆");
+                #region AGV浠诲姟涓嬪彂銆�+
+                var tklist = taskservice.FindList(x => x.S_B_STATE == "鏈墽琛� && x.S_WORK_MODE == "AGV");
+                if (tklist.Any())
+                    foreach (var tk in tklist.GroupBy(item =>
+                    {
+                        var ticks = item.T_CREATE.Ticks;
+                        return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
+                    }).OrderBy(x => x.Key))
+                    {
+                        var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();
+                        foreach (var t in ts)
+                        {
+                            var b = false;
+                            b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);
+
+                            if (b)
+                            {
+                                t.S_B_STATE = "宸叉帹閫�;
+                                taskservice.Update(t);
+                            }
+                        }
+                        break;
+                    }
+                //foreach (var tk in tklist.GroupBy(item =>
+                //{
+                //    var ticks = item.T_CREATE.Ticks;
+                //    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
+                //}).OrderBy(x => x.Key))
+                //if (tklist.Any())
+                //{
+
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info(ex.Message + ex.StackTrace);
+            }
+            try
+            {
+                #region Rgv
+
+                LogHelper.Info($"鏌ョ湅RGV 鐢甸噺锛氥�{tag.RGV.R褰撳墠鐢甸噺}銆�鍏呯數鐘舵�锛氥�{tag.RGV.R鍏呯數鐘舵�}銆�鏁呴殰浠g爜锛氥�{tag.RGV.RgvrunError}銆�);
+
+                if (tag.RGV.taskend == 125)
+                {
+                    System.Threading.Thread.Sleep(3000);
+                    return;
+                }
+                LogHelper.Info("浠诲姟涓嬪彂  Rgv 浠诲姟 杩涘叆");
+
+                var task1Isrun = false;
+                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)
+                {
+                    task1Isrun = true;
+                    //if (tag.RGV.bit1taskOver_LAST == 1)
+                    //    RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                }
+                var task2Isrun = false;
+                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)
+                {
+                    task2Isrun = true;
+                    //if (tag.RGV.bit2taskOver_LAST == 1)
+                    //    RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                }
+                if (task1Isrun || task2Isrun)
+                {
+                    string mes = "";
+                    if (task1Isrun)
+                        mes += tag.RGV.ReadTask1No + "鎵ц涓�..";
+                    if (task2Isrun)
+                        mes += tag.RGV.ReadTask2No + "鎵ц涓�..";
+                    LogHelper.Info($"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�");
+                    System.Threading.Thread.Sleep(3000);
+                    return; 
+                }
+                var thisOver = 0;
+                TaskEntity task1 = null;
+                TaskEntity task2 = null;
+
+                LogHelper.Info($"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆�);
+                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)
+                {
+                    var taskno = tag.RGV.ReadTask1No;
+                    LogHelper.Info($"RGV 1宸ヤ綅浠诲姟{tag.RGV.ReadTask1No}");
+                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
+                    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
+
+                    LogHelper.Info($"RGV 1宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST锛歿tag.RGV.bit1taskOver_LAST}");
+                    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)
+                    {
+                        if (task1.S_B_STATE != "瀹屾垚")
+                        {
+                            thisOver = 1;
+                            if (task1.S_B_STATE == "鍙栬揣瀹屾垚")
+                            {
+                                task1.S_B_STATE = "瀹屾垚";
+                                tag.RGV.ReadTask1No = 0;
+                            }
+                            else
+                            {
+                                task1.S_B_STATE = "鍙栬揣瀹屾垚";
+                            }
+                            tag.RGV.bit1taskOver = 0;
+                            LogHelper.Info($"RGV 1宸ヤ綅浠诲姟{task1.S_TASK_NO} 鐘舵�鍒囨崲涓簕task1.S_B_STATE}");
+                            //tag.RGV.bit1taskOver_LAST = 1;
+                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "1", out string msg);
+                            LogHelper.Info($"RGV 1宸ヤ綅浠诲姟鍐欏鐞�);
+                            taskservice.Update(task1);
+                            LogHelper.Info($"RGV 1宸ヤ綅浠诲姟鏇存柊銆�);
+                        }
+                        else
+                        {
+                            LogHelper.Info("RGV1宸ヤ綅浠诲姟宸茬粡瀹屾垚銆�);
+                        }
+                    }
+                }
+                else if (tag.RGV.ReadTask1No == 0)
+                {
+                    LogHelper.Info($"RGV 1宸ヤ綅娌℃湁浠诲姟銆�);
+                }
+
+                LogHelper.Info($"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆�);
+                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)
+                {
+                    var taskno = tag.RGV.ReadTask2No;
+                    LogHelper.Info($"RGV 2宸ヤ綅浠诲姟{tag.RGV.ReadTask2No}");
+                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
+                    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
+
+                    LogHelper.Info($"RGV2宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST锛歿tag.RGV.bit2taskOver_LAST}");
+                    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)
+                    {
+                        if (task2.S_B_STATE != "瀹屾垚")
+                        {
+                            thisOver = 2;
+                            if (task2.S_B_STATE == "鍙栬揣瀹屾垚")
+                            {
+                                task2.S_B_STATE = "瀹屾垚";
+                                tag.RGV.ReadTask2No = 0;
+                            }
+                            else
+                            {
+                                task2.S_B_STATE = "鍙栬揣瀹屾垚";
+                            }
+                            tag.RGV.bit2taskOver = 0;
+                            LogHelper.Info($"RGV 2宸ヤ綅浠诲姟{task2.S_TASK_NO} 鐘舵�鍒囨崲涓簕task2.S_B_STATE}");
+                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "1", out string msg);
+                            LogHelper.Info($"RGV 2宸ヤ綅浠诲姟鍐欏鐞�);
+                            taskservice.Update(task2);
+                            LogHelper.Info($"RGV 2宸ヤ綅浠诲姟鏇存柊銆�);
+                        }
+                        else
+                        {
+                            LogHelper.Info("RGV2宸ヤ綅浠诲姟宸茬粡瀹屾垚銆�);
+                        }
+                    }
+                }
+                else if (tag.RGV.ReadTask2No == 0)
+                {
+                    LogHelper.Info($"RGV 2宸ヤ綅娌℃湁浠诲姟銆�);
+                }
+
+
+
+                //if (thisOver > 0)
+                //{
+                //    var v2 = RedisHelper.Get<WriteGroupEntity>("RGVQueue", out string rev);
+                //    if (v2 != null)
+                //    {
+                //        LogHelper.Info($"RGVQueue 璇诲埌缁撴灉-{JsonConvert.SerializeObject(v2)}  \n 涓嬪彂鍓嶈繘琛屾竻闄ゃ�");
+                //        var b = RedisHelper.Remove("RGVQueue", out rev);
+                //    }
+                //}
+
+                ///1 鏈夎揣  灏� 鍙栥�  1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗�+                var tklist = taskservice.FindList(x => x.S_B_STATE == "鏈墽琛� && x.S_WORK_MODE == "RGV").OrderBy(x => x.T_CREATE).ToList();
+                if (task1 != null && task1.S_B_STATE != "瀹屾垚") //1鏈変换鍔�+                {
+                    if (task2 != null && task2.S_B_STATE != "瀹屾垚")// 1 鏈変换鍔� 2 鏈変换鍔°� 
+                    {
+                        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 涔熸湁浠诲姟{task2.S_TASK_NO}銆�寮�宸ヤ綅1 鍗歌揣銆�);
+                        tag.RGV.workMod = 1;
+                        tag.RGV.taskmod = 2;
+                        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
+                        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
+                        System.Threading.Thread.Sleep(750);
+                        //RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                        //tag.RGV.taskend = 125;
+                        //Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue");
+
+                        LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0");
+                        RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                        LogHelper.Info($"{task1.S_TASK_NO}> end 鍐�125");
+                        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                    }
+                    else //1鏈変换鍔� 2 娌′换鍔°�  
+                    {
+
+                        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�");
+
+                        var leftSide = new List<string> { "1023", "1020" };
+                        var RightSide = new List<string> { "1002", "1008", "1010", "1016" };
+                        bool creT2 = false;
+
+                        // 2鍙�浼樺厛缁�1020  1008  1016
+                        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");
+                        if (t2 != null)
+                        {
+                            LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵�020  1008  1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆�);
+                            tag.RGV.workMod = 2;
+                            tag.RGV.taskmod = 1;
+                            tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                            tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                            t2.S_B_STATE = "宸叉帹閫�;
+                            taskservice.Update(t2);
+                            creT2 = true;
+                            System.Threading.Thread.Sleep(750);
+                            LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                            LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                            Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        }
+                        ////2 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈�+                        //else if (leftSide.Contains(task1.S_START_LOC))
+                        //{
+                        //    leftSide.Remove(task1.S_START_LOC);
+                        //    var lsde = leftSide.FirstOrDefault();
+                        //    t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != "1017");
+                        //    if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆�+                        //    {
+                        //        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔t2.S_TASK_NO}銆�);
+                        //        tag.RGV.workMod = 2;
+                        //        tag.RGV.taskmod = 1;
+                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                        //        t2.S_B_STATE = "宸叉帹閫�;
+                        //        taskservice.Update(t2);
+                        //        creT2 = true;
+                        //        System.Threading.Thread.Sleep(750);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                        //        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        //    }
+                        //}
+                        //else if (RightSide.Contains(task1.S_START_LOC))
+                        //{
+                        //    RightSide.Remove(task1.S_START_LOC);
+                        //    t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != "1017");
+                        //    if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆�+                        //    {
+                        //        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚�1002,1010 鍙栬揣浠诲姟{t2.S_TASK_NO}銆�);
+                        //        tag.RGV.workMod = 2;
+                        //        tag.RGV.taskmod = 1;
+                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                        //        t2.S_B_STATE = "宸叉帹閫�;
+                        //        taskservice.Update(t2);
+                        //        creT2 = true;
+                        //        System.Threading.Thread.Sleep(750);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�125");
+                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                        //        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        //    }
+                        //}
+                        else //1 鐩存帴鍗歌揣銆�
+                        //if (!creT2)
+                        {
+                            LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 娌℃湁鍚屼晶鍙栬揣浠诲姟 1宸ヤ綅鍗歌揣銆�);
+                            tag.RGV.workMod = 1;
+                            tag.RGV.taskmod = 2;
+                            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
+                            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
+                            System.Threading.Thread.Sleep(750);
+                            LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0");
+                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                            LogHelper.Info($"{task1.S_TASK_NO}> taskend 鍐�0");
+                            Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        }
+                    }
+                }
+                else
+                {
+                    if (task2 != null && task2.S_B_STATE != "瀹屾垚")// 1 娌′换鍔� 2 鏈変换鍔°� 
+                    {
+                        LogHelper.Info($"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 鏈変换鍔task2.S_TASK_NO}銆傚伐浣�鍗歌揣銆傘�");
+                        //2 鍗歌揣銆�+                        tag.RGV.workMod = 2;
+                        tag.RGV.taskmod = 2;
+                        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));
+                        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);
+                        System.Threading.Thread.Sleep(750);
+                        LogHelper.Info($"{task2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                        //tag.RGV.taskend = 125;
+                        LogHelper.Info($"{task2.S_TASK_NO}> taskend 鍐�25");
+                        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                    }
+                    else if (tklist.Any()) //1mei 浠诲姟  2 娌′换鍔°�
+                    {
+                        LogHelper.Info($"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆備紭鍏�宸ヤ綅缁堢偣1017浠诲姟銆傘�");
+                        //銆佷笅 1017浠诲姟 缁�鍙峰伐浣嶃�
+                        //var lss = tklist.Take(2).ToList();
+                        var e1017first = tklist.Find(x => x.S_START_LOC == "1002" || x.S_START_LOC == "1010" || x.S_START_LOC == "1023");
+                        //if (e1017first != null)
+                        //{
+                        //    e1017first = tklist.FirstOrDefault();
+                        //}
+                        if (e1017first != null)
+                        {
+                            LogHelper.Info($"鏌ョ湅RGV1 浠诲姟宸ヤ綅2 娌′换鍔°� 1002  1010  1023鍙栬揣浠诲姟{e1017first.S_TASK_NO}銆�);
+                            tag.RGV.workMod = 1;
+                            tag.RGV.taskmod = 1;
+                            uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> 杞崲鍚庝换鍔″彿{tno} 寮�鍐欏叆銆�);
+                            tag.RGV.taskno1 = tno;
+                            LogHelper.Info($"{e1017first.S_TASK_NO}>寮�鍐欏叆 task1do>>{e1017first.S_START_LOC}銆�);
+                            tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> 鏇存柊浠诲姟銆�);
+                            e1017first.S_B_STATE = "宸叉帹閫�;
+                            taskservice.Update(e1017first);
+                            System.Threading.Thread.Sleep(750);
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> bit1taskOver_LAST 鍐�");
+                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> taskend 鍐�25");
+                            //tag.RGV.taskend=125
+                            Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        }
+                        else
+                        {
+                            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");
+                            if (tklist != null)
+                            {
+                                LogHelper.Info($"鏌ョ湅RGV1 娌′换鍔″伐浣� 娌′换鍔°� 鎵�020  1008  1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆�);
+                                tag.RGV.workMod = 2;
+                                tag.RGV.taskmod = 1;
+                                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                                t2.S_B_STATE = "宸叉帹閫�;
+                                taskservice.Update(t2);
+                                System.Threading.Thread.Sleep(750);
+                                LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                                RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                                LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                                Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                            }
+                        }
+                    }
+                }
+                LogHelper.Info($"rgv 澶勭悊瀹屾垚銆倀askend 125");
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info(ex.Message + ex.StackTrace);
+            }
+        }
+
+
+        public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)
+        {
+            Console.WriteLine($"ThreadGrats 鍏夋爡澶勭悊 =================> ");
+            var taskCOdes = new List<string> { "Sarrive", "Srelease", "Earrive", "Erelease" };
+            TaskActRepository taskActRepository = new TaskActRepository();
+            TaskRepository taskRepository = new TaskRepository();
+            var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);
+            foreach (var item in requires)
+            {
+                var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);
+                if (tin == -1)
+                {
+                    item.N_CREATEMETHOD = -1;
+                    taskActRepository.Update(item);
+                    continue;
+                }
+                //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);
+                string loc = "";
+                if (tin < 2)
+                {
+                    loc = item.S_START_LOC;
+                }
+                else
+                {
+                    loc = item.S_END_LOC;
+                }
+                if (loc == null) continue; else loc = loc.Trim();
+                bool goin = tin % 2 == 0;
+                bool continuuuuu = false;
+                var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));
+                if (dev != null)
+                {
+                    var V = dev.location.ToList().FindIndex(x => x == loc) == 0;
+                    //杞﹁蛋浜� 寮�厜鏍�+                    if (!goin)
+                    {
+                        if (dev.deviceType == 1)
+                        {
+                            LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue"));
+                            Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue");
+
+                        }
+                        else if (dev.deviceType == 2)
+                        {
+                            LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue"));
+                            Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue");
+                        }
+
+                        item.N_CREATEMETHOD = 1;
+                        taskActRepository.Update(item);
+                    }
+                    //杞﹁杩涘叆浜や簰銆�+                    else
+                    {
+                        if (dev.deviceType == 1)
+                        {
+                            var tf = Conn.榛樿Redis.GetValue(dev.deviceName + "." + (V ? "R50" : "R52"));//璇诲叧闂姸鎬�+                            if (tf?.ToLower() == "true")
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆�宸茬粡鍏抽棴锛�);
+                                continuuuuu = true;
+                            }
+                            else
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue"));
+                                Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue");
+                            }
+
+                        }
+                        else if (dev.deviceType == 2)
+                        {
+                            var tf = Conn.榛樿Redis.GetValue(dev.deviceName + ".D1202");
+                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
+                            if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆�宸茬粡鍏抽棴锛�);
+                                continuuuuu = true;
+                            }
+                            else
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1220" : "D1221"), dev.deviceName + "Queue"));
+                                Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "D1220" : "D1221"), "1", dev.deviceName + "Queue");
+                            }
+                        }
+
+                    }
+
+                }
+                if (continuuuuu)
+                {
+                    LogHelper.Info($"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛�);
+                    continueTask?.Invoke(new HaiKangOrderInfo
+                    {
+                        reqCode = item.S_ID.Replace("-", ""),
+                        taskCode = item.S_TASK_NO
+                    });
+                    item.N_CREATEMETHOD = 1;
+                    taskActRepository.Update(item);
+                }
+            }
+            System.Threading.Thread.Sleep(3000);
+            //閲嶇疆淇″彿
+            foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))
+            {
+                var tf = Conn.榛樿Redis.GetValue(dev.deviceName + ".D1202");
+                int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
+                if (TcpServer.GetBitdata(numm, 0) == 0)
+                {
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1220", "0", dev.deviceName + "Queue");
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1222", "0", dev.deviceName + "Queue");
+                }
+                else if (TcpServer.GetBitdata(numm, 1) == 0)
+                {
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1221", "0", dev.deviceName + "Queue");
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1223", "0", dev.deviceName + "Queue");
+                }
+            }
+
+        }
+        /// <summary>
+        /// 1020  1023绌烘涓嬬嚎
+        /// </summary>
+        /// <param name="tag"></param>
+        public void ThreadEdown(Tag tag)
+        {
+            Console.WriteLine($"ThreadEdown 20 23 = 绌轰笅妫�祴 =================> ");
+            TaskRepository taskRepository = new TaskRepository();
+            foreach (var Bssx in new string[] { "1020", "1023" })
+            {
+                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
+                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
+                var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.R鎵樼洏鐮�), typeof(System.String));
+                Console.WriteLine($"{Bssx} 绌轰笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇  ");
+                if (RtaskState == 3 && RtaskState_LAST == 0)
+                {
+                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                    string msg = "";
+                    if (task != null)
+                    {
+                        Console.WriteLine($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        LogHelper.Info($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        continue;
+                    }
+                    try
+                    {
+                        var listtep = new List<string>();
+                        if (Bssx == "1020")
+                        {
+                            if (tag.SF涓嬫枡浣�RArrive1003 == 1)
+                            {
+                                listtep = new List<string> { "1012", "1004" };
+                            }
+                            else
+                            {
+                                listtep = new List<string> { "1004", "1012" };
+                            }
+                        }
+                        else
+                        {
+                            if (tag.SF涓嬫枡浣�RArrive1005 == 1)
+                            {
+                                listtep = new List<string> { "1014", "1006" };
+                            }
+                            else
+                            {
+                                listtep = new List<string> { "1006", "1014" };
+                            }
+                        }
+
+                        foreach (var item in listtep)//(Bssx == "1020" ? new string[] { "1004", "1012" } : new string[] { "1006", "1014" }))
+                        {
+                            var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                            var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                            if (R5 == 5 && R5绌洪棽_LAST == 0 && task == null)
+                            {
+                                task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                                msg = "";
+                                if (task != null)
+                                {
+                                    Console.WriteLine($" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                                    LogHelper.Info($" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                                    continue;
+                                }
+
+                                var b = TaskProcess.CreateTask("", Bssx, item, "绌轰笂RGV", 5, new List<string> { R鎵樼洏鐮�}, "RGV");
+                                if (b)
+                                {
+                                    LogHelper.Debug($"杈撻�绾縍GV绌烘墭浠诲姟 from:{Bssx}>to {item}寮�鍒涘缓鎴愬姛");
+                                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
+                                    //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
+                                    RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "1", out msg);
+                                    //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "1", $"S{item}ReadQueue");
+                                    break;
+                                }
+                            }
+                            else if (R5 != 5 && R5绌洪棽_LAST == 1)
+                            {
+                                RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out msg);
+                                //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "0", $"S{item}ReadQueue");
+                            }
+                        }
+                        System.Threading.Thread.Sleep(1000);
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.Error(ex.Message, ex);
+                        Console.WriteLine(ex.Message + ex.StackTrace);
+                    }
+                }
+                else if (RtaskState != 3 && RtaskState_LAST == 1)
+                {
+                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
+                }
+                System.Threading.Thread.Sleep(2000);
+            }
+
+            foreach (var item in new string[] { "1004", "1012", "1006", "1014", "1026", "1017" })
+            {
+                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                if (R5 != 5 && R5绌洪棽_LAST == 1)
+                {
+                    RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "0", $"S{item}ReadQueue");
+                }
+            }
+        }
+
+        public void ThreadDdown(Tag tag)
+        {
+            Console.WriteLine($"ThreadDdown 08 10 ==================> 1026");
+            TaskRepository taskRepository = new TaskRepository();
+            foreach (var Bssx in new string[] { "1008", "1016" })
+            {
+                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
+                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
+                var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.R鎵樼洏鐮�), typeof(System.String));
+                Console.WriteLine($"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇");
+                if (RtaskState == 3 && RtaskState_LAST == 0)
+                {
+                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                    string msg = "";
+                    if (task != null)
+                    {
+                        Console.WriteLine($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        LogHelper.Info($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        continue;
+                    }
+
+                    var item = "1026";
+                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                    var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                    if (R5 == 5 && R5绌洪棽_LAST == 0)
+                    {
+                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                        msg = "";
+                        if (task != null)
+                        {
+                            Console.WriteLine($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            LogHelper.Info($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            continue;
+                        }
+                        var b = TaskProcess.CreateTask("", Bssx, item, "婊¤浆1026", 5, new List<string> { R鎵樼洏鐮�}, "RGV");
+                        if (b)
+                        {
+                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
+                            RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "1", out string msg2);
+                            //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
+                            //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "1", $"S{item}ReadQueue");
+                            break;
+                        }
+                    }
+                    else if (R5 != 5 && R5绌洪棽_LAST == 1)
+                    {
+                        RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out string msg2);
+                    }
+                }
+                else if (RtaskState != 3 && RtaskState_LAST == 1)
+                {
+                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
+                }
+                System.Threading.Thread.Sleep(2000);
+            }
+        }
+
+        public void Thread0210Down(Tag tag)
+        {
+            Console.WriteLine($"Thread0210Down ==================>");
+            TaskRepository taskRepository = new TaskRepository();
+            foreach (var Bssx in new string[] { "1002", "1010" })
+            {
+                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
+                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
+                var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.R鎵樼洏鐮�), typeof(System.String));
+                Console.WriteLine($"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇");
+                if (RtaskState == 3 && RtaskState_LAST == 0)
+                {
+                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                    string msg = "";
+                    if (task != null)
+                    {
+                        Console.WriteLine($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        LogHelper.Info($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        continue;
+                    }
+                    var item = "1017";
+                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                    var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                    if (R5 == 5 && R5绌洪棽_LAST == 0)
+                    {
+                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                        msg = "";
+                        if (task != null)
+                        {
+                            Console.WriteLine($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            LogHelper.Info($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            continue;
+                        }
+                        var b = TaskProcess.CreateTask("", Bssx, item, "婊¤浆1017", 5, new List<string> { R鎵樼洏鐮�}, "RGV");
+                        if (b)
+                        {
+                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
+                            RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "1", out string msg1);
+                            //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
+                            //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "1", $"S{item}ReadQueue");
+                            break;
+                        }
+                    }
+                    else if (R5 != 5 && R5绌洪棽_LAST == 1)
+                    {
+                        RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out string msg1);
+                    }
+                }
+                else if (RtaskState != 3 && RtaskState_LAST == 1)
+                {
+                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
+                }
+                System.Threading.Thread.Sleep(2000);
+            }
+        }
+
+
+        public void Thread涓嬫枡浣嶆娴�Tag tag)
+        {
+            Console.WriteLine($"Thread涓嬫枡浣嶆娴�   =====>");
+            foreach (var ssx in new string[] { "1003", "1005", "1011", "1013" })
+            {
+                var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"FNK1003051113.RArrive{ssx}"), typeof(System.UInt16));
+                var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"FNK1003051113.RArrive{ssx}_LAST"), typeof(System.UInt16));
+                if (RArrive == 1 && RArriveLast == 0)
+                {
+                    if (ssx == "1005" && tag.SF涓嬫枡浣�WRelease1005 == 0)
+                    {
+                        tag.FNK1.D2215 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1005_LAST = 1;
+                        RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1005 = 0;
+                        //tag.SF涓嬫枡浣�WSafe0305 = 0;
+                    }
+                    else if (ssx == "1003" && tag.SF涓嬫枡浣�WRelease1003 == 0)
+                    {
+                        tag.FNK1.D2210 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1003_LAST = 1;
+
+                        RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1003 = 0;
+                        //tag.SF涓嬫枡浣�WSafe0305 = 0;
+                    }
+                    else if (ssx == "1013" && tag.SF涓嬫枡浣�WRelease1013 == 0)
+                    {
+                        tag.FNK2.D2215 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1013_LAST = 1;
+                        RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1013 = 0;
+                        //tag.SF涓嬫枡浣�WSafe1113 = 0;
+                    }
+                    else if (ssx == "1011" && tag.SF涓嬫枡浣�WRelease1011 == 0)
+                    {
+                        tag.FNK2.D2210 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1011_LAST = 1;
+                        RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1011 = 0;
+                        //tag.SF涓嬫枡浣�WSafe1113 = 0;
+                    }
+                }
+                else if (RArrive == 0 && RArriveLast == 1)
+                {
+                    RedisHelper.Add($"FNK1003051113.RArrive{ssx}_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"FNK1003051113.RArrive{ssx}_LAST", "0", $"FNK1003051113Queue");
+                }
+            }
+        }
+
+        public void ThreadFNK1Over(Tag tag)
+        {
+            Console.WriteLine($"ThreadFNK1Over    =====>");
+            if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)
+            {
+                tag.FNK1.D2215 = 0;
+                //tag.FNK1.D2212_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "1", out string msg);
+
+                tag.SF涓嬫枡浣�WRelease1005 = 1;
+                tag.SF涓嬫枡浣�WSafe0305 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "0", out msg);
+            }
+            if (tag.FNK1.D2216 == 1)
+                tag.FNK1.D2215 = 0;
+            else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)
+                //tag.FNK1.D2217_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "0", out string msg);
+
+            if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)
+            {
+                tag.FNK1.D2210 = 0;
+                //tag.FNK1.D2217_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "1", out string msg);
+                tag.SF涓嬫枡浣�WRelease1003 = 1;
+                tag.SF涓嬫枡浣�WSafe0305 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "0", out msg);
+            }
+            //else if (tag.FNK1.D2211 == 1)
+            //    tag.FNK1.D2210 = 0;
+            else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)
+            {
+                //tag.FNK1.D2212_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "0", out string msg);
+            }
+            if (tag.FNK1.D2211 == 1)
+                tag.FNK1.D2210 = 0;
+
+        }
+        public void ThreadFNK2Over(Tag tag)
+        {
+            Console.WriteLine($"ThreadFNK2Over    =====>");
+            if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)
+            {
+                tag.FNK2.D2215 = 0;
+                //tag.FNK2.D2212_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "1", out string msg);
+
+                tag.SF涓嬫枡浣�WRelease1013 = 1;
+                tag.SF涓嬫枡浣�WSafe1113 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "0", out msg);
+            }
+            else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)
+                //tag.FNK2.D2217_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "0", out string msg);
+
+            if (tag.FNK2.D2216 == 1)
+                tag.FNK2.D2215 = 0;
+
+            if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)
+            {
+                tag.FNK2.D2210 = 0;
+                //tag.FNK2.D2217_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "1", out string msg);
+
+                tag.SF涓嬫枡浣�WRelease1011 = 1;
+                tag.SF涓嬫枡浣�WSafe1113 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "0", out msg);
+            }
+            else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)
+            {
+                //tag.FNK2.D2212_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "0", out string msg);
+            }
+            if (tag.FNK2.D2211 == 1)
+                tag.FNK2.D2210 = 0;
+
+        }
+
+        public void Thread1019Down(Tag tag)
+        {
+            Console.WriteLine($"1019浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}");
+        }
+        public void Thread1025Up(Tag tag)
+        {
+            Console.WriteLine($"SA1025 浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}");
+        }
+        public void Thread1022Up(Tag tag)
+        {
+            Console.WriteLine($"SA1022    =====>");
+            Console.WriteLine($"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}");
+        }
+        public void Thread1030Down(Tag tag)
+        {
+            Console.WriteLine($"SA1030 浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}");
+        }
+        public void Thread2030Down(Tag tag)
+        {
+            Console.WriteLine($"SA2030 浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇");
+        }
+
+
+    }
+}
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AuxAllWCS.json" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AuxAllWCS.json"
index a2809ca..e58f855 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AuxAllWCS.json"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/AuxAllWCS.json"
@@ -9,5 +9,5 @@
   "DevelopVersion": "1.0.2.0",
   "Encode": "Ij/zvOgkqNT5SmHrFKCAVQ==",
   "CreationTime": "0001-01-01 00:00:00",
-  "LastWriteTime": "2025-06-18 23:06:58"
+  "LastWriteTime": "2025-06-23 08:57:03"
 }
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/AuxAllWCS.csproj" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/AuxAllWCS.csproj"
index 2466075..3f82737 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/AuxAllWCS.csproj"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/AuxAllWCS.csproj"
@@ -2,11 +2,11 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
   <PropertyGroup>
     <Platform Condition="'$(Configuration)' == ''">AnyCPU</Platform>
-    <OutputType>Exe</OutputType>
+    <OutputType>WinExe</OutputType>
     <RootNamespace>GZ.Projects.AuxAllWCS</RootNamespace>
     <AssemblyName>AuxAllWCS</AssemblyName>
     <TargetFrameworkVersion>4.6.1</TargetFrameworkVersion>
-    <ProjectGuid>{E1166F09-DED5-4E32-AB55-4DE61A402132}</ProjectGuid>
+    <ProjectGuid>{50c6b7fe-daa2-4ebe-8ebe-6f6efc0a213c}</ProjectGuid>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -26,9 +26,6 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <StartupObject />
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System">
@@ -198,7 +195,6 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
-    <Compile Include="浠g爜\VS鑷畾涔夌被\AutoThread.cs" />
     <Compile Include="鐣岄潰\View1.xaml.cs">
       <DependentUpon>View1.xaml</DependentUpon>
       <SubType>Code</SubType>
@@ -212,45 +208,11 @@
     <Compile Include="浠g爜\鑷畾涔夌粨鏋�cs" />
     <Compile Include="浠g爜\鑷畾涔夌被.cs" />
     <Compile Include="浠g爜\VS鑷畾涔夌被\TcpServer.cs" />
+    <Compile Include="浠g爜\VS鑷畾涔夌被\AutoThread.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
-    <None Include="Static\config.json">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Static\js\app.829e775c.js.map">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Static\js\chunk-vendors.3e768dfe.js.map">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="Static\css\a.css">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\css\app.d545ec97.css">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\favicon.ico">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\index.html">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\js\a.js">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\js\app.829e775c.js">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\js\chunk-vendors.3e768dfe.js">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="Static\W.html">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs"
index a87884a..1fe7d19 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs"
@@ -1,4 +1,5 @@
-锘縰sing Newtonsoft.Json;
+#region    [鑷畾涔夌被-VS][20250623083459471][AutoThread]
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Collections.Concurrent;
@@ -569,7 +570,7 @@
                         mes += tag.RGV.ReadTask2No + "鎵ц涓�..";
                     LogHelper.Info($"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�");
                     System.Threading.Thread.Sleep(3000);
-                    return; 
+                    return;
                 }
                 var thisOver = 0;
                 TaskEntity task1 = null;
@@ -1367,3 +1368,5 @@
 
     }
 }
+
+#endregion [鑷畾涔夌被-VS][20250623083459471][AutoThread]
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/ViewModel.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/ViewModel.cs"
index 1e0dcbc..4a728c5 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/ViewModel.cs"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/ViewModel.cs"
@@ -28,7 +28,6 @@
 using GZ.DB.Repository.OIDATABASE;
 using GZ.DB.IRepository.OIDATABASE;
 using GZ.DB.Entity.OIDATABASE;
-using GZ.Modular.Redis;
 namespace GZ.Projects.AuxAllWCS
 {
     public partial class ViewModel : System.ComponentModel.INotifyPropertyChanged
@@ -237,9 +236,7 @@
                                         //string V = inde ? "R05" : "R06";
                                         //Conn.榛樿Redis.SetValue(device2.deviceName + "." + V, "true", device2.deviceName + "Queue");
                                         string V2 = inde ? "R10_LAST" : "R11_LAST";
-                                        //Conn.榛樿Redis.SetValue(device2.deviceName + "." + V2, "true", device2.deviceName + "Queue");
-
-                                        RedisHelper.Add(device2.deviceName + "." + V2, "true", out string msg1);
+                                        Conn.榛樿Redis.SetValue(device2.deviceName + "." + V2, "true", device2.deviceName + "Queue");
                                         TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);
                                     }
                                 }
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\347\225\214\351\235\242\344\272\213\344\273\266.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\347\225\214\351\235\242\344\272\213\344\273\266.cs"
index dcd8065..d505f02 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\347\225\214\351\235\242\344\272\213\344\273\266.cs"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\347\225\214\351\235\242\344\272\213\344\273\266.cs"
@@ -28,9 +28,6 @@
 using GZ.DB.Repository.OIDATABASE;
 using GZ.DB.IRepository.OIDATABASE;
 using GZ.DB.Entity.OIDATABASE;
-using GZ.Modular.Redis;
-using System.Security.Cryptography;
-using System.Windows.Interop;
 namespace GZ.Projects.AuxAllWCS
 {
     /// <summary>
@@ -80,29 +77,9 @@
                     try
                     {
                         #region    [鑴氭湰][20250323111613779][涓氬姟閫昏緫.鍒濆鍖栭厤缃甝
-                        //LogHelper.Info("1111 +" + DateTime.Now);
-                        //((Type)typeof(Utils)).GetMethod("ThreadSettingInit").Invoke(new Utils(), null);
-                        //LogHelper.Info("2222 +" + DateTime.Now);
-                        //((Type)typeof(Utils)).GetMethod("ThreadSettingInit").Invoke(new Utils(), new object[] { });
-                        //LogHelper.Info("3333 +" + DateTime.Now);
+
                         Action myDelegate = () => SettingInit();
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadSettingInit", new object[] { tag, myDelegate });
-                        //LogHelper.Info("4444 +" + DateTime.Now);
-                        //AutoThread.InvokeMethod(AutoThread.Instance, "ThreadSettingInit", null);
-                        //LogHelper.Info("4444 +" + DateTime.Now);
-
-                        //if (Tag.Global.SettingsOver == 0)
-                        //{
-                        //    SettingInit();
-                        //    Tag.Global.SettingsOver = 1;
-                        //}
-                        //else if (Settings.deviceInfos.Count == 0)
-                        //{
-                        //    Tag.Global.SettingsOver = 0;
-                        //}
-                        //var _=tag.wxr1.R46_LAST;
-                        //RedisHelper.Add($"缁村笇灏旀姄鑷�.R46_LAST", "true", out string  msg);
-
                         #endregion [鑴氭湰][20250323111613779][涓氬姟閫昏緫.鍒濆鍖栭厤缃甝
                     }
                     catch (Exception ex)
@@ -123,46 +100,45 @@
                 try
                 {
                     #region    [鑴氭湰][20250323151832119][涓氬姟閫昏緫.Program4]
-                    //Conn.榛樿Redis.SetValue("瑗块棬瀛�.Param3","300","瑗块棬瀛�Queue");
-                    //return;
-                    if (false)
-                    {
-                        List<string> locs = new List<string>() { "vxr1l", "vx1r", "vxr1c1", "vxr1c2", "vxr2l", "vxr2r", "vxr2c1", "vxr2c2" };
-                        List<string> sites = new List<string>() { "196365BB283162", "193841BB283149", "198756BB287300", "198767BB286133", "206987BB282931", "204460BB282975", "209405BB287057", "209377BB285899" };
+                    ////Conn.榛樿Redis.SetValue("瑗块棬瀛�.Param3","300","瑗块棬瀛�Queue");
+                    ////return;
+                    //if(false){
+                    //                    List<string> locs = new List<string>() { "vxr1l", "vx1r", "vxr1c1", "vxr1c2", "vxr2l", "vxr2r", "vxr2c1", "vxr2c2" };
+                    //                    List<string> sites = new List<string>() { "196365BB283162", "193841BB283149", "198756BB287300", "198767BB286133", "206987BB282931", "204460BB282975", "209405BB287057", "209377BB285899" };
 
-                        LocRepository locservice = new LocRepository();
-                        for (int i = 0; i < locs.Count; i++)
-                        {
-                            string loccode = locs[i];
-                            string sitesss = sites[i];
-                            var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);
-                            if (loc == null)
-                            {
-                                locservice.Insert(new LocEntity
-                                {
-                                    S_ID = Guid.NewGuid().ToString(),
-                                    S_STATE = "缂栬緫",
-                                    T_CREATE = DateTime.Now,
-                                    T_MODIFY = DateTime.Now,
-                                    S_DEEP = "vxr",
+                    //                    LocRepository locservice = new LocRepository();
+                    //                    for (int i = 0; i < locs.Count; i++)
+                    //                    {
+                    //                        string loccode = locs[i];
+                    //                        string sitesss = sites[i];
+                    //                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);
+                    //                        if (loc == null)
+                    //                        {
+                    //                            locservice.Insert(new LocEntity
+                    //                            {
+                    //                                S_ID = Guid.NewGuid().ToString(),
+                    //                                S_STATE = "缂栬緫",
+                    //                                T_CREATE = DateTime.Now,
+                    //                                T_MODIFY = DateTime.Now,
+                    //                                S_DEEP = "vxr",
 
-                                    S_LOC_CODE = loccode,
-                                    S_AGV_SITE = sitesss,
+                    //                                S_LOC_CODE = loccode,
+                    //                                S_AGV_SITE = sitesss,
 
-                                    S_LOCK_STATE = "鏃�,
-                                    N_ROW = 1,
-                                    N_COL = 1,
-                                    N_AGV_CODE = 0,
-                                    N_AGV_SITE_LAYER = 0,
-                                    N_CAPACITY = 1,
-                                    N_CURRENT_NUM = 0,
-                                    S_TYPE = "",
+                    //                                S_LOCK_STATE = "鏃�,
+                    //                                N_ROW = 1,
+                    //                                N_COL = 1,
+                    //                                N_AGV_CODE = 0,
+                    //                                N_AGV_SITE_LAYER = 0,
+                    //                                N_CAPACITY = 1,
+                    //                                N_CURRENT_NUM = 0,
+                    //                                S_TYPE = "",
 
-                                });
-                            }
-                        }
-                        // TaskProcess.CreateTask("", locs[6], locs[7], "test", 9, new List<string> { "test" }, 1, 1, 1);
-                    }
+                    //                            });
+                    //                        }
+                    //                    }
+                    //                   // TaskProcess.CreateTask("", locs[6], locs[7], "test", 9, new List<string> { "test" }, 1, 1, 1);
+                    //                   }
 
                     #endregion [鑴氭湰][20250323151832119][涓氬姟閫昏緫.Program4]
                 }
@@ -220,10 +196,8 @@
                     try
                     {
                         #region    [鑴氭湰][20250325083326611][涓氬姟閫昏緫.绗笁鏍囨.鎹风灛鎶撹噦2]
-                        //jsz2鎹风灛鎶撹噦2
 
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadJS2", new object[] { tag });
-
                         #endregion [鑴氭湰][20250325083326611][涓氬姟閫昏緫.绗笁鏍囨.鎹风灛鎶撹噦2]
                     }
                     catch (Exception ex)
@@ -314,6 +288,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250610002047005][涓氬姟閫昏緫.绗笁鏍囨.缁寸郴灏�鍙�缁村笇灏旀姄鑷�R]
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "Threadwxr1R", new object[] { tag });
                         #endregion [鑴氭湰][20250610002047005][涓氬姟閫昏緫.绗笁鏍囨.缁寸郴灏�鍙�缁村笇灏旀姄鑷�R]
                     }
@@ -343,6 +318,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250325083315503][涓氬姟閫昏緫.绗笁鏍囨.缁寸郴灏�鍙�缁村笇灏旀姄鑷�L]
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "Threadwxr2L", new object[] { tag });
                         #endregion [鑴氭湰][20250325083315503][涓氬姟閫昏緫.绗笁鏍囨.缁寸郴灏�鍙�缁村笇灏旀姄鑷�L]
                     }
@@ -372,6 +348,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250610002647095][涓氬姟閫昏緫.绗笁鏍囨.缁寸郴灏�鍙�缁村笇灏旀姄鑷�R]
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "Threadwxr2R", new object[] { tag });
                         #endregion [鑴氭湰][20250610002647095][涓氬姟閫昏緫.绗笁鏍囨.缁寸郴灏�鍙�缁村笇灏旀姄鑷�R]
                     }
@@ -386,7 +363,6 @@
                 }
                 ExitJudgeStack.TryPop(out int exitJudgeVal);
             });
-
             /// <summary>
             /// 绋嬪簭鐗囨:浠诲姟涓嬪彂
             /// 鎻忚堪:
@@ -487,6 +463,7 @@
                         // - 鍏夋爡浜や簰澶勭悊銆傘�
                         Action<HaiKangOrderInfo> myDelegate = (t) => continueTask(t);
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadGrats", new object[] { tag, myDelegate });
+
                         // 鍙戦偅绉戜笅鏂欏厜鏍呫�
                         #endregion [鑴氭湰][20250611223832523][涓氬姟閫昏緫.鍏夋爡澶勭悊]
                     }
@@ -516,6 +493,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250616094224396][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1020绌烘涓嬬嚎]
+
                         //1020  1023 绌烘涓嬬嚎
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadEdown", new object[] { tag });
                         #endregion [鑴氭湰][20250616094224396][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1020绌烘涓嬬嚎]
@@ -575,6 +553,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250616094632985][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.瀹氬瓙婊′笅绾縘
+
                         //瀹氬瓙婊′笅绾� 1008  1016   ->  1026
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadDdown", new object[] { tag });
                         #endregion [鑴氭湰][20250616094632985][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.瀹氬瓙婊′笅绾縘
@@ -605,6 +584,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250616094511322][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.杞瓙婊′笅绾縘
+
                         //杞瓙婊′笅绾� 1002  1010   - RGV2宸ヤ綅涓嶅彲鍒�1017 涓嶅彲涓嬪彂2宸ヤ綅浠诲姟銆�                         AutoThread.InvokeMethod(AutoThread.Instance, "Thread0210Down", new object[] { tag });
                         #endregion [鑴氭湰][20250616094511322][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.杞瓙婊′笅绾縘
@@ -635,6 +615,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250616095605911][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.涓嬫枡浣嶆娴媇
+
                         //涓嬫枡浣嶆娴嬨�  1003  鍒颁綅鏃�鍐�鏍囪瘑淇″彿 骞�缁欐満姊版墜淇″彿銆� 
                         AutoThread.InvokeMethod(AutoThread.Instance, "Thread涓嬫枡浣嶆娴�, new object[] { tag });
                         #endregion [鑴氭湰][20250616095605911][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.涓嬫枡浣嶆娴媇
@@ -664,9 +645,8 @@
                     if (IsExitApp) { break; }
                     try
                     {
-
-                        ////2217 - 1003
                         #region    [鑴氭湰][20250616095709155][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1鍙稦NK鏈烘鎵嬪畬鎴怾
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadFNK1Over", new object[] { tag });
                         #endregion [鑴氭湰][20250616095709155][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1鍙稦NK鏈烘鎵嬪畬鎴怾
                     }
@@ -696,6 +676,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250616095733680][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.2鍙稦NK鏈烘鎵嬪畬鎴怾
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "ThreadFNK2Over", new object[] { tag });
                         #endregion [鑴氭湰][20250616095733680][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.2鍙稦NK鏈烘鎵嬪畬鎴怾
                     }
@@ -785,6 +766,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250617085750712][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1022agv涓婄┖.Program1]
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "Thread1022Up", new object[] { tag });
                         #endregion [鑴氭湰][20250617085750712][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1022agv涓婄┖.Program1]
                     }
@@ -814,6 +796,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250617085800942][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1030涓嬫瘝鎵�Program1]
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "Thread1030Down", new object[] { tag });
                         #endregion [鑴氭湰][20250617085800942][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.1030涓嬫瘝鎵�Program1]
                     }
@@ -843,6 +826,7 @@
                     try
                     {
                         #region    [鑴氭湰][20250617085809982][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.2030杈撻�绾夸笅瀹氬瓙.Program1]
+
                         AutoThread.InvokeMethod(AutoThread.Instance, "Thread2030Down", new object[] { tag });
                         #endregion [鑴氭湰][20250617085809982][涓氬姟閫昏緫.娴佺▼2鐑鐞嗙倝杩涘嚭.2030杈撻�绾夸笅瀹氬瓙.Program1]
                     }
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\350\207\252\345\256\232\344\271\211\347\261\273.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\350\207\252\345\256\232\344\271\211\347\261\273.cs"
index dc18472..1252671 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\350\207\252\345\256\232\344\271\211\347\261\273.cs"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Build/Project/\344\273\243\347\240\201/\350\207\252\345\256\232\344\271\211\347\261\273.cs"
@@ -28,7 +28,6 @@
 using GZ.DB.Repository.OIDATABASE;
 using GZ.DB.IRepository.OIDATABASE;
 using GZ.DB.Entity.OIDATABASE;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement;
 namespace GZ.Projects.AuxAllWCS
 {
     public class Settings
@@ -563,8 +562,8 @@
         #region    [鑷畾涔夌被][20250325152141671][TaskProcess]
         internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
         {
-            LogHelper.Info($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>"); 
 
+            LogHelper.Debug($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>");
             var cntrInfo = string.Join(",", cntrs);
             ILocRepository locc = new LocRepository();
             var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
@@ -605,6 +604,7 @@
                 };
                 ITaskRepository taskserice = new TaskRepository();
                 taskserice.Insert(wmsTask);
+
                 if (workMode == "AGV")
                 {
                     fromLoc.S_LOCK_STATE = "鍑哄簱閿�;
@@ -613,7 +613,7 @@
                     locc.Update(endLoc);
                 }
 
-                LogHelper.Info($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛");
+                LogHelper.Debug($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛");
                 return true;
             }
             catch (Exception ex)
@@ -657,12 +657,6 @@
     {
         #region    [鑷畾涔夌被][20250417094750211][Utils]
 
-
-        public void ThreadSettingInit()
-        {
-            Console.WriteLine("Utils ThreadSettingInit ");
-           
-        }
         #endregion [鑷畾涔夌被][20250417094750211][Utils]
     }
     public class ToWMSMES
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/PlcConfig" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/PlcConfig"
index e7d0346..074bf3c 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/PlcConfig"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/PlcConfig"
@@ -5901,6 +5901,23 @@
           "Reserve1": "",
           "Reserve2": "",
           "Reserve3": ""
+        },
+        {
+          "Id": "20250623084011631",
+          "Order": 25,
+          "Name": "R鎵嬪姩1鑷姩2",
+          "FullName": "RGV.R鎵嬪姩1鑷姩2",
+          "DataType": "System.UInt16",
+          "DataValue": "",
+          "SetValue": "",
+          "Address": "DB104.2",
+          "AddrType": "",
+          "Length": 1,
+          "Desc": "0-鏃犳晥,1-鎵嬪姩,2-鑱旀満,3-鑴辨満",
+          "Trigger": false,
+          "Reserve1": "",
+          "Reserve2": "",
+          "Reserve3": ""
         }
       ],
       "GroupList": [],
@@ -6769,5 +6786,5 @@
     }
   ],
   "CreationTime": "2025-02-26 15:31:23",
-  "LastWriteTime": "2025-06-18 08:31:50"
+  "LastWriteTime": "2025-06-23 08:50:40"
 }
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/\350\256\276\345\244\207\351\200\232\344\277\241.json" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/\350\256\276\345\244\207\351\200\232\344\277\241.json"
index 08fed37..9cf1176 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/\350\256\276\345\244\207\351\200\232\344\277\241.json"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Devices/\350\256\276\345\244\207\351\200\232\344\277\241.json"
@@ -2,5 +2,5 @@
   "ProjectSn": "1",
   "DeviceList": [],
   "CreationTime": "2025-02-26 15:31:23",
-  "LastWriteTime": "2025-06-18 08:31:50"
+  "LastWriteTime": "2025-06-23 08:51:04"
 }
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Net/Conn.json" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Net/Conn.json"
index 3449a48..0fa0bd9 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Net/Conn.json"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Net/Conn.json"
@@ -340,5 +340,5 @@
     }
   ],
   "CreationTime": "2025-02-26 15:31:23",
-  "LastWriteTime": "2025-06-18 08:32:12"
+  "LastWriteTime": "2025-06-23 08:57:03"
 }
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs"
new file mode 100644
index 0000000..1551ace
--- /dev/null
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/VS\350\207\252\345\256\232\344\271\211\347\261\273/AutoThread.cs"
@@ -0,0 +1,1369 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Collections.Concurrent;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using GZ.Modular.Redis;
+using GZ.DB.Entity.OIDATABASE;
+using GZ.DB.IRepository.OIDATABASE;
+using GZ.DB.Repository.OIDATABASE;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+using System.Windows.Interop;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
+
+namespace GZ.Projects.AuxAllWCS
+{
+    public partial class AutoThread
+    {
+
+        private static AutoThread _instance;
+
+        // 绉佹湁鏋勯�鍑芥暟闃叉澶栭儴瀹炰緥鍖�+        private AutoThread() { }
+
+        public static AutoThread Instance
+        {
+            get
+            {
+                if (_instance == null)
+                {
+                    _instance = new AutoThread();
+                }
+                return _instance;
+            }
+        }
+
+        // 绾跨▼瀹夊叏鐨勫鎵樼紦瀛�+        private static readonly ConcurrentDictionary<string, Delegate> _methodCache = new ConcurrentDictionary<string, Delegate>();
+
+        // 鏂规硶鎵ц鍣�+        public static object InvokeMethod(object instance, string methodName, params object[] args)
+        {
+            var cacheKey = $"{instance.GetType().FullName}_{methodName}";
+
+            if (!_methodCache.TryGetValue(cacheKey, out var methodDelegate))
+            {
+                // 鑾峰彇鏂规硶淇℃伅
+                var methodInfo = instance.GetType().GetMethod(
+                    methodName,
+                    BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+
+                if (methodInfo == null)
+                    throw new MissingMethodException($"Method {methodName} not found");
+
+                // 鍒涘缓濮旀墭骞剁紦瀛�+                methodDelegate = Delegate.CreateDelegate(
+                    GetDelegateType(methodInfo),
+                    instance,
+                    methodInfo);
+
+                _methodCache.TryAdd(cacheKey, methodDelegate);
+            }
+
+            // 鎵ц濮旀墭
+            return methodDelegate.DynamicInvoke(args);
+        }
+
+        // 鏍规嵁鏂规硶绛惧悕鐢熸垚瀵瑰簲鐨勫鎵樼被鍨�+        private static Type GetDelegateType(MethodInfo methodInfo)
+        {
+            var parameterTypes = methodInfo.GetParameters()
+                .Select(p => p.ParameterType)
+                .ToList();
+
+            if (methodInfo.ReturnType == typeof(void))
+            {
+                return System.Linq.Expressions.Expression.GetActionType(parameterTypes.ToArray());
+            }
+            else
+            {
+                parameterTypes.Add(methodInfo.ReturnType);
+                return System.Linq.Expressions.Expression.GetFuncType(parameterTypes.ToArray());
+            }
+        }
+
+        /// <summary>
+        /// 閰嶇疆鍒濆鍖栥�
+        /// </summary>
+        /// <param name="tag"></param>
+        /// <param name="action"></param>
+        public void ThreadSettingInit(Tag tag, Action action)
+        {
+            Console.WriteLine("鍒濆鍖栭厤缃�绾跨▼ run " + tag.Global.SettingsOver);
+            if (tag.Global.SettingsOver == 0)
+            {
+                action?.Invoke();
+                tag.Global.SettingsOver = 1;
+            }
+            else if (Settings.deviceInfos.Count == 0)
+            {
+                tag.Global.SettingsOver = 0;
+            }
+        }
+
+        /// <summary>
+        /// 鎹烽『1 淇″彿澶勭悊
+        /// </summary>
+        /// <param name="tag"></param>
+        public void ThreadJS1(Tag tag)
+        {
+            Console.WriteLine($"ThreadJS1 鎹烽『1 淇″彿澶勭悊 =================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js鎹烽『1");
+
+            if (VERX != null)
+            {
+                if (tag.Js1.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[0]
+                    }));
+                    LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js1.D1212_LAST = 1;
+                        RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js1.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0)
+                {
+                    //tag.Js1.D1212_LAST = 0; 
+                    RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "0", out string msg);
+                }
+                if (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[1]
+                    }));
+                    LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js1.D1213_LAST = 1;
+                        RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js1.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0)
+                {
+                    //tag.Js1.D1213_LAST = 0;
+                    RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "0", out string msg);
+                }
+            }
+        }
+        /// <summary>
+        /// 鎹烽『2 淇″彿澶勭悊
+        /// </summary>
+        /// <param name="tag"></param>
+        public void ThreadJS2(Tag tag)
+        {
+            Console.WriteLine($"ThreadJS2 鎹烽『2 淇″彿澶勭悊 =================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 2 && x.deviceName == "Js鎹烽『2");
+
+            if (VERX != null)
+            {
+                if (tag.Js2.D1212_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[0]
+                    }));
+                    LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js2.D1212_LAST = 1;
+
+                        RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js2.D1212_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0)
+                {
+                    //tag.Js2.D1212_LAST = 0;
+
+                    RedisHelper.Add($"Js鎹烽『1.D1212_LAST", "0", out string msg);
+                }
+                if (tag.Js2.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js2.D1212, 3) == 1)
+                {
+                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                    {
+                        requestType = 4,
+                        endBit = VERX.location[1]
+                    }));
+                    LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                    if (str.Contains("true"))
+                    {
+                        //tag.Js2.D1213_LAST = 1;
+
+                        RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "1", out string msg);
+                    }
+                }
+                if (tag.Js2.D1213_LAST == 1 && TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0)
+                {
+                    //tag.Js2.D1213_LAST = 0;
+
+                    RedisHelper.Add($"Js鎹烽『1.D1213_LAST", "0", out string msg);
+                }
+            }
+        }
+        /// <summary>
+        /// 缁村笇灏� 宸�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr1L(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr1L 缁村笇灏� 宸�=================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr1.R44 && !tag.wxr1.R44_LAST && tag.wxr1.R10)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[0],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr1.R44_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    //TaskRepository ts = new TaskRepository();
+                    if (tag.wxr1.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr1.R10)
+                        {
+                            tag.wxr1.R10_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr1.R10 = true;
+                                tag.wxr1.R44_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁村笇灏� 鍙�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr1R(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr1R 缁村笇灏� 鍙�=================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("1"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr1.R46 && !tag.wxr1.R46_LAST && tag.wxr1.R11)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[1],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr1.R46_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    if (tag.wxr1.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr1.R11)
+                        {
+                            tag.wxr1.R11_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr1.R11 = true;
+                                tag.wxr1.R46_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁村笇灏� 宸�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr2L(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr2L 缁村笇灏� 宸�=================> ");
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr2.R44 && !tag.wxr2.R44_LAST && tag.wxr2.R10)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[0],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[0]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr2.R44_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    if (tag.wxr2.R10_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr2.R10)
+                        {
+                            tag.wxr2.R10_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[0], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr2.R10 = true;
+                                tag.wxr2.R44_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[0], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁村笇灏� 鍙�+        /// </summary>
+        /// <param name="tag"></param>
+        public void Threadwxr2R(Tag tag)
+        {
+            Console.WriteLine($"Threadwxr2R 缁村笇灏� 鍙�=================> ");
+
+            var VERX = Settings.deviceInfos?.Find(x => x.deviceType == 1 && x.deviceName.Contains("2"));
+
+            if (VERX != null)
+            {
+                if (tag.wxr2.R46 && !tag.wxr2.R46_LAST && tag.wxr2.R11)
+                {
+                    if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                    {
+                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/200", JsonConvert.SerializeObject(new
+                        {
+                            requestType = 1,
+                            cntrCode = traycode,
+                            startBit = VERX.location[1],
+                            endBit = ""
+                        }));
+                        LogHelper.Info($"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}");
+                        if (str.Contains("true"))
+                        {
+                            tag.wxr2.R46_LAST = true;
+                        }
+                    }
+                    else
+                    {
+                        TcpServer.TcpServerSend(VERX.deviceNo[2], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E"));
+                    }
+                }
+                else
+                {
+                    if (tag.wxr2.R11_LAST) //鎵樼洏鏀剧疆淇″彿銆傘�
+                    {
+                        if (tag.wxr2.R11)
+                        {
+                            tag.wxr2.R11_LAST = false;
+                        }
+                        else
+                        if (TcpServer.TrayIps.TryGetValue(VERX.deviceNo[1], out string traycode))
+                        {
+                            //涓婃姤鏍¢獙銆�+                            ///var str = Settings.apiHelper.Post(Settings.MESbaseUrl + "mom-basic/dataTransmission/json/service/202", requestJson);
+                            var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + "mom-basic/dataTransmission/json/service/202", JsonConvert.SerializeObject(new
+                            {
+                                sceneType = 1,
+                                cntrCode = traycode,
+                            }));
+                            if (str.Contains("true"))
+                            {
+                                //Conn.榛樿Redis.SetValue("缁村笇灏旀姄鑷�.R10", "true", "缁村笇灏旀姄鑷�Queue");
+                                tag.wxr2.R11 = true;
+                                tag.wxr2.R46_LAST = false;
+                            }
+                            else
+                            {
+                                //鎶ヨ銆�+                            }
+                        }
+                        else { TcpServer.TcpServerSend(VERX.deviceNo[1], GZ.Device.PLC.PlcHelper.Hex2Bin("544F4E")); }
+                    }
+                }
+            }
+        }
+
+
+        public void ThreadTaskRun(Tag tag, Func<TaskEntity, bool> action)
+        {
+            Console.WriteLine($"ThreadTaskRun 浠诲姟涓嬪彂 =================> ");
+            LogHelper.Info("ThreadTaskRun 浠诲姟涓嬪彂");
+
+            ITaskRepository taskservice = new TaskRepository();
+            try
+            {
+                LogHelper.Info("浠诲姟涓嬪彂  ARG 浠诲姟 杩涘叆");
+                #region AGV浠诲姟涓嬪彂銆�+
+                var tklist = taskservice.FindList(x => x.S_B_STATE == "鏈墽琛� && x.S_WORK_MODE == "AGV");
+                if (tklist.Any())
+                    foreach (var tk in tklist.GroupBy(item =>
+                    {
+                        var ticks = item.T_CREATE.Ticks;
+                        return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
+                    }).OrderBy(x => x.Key))
+                    {
+                        var ts = tk.OrderByDescending(x => x.N_PRIORITY).ToList();
+                        foreach (var t in ts)
+                        {
+                            var b = false;
+                            b = action?.Invoke(t) ?? false; //new ViewModel().RunTask(t);
+
+                            if (b)
+                            {
+                                t.S_B_STATE = "宸叉帹閫�;
+                                taskservice.Update(t);
+                            }
+                        }
+                        break;
+                    }
+                //foreach (var tk in tklist.GroupBy(item =>
+                //{
+                //    var ticks = item.T_CREATE.Ticks;
+                //    return new DateTime(ticks - ticks % (10 * TimeSpan.TicksPerMinute));
+                //}).OrderBy(x => x.Key))
+                //if (tklist.Any())
+                //{
+
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info(ex.Message + ex.StackTrace);
+            }
+            try
+            {
+                #region Rgv
+
+                LogHelper.Info($"鏌ョ湅RGV 鐢甸噺锛氥�{tag.RGV.R褰撳墠鐢甸噺}銆�鍏呯數鐘舵�锛氥�{tag.RGV.R鍏呯數鐘舵�}銆�鏁呴殰浠g爜锛氥�{tag.RGV.RgvrunError}銆�);
+
+                if (tag.RGV.taskend == 125)
+                {
+                    System.Threading.Thread.Sleep(3000);
+                    return;
+                }
+                LogHelper.Info("浠诲姟涓嬪彂  Rgv 浠诲姟 杩涘叆");
+
+                var task1Isrun = false;
+                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver != 1)
+                {
+                    task1Isrun = true;
+                    //if (tag.RGV.bit1taskOver_LAST == 1)
+                    //    RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                }
+                var task2Isrun = false;
+                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver != 1)
+                {
+                    task2Isrun = true;
+                    //if (tag.RGV.bit2taskOver_LAST == 1)
+                    //    RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                }
+                if (task1Isrun || task2Isrun)
+                {
+                    string mes = "";
+                    if (task1Isrun)
+                        mes += tag.RGV.ReadTask1No + "鎵ц涓�..";
+                    if (task2Isrun)
+                        mes += tag.RGV.ReadTask2No + "鎵ц涓�..";
+                    LogHelper.Info($"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�");
+                    System.Threading.Thread.Sleep(3000);
+                    return; 
+                }
+                var thisOver = 0;
+                TaskEntity task1 = null;
+                TaskEntity task2 = null;
+
+                LogHelper.Info($"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆�);
+                if (tag.RGV.ReadTask1No > 0 && tag.RGV.bit1taskOver == 1)
+                {
+                    var taskno = tag.RGV.ReadTask1No;
+                    LogHelper.Info($"RGV 1宸ヤ綅浠诲姟{tag.RGV.ReadTask1No}");
+                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
+                    task1 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
+
+                    LogHelper.Info($"RGV 1宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task1)}.bit1taskOver_LAST锛歿tag.RGV.bit1taskOver_LAST}");
+                    if (tag.RGV.bit1taskOver_LAST == 0 && task1 != null)
+                    {
+                        if (task1.S_B_STATE != "瀹屾垚")
+                        {
+                            thisOver = 1;
+                            if (task1.S_B_STATE == "鍙栬揣瀹屾垚")
+                            {
+                                task1.S_B_STATE = "瀹屾垚";
+                                tag.RGV.ReadTask1No = 0;
+                            }
+                            else
+                            {
+                                task1.S_B_STATE = "鍙栬揣瀹屾垚";
+                            }
+                            tag.RGV.bit1taskOver = 0;
+                            LogHelper.Info($"RGV 1宸ヤ綅浠诲姟{task1.S_TASK_NO} 鐘舵�鍒囨崲涓簕task1.S_B_STATE}");
+                            //tag.RGV.bit1taskOver_LAST = 1;
+                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "1", out string msg);
+                            LogHelper.Info($"RGV 1宸ヤ綅浠诲姟鍐欏鐞�);
+                            taskservice.Update(task1);
+                            LogHelper.Info($"RGV 1宸ヤ綅浠诲姟鏇存柊銆�);
+                        }
+                        else
+                        {
+                            LogHelper.Info("RGV1宸ヤ綅浠诲姟宸茬粡瀹屾垚銆�);
+                        }
+                    }
+                }
+                else if (tag.RGV.ReadTask1No == 0)
+                {
+                    LogHelper.Info($"RGV 1宸ヤ綅娌℃湁浠诲姟銆�);
+                }
+
+                LogHelper.Info($"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆�);
+                if (tag.RGV.ReadTask2No > 0 && tag.RGV.bit2taskOver == 1)
+                {
+                    var taskno = tag.RGV.ReadTask2No;
+                    LogHelper.Info($"RGV 2宸ヤ綅浠诲姟{tag.RGV.ReadTask2No}");
+                    string tno = "TN" + (DateTime.Now.ToString("yy")) + ((taskno.ToString()).PadLeft(8, '0'));
+                    task2 = taskservice.FindEntity(x => x.S_TASK_NO == tno);
+
+                    LogHelper.Info($"RGV2宸ヤ綅浠诲姟{JsonConvert.SerializeObject(task2)}.bit2taskOver_LAST锛歿tag.RGV.bit2taskOver_LAST}");
+                    if (tag.RGV.bit2taskOver_LAST == 0 && task2 != null)
+                    {
+                        if (task2.S_B_STATE != "瀹屾垚")
+                        {
+                            thisOver = 2;
+                            if (task2.S_B_STATE == "鍙栬揣瀹屾垚")
+                            {
+                                task2.S_B_STATE = "瀹屾垚";
+                                tag.RGV.ReadTask2No = 0;
+                            }
+                            else
+                            {
+                                task2.S_B_STATE = "鍙栬揣瀹屾垚";
+                            }
+                            tag.RGV.bit2taskOver = 0;
+                            LogHelper.Info($"RGV 2宸ヤ綅浠诲姟{task2.S_TASK_NO} 鐘舵�鍒囨崲涓簕task2.S_B_STATE}");
+                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "1", out string msg);
+                            LogHelper.Info($"RGV 2宸ヤ綅浠诲姟鍐欏鐞�);
+                            taskservice.Update(task2);
+                            LogHelper.Info($"RGV 2宸ヤ綅浠诲姟鏇存柊銆�);
+                        }
+                        else
+                        {
+                            LogHelper.Info("RGV2宸ヤ綅浠诲姟宸茬粡瀹屾垚銆�);
+                        }
+                    }
+                }
+                else if (tag.RGV.ReadTask2No == 0)
+                {
+                    LogHelper.Info($"RGV 2宸ヤ綅娌℃湁浠诲姟銆�);
+                }
+
+
+
+                //if (thisOver > 0)
+                //{
+                //    var v2 = RedisHelper.Get<WriteGroupEntity>("RGVQueue", out string rev);
+                //    if (v2 != null)
+                //    {
+                //        LogHelper.Info($"RGVQueue 璇诲埌缁撴灉-{JsonConvert.SerializeObject(v2)}  \n 涓嬪彂鍓嶈繘琛屾竻闄ゃ�");
+                //        var b = RedisHelper.Remove("RGVQueue", out rev);
+                //    }
+                //}
+
+                ///1 鏈夎揣  灏� 鍙栥�  1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗�+                var tklist = taskservice.FindList(x => x.S_B_STATE == "鏈墽琛� && x.S_WORK_MODE == "RGV").OrderBy(x => x.T_CREATE).ToList();
+                if (task1 != null && task1.S_B_STATE != "瀹屾垚") //1鏈変换鍔�+                {
+                    if (task2 != null && task2.S_B_STATE != "瀹屾垚")// 1 鏈変换鍔� 2 鏈変换鍔°� 
+                    {
+                        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 涔熸湁浠诲姟{task2.S_TASK_NO}銆�寮�宸ヤ綅1 鍗歌揣銆�);
+                        tag.RGV.workMod = 1;
+                        tag.RGV.taskmod = 2;
+                        tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
+                        tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
+                        System.Threading.Thread.Sleep(750);
+                        //RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                        //tag.RGV.taskend = 125;
+                        //Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue");
+
+                        LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0");
+                        RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                        LogHelper.Info($"{task1.S_TASK_NO}> end 鍐�125");
+                        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                    }
+                    else //1鏈変换鍔� 2 娌′换鍔°�  
+                    {
+
+                        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�");
+
+                        var leftSide = new List<string> { "1023", "1020" };
+                        var RightSide = new List<string> { "1002", "1008", "1010", "1016" };
+                        bool creT2 = false;
+
+                        // 2鍙�浼樺厛缁�1020  1008  1016
+                        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");
+                        if (t2 != null)
+                        {
+                            LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵�020  1008  1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆�);
+                            tag.RGV.workMod = 2;
+                            tag.RGV.taskmod = 1;
+                            tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                            tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                            t2.S_B_STATE = "宸叉帹閫�;
+                            taskservice.Update(t2);
+                            creT2 = true;
+                            System.Threading.Thread.Sleep(750);
+                            LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                            RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                            LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                            Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        }
+                        ////2 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈�+                        //else if (leftSide.Contains(task1.S_START_LOC))
+                        //{
+                        //    leftSide.Remove(task1.S_START_LOC);
+                        //    var lsde = leftSide.FirstOrDefault();
+                        //    t2 = tklist.Find(x => x.S_START_LOC == lsde && x.S_END_LOC != "1017");
+                        //    if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆�+                        //    {
+                        //        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔t2.S_TASK_NO}銆�);
+                        //        tag.RGV.workMod = 2;
+                        //        tag.RGV.taskmod = 1;
+                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                        //        t2.S_B_STATE = "宸叉帹閫�;
+                        //        taskservice.Update(t2);
+                        //        creT2 = true;
+                        //        System.Threading.Thread.Sleep(750);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                        //        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        //    }
+                        //}
+                        //else if (RightSide.Contains(task1.S_START_LOC))
+                        //{
+                        //    RightSide.Remove(task1.S_START_LOC);
+                        //    t2 = tklist.Find(x => RightSide.Contains(x.S_START_LOC) && x.S_END_LOC != "1017");
+                        //    if (t2 != null) //鍚屼晶鍙栬揣浠诲姟銆�+                        //    {
+                        //        LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚�1002,1010 鍙栬揣浠诲姟{t2.S_TASK_NO}銆�);
+                        //        tag.RGV.workMod = 2;
+                        //        tag.RGV.taskmod = 1;
+                        //        tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                        //        tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                        //        t2.S_B_STATE = "宸叉帹閫�;
+                        //        taskservice.Update(t2);
+                        //        creT2 = true;
+                        //        System.Threading.Thread.Sleep(750);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�125");
+                        //        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                        //        LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                        //        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        //    }
+                        //}
+                        else //1 鐩存帴鍗歌揣銆�
+                        //if (!creT2)
+                        {
+                            LogHelper.Info($"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 娌℃湁鍚屼晶鍙栬揣浠诲姟 1宸ヤ綅鍗歌揣銆�);
+                            tag.RGV.workMod = 1;
+                            tag.RGV.taskmod = 2;
+                            tag.RGV.taskno1 = Convert.ToUInt32(task1.S_TASK_NO.Substring(4));
+                            tag.RGV.task1do = Convert.ToUInt16(task1.S_END_LOC);
+                            System.Threading.Thread.Sleep(750);
+                            LogHelper.Info($"{task1.S_TASK_NO}> bit1taskOver_LAST 鍐�0");
+                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                            LogHelper.Info($"{task1.S_TASK_NO}> taskend 鍐�0");
+                            Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        }
+                    }
+                }
+                else
+                {
+                    if (task2 != null && task2.S_B_STATE != "瀹屾垚")// 1 娌′换鍔� 2 鏈変换鍔°� 
+                    {
+                        LogHelper.Info($"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 鏈変换鍔task2.S_TASK_NO}銆傚伐浣�鍗歌揣銆傘�");
+                        //2 鍗歌揣銆�+                        tag.RGV.workMod = 2;
+                        tag.RGV.taskmod = 2;
+                        tag.RGV.taskno2 = Convert.ToUInt32(task2.S_TASK_NO.Substring(4));
+                        tag.RGV.task2do = Convert.ToUInt16(task2.S_END_LOC);
+                        System.Threading.Thread.Sleep(750);
+                        LogHelper.Info($"{task2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                        RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                        //tag.RGV.taskend = 125;
+                        LogHelper.Info($"{task2.S_TASK_NO}> taskend 鍐�25");
+                        Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                    }
+                    else if (tklist.Any()) //1mei 浠诲姟  2 娌′换鍔°�
+                    {
+                        LogHelper.Info($"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆備紭鍏�宸ヤ綅缁堢偣1017浠诲姟銆傘�");
+                        //銆佷笅 1017浠诲姟 缁�鍙峰伐浣嶃�
+                        //var lss = tklist.Take(2).ToList();
+                        var e1017first = tklist.Find(x => x.S_START_LOC == "1002" || x.S_START_LOC == "1010" || x.S_START_LOC == "1023");
+                        //if (e1017first != null)
+                        //{
+                        //    e1017first = tklist.FirstOrDefault();
+                        //}
+                        if (e1017first != null)
+                        {
+                            LogHelper.Info($"鏌ョ湅RGV1 浠诲姟宸ヤ綅2 娌′换鍔°� 1002  1010  1023鍙栬揣浠诲姟{e1017first.S_TASK_NO}銆�);
+                            tag.RGV.workMod = 1;
+                            tag.RGV.taskmod = 1;
+                            uint tno = Convert.ToUInt32(e1017first.S_TASK_NO.Substring(4));
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> 杞崲鍚庝换鍔″彿{tno} 寮�鍐欏叆銆�);
+                            tag.RGV.taskno1 = tno;
+                            LogHelper.Info($"{e1017first.S_TASK_NO}>寮�鍐欏叆 task1do>>{e1017first.S_START_LOC}銆�);
+                            tag.RGV.task1do = Convert.ToUInt16(e1017first.S_START_LOC);
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> 鏇存柊浠诲姟銆�);
+                            e1017first.S_B_STATE = "宸叉帹閫�;
+                            taskservice.Update(e1017first);
+                            System.Threading.Thread.Sleep(750);
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> bit1taskOver_LAST 鍐�");
+                            RedisHelper.Add($"RGV.bit1taskOver_LAST", "0", out string msg);
+                            LogHelper.Info($"{e1017first.S_TASK_NO}> taskend 鍐�25");
+                            //tag.RGV.taskend=125
+                            Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                        }
+                        else
+                        {
+                            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");
+                            if (tklist != null)
+                            {
+                                LogHelper.Info($"鏌ョ湅RGV1 娌′换鍔″伐浣� 娌′换鍔°� 鎵�020  1008  1016鍙栬揣浠诲姟{t2.S_TASK_NO}銆�);
+                                tag.RGV.workMod = 2;
+                                tag.RGV.taskmod = 1;
+                                tag.RGV.taskno2 = Convert.ToUInt32(t2.S_TASK_NO.Substring(4));
+                                tag.RGV.task2do = Convert.ToUInt16(t2.S_START_LOC);
+                                t2.S_B_STATE = "宸叉帹閫�;
+                                taskservice.Update(t2);
+                                System.Threading.Thread.Sleep(750);
+                                LogHelper.Info($"{t2.S_TASK_NO}> bit2taskOver_LAST 鍐�0");
+                                RedisHelper.Add($"RGV.bit2taskOver_LAST", "0", out string msg);
+                                LogHelper.Info($"{t2.S_TASK_NO}> end 鍐�125");
+                                Conn.榛樿Redis.SetValue("RGV.taskend", "125", "RGVQueue", false);
+                            }
+                        }
+                    }
+                }
+                LogHelper.Info($"rgv 澶勭悊瀹屾垚銆倀askend 125");
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info(ex.Message + ex.StackTrace);
+            }
+        }
+
+
+        public void ThreadGrats(Tag tag, Action<HaiKangOrderInfo> continueTask)
+        {
+            Console.WriteLine($"ThreadGrats 鍏夋爡澶勭悊 =================> ");
+            var taskCOdes = new List<string> { "Sarrive", "Srelease", "Earrive", "Erelease" };
+            TaskActRepository taskActRepository = new TaskActRepository();
+            TaskRepository taskRepository = new TaskRepository();
+            var requires = taskActRepository.FindList(x => taskCOdes.Contains(x.S_ACTION_CODE) && x.N_CREATEMETHOD == 0);
+            foreach (var item in requires)
+            {
+                var tin = taskCOdes.IndexOf(item.S_ACTION_CODE);
+                if (tin == -1)
+                {
+                    item.N_CREATEMETHOD = -1;
+                    taskActRepository.Update(item);
+                    continue;
+                }
+                //var task = taskRepository.FindEntity(x => x.S_TASK_NO == item.S_TASK_NO);
+                string loc = "";
+                if (tin < 2)
+                {
+                    loc = item.S_START_LOC;
+                }
+                else
+                {
+                    loc = item.S_END_LOC;
+                }
+                if (loc == null) continue; else loc = loc.Trim();
+                bool goin = tin % 2 == 0;
+                bool continuuuuu = false;
+                var dev = Settings.deviceInfos.Find(x => x.location.Contains(loc));
+                if (dev != null)
+                {
+                    var V = dev.location.ToList().FindIndex(x => x == loc) == 0;
+                    //杞﹁蛋浜� 寮�厜鏍�+                    if (!goin)
+                    {
+                        if (dev.deviceType == 1)
+                        {
+                            LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue"));
+                            Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "R02" : "R04"), "true", dev.deviceName + "Queue");
+
+                        }
+                        else if (dev.deviceType == 2)
+                        {
+                            LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue"));
+                            Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "D1222" : "D1223"), "1", dev.deviceName + "Queue");
+                        }
+
+                        item.N_CREATEMETHOD = 1;
+                        taskActRepository.Update(item);
+                    }
+                    //杞﹁杩涘叆浜や簰銆�+                    else
+                    {
+                        if (dev.deviceType == 1)
+                        {
+                            var tf = Conn.榛樿Redis.GetValue(dev.deviceName + "." + (V ? "R50" : "R52"));//璇诲叧闂姸鎬�+                            if (tf?.ToLower() == "true")
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆�宸茬粡鍏抽棴锛�);
+                                continuuuuu = true;
+                            }
+                            else
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue"));
+                                Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "R01" : "R03"), "true", dev.deviceName + "Queue");
+                            }
+
+                        }
+                        else if (dev.deviceType == 2)
+                        {
+                            var tf = Conn.榛樿Redis.GetValue(dev.deviceName + ".D1202");
+                            int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
+                            if (TcpServer.GetBitdata(numm, (V ? 0 : 1)) == 1)
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆�宸茬粡鍏抽棴锛�);
+                                continuuuuu = true;
+                            }
+                            else
+                            {
+                                LogHelper.Info($"{dev.deviceName}{(V ? "宸� : "鍙�)} 鍏夋爡{(goin ? "鍏抽棴" : "寮�惎")} 鐢宠銆� + string.Format("{0}{1}{2}", dev.deviceName + "." + (V ? "D1220" : "D1221"), dev.deviceName + "Queue"));
+                                Conn.榛樿Redis.SetValue(dev.deviceName + "." + (V ? "D1220" : "D1221"), "1", dev.deviceName + "Queue");
+                            }
+                        }
+
+                    }
+
+                }
+                if (continuuuuu)
+                {
+                    LogHelper.Info($"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛�);
+                    continueTask?.Invoke(new HaiKangOrderInfo
+                    {
+                        reqCode = item.S_ID.Replace("-", ""),
+                        taskCode = item.S_TASK_NO
+                    });
+                    item.N_CREATEMETHOD = 1;
+                    taskActRepository.Update(item);
+                }
+            }
+            System.Threading.Thread.Sleep(3000);
+            //閲嶇疆淇″彿
+            foreach (var dev in Settings.deviceInfos.FindAll(x => x.deviceType == 2))
+            {
+                var tf = Conn.榛樿Redis.GetValue(dev.deviceName + ".D1202");
+                int numm = int.Parse(string.IsNullOrEmpty(tf) ? "0" : tf);
+                if (TcpServer.GetBitdata(numm, 0) == 0)
+                {
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1220", "0", dev.deviceName + "Queue");
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1222", "0", dev.deviceName + "Queue");
+                }
+                else if (TcpServer.GetBitdata(numm, 1) == 0)
+                {
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1221", "0", dev.deviceName + "Queue");
+                    Conn.榛樿Redis.SetValue(dev.deviceName + ".D1223", "0", dev.deviceName + "Queue");
+                }
+            }
+
+        }
+        /// <summary>
+        /// 1020  1023绌烘涓嬬嚎
+        /// </summary>
+        /// <param name="tag"></param>
+        public void ThreadEdown(Tag tag)
+        {
+            Console.WriteLine($"ThreadEdown 20 23 = 绌轰笅妫�祴 =================> ");
+            TaskRepository taskRepository = new TaskRepository();
+            foreach (var Bssx in new string[] { "1020", "1023" })
+            {
+                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
+                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
+                var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.R鎵樼洏鐮�), typeof(System.String));
+                Console.WriteLine($"{Bssx} 绌轰笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇  ");
+                if (RtaskState == 3 && RtaskState_LAST == 0)
+                {
+                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                    string msg = "";
+                    if (task != null)
+                    {
+                        Console.WriteLine($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        LogHelper.Info($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        continue;
+                    }
+                    try
+                    {
+                        var listtep = new List<string>();
+                        if (Bssx == "1020")
+                        {
+                            if (tag.SF涓嬫枡浣�RArrive1003 == 1)
+                            {
+                                listtep = new List<string> { "1012", "1004" };
+                            }
+                            else
+                            {
+                                listtep = new List<string> { "1004", "1012" };
+                            }
+                        }
+                        else
+                        {
+                            if (tag.SF涓嬫枡浣�RArrive1005 == 1)
+                            {
+                                listtep = new List<string> { "1014", "1006" };
+                            }
+                            else
+                            {
+                                listtep = new List<string> { "1006", "1014" };
+                            }
+                        }
+
+                        foreach (var item in listtep)//(Bssx == "1020" ? new string[] { "1004", "1012" } : new string[] { "1006", "1014" }))
+                        {
+                            var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                            var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                            if (R5 == 5 && R5绌洪棽_LAST == 0 && task == null)
+                            {
+                                task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                                msg = "";
+                                if (task != null)
+                                {
+                                    Console.WriteLine($" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                                    LogHelper.Info($" {item}鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                                    continue;
+                                }
+
+                                var b = TaskProcess.CreateTask("", Bssx, item, "绌轰笂RGV", 5, new List<string> { R鎵樼洏鐮�}, "RGV");
+                                if (b)
+                                {
+                                    LogHelper.Debug($"杈撻�绾縍GV绌烘墭浠诲姟 from:{Bssx}>to {item}寮�鍒涘缓鎴愬姛");
+                                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
+                                    //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
+                                    RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "1", out msg);
+                                    //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "1", $"S{item}ReadQueue");
+                                    break;
+                                }
+                            }
+                            else if (R5 != 5 && R5绌洪棽_LAST == 1)
+                            {
+                                RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out msg);
+                                //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "0", $"S{item}ReadQueue");
+                            }
+                        }
+                        System.Threading.Thread.Sleep(1000);
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.Error(ex.Message, ex);
+                        Console.WriteLine(ex.Message + ex.StackTrace);
+                    }
+                }
+                else if (RtaskState != 3 && RtaskState_LAST == 1)
+                {
+                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
+                }
+                System.Threading.Thread.Sleep(2000);
+            }
+
+            foreach (var item in new string[] { "1004", "1012", "1006", "1014", "1026", "1017" })
+            {
+                var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                if (R5 != 5 && R5绌洪棽_LAST == 1)
+                {
+                    RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "0", $"S{item}ReadQueue");
+                }
+            }
+        }
+
+        public void ThreadDdown(Tag tag)
+        {
+            Console.WriteLine($"ThreadDdown 08 10 ==================> 1026");
+            TaskRepository taskRepository = new TaskRepository();
+            foreach (var Bssx in new string[] { "1008", "1016" })
+            {
+                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
+                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
+                var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.R鎵樼洏鐮�), typeof(System.String));
+                Console.WriteLine($"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇");
+                if (RtaskState == 3 && RtaskState_LAST == 0)
+                {
+                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                    string msg = "";
+                    if (task != null)
+                    {
+                        Console.WriteLine($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        LogHelper.Info($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        continue;
+                    }
+
+                    var item = "1026";
+                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                    var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                    if (R5 == 5 && R5绌洪棽_LAST == 0)
+                    {
+                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                        msg = "";
+                        if (task != null)
+                        {
+                            Console.WriteLine($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            LogHelper.Info($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            continue;
+                        }
+                        var b = TaskProcess.CreateTask("", Bssx, item, "婊¤浆1026", 5, new List<string> { R鎵樼洏鐮�}, "RGV");
+                        if (b)
+                        {
+                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
+                            RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "1", out string msg2);
+                            //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
+                            //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "1", $"S{item}ReadQueue");
+                            break;
+                        }
+                    }
+                    else if (R5 != 5 && R5绌洪棽_LAST == 1)
+                    {
+                        RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out string msg2);
+                    }
+                }
+                else if (RtaskState != 3 && RtaskState_LAST == 1)
+                {
+                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "0", $"S{Bssx}ReadQueue");
+                }
+                System.Threading.Thread.Sleep(2000);
+            }
+        }
+
+        public void Thread0210Down(Tag tag)
+        {
+            Console.WriteLine($"Thread0210Down ==================>");
+            TaskRepository taskRepository = new TaskRepository();
+            foreach (var Bssx in new string[] { "1002", "1010" })
+            {
+                var RtaskState = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState"), typeof(System.UInt16));
+                var RtaskState_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.RtaskState_LAST"), typeof(System.UInt16));
+                var R鎵樼洏鐮�= (System.String)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{Bssx}Read.R鎵樼洏鐮�), typeof(System.String));
+                Console.WriteLine($"{Bssx} 婊′笅妫�祴锛氫换鍔$敵璇凤細{RtaskState}- 鏄惁宸插鐞嗭細{RtaskState_LAST}- 鎵樼洏鐮侊細{R鎵樼洏鐮亇");
+                if (RtaskState == 3 && RtaskState_LAST == 0)
+                {
+                    var task = taskRepository.FindEntity(x => x.S_START_LOC == Bssx && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                    string msg = "";
+                    if (task != null)
+                    {
+                        Console.WriteLine($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        LogHelper.Info($"{Bssx} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                        continue;
+                    }
+                    var item = "1017";
+                    var R5 = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽"), typeof(System.UInt16));
+                    var R5绌洪棽_LAST = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"S{item}Read.R5绌洪棽_LAST"), typeof(System.UInt16));
+                    if (R5 == 5 && R5绌洪棽_LAST == 0)
+                    {
+                        task = taskRepository.FindEntity(x => x.S_END_LOC == item && x.S_B_STATE != "瀹屾垚" && x.S_B_STATE != "鍙栨秷");
+                        msg = "";
+                        if (task != null)
+                        {
+                            Console.WriteLine($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            LogHelper.Info($"{item} 鏈夋鍦�[{task.S_B_STATE}] 涓殑{task.S_TASK_NO}浠诲姟");
+                            continue;
+                        }
+                        var b = TaskProcess.CreateTask("", Bssx, item, "婊¤浆1017", 5, new List<string> { R鎵樼洏鐮�}, "RGV");
+                        if (b)
+                        {
+                            RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "1", out msg);
+                            RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "1", out string msg1);
+                            //Conn.榛樿Redis.SetValue($"S{Bssx}Read.RtaskState_LAST", "1", $"S{Bssx}ReadQueue");
+                            //Conn.榛樿Redis.SetValue($"S{item}Read.R5绌洪棽_LAST", "1", $"S{item}ReadQueue");
+                            break;
+                        }
+                    }
+                    else if (R5 != 5 && R5绌洪棽_LAST == 1)
+                    {
+                        RedisHelper.Add($"S{item}Read.R5绌洪棽_LAST", "0", out string msg1);
+                    }
+                }
+                else if (RtaskState != 3 && RtaskState_LAST == 1)
+                {
+                    RedisHelper.Add($"S{Bssx}Read.RtaskState_LAST", "0", out string msg);
+                }
+                System.Threading.Thread.Sleep(2000);
+            }
+        }
+
+
+        public void Thread涓嬫枡浣嶆娴�Tag tag)
+        {
+            Console.WriteLine($"Thread涓嬫枡浣嶆娴�   =====>");
+            foreach (var ssx in new string[] { "1003", "1005", "1011", "1013" })
+            {
+                var RArrive = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"FNK1003051113.RArrive{ssx}"), typeof(System.UInt16));
+                var RArriveLast = (System.UInt16)System.Convert.ChangeType(Conn.榛樿Redis.GetValue($"FNK1003051113.RArrive{ssx}_LAST"), typeof(System.UInt16));
+                if (RArrive == 1 && RArriveLast == 0)
+                {
+                    if (ssx == "1005" && tag.SF涓嬫枡浣�WRelease1005 == 0)
+                    {
+                        tag.FNK1.D2215 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1005_LAST = 1;
+                        RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1005 = 0;
+                        //tag.SF涓嬫枡浣�WSafe0305 = 0;
+                    }
+                    else if (ssx == "1003" && tag.SF涓嬫枡浣�WRelease1003 == 0)
+                    {
+                        tag.FNK1.D2210 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1003_LAST = 1;
+
+                        RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1003 = 0;
+                        //tag.SF涓嬫枡浣�WSafe0305 = 0;
+                    }
+                    else if (ssx == "1013" && tag.SF涓嬫枡浣�WRelease1013 == 0)
+                    {
+                        tag.FNK2.D2215 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1013_LAST = 1;
+                        RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1013 = 0;
+                        //tag.SF涓嬫枡浣�WSafe1113 = 0;
+                    }
+                    else if (ssx == "1011" && tag.SF涓嬫枡浣�WRelease1011 == 0)
+                    {
+                        tag.FNK2.D2210 = 1;
+                        //tag.SF涓嬫枡浣�RArrive1011_LAST = 1;
+                        RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "1", out string msg);
+
+                        //tag.SF涓嬫枡浣�WRelease1011 = 0;
+                        //tag.SF涓嬫枡浣�WSafe1113 = 0;
+                    }
+                }
+                else if (RArrive == 0 && RArriveLast == 1)
+                {
+                    RedisHelper.Add($"FNK1003051113.RArrive{ssx}_LAST", "0", out string msg);
+                    //Conn.榛樿Redis.SetValue($"FNK1003051113.RArrive{ssx}_LAST", "0", $"FNK1003051113Queue");
+                }
+            }
+        }
+
+        public void ThreadFNK1Over(Tag tag)
+        {
+            Console.WriteLine($"ThreadFNK1Over    =====>");
+            if (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)
+            {
+                tag.FNK1.D2215 = 0;
+                //tag.FNK1.D2212_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "1", out string msg);
+
+                tag.SF涓嬫枡浣�WRelease1005 = 1;
+                tag.SF涓嬫枡浣�WSafe0305 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1005_LAST", "0", out msg);
+            }
+            if (tag.FNK1.D2216 == 1)
+                tag.FNK1.D2215 = 0;
+            else if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)
+                //tag.FNK1.D2217_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "0", out string msg);
+
+            if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)
+            {
+                tag.FNK1.D2210 = 0;
+                //tag.FNK1.D2217_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "1", out string msg);
+                tag.SF涓嬫枡浣�WRelease1003 = 1;
+                tag.SF涓嬫枡浣�WSafe0305 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1003_LAST", "0", out msg);
+            }
+            //else if (tag.FNK1.D2211 == 1)
+            //    tag.FNK1.D2210 = 0;
+            else if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)
+            {
+                //tag.FNK1.D2212_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "0", out string msg);
+            }
+            if (tag.FNK1.D2211 == 1)
+                tag.FNK1.D2210 = 0;
+
+        }
+        public void ThreadFNK2Over(Tag tag)
+        {
+            Console.WriteLine($"ThreadFNK2Over    =====>");
+            if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)
+            {
+                tag.FNK2.D2215 = 0;
+                //tag.FNK2.D2212_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "1", out string msg);
+
+                tag.SF涓嬫枡浣�WRelease1013 = 1;
+                tag.SF涓嬫枡浣�WSafe1113 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1013_LAST", "0", out msg);
+            }
+            else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)
+                //tag.FNK2.D2217_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2217_LAST", "0", out string msg);
+
+            if (tag.FNK2.D2216 == 1)
+                tag.FNK2.D2215 = 0;
+
+            if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)
+            {
+                tag.FNK2.D2210 = 0;
+                //tag.FNK2.D2217_LAST = 1;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "1", out string msg);
+
+                tag.SF涓嬫枡浣�WRelease1011 = 1;
+                tag.SF涓嬫枡浣�WSafe1113 = 1;
+                System.Threading.Thread.Sleep(1000);
+                RedisHelper.Add($"FNK1003051113.RArrive1011_LAST", "0", out msg);
+            }
+            else if (tag.FNK2.D2212 == 0 && tag.FNK2.D2212_LAST == 1)
+            {
+                //tag.FNK2.D2212_LAST = 0;
+                RedisHelper.Add($"p鍙戦偅绉�涓嬬嚎.D2212_LAST", "0", out string msg);
+            }
+            if (tag.FNK2.D2211 == 1)
+                tag.FNK2.D2210 = 0;
+
+        }
+
+        public void Thread1019Down(Tag tag)
+        {
+            Console.WriteLine($"1019浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}");
+        }
+        public void Thread1025Up(Tag tag)
+        {
+            Console.WriteLine($"SA1025 浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}");
+        }
+        public void Thread1022Up(Tag tag)
+        {
+            Console.WriteLine($"SA1022    =====>");
+            Console.WriteLine($"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}");
+        }
+        public void Thread1030Down(Tag tag)
+        {
+            Console.WriteLine($"SA1030 浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}");
+        }
+        public void Thread2030Down(Tag tag)
+        {
+            Console.WriteLine($"SA2030 浠诲姟鐘舵�锛�  =====>");
+            Console.WriteLine($"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇");
+        }
+
+
+    }
+}
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/\350\207\252\345\256\232\344\271\211\347\261\273.cs" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/\350\207\252\345\256\232\344\271\211\347\261\273.cs"
index ee13809..b3035c0 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/\350\207\252\345\256\232\344\271\211\347\261\273.cs"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/RunTime/Code/\350\207\252\345\256\232\344\271\211\347\261\273.cs"
@@ -536,7 +536,7 @@
 	internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
 {
 	
-            LogHelper.Debug($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>");
+            LogHelper.Info($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>");
      var cntrInfo = string.Join(",", cntrs);
  ILocRepository locc = new LocRepository();
  var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
@@ -586,7 +586,8 @@
                     locc.Update(endLoc);
                 }
                 
-                LogHelper.Debug($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛");
+                LogHelper.Info($"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛");
+                return true;
  }
  catch (Exception ex)
  {
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 47cbbd7..b84ecf3 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"
@@ -120,8 +120,8 @@
       "Type": "MethodCode",
       "Level": "Item",
       "Statement": "public void OperateHKTaskStatus(System.Object param1)",
-      "EditCode": "HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // 鏌ヨ浠诲姟锛氭牴鎹换鍔″彿\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鎵ц锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"宸叉帹閫乗")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"鎵ц涓璡";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栬揣瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"鏃燶";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {  //鍗歌揣杩涜娓呯┖锛岃Е鍙戞壂鐮乗r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"瀹屾垚\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"缂栬緫\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //鍗歌揣鍐嶅啓鎵樼洏鍙栬蛋銆�鐒跺悗瑙﹀彂鎵爜杩涜鏍¢獙銆�\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js鎹烽『\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栨秷锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栨秷\";\r\n                            //startloc.S_LOCK_STATE = \"鏃燶";\r\n                            //endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"鏃燶";\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // 鍒ゆ柇璇ヤ换鍔$殑鎺ラ┏浣嶆槸鍚︽湁鍏朵粬鍏ュ簱鎴栧嚭搴撲换鍔★紝濡傛灉鏈夛紝鍒欏湪绛変綅绛夊緟锛屽鏋滄病鏈夛紝鍒欏叆\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛畬鎴愶紝閲嶇疆杩涜浜岄樁娈点�\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛彇娑堬紝閲嶇疆鐐癸紝绾跨▼澶勭悊銆俓");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_鍙栨秷\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // 鏆傛椂璁惧畾涓�\r\n                    wcsTask.S_B_STATE = \"涓婃姤鐘舵�绌篭";\r\n                    //瀹夊叏璇锋眰绛塡r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"褰撳墠浠诲姟鍙蜂换鍔′笉瀛樺湪{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n            }",
-      "Code": "public void OperateHKTaskStatus(System.Object param1)\r\n{HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // 鏌ヨ浠诲姟锛氭牴鎹换鍔″彿\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鎵ц锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"宸叉帹閫乗")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"鎵ц涓璡";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栬揣瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"鏃燶";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {  //鍗歌揣杩涜娓呯┖锛岃Е鍙戞壂鐮乗r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"瀹屾垚\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"缂栬緫\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //鍗歌揣鍐嶅啓鎵樼洏鍙栬蛋銆�鐒跺悗瑙﹀彂鎵爜杩涜鏍¢獙銆�\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js鎹烽『\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栨秷锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栨秷\";\r\n                            //startloc.S_LOCK_STATE = \"鏃燶";\r\n                            //endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"鏃燶";\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // 鍒ゆ柇璇ヤ换鍔$殑鎺ラ┏浣嶆槸鍚︽湁鍏朵粬鍏ュ簱鎴栧嚭搴撲换鍔★紝濡傛灉鏈夛紝鍒欏湪绛変綅绛夊緟锛屽鏋滄病鏈夛紝鍒欏叆\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛畬鎴愶紝閲嶇疆杩涜浜岄樁娈点�\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛彇娑堬紝閲嶇疆鐐癸紝绾跨▼澶勭悊銆俓");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_鍙栨秷\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // 鏆傛椂璁惧畾涓�\r\n                    wcsTask.S_B_STATE = \"涓婃姤鐘舵�绌篭";\r\n                    //瀹夊叏璇锋眰绛塡r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"褰撳墠浠诲姟鍙蜂换鍔′笉瀛樺湪{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n            }\r\n}",
+      "EditCode": "HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // 鏌ヨ浠诲姟锛氭牴鎹换鍔″彿\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鎵ц锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"宸叉帹閫乗")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"鎵ц涓璡";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栬揣瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"鏃燶";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {  //鍗歌揣杩涜娓呯┖锛岃Е鍙戞壂鐮乗r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       \r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"瀹屾垚\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"缂栬緫\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //鍗歌揣鍐嶅啓鎵樼洏鍙栬蛋銆�鐒跺悗瑙﹀彂鎵爜杩涜鏍¢獙銆�\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        \r\n                                        RedisHelper.Add(device2.deviceName + \".\" + V2, \"true\", out string msg1);\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js鎹烽『\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栨秷锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栨秷\";\r\n                            //startloc.S_LOCK_STATE = \"鏃燶";\r\n                            //endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"鏃燶";\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // 鍒ゆ柇璇ヤ换鍔$殑鎺ラ┏浣嶆槸鍚︽湁鍏朵粬鍏ュ簱鎴栧嚭搴撲换鍔★紝濡傛灉鏈夛紝鍒欏湪绛変綅绛夊緟锛屽鏋滄病鏈夛紝鍒欏叆\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛畬鎴愶紝閲嶇疆杩涜浜岄樁娈点�\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛彇娑堬紝閲嶇疆鐐癸紝绾跨▼澶勭悊銆俓");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_鍙栨秷\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // 鏆傛椂璁惧畾涓�\r\n                    wcsTask.S_B_STATE = \"涓婃姤鐘舵�绌篭";\r\n                    //瀹夊叏璇锋眰绛塡r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"褰撳墠浠诲姟鍙蜂换鍔′笉瀛樺湪{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n            }",
+      "Code": "public void OperateHKTaskStatus(System.Object param1)\r\n{HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n            if (string.IsNullOrEmpty(model.taskCode))\r\n                return;\r\n            // 鏌ヨ浠诲姟锛氭牴鎹换鍔″彿\r\n            //var wcsTask = WCSHelper.GetTask(model.taskCode);\r\n            ITaskRepository MainMissionService = new TaskRepository();\r\n            var wcsTask = MainMissionService.FindEntity(x => model.taskCode == x.S_TASK_NO);\r\n            if (wcsTask != null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(model.method))\r\n                {\r\n                    ILocRepository locrep = new LocRepository();\r\n                    var startloc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                    var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == wcsTask.S_END_LOC);\r\n\r\n                    List<string> cntrs = wcsTask.S_CNTRS.Split(',').ToList();\r\n                    bool bobe = false;\r\n                    switch (model.method)\r\n                    {\r\n                        case \"start\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鎵ц锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            if (wcsTask.S_B_STATE.Trim() == \"宸叉帹閫乗")\r\n                            {\r\n                                wcsTask.S_B_STATE = \"鎵ц涓璡";\r\n                                wcsTask.T_START_TIME = DateTime.Now;\r\n                                MainMissionService.Update(wcsTask);\r\n                                bobe = true;\r\n                            }\r\n                            break;\r\n                        case \"outbin\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栬揣瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n\r\n                            startloc.N_CURRENT_NUM = 0;\r\n                            startloc.S_LOCK_STATE = \"鏃燶";\r\n                            startloc.T_MODIFY = DateTime.Now;\r\n                            //ILocContainerRepository locContainerRepository = new LocContainerRepository();\r\n                            ////var cnr = locContainerRepository.FindList(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            //locContainerRepository.Delete(x => cntrs.Contains(x.S_CNTR_CODE.Trim()) && x.S_LOC_CODE == wcsTask.S_START_LOC);\r\n                            MainMissionService.Update(wcsTask);\r\n                            locrep.Update(startloc);\r\n\r\n                            bobe = true;\r\n                            var device = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_START_LOC));\r\n                            if (device != null)\r\n                            {\r\n                                if (device.deviceType == 1)\r\n                                {\r\n                                    if (device.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {  //鍗歌揣杩涜娓呯┖锛岃Е鍙戞壂鐮乗r\n                                       var inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n                                       string V = inde ? \"R05\" : \"R06\";\r\n                                       Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"true\", device.deviceName + \"Queue\");\r\n                                       \r\n                                       TcpServer.TrayIps.Remove(device.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if(device.deviceType == 2){\r\n\t\t\t\t\t\t\t\t\tvar inde = device.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0;\r\n\t\t\t\t\t\t\t\t\t string V = inde? \"D1224\" : \"D1225\";\r\n\t\t\t\t\t\t\t\t\t Conn.榛樿Redis.SetValue(device.deviceName + \".\" + V, \"0\", device.deviceName + \"Queue\");\r\n                                }\r\n                            }\r\n                            //LocationHelper.UnLockLoc(wcsTask.S_START_LOC);\r\n                            break;\r\n                        case \"end\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负瀹屾垚锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"瀹屾垚\";\r\n                            wcsTask.T_END_TIME = DateTime.Now;\r\n\r\n                            bobe = true;\r\n                            //ILocContainerRepository locContainerRepository2 = new LocContainerRepository();\r\n                            //List<LocContainerEntity> llls = new List<LocContainerEntity>();\r\n                            //foreach (var c in cntrs)\r\n                            //{\r\n                            //    var action = new LocContainerEntity()\r\n                            //    {\r\n                            //        S_ID = Guid.NewGuid().ToString(),\r\n                            //        S_STATE = \"缂栬緫\",\r\n                            //        T_CREATE = DateTime.Now,\r\n                            //        T_MODIFY = DateTime.Now,\r\n\r\n                            //        S_LOC_CODE = endLoc.S_LOC_CODE,\r\n                            //        S_CNTR_CODE = c,\r\n                            //        S_TYPE = \"\",\r\n                            //    };\r\n                            //    llls.Add(action);\r\n                            //}\r\n\r\n                            endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            endLoc.N_CURRENT_NUM = 1;\r\n                            endLoc.T_MODIFY = DateTime.Now;\r\n                            MainMissionService.Update(wcsTask);\r\n                            if(Settings.deviceInfos.Find(x=>x.deviceType==2 && (/*x.location.Contains(wcsTask.S_END_LOC)||*/x.deviceNo.Contains(wcsTask.S_END_LOC)))!=null)\r\n                                locrep.Update(endLoc);\r\n                            //locContainerRepository2.Insert(llls);\r\n\r\n                            var device2 = Settings.deviceInfos.Find(x => x.location.Contains(wcsTask.S_END_LOC));\r\n                            if (device2 != null)\r\n                            {\r\n                                if (device2.deviceType == 1)\r\n                                {\r\n                                    if (device2.deviceName.Contains(\"缁村笇灏旀姄鑷俓"))\r\n                                    {\r\n                                        //string V = device2.location.ToList().FindIndex(x => x == wcsTask.S_START_LOC) == 0 ? \"R10\" : \"R11\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        //鍗歌揣鍐嶅啓鎵樼洏鍙栬蛋銆�鐒跺悗瑙﹀彂鎵爜杩涜鏍¢獙銆�\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        //string V = inde ? \"R05\" : \"R06\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"true\", device2.deviceName + \"Queue\");\r\n                                        string V2 = inde ? \"R10_LAST\" : \"R11_LAST\";\r\n                                        //Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V2, \"true\", device2.deviceName + \"Queue\");\r\n                                        \r\n                                        RedisHelper.Add(device2.deviceName + \".\" + V2, \"true\", out string msg1);\r\n                                        TcpServer.TrayIps.Remove(device2.deviceNo[inde ? 0 : 1]);\r\n                                    }\r\n                                }\r\n                                else if (device2.deviceType == 2)\r\n                                    if (device2.deviceName.Contains(\"Js鎹烽『\"))\r\n                                    {\r\n                                        var inde = device2.location.ToList().FindIndex(x => x == wcsTask.S_END_LOC) == 0;\r\n                                        string V = inde? \"D1224\" : \"D1225\";\r\n                                        Conn.榛樿Redis.SetValue(device2.deviceName + \".\" + V, \"1\", device2.deviceName + \"Queue\");\r\n\r\n                                        var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/202\", JsonConvert.SerializeObject(new\r\n                                        {\r\n                                            sceneType = 3,\r\n                                            cntrCode = cntrs.FirstOrDefault()\r\n                                        }));\r\n                                        //if (device2.deviceName.Contains(\"1\"))\r\n                                        //{\r\n                                        //    if (inde) tag.Js1.D1224 = 1;\r\n                                        //    else tag.Js1.D1225 = 1;\r\n                                        //}else\r\n                                        //{\r\n                                        //    if (inde) tag.Js2.D1224 = 1;\r\n                                        //    else tag.Js2.D1225 = 1;\r\n                                        //}\r\n                                    }\r\n                            }\r\n\r\n                            //LocationMethod.JudgeLocation(wcsTask);\r\n                            break;\r\n                        case \"cancel\":\r\n                            LogHelper.Info($\"娴峰悍杞︿换鍔$姸鎬佸彉鏇翠负鍙栨秷锛屼换鍔″彿涓猴細{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n                            wcsTask.S_B_STATE = \"鍙栨秷\";\r\n                            //startloc.S_LOCK_STATE = \"鏃燶";\r\n                            //endLoc.S_LOCK_STATE = \"鏃燶";\r\n                            MainMissionService.Update(wcsTask);\r\n                            TaskActRepository taskActRepository = new TaskActRepository();\r\n                            var tare = taskActRepository.FindList(x => x.S_TASK_NO == wcsTask.S_TASK_NO);\r\n                            if (tare.Any())\r\n                            {\r\n                                if(tare.Find(x=>x.S_ACTION_CODE==\"outbin\")==null)\r\n                                {\r\n                                    startloc.S_LOCK_STATE = \"鏃燶";\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(startloc);\r\n                                    locrep.Update(endLoc);\r\n                                }else if (tare.Find(x => x.S_ACTION_CODE == \"end\") == null)\r\n                                {\r\n                                    endLoc.S_LOCK_STATE = \"鏃燶";\r\n                                    locrep.Update(endLoc);\r\n                                }\r\n                            }\r\n\r\n                            //locrep.Update(startloc);\r\n                            //locrep.Update(endLoc);\r\n                            //TaskProcess.OperateStatus(wcsTask, 7);\r\n                            //WCSHelper.Fail(wcsTask);\r\n                            break;\r\n                        case \"apply\":\r\n                            // 鍒ゆ柇璇ヤ换鍔$殑鎺ラ┏浣嶆槸鍚︽湁鍏朵粬鍏ュ簱鎴栧嚭搴撲换鍔★紝濡傛灉鏈夛紝鍒欏湪绛変綅绛夊緟锛屽鏋滄病鏈夛紝鍒欏叆\r\n                            TaskisOk(wcsTask);\r\n                            break;\r\n                    }\r\n\r\n                    if (!string.IsNullOrEmpty(wcsTask.S_SRC_NO))\r\n                    {\r\n                        var mestask = MainMissionService.FindEntity(x => x.S_TASK_NO == wcsTask.S_SRC_NO);\r\n                        if (mestask!=null&&bobe)\r\n                        {\r\n                            if ( model.method != \"end\")\r\n                            {\r\n                            \tif (mestask.S_START_LOC == wcsTask.S_START_LOC&&mestask.S_B_STATE == \"MES\")\r\n\t                                Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                                {\r\n\t                                    reqCode = wcsTask.S_SRC_NO,\r\n\t                                    model.method\r\n\t                                }));\r\n                            }\r\n                            else\r\n                            {\r\n                                if (mestask.S_END_LOC != wcsTask.S_END_LOC)\r\n                                {\r\n                                    LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛畬鎴愶紝閲嶇疆杩涜浜岄樁娈点�\");\r\n                                    mestask.N_PRIORITY = -88;\r\n                                    MainMissionService.Update(mestask);\r\n                                }\r\n                                else if(mestask.S_B_STATE == \"MES\")\r\n                                {\r\n                                    var str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n                                    {\r\n                                        reqCode = wcsTask.S_SRC_NO,\r\n                                        model.method\r\n                                    }));\r\n                                }\r\n                            }\r\n\r\n                        }else if(mestask!=null && model.method== \"cancel\")\r\n                        {\r\n                        \t if(mestask.S_B_STATE == \"MES\")\r\n\t                           Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/201\", JsonConvert.SerializeObject(new\r\n\t                            {\r\n\t                                reqCode = wcsTask.S_SRC_NO,\r\n\t                                model.method\r\n\t                            })); \r\n                            LogHelper.Info($\"{wcsTask.S_SRC_NO}-{wcsTask.S_TASK_NO} 涓�樁娈靛彇娑堬紝閲嶇疆鐐癸紝绾跨▼澶勭悊銆俓");\r\n                            mestask.N_PRIORITY = -1;\r\n                            mestask.S_B_STATE = \"MES_鍙栨秷\";\r\n                            MainMissionService.Update(mestask);\r\n                        }\r\n                    }\r\n                    TaskProcess.AddActionRecord(model.taskCode, model.method, model.eqpCode, model.data,wcsTask.S_START_LOC,wcsTask.S_END_LOC);\r\n                    //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus\r\n                }\r\n                else\r\n                {\r\n                    // 鏆傛椂璁惧畾涓�\r\n                    wcsTask.S_B_STATE = \"涓婃姤鐘舵�绌篭";\r\n                    //瀹夊叏璇锋眰绛塡r\n                    //TaskProcess.OperateReq(model.taskCode, wcsTask.N_B_STATE, model.eqpCode, model.data);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                LogHelper.Info($\"褰撳墠浠诲姟鍙蜂换鍔′笉瀛樺湪{model.taskCode}\", \"agv鏉弶浜や簰鏃ュ織\");\r\n            }\r\n}",
       "CusMethod": {
         "Name": "OperateHKTaskStatus",
         "Params": [
@@ -593,8 +593,8 @@
       "Type": "ClassCode",
       "Level": "Item",
       "Statement": "public class TaskProcess",
-      "EditCode": "internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"缂栬緫\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"鏈墽琛孿",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"鍑哄簱閿乗";\r\n                    endLoc.S_LOCK_STATE = \"鍏ュ簱閿乗";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛\");\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"缂栬緫\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"浠诲姟鍙穃", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }",
-      "Code": "public class TaskProcess\r\n{internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"缂栬緫\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"鏈墽琛孿",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"鍑哄簱閿乗";\r\n                    endLoc.S_LOCK_STATE = \"鍏ュ簱閿乗";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Debug($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛\");\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"缂栬緫\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"浠诲姟鍙穃", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }\r\n}",
+      "EditCode": "internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Info($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"缂栬緫\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"鏈墽琛孿",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"鍑哄簱閿乗";\r\n                    endLoc.S_LOCK_STATE = \"鍏ュ簱閿乗";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Info($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛\");\r\n                return true;\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"缂栬緫\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"浠诲姟鍙穃", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }",
+      "Code": "public class TaskProcess\r\n{internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\t\r\n            LogHelper.Info($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to}寮�鍒涘缓>\");\r\n     var cntrInfo = string.Join(\",\", cntrs);\r\n ILocRepository locc = new LocRepository();\r\n var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);\r\n var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);\r\n \r\n            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;\r\n            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;\r\n            string t = \"F01\";\r\n            if (s && !e) t = \"A002\";\r\n            if (!s && e) t = \"A003\";\r\n            if (s && e) t = \"A004\";\r\n try\r\n {\r\n\r\n     TaskEntity wmsTask = new TaskEntity()\r\n     {\r\n     \tS_ID = Guid.NewGuid().ToString(),\r\n\t\tS_STATE = \"缂栬緫\",\r\n\t\tT_CREATE = DateTime.Now,\r\n\t\tT_MODIFY = DateTime.Now,\r\n\r\n         S_TASK_NO = GenerateTaskNo(),\r\n         S_START_LAREA = fromLoc.S_AREA_CODE,\r\n         S_END_LAREA = endLoc.S_AREA_CODE,\r\n         S_DEPART_NAME = \"\",\r\n         S_START_LOC = from,\r\n         S_END_LOC = to,\r\n         S_TYPE = taskType,\r\n         S_SRC_NO = no,//\r\n         N_PRIORITY = pri,\r\n         S_WORK_MODE = workMode,\r\n         S_B_STATE = \"鏈墽琛孿",\r\n         S_CNTRS = cntrInfo,\r\n         N_START_LAYER = startLayer,\r\n         N_END_LAYER = endLayer,\r\n         N_CNTR_COUNT = cntrCount,\r\n                    S_INDEX=t,\r\n     };\r\n     ITaskRepository taskserice = new TaskRepository();\r\n     taskserice.Insert(wmsTask);\r\n     \r\n                if (workMode == \"AGV\")\r\n                {\r\n                    fromLoc.S_LOCK_STATE = \"鍑哄簱閿乗";\r\n                    endLoc.S_LOCK_STATE = \"鍏ュ簱閿乗";\r\n                    locc.Update(fromLoc);\r\n                    locc.Update(endLoc);\r\n                }\r\n                \r\n                LogHelper.Info($\"杈撻�绾縍GV绌烘墭浠诲姟 from:{from}>to {to} 鍒涘缓{wmsTask.S_TASK_NO}鎴愬姛\");\r\n                return true;\r\n }\r\n catch (Exception ex)\r\n {\r\n     LogHelper.Error(\"CreateTask\" + ex.Message, ex);\r\n     return false;\r\n }\r\n}\r\n\r\n\r\n     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)\r\n        {\r\n            var action = new TaskActEntity()\r\n            {\r\n                S_ID = Guid.NewGuid().ToString(),\r\n                S_STATE = \"缂栬緫\",\r\n                T_CREATE = DateTime.Now,\r\n                T_MODIFY = DateTime.Now,\r\n                S_START_LOC= strloc,\r\n                S_END_LOC= endloc,\r\n                S_ACTION_CODE = state,\r\n                S_TASK_NO = no,\r\n                S_EQ_NO = forkliftNo,\r\n                S_EQ_TYPE = \"agv\",\r\n                S_DATA = extData,\r\n                N_CREATEMETHOD = 0\r\n            };\r\n            TaskActRepository taskserice = new TaskActRepository();\r\n            taskserice.Insert(action);\r\n        }\r\n\r\n        public static System.String GenerateTaskNo()\r\n        {\r\n            var id = SYSHelper.GetSerialNumber(\"浠诲姟鍙穃", \"TN\", \"1\");\r\n            var date = DateTime.Now.ToString(\"yyMMdd\");\r\n            return $\"TN{date}{id.ToString().PadLeft(4, '0')}\";\r\n        }\r\n}",
       "CusMethod": {
         "Name": "",
         "Params": [],
@@ -668,9 +668,30 @@
         "InheritClass": "",
         "Inherits": []
       }
+    },
+    {
+      "ID": "20250623083459471",
+      "Name": "AutoThread",
+      "Desc": "",
+      "ParentID": "",
+      "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",
+      "CusMethod": {
+        "Name": "",
+        "Params": [],
+        "ReturnType": ""
+      },
+      "CusClass": {
+        "Name": "",
+        "InheritClass": "",
+        "Inherits": []
+      }
     }
   ],
   "CreationTime": "2025-02-26 15:31:23",
-  "LastWriteTime": "2025-06-18 23:06:58",
+  "LastWriteTime": "2025-06-23 09:06:09",
   "HasSaved": true
 }
\ No newline at end of file
diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Script.json" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Script.json"
index 11efd81..4517436 100644
--- "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Script.json"
+++ "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Script.json"
@@ -14,8 +14,8 @@
           "ID": "20250323111613779",
           "Name": "鍒濆鍖栭厤缃�,
           "Desc": "",
-          "Content": " if (Tag.Global.SettingsOver == 0)\r\n                        {\r\n                            SettingInit();\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",
-          "ContentCopy": " if (Tag.Global.SettingsOver == 0)\r\n                        {\r\n                            SettingInit();\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",
+          "Content": "\r\n                        Action myDelegate = () => SettingInit();\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadSettingInit\", new object[] { tag, myDelegate });",
+          "ContentCopy": "\r\n                        Action myDelegate = () => SettingInit();\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadSettingInit\", new object[] { tag, myDelegate });",
           "ParentID": "20250226153120175",
           "Children": [],
           "Type": "Program",
@@ -53,8 +53,8 @@
           "ID": "20250323151832119",
           "Name": "Program4",
           "Desc": "",
-          "Content": "//Conn.榛樿Redis.SetValue(\"瑗块棬瀛�.Param3\",\"300\",\"瑗块棬瀛�Queue\");\r\n//return;\r\nif(false){\r\n                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n                    LocRepository locservice = new LocRepository();\r\n                    for (int i = 0; i < locs.Count; i++)\r\n                    {\r\n                        string loccode = locs[i];\r\n                        string sitesss = sites[i];\r\n                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n                        if (loc == null)\r\n                        {\r\n                            locservice.Insert(new LocEntity\r\n                            {\r\n                                S_ID = Guid.NewGuid().ToString(),\r\n                                S_STATE = \"缂栬緫\",\r\n                                T_CREATE = DateTime.Now,\r\n                                T_MODIFY = DateTime.Now,\r\n                                S_DEEP = \"vxr\",\r\n\r\n                                S_LOC_CODE = loccode,\r\n                                S_AGV_SITE = sitesss,\r\n\r\n                                S_LOCK_STATE = \"鏃燶",\r\n                                N_ROW = 1,\r\n                                N_COL = 1,\r\n                                N_AGV_CODE = 0,\r\n                                N_AGV_SITE_LAYER = 0,\r\n                                N_CAPACITY = 1,\r\n                                N_CURRENT_NUM = 0,\r\n                                S_TYPE = \"\",\r\n\r\n                            });\r\n                        }\r\n                    }\r\n                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n                   }\r\n",
-          "ContentCopy": "//Conn.榛樿Redis.SetValue(\"瑗块棬瀛�.Param3\",\"300\",\"瑗块棬瀛�Queue\");\r\n//return;\r\nif(false){\r\n                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n                    LocRepository locservice = new LocRepository();\r\n                    for (int i = 0; i < locs.Count; i++)\r\n                    {\r\n                        string loccode = locs[i];\r\n                        string sitesss = sites[i];\r\n                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n                        if (loc == null)\r\n                        {\r\n                            locservice.Insert(new LocEntity\r\n                            {\r\n                                S_ID = Guid.NewGuid().ToString(),\r\n                                S_STATE = \"缂栬緫\",\r\n                                T_CREATE = DateTime.Now,\r\n                                T_MODIFY = DateTime.Now,\r\n                                S_DEEP = \"vxr\",\r\n\r\n                                S_LOC_CODE = loccode,\r\n                                S_AGV_SITE = sitesss,\r\n\r\n                                S_LOCK_STATE = \"鏃燶",\r\n                                N_ROW = 1,\r\n                                N_COL = 1,\r\n                                N_AGV_CODE = 0,\r\n                                N_AGV_SITE_LAYER = 0,\r\n                                N_CAPACITY = 1,\r\n                                N_CURRENT_NUM = 0,\r\n                                S_TYPE = \"\",\r\n\r\n                            });\r\n                        }\r\n                    }\r\n                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n                   }\r\n",
+          "Content": "////Conn.榛樿Redis.SetValue(\"瑗块棬瀛�.Param3\",\"300\",\"瑗块棬瀛�Queue\");\r\n////return;\r\n//if(false){\r\n//                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n//                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n//                    LocRepository locservice = new LocRepository();\r\n//                    for (int i = 0; i < locs.Count; i++)\r\n//                    {\r\n//                        string loccode = locs[i];\r\n//                        string sitesss = sites[i];\r\n//                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n//                        if (loc == null)\r\n//                        {\r\n//                            locservice.Insert(new LocEntity\r\n//                            {\r\n//                                S_ID = Guid.NewGuid().ToString(),\r\n//                                S_STATE = \"缂栬緫\",\r\n//                                T_CREATE = DateTime.Now,\r\n//                                T_MODIFY = DateTime.Now,\r\n//                                S_DEEP = \"vxr\",\r\n\r\n//                                S_LOC_CODE = loccode,\r\n//                                S_AGV_SITE = sitesss,\r\n\r\n//                                S_LOCK_STATE = \"鏃燶",\r\n//                                N_ROW = 1,\r\n//                                N_COL = 1,\r\n//                                N_AGV_CODE = 0,\r\n//                                N_AGV_SITE_LAYER = 0,\r\n//                                N_CAPACITY = 1,\r\n//                                N_CURRENT_NUM = 0,\r\n//                                S_TYPE = \"\",\r\n\r\n//                            });\r\n//                        }\r\n//                    }\r\n//                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n//                   }\r\n",
+          "ContentCopy": "////Conn.榛樿Redis.SetValue(\"瑗块棬瀛�.Param3\",\"300\",\"瑗块棬瀛�Queue\");\r\n////return;\r\n//if(false){\r\n//                    List<string> locs = new List<string>() { \"vxr1l\", \"vx1r\", \"vxr1c1\", \"vxr1c2\", \"vxr2l\", \"vxr2r\", \"vxr2c1\", \"vxr2c2\" };\r\n//                    List<string> sites = new List<string>() { \"196365BB283162\", \"193841BB283149\", \"198756BB287300\", \"198767BB286133\", \"206987BB282931\", \"204460BB282975\", \"209405BB287057\", \"209377BB285899\" };\r\n\r\n//                    LocRepository locservice = new LocRepository();\r\n//                    for (int i = 0; i < locs.Count; i++)\r\n//                    {\r\n//                        string loccode = locs[i];\r\n//                        string sitesss = sites[i];\r\n//                        var loc = locservice.FindEntity(x => x.S_LOC_CODE == loccode);\r\n//                        if (loc == null)\r\n//                        {\r\n//                            locservice.Insert(new LocEntity\r\n//                            {\r\n//                                S_ID = Guid.NewGuid().ToString(),\r\n//                                S_STATE = \"缂栬緫\",\r\n//                                T_CREATE = DateTime.Now,\r\n//                                T_MODIFY = DateTime.Now,\r\n//                                S_DEEP = \"vxr\",\r\n\r\n//                                S_LOC_CODE = loccode,\r\n//                                S_AGV_SITE = sitesss,\r\n\r\n//                                S_LOCK_STATE = \"鏃燶",\r\n//                                N_ROW = 1,\r\n//                                N_COL = 1,\r\n//                                N_AGV_CODE = 0,\r\n//                                N_AGV_SITE_LAYER = 0,\r\n//                                N_CAPACITY = 1,\r\n//                                N_CURRENT_NUM = 0,\r\n//                                S_TYPE = \"\",\r\n\r\n//                            });\r\n//                        }\r\n//                    }\r\n//                   // TaskProcess.CreateTask(\"\", locs[6], locs[7], \"test\", 9, new List<string> { \"test\" }, 1, 1, 1);\r\n//                   }\r\n",
           "ParentID": "20250226153120175",
           "Children": [],
           "Type": "Program",
@@ -100,8 +100,8 @@
               "ID": "20250325083325390",
               "Name": "鎹风灛鎶撹噦1",
               "Desc": "",
-              "Content": "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                                }\r\n                            }\r\n                            if(tag.Js1.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1212_LAST = 0;\r\n                            }\r\n\t\t\t\t\t\t\tif (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\trequestType = 4,\r\n\t\t\t\t\t\t\t\t\tendBit = VERX.location[1]\r\n\t\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t\t\tLogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n\t\t\t\t\t\t\t\tif (str.Contains(\"true\"))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}if(tag.Js1.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 0;\r\n                            }\r\n                        }",
-              "ContentCopy": "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                                }\r\n                            }\r\n                            if(tag.Js1.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1212_LAST = 0;\r\n                            }\r\n\t\t\t\t\t\t\tif (tag.Js1.D1213_LAST == 0 && TcpServer.GetBitdata(tag.Js1.D1212, 3) == 1)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar str = Settings.apiHelper.Post(Settings.WMSbaseUrl + \"mom-basic/dataTransmission/json/service/200\", JsonConvert.SerializeObject(new\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\trequestType = 4,\r\n\t\t\t\t\t\t\t\t\tendBit = VERX.location[1]\r\n\t\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t\t\tLogHelper.Info($\"{VERX.location[1]}鐢宠mes浠诲姟缁撴灉{str}\");\r\n\t\t\t\t\t\t\t\tif (str.Contains(\"true\"))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}if(tag.Js1.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js1.D1212, 3) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js1.D1213_LAST = 0;\r\n                            }\r\n                        }",
+              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS1\", new object[] { tag });",
+              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS1\", new object[] { tag });",
               "ParentID": "20250325083047245",
               "Children": [],
               "Type": "Program",
@@ -139,8 +139,8 @@
               "ID": "20250325083326611",
               "Name": "鎹风灛鎶撹噦2",
               "Desc": "",
-              "Content": "//jsz2鎹风灛鎶撹噦2\r\n\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                            } if(tag.Js2.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1212_LAST = 0;\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                            }if(tag.Js2.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1213_LAST = 0;\r\n                            }\r\n                        }",
-              "ContentCopy": "//jsz2鎹风灛鎶撹噦2\r\n\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                            } if(tag.Js2.D1212_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1212, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1212_LAST = 0;\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                            }if(tag.Js2.D1213_LAST == 1 &&TcpServer.GetBitdata(tag.Js2.D1213, 2) == 0){\r\n\t\t\t\t\t\t\t\ttag.Js2.D1213_LAST = 0;\r\n                            }\r\n                        }",
+              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS2\", new object[] { tag });",
+              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadJS2\", new object[] { tag });",
               "ParentID": "20250325083047245",
               "Children": [],
               "Type": "Program",
@@ -225,8 +225,8 @@
                   "ID": "20250325083149366",
                   "Name": "缁村笇灏旀姄鑷�L",
                   "Desc": "",
-                  "Content": "\r\nvar 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                                \tif (tag.wxr1.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
-                  "ContentCopy": "\r\nvar 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                                \tif (tag.wxr1.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1L\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1L\", new object[] { tag });",
                   "ParentID": "20250610002001052",
                   "Children": [],
                   "Type": "Program",
@@ -264,8 +264,8 @@
                   "ID": "20250610002047005",
                   "Name": "缁村笇灏旀姄鑷�R",
                   "Desc": "",
-                  "Content": "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                                \tif (tag.wxr1.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
-                  "ContentCopy": "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                                \tif (tag.wxr1.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttag.wxr1.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1R\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr1R\", new object[] { tag });",
                   "ParentID": "20250610002001052",
                   "Children": [],
                   "Type": "Program",
@@ -339,8 +339,8 @@
                   "ID": "20250325083315503",
                   "Name": "缁村笇灏旀姄鑷�L",
                   "Desc": "",
-                  "Content": "\r\nvar 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                                \tif (tag.wxr2.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
-                  "ContentCopy": "\r\nvar 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                                \tif (tag.wxr2.R10)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R10_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2L\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2L\", new object[] { tag });",
                   "ParentID": "20250610002414741",
                   "Children": [],
                   "Type": "Program",
@@ -378,8 +378,8 @@
                   "ID": "20250610002647095",
                   "Name": "缁村笇灏旀姄鑷�R",
                   "Desc": "",
-                  "Content": "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                                \tif (tag.wxr2.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
-                  "ContentCopy": "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                                \tif (tag.wxr2.R11)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttag.wxr2.R11_LAST=false;\r\n\t\t\t\t\t\t\t\t\t} 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                        }",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2R\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Threadwxr2R\", new object[] { tag });",
                   "ParentID": "20250610002414741",
                   "Children": [],
                   "Type": "Program",
@@ -473,8 +473,8 @@
           "ID": "20250325085542733",
           "Name": "浠诲姟涓嬪彂",
           "Desc": "",
-          "Content": "ITaskRepository taskservice = new TaskRepository();\r\nvar tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"AGV\");\r\nif(tklist.Any())\r\nforeach (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 = 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#region Rgv\r\n\r\nvar task1Isrun = false;\r\nif (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\nvar task2Isrun = false;\r\nif (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\nif (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    throw new Exception($\"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�\");\r\n    //continue;\r\n}\r\nvar thisOver = 0;\r\n\r\nTaskEntity task1 = null;\r\nTaskEntity task2 = null;\r\n\r\nLogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆媆");\r\nif (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            if (task1.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n            {\r\n                task1.S_B_STATE = \"瀹屾垚\";\r\n            }\r\n            else\r\n            {\r\n                task1.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n            }\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    }\r\n}\r\nelse if (tag.RGV.ReadTask1No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 1宸ヤ綅娌℃湁浠诲姟銆媆");\r\n}\r\n\r\nLogHelper.Info($\"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆媆");\r\nif (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)}.bit1taskOver_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            if (task2.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n            {\r\n                task2.S_B_STATE = \"瀹屾垚\";\r\n            }\r\n            else\r\n            {\r\n                task2.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n            }\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    }\r\n}\r\nelse if (tag.RGV.ReadTask2No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 2宸ヤ綅娌℃湁浠诲姟銆媆");\r\n}\r\n\r\n\r\n///1 鏈夎揣  灏� 鍙栥�  1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗竆r\ntklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\nif (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        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //1鏈変换鍔� 2 娌′换鍔°�\r\n    {\r\n        LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�\");\r\n        //1 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈塡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        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            var 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                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"宸叉帹閫乗";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\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            var 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 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔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                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"宸叉帹閫乗";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\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            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n        }\r\n    }\r\n}\r\nelse\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        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //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 = lss.Find(x => x.S_END_LOC == \"1017\");\r\n        if (e1017first == null)\r\n        {\r\n            e1017first = lss.FirstOrDefault();\r\n        }\r\n        if (e1017first != null)\r\n        {\r\n            LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆�宸ヤ綅涓嬩换鍔e1017first.S_TASK_NO}> 缁堢偣{e1017first.S_END_LOC}銆俓");\r\n            try\r\n            {\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            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Error(ex.Message, ex);\r\n                throw ex;\r\n            }\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 125\");\r\n            e1017first.S_B_STATE = \"宸叉帹閫乗";\r\n            taskservice.Update(e1017first);\r\n        }\r\n    }\r\n}\r\n\r\n#endregion",
-          "ContentCopy": "ITaskRepository taskservice = new TaskRepository();\r\nvar tklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"AGV\");\r\nif(tklist.Any())\r\nforeach (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 = 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#region Rgv\r\n\r\nvar task1Isrun = false;\r\nif (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\nvar task2Isrun = false;\r\nif (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\nif (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    throw new Exception($\"{mes} 涓嶈兘涓嬪彂鏂颁换鍔°�\");\r\n    //continue;\r\n}\r\nvar thisOver = 0;\r\n\r\nTaskEntity task1 = null;\r\nTaskEntity task2 = null;\r\n\r\nLogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅浠诲姟銆媆");\r\nif (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            if (task1.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n            {\r\n                task1.S_B_STATE = \"瀹屾垚\";\r\n            }\r\n            else\r\n            {\r\n                task1.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n            }\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    }\r\n}\r\nelse if (tag.RGV.ReadTask1No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 1宸ヤ綅娌℃湁浠诲姟銆媆");\r\n}\r\n\r\nLogHelper.Info($\"鏌ョ湅RGV 2宸ヤ綅浠诲姟銆媆");\r\nif (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)}.bit1taskOver_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            if (task2.S_B_STATE == \"鍙栬揣瀹屾垚\")\r\n            {\r\n                task2.S_B_STATE = \"瀹屾垚\";\r\n            }\r\n            else\r\n            {\r\n                task2.S_B_STATE = \"鍙栬揣瀹屾垚\";\r\n            }\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    }\r\n}\r\nelse if (tag.RGV.ReadTask2No == 0)\r\n{\r\n    LogHelper.Info($\"RGV 2宸ヤ綅娌℃湁浠诲姟銆媆");\r\n}\r\n\r\n\r\n///1 鏈夎揣  灏� 鍙栥�  1 娌¤揣 灏� 鍗歌揣锛�閮芥湁璐� 灏�鍗歌揣銆�閮芥病璐�灏�鍗竆r\ntklist = taskservice.FindList(x => x.S_B_STATE == \"鏈墽琛孿" && x.S_WORK_MODE == \"RGV\").OrderBy(x => x.T_CREATE).ToList();\r\nif (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        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //1鏈変换鍔� 2 娌′换鍔°�\r\n    {\r\n        LogHelper.Info($\"鏌ョ湅RGV1 鏈変换鍔task1.S_TASK_NO},宸ヤ綅2 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔°�\");\r\n        //1 濡傛灉鏈夊悓渚у彇璐т换鍔°�灏卞彇銆傛病鏈塡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        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            var 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                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"宸叉帹閫乗";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\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            var 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 娌′换鍔°� 鎵惧悓渚у彇璐т换鍔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                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                System.Threading.Thread.Sleep(750);\r\n                tag.RGV.taskend = 125;\r\n                t2.S_B_STATE = \"宸叉帹閫乗";\r\n                taskservice.Update(t2);\r\n                creT2 = true;\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            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n        }\r\n    }\r\n}\r\nelse\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        tag.RGV.taskend = 125;\r\n        System.Threading.Thread.Sleep(750);\r\n        tag.RGV.taskend = 125;\r\n    }\r\n    else //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 = lss.Find(x => x.S_END_LOC == \"1017\");\r\n        if (e1017first == null)\r\n        {\r\n            e1017first = lss.FirstOrDefault();\r\n        }\r\n        if (e1017first != null)\r\n        {\r\n            LogHelper.Info($\"鏌ョ湅RGV 1宸ヤ綅娌′换鍔�宸ヤ綅2 涔熸病浠诲姟銆�宸ヤ綅涓嬩换鍔e1017first.S_TASK_NO}> 缁堢偣{e1017first.S_END_LOC}銆俓");\r\n            try\r\n            {\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            }\r\n            catch (Exception ex)\r\n            {\r\n                LogHelper.Error(ex.Message, ex);\r\n                throw ex;\r\n            }\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            System.Threading.Thread.Sleep(750);\r\n            tag.RGV.taskend = 125;\r\n            LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 125\");\r\n            e1017first.S_B_STATE = \"宸叉帹閫乗";\r\n            taskservice.Update(e1017first);\r\n        }\r\n    }\r\n}\r\n\r\n#endregion",
+          "Content": "\r\n                        Func<TaskEntity, bool> myDelegate = (t) => RunTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadTaskRun\", new object[] { tag, myDelegate });",
+          "ContentCopy": "\r\n                        Func<TaskEntity, bool> myDelegate = (t) => RunTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadTaskRun\", new object[] { tag, myDelegate });",
           "ParentID": "20250226153120175",
           "Children": [],
           "Type": "Program",
@@ -626,8 +626,8 @@
           "ID": "20250611223832523",
           "Name": "鍏夋爡澶勭悊",
           "Desc": "",
-          "Content": "// - 鍏夋爡浜や簰澶勭悊銆傘�\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\t\t\t\t\t\t\tif (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\t\t\t\t\t\t\t\t//杞﹁蛋浜� 寮�厜鏍匼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\t                                item.N_CREATEMETHOD = 1;\r\n\t                                taskActRepository.Update(item);\r\n\t\t\t\t\t\t\t\t}\r\n                                //杞﹁杩涘叆浜や簰銆俓r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n                                    if (dev.deviceType == 1)\r\n                                    {\r\n\t\t\t\t\t\t\t\t\t\tvar tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//璇诲叧闂姸鎬乗r\n\t\t\t\t\t\t\t\t\t\tif (tf?.ToLower() == \"true\")\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin?\"鍏抽棴\":\"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n\t\t\t\t\t\t\t\t\t\t\tcontinuuuuu = true;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin?\"鍏抽棴\":\"寮�惎\")} 鐢宠銆俓"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n\t\t\t\t\t\t\t\t\t\t\tConn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n\t\t\t\t\t\t\t\t\t\t}\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\t\t\t\t\t\t\t\t\t\tint numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                                        if (TcpServer.GetBitdata(numm,(V?0:1))==1)\r\n                                        {\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.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\t\t\t\t\t\t\t\tLogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛乗");\r\n                                continueTask(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                        // 鍙戦偅绉戜笅鏂欏厜鏍呫�",
-          "ContentCopy": "// - 鍏夋爡浜や簰澶勭悊銆傘�\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\t\t\t\t\t\t\tif (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\t\t\t\t\t\t\t\t//杞﹁蛋浜� 寮�厜鏍匼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\t                                item.N_CREATEMETHOD = 1;\r\n\t                                taskActRepository.Update(item);\r\n\t\t\t\t\t\t\t\t}\r\n                                //杞﹁杩涘叆浜や簰銆俓r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n                                    if (dev.deviceType == 1)\r\n                                    {\r\n\t\t\t\t\t\t\t\t\t\tvar tf = Conn.榛樿Redis.GetValue(dev.deviceName + \".\" + (V ? \"R50\" : \"R52\"));//璇诲叧闂姸鎬乗r\n\t\t\t\t\t\t\t\t\t\tif (tf?.ToLower() == \"true\")\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin?\"鍏抽棴\":\"寮�惎\")} 鐢宠銆�宸茬粡鍏抽棴锛乗");\r\n\t\t\t\t\t\t\t\t\t\t\tcontinuuuuu = true;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.Info($\"{dev.deviceName}{(V ? \"宸" : \"鍙砛")} 鍏夋爡{(goin?\"鍏抽棴\":\"寮�惎\")} 鐢宠銆俓"+string.Format(\"{0}{1}{2}\", dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\"));\r\n\t\t\t\t\t\t\t\t\t\t\tConn.榛樿Redis.SetValue(dev.deviceName + \".\" + (V ? \"R01\" : \"R03\"), \"true\", dev.deviceName + \"Queue\");\r\n\t\t\t\t\t\t\t\t\t\t}\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\t\t\t\t\t\t\t\t\t\tint numm = int.Parse(string.IsNullOrEmpty(tf) ? \"0\" : tf);\r\n                                        if (TcpServer.GetBitdata(numm,(V?0:1))==1)\r\n                                        {\r\n\t\t\t\t\t\t\t\t\t\t\tLogHelper.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\t\t\t\t\t\t\t\tLogHelper.Info($\"{item.S_TASK_NO}{item.S_ACTION_CODE} 杞﹁締鍙戦�缁х画浠诲姟锛乗");\r\n                                continueTask(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                        // 鍙戦偅绉戜笅鏂欏厜鏍呫�",
+          "Content": "// - 鍏夋爡浜や簰澶勭悊銆傘�\r\n                        Action<HaiKangOrderInfo> myDelegate = (t) => continueTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadGrats\", new object[] { tag, myDelegate });\r\n                        \r\n                        // 鍙戦偅绉戜笅鏂欏厜鏍呫�",
+          "ContentCopy": "// - 鍏夋爡浜や簰澶勭悊銆傘�\r\n                        Action<HaiKangOrderInfo> myDelegate = (t) => continueTask(t);\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadGrats\", new object[] { tag, myDelegate });\r\n                        \r\n                        // 鍙戦偅绉戜笅鏂欏厜鏍呫�",
           "ParentID": "20250226153120175",
           "Children": [],
           "Type": "Program",
@@ -673,8 +673,8 @@
               "ID": "20250616094224396",
               "Name": "1020绌烘涓嬬嚎",
               "Desc": "",
-              "Content": "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        try\r\n        {\r\n            foreach (var item in new string[] { \"1004\", \"1006\", \"1012\", \"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)\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 string 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 string msg1);\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 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}",
-              "ContentCopy": "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        try\r\n        {\r\n            foreach (var item in new string[] { \"1004\", \"1006\", \"1012\", \"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)\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 string 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 string msg1);\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 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}",
+              "Content": "\r\n                        //1020  1023 绌烘涓嬬嚎\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadEdown\", new object[] { tag });",
+              "ContentCopy": "\r\n                        //1020  1023 绌烘涓嬬嚎\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadEdown\", new object[] { tag });",
               "ParentID": "20250614173821058",
               "Children": [],
               "Type": "Program",
@@ -751,8 +751,8 @@
               "ID": "20250616094632985",
               "Name": "瀹氬瓙婊′笅绾�,
               "Desc": "",
-              "Content": "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 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            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 string 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}",
-              "ContentCopy": "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 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            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 string 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}",
+              "Content": "\r\n                        //瀹氬瓙婊′笅绾� 1008  1016   ->  1026\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadDdown\", new object[] { tag });",
+              "ContentCopy": "\r\n                        //瀹氬瓙婊′笅绾� 1008  1016   ->  1026\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadDdown\", new object[] { tag });",
               "ParentID": "20250614173821058",
               "Children": [],
               "Type": "Program",
@@ -790,8 +790,8 @@
               "ID": "20250616094511322",
               "Name": "杞瓙婊′笅绾�,
               "Desc": "",
-              "Content": "//杞瓙婊′笅绾� 1002  1010   - RGV2宸ヤ綅涓嶅彲鍒�1017 涓嶅彲涓嬪彂2宸ヤ綅浠诲姟銆俓r\nforeach (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 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            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 string 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}",
-              "ContentCopy": "//杞瓙婊′笅绾� 1002  1010   - RGV2宸ヤ綅涓嶅彲鍒�1017 涓嶅彲涓嬪彂2宸ヤ綅浠诲姟銆俓r\nforeach (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 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            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 string 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}",
+              "Content": "\r\n                        //杞瓙婊′笅绾� 1002  1010   - RGV2宸ヤ綅涓嶅彲鍒�1017 涓嶅彲涓嬪彂2宸ヤ綅浠诲姟銆俓r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread0210Down\", new object[] { tag });",
+              "ContentCopy": "\r\n                        //杞瓙婊′笅绾� 1002  1010   - RGV2宸ヤ綅涓嶅彲鍒�1017 涓嶅彲涓嬪彂2宸ヤ綅浠诲姟銆俓r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread0210Down\", new object[] { tag });",
               "ParentID": "20250614173821058",
               "Children": [],
               "Type": "Program",
@@ -829,8 +829,8 @@
               "ID": "20250616095605911",
               "Name": "涓嬫枡浣嶆娴�,
               "Desc": "",
-              "Content": "//涓嬫枡浣嶆娴嬨�  1003  鍒颁綅鏃�鍐�鏍囪瘑淇″彿 骞�缁欐満姊版墜淇″彿銆� \r\nforeach (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\")\r\n        {\r\n            tag.FNK1.D2210 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1005_LAST = 1;\r\n\r\n            tag.SF涓嬫枡浣�WRelease1005 = 0;\r\n            tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1003\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1003_LAST = 1;\r\n\r\n            tag.SF涓嬫枡浣�WRelease1003 = 0;\r\n            tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1013\")\r\n        {\r\n            tag.FNK2.D2210 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1013_LAST = 1;\r\n\r\n            tag.SF涓嬫枡浣�WRelease1013 = 0;\r\n            tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n        }\r\n        else if (ssx == \"1011\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1011_LAST = 1;\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    }\r\n}",
-              "ContentCopy": "//涓嬫枡浣嶆娴嬨�  1003  鍒颁綅鏃�鍐�鏍囪瘑淇″彿 骞�缁欐満姊版墜淇″彿銆� \r\nforeach (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\")\r\n        {\r\n            tag.FNK1.D2210 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1005_LAST = 1;\r\n\r\n            tag.SF涓嬫枡浣�WRelease1005 = 0;\r\n            tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1003\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1003_LAST = 1;\r\n\r\n            tag.SF涓嬫枡浣�WRelease1003 = 0;\r\n            tag.SF涓嬫枡浣�WSafe0305 = 0;\r\n        }\r\n        else if (ssx == \"1013\")\r\n        {\r\n            tag.FNK2.D2210 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1013_LAST = 1;\r\n\r\n            tag.SF涓嬫枡浣�WRelease1013 = 0;\r\n            tag.SF涓嬫枡浣�WSafe1113 = 0;\r\n        }\r\n        else if (ssx == \"1011\")\r\n        {\r\n            tag.FNK2.D2215 = 1;\r\n            tag.SF涓嬫枡浣�RArrive1011_LAST = 1;\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    }\r\n}",
+              "Content": "\r\n                        //涓嬫枡浣嶆娴嬨�  1003  鍒颁綅鏃�鍐�鏍囪瘑淇″彿 骞�缁欐満姊版墜淇″彿銆� \r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread涓嬫枡浣嶆娴媆", new object[] { tag });",
+              "ContentCopy": "\r\n                        //涓嬫枡浣嶆娴嬨�  1003  鍒颁綅鏃�鍐�鏍囪瘑淇″彿 骞�缁欐満姊版墜淇″彿銆� \r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread涓嬫枡浣嶆娴媆", new object[] { tag });",
               "ParentID": "20250614173821058",
               "Children": [],
               "Type": "Program",
@@ -868,8 +868,8 @@
               "ID": "20250616095709155",
               "Name": "1鍙稦NK鏈烘鎵嬪畬鎴�,
               "Desc": "",
-              "Content": "if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n{\r\n    tag.FNK1.D2210 = 0;\r\n    tag.FNK1.D2212_LAST = 1;\r\n\r\n    tag.SF涓嬫枡浣�WRelease1005 = 1;\r\n    tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n{\r\n    tag.FNK1.D2212_LAST = 0;\r\n}\r\nif (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n{\r\n    tag.FNK1.D2215 = 0;\r\n    tag.FNK1.D2217_LAST = 1;\r\n\r\n    tag.SF涓嬫枡浣�WRelease1003 = 1;\r\n    tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n    tag.FNK1.D2217_LAST = 0;\r\n",
-              "ContentCopy": "if (tag.FNK1.D2212 == 1 && tag.FNK1.D2212_LAST == 0)\r\n{\r\n    tag.FNK1.D2210 = 0;\r\n    tag.FNK1.D2212_LAST = 1;\r\n\r\n    tag.SF涓嬫枡浣�WRelease1005 = 1;\r\n    tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2212 == 0 && tag.FNK1.D2212_LAST == 1)\r\n{\r\n    tag.FNK1.D2212_LAST = 0;\r\n}\r\nif (tag.FNK1.D2217 == 1 && tag.FNK1.D2217_LAST == 0)\r\n{\r\n    tag.FNK1.D2215 = 0;\r\n    tag.FNK1.D2217_LAST = 1;\r\n\r\n    tag.SF涓嬫枡浣�WRelease1003 = 1;\r\n    tag.SF涓嬫枡浣�WSafe0305 = 1;\r\n}\r\nelse if (tag.FNK1.D2217 == 0 && tag.FNK1.D2217_LAST == 1)\r\n    tag.FNK1.D2217_LAST = 0;\r\n",
+              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK1Over\", new object[] { tag });",
+              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK1Over\", new object[] { tag });",
               "ParentID": "20250614173821058",
               "Children": [],
               "Type": "Program",
@@ -907,8 +907,8 @@
               "ID": "20250616095733680",
               "Name": "2鍙稦NK鏈烘鎵嬪畬鎴�,
               "Desc": "",
-              "Content": " if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n     tag.FNK2.D2210 = 0;\r\n     tag.FNK2.D2212_LAST = 1;\r\n\r\n     tag.SF涓嬫枡浣�WRelease1013 = 1;\r\n     tag.SF涓嬫枡浣�WSafe1113 = 1;\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 }\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n     tag.FNK2.D2215 = 0;\r\n     tag.FNK2.D2217_LAST = 1;\r\n\r\n     tag.SF涓嬫枡浣�WRelease1011 = 1;\r\n     tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n     tag.FNK2.D2217_LAST = 0;",
-              "ContentCopy": " if (tag.FNK2.D2212 == 1 && tag.FNK2.D2212_LAST == 0)\r\n {\r\n     tag.FNK2.D2210 = 0;\r\n     tag.FNK2.D2212_LAST = 1;\r\n\r\n     tag.SF涓嬫枡浣�WRelease1013 = 1;\r\n     tag.SF涓嬫枡浣�WSafe1113 = 1;\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 }\r\n if (tag.FNK2.D2217 == 1 && tag.FNK2.D2217_LAST == 0)\r\n {\r\n     tag.FNK2.D2215 = 0;\r\n     tag.FNK2.D2217_LAST = 1;\r\n\r\n     tag.SF涓嬫枡浣�WRelease1011 = 1;\r\n     tag.SF涓嬫枡浣�WSafe1113 = 1;\r\n }\r\n else if (tag.FNK2.D2217 == 0 && tag.FNK2.D2217_LAST == 1)\r\n     tag.FNK2.D2217_LAST = 0;",
+              "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK2Over\", new object[] { tag });",
+              "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"ThreadFNK2Over\", new object[] { tag });",
               "ParentID": "20250614173821058",
               "Children": [],
               "Type": "Program",
@@ -954,8 +954,8 @@
                   "ID": "20250617085708084",
                   "Name": "Program1",
                   "Desc": "",
-                  "Content": "\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}\");",
-                  "ContentCopy": "\r\n Console.WriteLine($\"1019浠诲姟鐘舵�锛歿tag.SA1019.RtaskState}- barcode:{tag.SA1019.R鎵樼洏鐮亇- 绌洪棽{tag.SA1019.R5绌洪棽}\");",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1019Down\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1019Down\", new object[] { tag });",
                   "ParentID": "20250617081923670",
                   "Children": [],
                   "Type": "Program",
@@ -1029,8 +1029,8 @@
                   "ID": "20250617085712101",
                   "Name": "Program1",
                   "Desc": "",
-                  "Content": "\r\n                        Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}\");",
-                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA1025 浠诲姟鐘舵�锛歿tag.SA1025.RtaskState}- 绌洪棽{tag.SA1025.R5绌洪棽}\");",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1025Up\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1025Up\", new object[] { tag });",
                   "ParentID": "20250617081926036",
                   "Children": [],
                   "Type": "Program",
@@ -1104,8 +1104,8 @@
                   "ID": "20250617085750712",
                   "Name": "Program1",
                   "Desc": "",
-                  "Content": "\r\n                        Console.WriteLine($\"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}\");",
-                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA1022 浠诲姟鐘舵�锛歿tag.SA1022.RtaskState}- 绌洪棽{tag.SA1022.R5绌洪棽}\");",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1022Up\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1022Up\", new object[] { tag });",
                   "ParentID": "20250617081930010",
                   "Children": [],
                   "Type": "Program",
@@ -1179,8 +1179,8 @@
                   "ID": "20250617085800942",
                   "Name": "Program1",
                   "Desc": "",
-                  "Content": "\r\n                        Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}\");",
-                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA1030 浠诲姟鐘舵�锛歿tag.SA1030.RtaskState}- 绌洪棽{tag.SA1030.R5绌洪棽}-->瀵瑰簲缁堢偣2001>绌洪棽5锛歿tag.SA2001.R5绌洪棽}\");",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1030Down\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread1030Down\", new object[] { tag });",
                   "ParentID": "20250617081932131",
                   "Children": [],
                   "Type": "Program",
@@ -1254,8 +1254,8 @@
                   "ID": "20250617085809982",
                   "Name": "Program1",
                   "Desc": "",
-                  "Content": "\r\n                        Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇\");",
-                  "ContentCopy": "\r\n                        Console.WriteLine($\"SA2030 浠诲姟鐘舵�锛歿tag.SA2030.RtaskState}- 绌洪棽{tag.SA2030.R5绌洪棽} - barcode:{tag.SA2030.R鎵樼洏鐮亇\");",
+                  "Content": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread2030Down\", new object[] { tag });",
+                  "ContentCopy": "\r\n                        AutoThread.InvokeMethod(AutoThread.Instance, \"Thread2030Down\", new object[] { tag });",
                   "ParentID": "20250617081938161",
                   "Children": [],
                   "Type": "Program",
@@ -1410,6 +1410,6 @@
     }
   ],
   "CreationTime": "2025-02-26 15:31:20",
-  "LastWriteTime": "2025-06-18 23:06:58",
+  "LastWriteTime": "2025-06-23 08:38:47",
   "HasSaved": true
 }
\ No newline at end of file

--
Gitblit v1.9.1