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/Scripts/Custom.json |   31 ++++++++++++++++++++++++++-----
 1 files changed, 26 insertions(+), 5 deletions(-)

diff --git "a/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Custom.json" "b/2025\345\271\2646\346\234\21012\346\227\245/AuxAllWCS/Scripts/Custom.json"
index 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

--
Gitblit v1.9.1