{ "CustomCodes": [ { "ID": "20250323111354905", "Name": "Method1", "Desc": "11", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public void Method1(System.Int32 param1)", "EditCode": "", "Code": "public void Method1(System.Int32 param1)\r\n{\r\n}", "CusMethod": { "Name": "Method1", "Params": [ { "Index": 1, "Name": "param1", "Type": "System.Int32", "Modifier": "blank" } ], "ReturnType": "void" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250323144531864", "Name": "Settings", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class Settings", "EditCode": "\t\tpublic static bool FirstG {get;set;}=false;\r\n public static string HostToAgvServerUrl { get; set; }\r\n \r\n public static List deviceInfos { get; set; } = new List();\r\n public static List RunProcs { get; set; } = new List();\r\n public static string HKbaseUrl { get; set; }\r\n public static string MESbaseUrl { get; set; }\r\n public static string WMSbaseUrl { get; set; }\r\n public static readonly HttpHelper apiHelper = new HttpHelper();\r\n \r\n public static string GetTimeStamp(DateTime? time = null)\r\n\t\t{\r\n\t\t TimeSpan ts = DateTime.UtcNow - (time ?? new DateTime(1970, 1, 1, 0, 0, 0, 0));\r\n\t\t return Convert.ToInt64(ts.TotalMilliseconds).ToString();\r\n\t\t}", "Code": "public class Settings\r\n{\t\tpublic static bool FirstG {get;set;}=false;\r\n public static string HostToAgvServerUrl { get; set; }\r\n \r\n public static List deviceInfos { get; set; } = new List();\r\n public static List RunProcs { get; set; } = new List();\r\n public static string HKbaseUrl { get; set; }\r\n public static string MESbaseUrl { get; set; }\r\n public static string WMSbaseUrl { get; set; }\r\n public static readonly HttpHelper apiHelper = new HttpHelper();\r\n \r\n public static string GetTimeStamp(DateTime? time = null)\r\n\t\t{\r\n\t\t TimeSpan ts = DateTime.UtcNow - (time ?? new DateTime(1970, 1, 1, 0, 0, 0, 0));\r\n\t\t return Convert.ToInt64(ts.TotalMilliseconds).ToString();\r\n\t\t}\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "Settings", "InheritClass": "", "Inherits": [] } }, { "ID": "20250323144605974", "Name": "SettingInit", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public void SettingInit()", "EditCode": "try\r\n{\r\n var jsonFile = System.AppDomain.CurrentDomain.BaseDirectory + \"/Static/config.json\";\r\n using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile))\r\n {\r\n using (JsonTextReader reader = new JsonTextReader(file))\r\n {\r\n JObject o = (JObject)JToken.ReadFrom(reader);\r\n foreach (Newtonsoft.Json.Linq.JProperty keyValue in o.Properties())\r\n {\r\n Console.WriteLine(keyValue.Name);\r\n if (keyValue.Name == \"HostToAgvServerUrl\")\r\n {\r\n Settings.HostToAgvServerUrl = keyValue.Value.ToString();\r\n }\r\n if (keyValue.Name == \"deviceInfo\") {\r\n Settings.deviceInfos = JsonConvert.DeserializeObject>(keyValue.Value.ToString());\r\n }\r\n if (keyValue.Name == \"HKbaseUrl\") {\r\n Settings.HKbaseUrl = keyValue.Value.ToString();\r\n }\r\n if (keyValue.Name == \"MESbaseUrl\")\r\n {\r\n Settings.MESbaseUrl = keyValue.Value.ToString();\r\n }\r\n if (keyValue.Name == \"WMSbaseUrl\")\r\n {\r\n Settings.WMSbaseUrl = keyValue.Value.ToString();\r\n }\r\n }\r\n }\r\n }\r\n //if(!Settings.FirstG)\r\n \t//LogHelper.Info(\"加载配置文件信息 完成\");\r\n}\r\ncatch (Exception ex)\r\n{\r\n LogHelper.Error(\"加载配置文件失败!\" + ex.Message, ex);\r\n}", "Code": "public void SettingInit()\r\n{try\r\n{\r\n var jsonFile = System.AppDomain.CurrentDomain.BaseDirectory + \"/Static/config.json\";\r\n using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile))\r\n {\r\n using (JsonTextReader reader = new JsonTextReader(file))\r\n {\r\n JObject o = (JObject)JToken.ReadFrom(reader);\r\n foreach (Newtonsoft.Json.Linq.JProperty keyValue in o.Properties())\r\n {\r\n Console.WriteLine(keyValue.Name);\r\n if (keyValue.Name == \"HostToAgvServerUrl\")\r\n {\r\n Settings.HostToAgvServerUrl = keyValue.Value.ToString();\r\n }\r\n if (keyValue.Name == \"deviceInfo\") {\r\n Settings.deviceInfos = JsonConvert.DeserializeObject>(keyValue.Value.ToString());\r\n }\r\n if (keyValue.Name == \"HKbaseUrl\") {\r\n Settings.HKbaseUrl = keyValue.Value.ToString();\r\n }\r\n if (keyValue.Name == \"MESbaseUrl\")\r\n {\r\n Settings.MESbaseUrl = keyValue.Value.ToString();\r\n }\r\n if (keyValue.Name == \"WMSbaseUrl\")\r\n {\r\n Settings.WMSbaseUrl = keyValue.Value.ToString();\r\n }\r\n }\r\n }\r\n }\r\n //if(!Settings.FirstG)\r\n \t//LogHelper.Info(\"加载配置文件信息 完成\");\r\n}\r\ncatch (Exception ex)\r\n{\r\n LogHelper.Error(\"加载配置文件失败!\" + ex.Message, ex);\r\n}\r\n}", "CusMethod": { "Name": "SettingInit", "Params": [], "ReturnType": "void" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250323145442478", "Name": "LogHelper", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class LogHelper", "EditCode": "public static Dictionary loggers = new Dictionary();\r\n\r\npublic static void Debug(string message, string name = \"\") {\r\n ILogger logger = null;\r\n if (loggers.Keys.Contains(name)) {\r\n logger = loggers[name];\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(name);\r\n if (logger != null) {\r\n loggers.Add(name, logger);\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(\"console\");\r\n }\r\n }\r\n if (logger != null) {\r\n logger.Debug(message);\r\n }\r\n}\r\n\r\n\r\n\r\npublic static void Info(string message, string name = \"\") {\r\n //logger.Info(message);\r\n ILogger logger = null;\r\n if (loggers.Keys.Contains(name)) {\r\n logger = loggers[name];\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(name);\r\n if (logger != null) {\r\n loggers.Add(name, logger);\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(\"infoFile\");\r\n }\r\n }\r\n if (logger != null) {\r\n logger.Info(message);\r\n }\r\n}\r\n\r\npublic static void Error(string message, Exception ex, string name = \"\") {\r\n //logger.Error(ex, message);\r\n ILogger logger = null;\r\n if (loggers.Keys.Contains(name)) {\r\n logger = loggers[name];\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(name);\r\n if (logger != null) {\r\n loggers.Add(name, logger);\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(\"errorFile\");\r\n }\r\n }\r\n if (logger != null) {\r\n logger.Error($\"{message}{ex.StackTrace}\");\r\n }\r\n}", "Code": "public class LogHelper\r\n{public static Dictionary loggers = new Dictionary();\r\n\r\npublic static void Debug(string message, string name = \"\") {\r\n ILogger logger = null;\r\n if (loggers.Keys.Contains(name)) {\r\n logger = loggers[name];\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(name);\r\n if (logger != null) {\r\n loggers.Add(name, logger);\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(\"console\");\r\n }\r\n }\r\n if (logger != null) {\r\n logger.Debug(message);\r\n }\r\n}\r\n\r\n\r\n\r\npublic static void Info(string message, string name = \"\") {\r\n //logger.Info(message);\r\n ILogger logger = null;\r\n if (loggers.Keys.Contains(name)) {\r\n logger = loggers[name];\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(name);\r\n if (logger != null) {\r\n loggers.Add(name, logger);\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(\"infoFile\");\r\n }\r\n }\r\n if (logger != null) {\r\n logger.Info(message);\r\n }\r\n}\r\n\r\npublic static void Error(string message, Exception ex, string name = \"\") {\r\n //logger.Error(ex, message);\r\n ILogger logger = null;\r\n if (loggers.Keys.Contains(name)) {\r\n logger = loggers[name];\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(name);\r\n if (logger != null) {\r\n loggers.Add(name, logger);\r\n }\r\n else {\r\n logger = LogFactory.CreateLogger(\"errorFile\");\r\n }\r\n }\r\n if (logger != null) {\r\n logger.Error($\"{message}{ex.StackTrace}\");\r\n }\r\n}\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "LogHelper", "InheritClass": "", "Inherits": [] } }, { "ID": "20250323145505759", "Name": "LogFactory", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class LogFactory", "EditCode": " /// \r\n /// 通过配置文件配置日志\r\n /// \r\n static LogFactory() {\r\n var loggerNames = new List() { \"HosttoagvTask\", \"HosttoagvCar\", \"NDC\", \"杭奥\" };\r\n LogManager.Configuration = DefaultConfig(loggerNames);\r\n }\r\n public static ILogger CreateLogger(string name) {\r\n var logger = LogManager.GetLogger(name);\r\n return logger;\r\n }\r\n\r\n public static LoggingConfiguration DefaultConfig(List loggerNames) {\r\n var config = new LoggingConfiguration();\r\n loggerNames.ForEach(a => {\r\n var target = new FileTarget();\r\n target.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M\r\n target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;\r\n target.ArchiveFileName = @\"${basedir}/Logs/\" + a + \"/{####}.txt\";\r\n target.FileName = @\"${basedir}/Logs/\" + a + \"/${shortdate}.txt\";//当前文件路径\r\n target.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(a, target);\r\n config.AddRuleForOneLevel(LogLevel.Info, target, a);\r\n });\r\n\r\n\r\n // 添加target-console\r\n var consoleTarget = new ColoredConsoleTarget();\r\n consoleTarget.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(\"console\", consoleTarget);\r\n config.AddRule(LogLevel.Debug, LogLevel.Fatal, consoleTarget);\r\n\r\n //添加target-info\r\n var infoFileTarget = new FileTarget();\r\n infoFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M\r\n infoFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;\r\n infoFileTarget.ArchiveFileName = @\"${basedir}/Logs/Info/{####}.txt\";\r\n infoFileTarget.FileName = @\"${basedir}/Logs/Info/${shortdate}.txt\";//当前文件路径\r\n infoFileTarget.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(\"infoFile\", infoFileTarget);\r\n config.AddRuleForOneLevel(LogLevel.Info, infoFileTarget);//INFO写在Info文件\r\n\r\n //添加target-err\r\n var errorFileTarget = new FileTarget();\r\n errorFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M\r\n errorFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;\r\n errorFileTarget.ArchiveFileName = @\"${basedir}/Logs/Error/{####}.txt\";\r\n errorFileTarget.FileName = @\"${basedir}/Logs/Error/${shortdate}.txt\";\r\n errorFileTarget.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(\"errorFile\", errorFileTarget);\r\n config.AddRule(LogLevel.Error, LogLevel.Fatal, errorFileTarget);\r\n\r\n\r\n return config;\r\n }\r\n", "Code": "public class LogFactory\r\n{ /// \r\n /// 通过配置文件配置日志\r\n /// \r\n static LogFactory() {\r\n var loggerNames = new List() { \"HosttoagvTask\", \"HosttoagvCar\", \"NDC\", \"杭奥\" };\r\n LogManager.Configuration = DefaultConfig(loggerNames);\r\n }\r\n public static ILogger CreateLogger(string name) {\r\n var logger = LogManager.GetLogger(name);\r\n return logger;\r\n }\r\n\r\n public static LoggingConfiguration DefaultConfig(List loggerNames) {\r\n var config = new LoggingConfiguration();\r\n loggerNames.ForEach(a => {\r\n var target = new FileTarget();\r\n target.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M\r\n target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;\r\n target.ArchiveFileName = @\"${basedir}/Logs/\" + a + \"/{####}.txt\";\r\n target.FileName = @\"${basedir}/Logs/\" + a + \"/${shortdate}.txt\";//当前文件路径\r\n target.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(a, target);\r\n config.AddRuleForOneLevel(LogLevel.Info, target, a);\r\n });\r\n\r\n\r\n // 添加target-console\r\n var consoleTarget = new ColoredConsoleTarget();\r\n consoleTarget.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(\"console\", consoleTarget);\r\n config.AddRule(LogLevel.Debug, LogLevel.Fatal, consoleTarget);\r\n\r\n //添加target-info\r\n var infoFileTarget = new FileTarget();\r\n infoFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M\r\n infoFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;\r\n infoFileTarget.ArchiveFileName = @\"${basedir}/Logs/Info/{####}.txt\";\r\n infoFileTarget.FileName = @\"${basedir}/Logs/Info/${shortdate}.txt\";//当前文件路径\r\n infoFileTarget.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(\"infoFile\", infoFileTarget);\r\n config.AddRuleForOneLevel(LogLevel.Info, infoFileTarget);//INFO写在Info文件\r\n\r\n //添加target-err\r\n var errorFileTarget = new FileTarget();\r\n errorFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M\r\n errorFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;\r\n errorFileTarget.ArchiveFileName = @\"${basedir}/Logs/Error/{####}.txt\";\r\n errorFileTarget.FileName = @\"${basedir}/Logs/Error/${shortdate}.txt\";\r\n errorFileTarget.Layout = @\"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}\";\r\n\r\n config.AddTarget(\"errorFile\", errorFileTarget);\r\n config.AddRule(LogLevel.Error, LogLevel.Fatal, errorFileTarget);\r\n\r\n\r\n return config;\r\n }\r\n\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "LogFactory", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324165239206", "Name": "OperateHKTaskStatus", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public void OperateHKTaskStatus(System.Object param1)", "EditCode": "\r\n HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n if (string.IsNullOrEmpty(model.taskCode))\r\n return;\r\n var hkr = AutoThread.InvokeMethod(AutoThread.Instance, \"OperateHKTaskStatus\", new object[] { model });", "Code": "public void OperateHKTaskStatus(System.Object param1)\r\n{\r\n HaiKangOrderInfo model = (HaiKangOrderInfo)param1;\r\n if (string.IsNullOrEmpty(model.taskCode))\r\n return;\r\n var hkr = AutoThread.InvokeMethod(AutoThread.Instance, \"OperateHKTaskStatus\", new object[] { model });\r\n}", "CusMethod": { "Name": "OperateHKTaskStatus", "Params": [ { "Index": 1, "Name": "param1", "Type": "System.Object", "Modifier": "blank" } ], "ReturnType": "void" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324165635320", "Name": "HaiKangOrderInfo", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class HaiKangOrderInfo", "EditCode": "\r\n /// \r\n /// 请求编号(编号唯一)\r\n /// \r\n public string reqCode { get; set; }\r\n\r\n /// \r\n /// 请求时间\r\n /// \r\n public string reqTime { get; set; }\r\n\r\n /// \r\n /// 客户端编号(如PDA、HCWMS等)\r\n /// \r\n public string clientCode { get; set; }\r\n \r\n /// \r\n /// 令牌号\r\n /// \r\n public string tokenCode { get; set; }\r\n\r\n /// \r\n /// 任务类型\r\n /// \r\n public string taskTyp { get; set; }\r\n \r\n /// \r\n /// 容器类型(叉车项目必传)\r\n /// (叉车/CTU 专用)\r\n /// \r\n public string ctnrTyp { get; set; }\r\n\r\n /// \r\n /// 容器编号(叉车/CTU 专用)\r\n /// \r\n public string ctnrCode { get; set; }\r\n\r\n /// \r\n /// 任务模式(0-普通、1-出库、2-入库、3-移库 )\r\n /// \r\n public string taskMode { get; set; }\r\n\r\n /// \r\n /// 工作位\r\n /// \r\n public string wbCode { get; set; }\r\n \r\n /// \r\n /// 货架编号\r\n /// \r\n public string podCode { get; set; }\r\n\r\n /// \r\n /// 方向(180:左、0:右、90:上、-90:下 )\r\n /// \r\n public string podDir { get; set; }\r\n \r\n /// \r\n /// 货架类型\r\n /// \r\n public string podTyp { get; set; }\r\n \r\n /// \r\n /// 物料批次或货架上的物料唯一编码\r\n /// \r\n public string materialLot { get; set; }\r\n \r\n /// \r\n /// 优先级\r\n /// \r\n public string priority { get; set; }\r\n \r\n /// \r\n /// 组编号\r\n /// \r\n public string groupId { get; set; }\r\n \r\n /// \r\n /// 自定义字段.JSON 格式\r\n /// \r\n public string data { get; set; }\r\n \r\n /// \r\n /// 取消类型\r\n /// \r\n public string forceCancel { get; set; }\r\n\r\n /// \r\n /// 回库区域编码\r\n /// \r\n public string matterArea { get; set; }\r\n \r\n /// \r\n /// 取消该AGV正在执行的任务单\r\n /// \r\n public string agvCode { get; set; }\r\n \r\n /// \r\n /// 任务单编号\r\n /// \r\n public string taskCode { get; set; }\r\n\r\n /// \r\n /// 地码 X 坐标\r\n /// \r\n public string cooX { get; set; }\r\n \r\n /// \r\n /// 地码 Y 坐标\r\n /// \r\n public string cooY { get; set; }\r\n \r\n /// \r\n /// 当前位置编号\r\n /// \r\n public string currentPositionCode { get; set; }\r\n \r\n /// \r\n /// 地图编号\r\n /// \r\n public string mapCode { get; set; }\r\n \r\n /// \r\n /// 地码编号\r\n /// \r\n public string mapDataCode { get; set; }\r\n \r\n /// \r\n /// 仓位编号\r\n /// \r\n public string stgBinCode { get; set; }\r\n \r\n /// \r\n /// 方法名\r\n /// \r\n public string method { get; set; }\r\n \r\n /// \r\n /// AGV 编号\r\n /// \r\n public string robotCode { get; set; }\r\n \r\n \r\n /// \r\n /// 容器类型\r\n /// \r\n public string ctnrType { get; set; }\r\n \r\n \r\n /// \r\n /// 巷道编号\r\n /// \r\n public string roadWayCode { get; set; }\r\n \r\n /// \r\n /// 巷道内顺序号\r\n /// \r\n public string seq { get; set; }\r\n \r\n /// \r\n /// 设备编号\r\n /// \r\n public string eqpCode { get; set; }\r\n\r\n /// \r\n /// 任务路径集合\r\n /// \r\n public List positionCodePath { get; set; }\r\n ", "Code": "public class HaiKangOrderInfo\r\n{\r\n /// \r\n /// 请求编号(编号唯一)\r\n /// \r\n public string reqCode { get; set; }\r\n\r\n /// \r\n /// 请求时间\r\n /// \r\n public string reqTime { get; set; }\r\n\r\n /// \r\n /// 客户端编号(如PDA、HCWMS等)\r\n /// \r\n public string clientCode { get; set; }\r\n \r\n /// \r\n /// 令牌号\r\n /// \r\n public string tokenCode { get; set; }\r\n\r\n /// \r\n /// 任务类型\r\n /// \r\n public string taskTyp { get; set; }\r\n \r\n /// \r\n /// 容器类型(叉车项目必传)\r\n /// (叉车/CTU 专用)\r\n /// \r\n public string ctnrTyp { get; set; }\r\n\r\n /// \r\n /// 容器编号(叉车/CTU 专用)\r\n /// \r\n public string ctnrCode { get; set; }\r\n\r\n /// \r\n /// 任务模式(0-普通、1-出库、2-入库、3-移库 )\r\n /// \r\n public string taskMode { get; set; }\r\n\r\n /// \r\n /// 工作位\r\n /// \r\n public string wbCode { get; set; }\r\n \r\n /// \r\n /// 货架编号\r\n /// \r\n public string podCode { get; set; }\r\n\r\n /// \r\n /// 方向(180:左、0:右、90:上、-90:下 )\r\n /// \r\n public string podDir { get; set; }\r\n \r\n /// \r\n /// 货架类型\r\n /// \r\n public string podTyp { get; set; }\r\n \r\n /// \r\n /// 物料批次或货架上的物料唯一编码\r\n /// \r\n public string materialLot { get; set; }\r\n \r\n /// \r\n /// 优先级\r\n /// \r\n public string priority { get; set; }\r\n \r\n /// \r\n /// 组编号\r\n /// \r\n public string groupId { get; set; }\r\n \r\n /// \r\n /// 自定义字段.JSON 格式\r\n /// \r\n public string data { get; set; }\r\n \r\n /// \r\n /// 取消类型\r\n /// \r\n public string forceCancel { get; set; }\r\n\r\n /// \r\n /// 回库区域编码\r\n /// \r\n public string matterArea { get; set; }\r\n \r\n /// \r\n /// 取消该AGV正在执行的任务单\r\n /// \r\n public string agvCode { get; set; }\r\n \r\n /// \r\n /// 任务单编号\r\n /// \r\n public string taskCode { get; set; }\r\n\r\n /// \r\n /// 地码 X 坐标\r\n /// \r\n public string cooX { get; set; }\r\n \r\n /// \r\n /// 地码 Y 坐标\r\n /// \r\n public string cooY { get; set; }\r\n \r\n /// \r\n /// 当前位置编号\r\n /// \r\n public string currentPositionCode { get; set; }\r\n \r\n /// \r\n /// 地图编号\r\n /// \r\n public string mapCode { get; set; }\r\n \r\n /// \r\n /// 地码编号\r\n /// \r\n public string mapDataCode { get; set; }\r\n \r\n /// \r\n /// 仓位编号\r\n /// \r\n public string stgBinCode { get; set; }\r\n \r\n /// \r\n /// 方法名\r\n /// \r\n public string method { get; set; }\r\n \r\n /// \r\n /// AGV 编号\r\n /// \r\n public string robotCode { get; set; }\r\n \r\n \r\n /// \r\n /// 容器类型\r\n /// \r\n public string ctnrType { get; set; }\r\n \r\n \r\n /// \r\n /// 巷道编号\r\n /// \r\n public string roadWayCode { get; set; }\r\n \r\n /// \r\n /// 巷道内顺序号\r\n /// \r\n public string seq { get; set; }\r\n \r\n /// \r\n /// 设备编号\r\n /// \r\n public string eqpCode { get; set; }\r\n\r\n /// \r\n /// 任务路径集合\r\n /// \r\n public List positionCodePath { get; set; }\r\n \r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "HaiKangOrderInfo", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324165724429", "Name": "positionCodePath", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class positionCodePath", "EditCode": "\r\n /// \r\n /// 任务编号\r\n /// \r\n public string positionCode { get; set; }\r\n\r\n /// \r\n /// 类型\r\n /// \r\n public string Type { get; set; }", "Code": "public class positionCodePath\r\n{\r\n /// \r\n /// 任务编号\r\n /// \r\n public string positionCode { get; set; }\r\n\r\n /// \r\n /// 类型\r\n /// \r\n public string Type { get; set; }\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "positionCodePath", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324170811305", "Name": "Begin", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public GZ.DB.Entity.OIDATABASE.TaskEntity Begin(GZ.DB.Entity.OIDATABASE.TaskEntity task)", "EditCode": " if (task.S_B_STATE.Trim() == \"已推送\") {\r\n task.S_B_STATE = \"执行中\";\r\n task.T_START_TIME = DateTime.Now;\r\n }\r\n return task;", "Code": "public GZ.DB.Entity.OIDATABASE.TaskEntity Begin(GZ.DB.Entity.OIDATABASE.TaskEntity task)\r\n{ if (task.S_B_STATE.Trim() == \"已推送\") {\r\n task.S_B_STATE = \"执行中\";\r\n task.T_START_TIME = DateTime.Now;\r\n }\r\n return task;\r\n}", "CusMethod": { "Name": "Begin", "Params": [ { "Index": 1, "Name": "task", "Type": "GZ.DB.Entity.OIDATABASE.TaskEntity", "Modifier": "blank" } ], "ReturnType": "GZ.DB.Entity.OIDATABASE.TaskEntity" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324170922920", "Name": "End", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public GZ.DB.Entity.OIDATABASE.TaskEntity End(GZ.DB.Entity.OIDATABASE.TaskEntity task)", "EditCode": " if (task != null) {\r\n task.S_B_STATE = \"完成\";\r\n task.T_END_TIME = DateTime.Now;\r\n }\r\n return task;", "Code": "public GZ.DB.Entity.OIDATABASE.TaskEntity End(GZ.DB.Entity.OIDATABASE.TaskEntity task)\r\n{ if (task != null) {\r\n task.S_B_STATE = \"完成\";\r\n task.T_END_TIME = DateTime.Now;\r\n }\r\n return task;\r\n}", "CusMethod": { "Name": "End", "Params": [ { "Index": 1, "Name": "task", "Type": "GZ.DB.Entity.OIDATABASE.TaskEntity", "Modifier": "blank" } ], "ReturnType": "GZ.DB.Entity.OIDATABASE.TaskEntity" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324171118766", "Name": "UpdateStatus", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public GZ.DB.Entity.OIDATABASE.TaskEntity UpdateStatus(GZ.DB.Entity.OIDATABASE.TaskEntity task, System.String status)", "EditCode": "task.S_B_STATE = status;\r\nreturn task;", "Code": "public GZ.DB.Entity.OIDATABASE.TaskEntity UpdateStatus(GZ.DB.Entity.OIDATABASE.TaskEntity task, System.String status)\r\n{task.S_B_STATE = status;\r\nreturn task;\r\n}", "CusMethod": { "Name": "UpdateStatus", "Params": [ { "Index": 1, "Name": "task", "Type": "GZ.DB.Entity.OIDATABASE.TaskEntity", "Modifier": "blank" }, { "Index": 2, "Name": "status", "Type": "System.String", "Modifier": "blank" } ], "ReturnType": "GZ.DB.Entity.OIDATABASE.TaskEntity" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250324171912560", "Name": "HkReturnResult", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class HkReturnResult", "EditCode": "\r\n /// \r\n /// 返回状态码\r\n /// \r\n public int code { get; set; }\r\n /// \r\n /// 返回说明\r\n /// \r\n public string message { get; set; }\r\n /// \r\n /// 任务号\r\n /// \r\n public string reqCode { get; set; }", "Code": "public class HkReturnResult\r\n{\r\n /// \r\n /// 返回状态码\r\n /// \r\n public int code { get; set; }\r\n /// \r\n /// 返回说明\r\n /// \r\n public string message { get; set; }\r\n /// \r\n /// 任务号\r\n /// \r\n public string reqCode { get; set; }\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "HkReturnResult", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325083629462", "Name": "deviceInfo", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class deviceInfo", "EditCode": "\r\n\r\n public string address { get; set; }\r\n public string deviceName { get; set; }\r\n public string FuLeLineNo { get; set; }\r\n public string[] deviceNo { get; set; }\r\n\r\n /// \r\n /// 对应线体 -优先级\r\n /// \r\n public string[] areaPriy { get; set; }\r\n\r\n public string[] location { get; set; }\r\n /// \r\n /// 1 维希尔机械臂\r\n /// 2 捷瞬机械臂臂\r\n /// 3 捷瞬输送线\r\n /// \r\n public int deviceType { get; set; }\r\n public int enable { get; set; }\r\n\r\n /// \r\n /// 任务权重。 \r\n /// \r\n public int taskPri { get; set; } = 60;", "Code": "public class deviceInfo\r\n{\r\n\r\n public string address { get; set; }\r\n public string deviceName { get; set; }\r\n public string FuLeLineNo { get; set; }\r\n public string[] deviceNo { get; set; }\r\n\r\n /// \r\n /// 对应线体 -优先级\r\n /// \r\n public string[] areaPriy { get; set; }\r\n\r\n public string[] location { get; set; }\r\n /// \r\n /// 1 维希尔机械臂\r\n /// 2 捷瞬机械臂臂\r\n /// 3 捷瞬输送线\r\n /// \r\n public int deviceType { get; set; }\r\n public int enable { get; set; }\r\n\r\n /// \r\n /// 任务权重。 \r\n /// \r\n public int taskPri { get; set; } = 60;\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "deviceInfo", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325085905222", "Name": "RunafterMac", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public void RunafterMac(System.Object dev, System.Boolean blen)", "EditCode": "var device = (deviceInfo)dev;\r\nif (device.areaPriy.Any() && device.deviceNo.Any())\r\n{\r\n LocRepository locRepository = new LocRepository();\r\n LocContainerRepository locContainerRepository = new LocContainerRepository();\r\n ContainerRepository containerRepository = new ContainerRepository();\r\n LocEntity startLoc = null;\r\n string Sign = device.deviceType == 1 ? \"F\" : \"E\";\r\n foreach (var sloc in device.deviceNo)\r\n {\r\n ContainerEntity c = null;\r\n var Startloc = locRepository.FindEntity(x => x.S_LOC_CODE == sloc);\r\n if (Startloc != null && Startloc.N_CURRENT_NUM == 1 && Startloc.S_LOCK_STATE == \"无\")\r\n {\r\n var cntr = locContainerRepository.FindEntity(x => x.S_LOC_CODE == sloc);\r\n if (cntr != null)\r\n {\r\n c = containerRepository.FindEntity(x => x.S_CODE == cntr.S_CNTR_CODE);\r\n if (c != null && c.S_TYPE == Sign)\r\n {\r\n startLoc = Startloc;\r\n }\r\n }\r\n }\r\n\r\n if (startLoc != null)\r\n {\r\n foreach (var dn in device.areaPriy)\r\n {\r\n LocEntity endLoc = null;\r\n var di = Settings.deviceInfos.Find(x => x.deviceName == dn);\r\n if (di != null)\r\n {\r\n foreach (var ssloc in di.deviceNo)\r\n {\r\n var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);\r\n if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == \"无\")\r\n {\r\n endLoc = endloc;\r\n break;\r\n }\r\n }\r\n if (endLoc != null)\r\n {\r\n TaskProcess.CreateTask(\"\", startLoc.S_LOC_CODE, endLoc.S_LOC_CODE, $\"托盘流转-{Sign}\", 5, new List { c.S_CODE });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}", "Code": "public void RunafterMac(System.Object dev, System.Boolean blen)\r\n{var device = (deviceInfo)dev;\r\nif (device.areaPriy.Any() && device.deviceNo.Any())\r\n{\r\n LocRepository locRepository = new LocRepository();\r\n LocContainerRepository locContainerRepository = new LocContainerRepository();\r\n ContainerRepository containerRepository = new ContainerRepository();\r\n LocEntity startLoc = null;\r\n string Sign = device.deviceType == 1 ? \"F\" : \"E\";\r\n foreach (var sloc in device.deviceNo)\r\n {\r\n ContainerEntity c = null;\r\n var Startloc = locRepository.FindEntity(x => x.S_LOC_CODE == sloc);\r\n if (Startloc != null && Startloc.N_CURRENT_NUM == 1 && Startloc.S_LOCK_STATE == \"无\")\r\n {\r\n var cntr = locContainerRepository.FindEntity(x => x.S_LOC_CODE == sloc);\r\n if (cntr != null)\r\n {\r\n c = containerRepository.FindEntity(x => x.S_CODE == cntr.S_CNTR_CODE);\r\n if (c != null && c.S_TYPE == Sign)\r\n {\r\n startLoc = Startloc;\r\n }\r\n }\r\n }\r\n\r\n if (startLoc != null)\r\n {\r\n foreach (var dn in device.areaPriy)\r\n {\r\n LocEntity endLoc = null;\r\n var di = Settings.deviceInfos.Find(x => x.deviceName == dn);\r\n if (di != null)\r\n {\r\n foreach (var ssloc in di.deviceNo)\r\n {\r\n var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);\r\n if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == \"无\")\r\n {\r\n endLoc = endloc;\r\n break;\r\n }\r\n }\r\n if (endLoc != null)\r\n {\r\n TaskProcess.CreateTask(\"\", startLoc.S_LOC_CODE, endLoc.S_LOC_CODE, $\"托盘流转-{Sign}\", 5, new List { c.S_CODE });\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n}", "CusMethod": { "Name": "RunafterMac", "Params": [ { "Index": 1, "Name": "dev", "Type": "System.Object", "Modifier": "blank" }, { "Index": 2, "Name": "blen", "Type": "System.Boolean", "Modifier": "blank" } ], "ReturnType": "void" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325092323531", "Name": "RunTask", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public System.Boolean RunTask(GZ.DB.Entity.OIDATABASE.TaskEntity task)", "EditCode": "\r\n ILocRepository locrep = new LocRepository();\r\n var startloc = locrep.FindEntity(x => x.S_LOC_CODE == task.S_START_LOC);\r\n var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == task.S_END_LOC);\r\n if (startloc == null || endLoc == null)\r\n {\r\n LogHelper.Info($\"{task.S_TASK_NO}-任务起/终点 没找到数据。\");\r\n return false;\r\n }\r\n var start = startloc.S_AGV_SITE;\r\n var end = endLoc.S_AGV_SITE;\r\n\r\n // 创建两个路径\r\n var positions = new List(){\r\n new positionCodePath()\r\n {\r\n positionCode = start,\r\n Type = \"00\"\r\n },\r\n new positionCodePath()\r\n {\r\n positionCode = end,\r\n Type = \"00\"\r\n }\r\n };\r\n\r\n //调第三方接口\r\n var model = new HaiKangOrderInfo\r\n {\r\n reqCode=task.S_TASK_NO.Trim(),\r\n reqTime=DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\"),\r\n taskCode = task.S_TASK_NO.Trim(),\r\n ctnrCode = task.S_CNTRS,\r\n taskTyp = task.S_INDEX,\r\n positionCodePath = positions\r\n };\r\n\r\n return CreateOrder(model);", "Code": "public System.Boolean RunTask(GZ.DB.Entity.OIDATABASE.TaskEntity task)\r\n{\r\n ILocRepository locrep = new LocRepository();\r\n var startloc = locrep.FindEntity(x => x.S_LOC_CODE == task.S_START_LOC);\r\n var endLoc = locrep.FindEntity(x => x.S_LOC_CODE == task.S_END_LOC);\r\n if (startloc == null || endLoc == null)\r\n {\r\n LogHelper.Info($\"{task.S_TASK_NO}-任务起/终点 没找到数据。\");\r\n return false;\r\n }\r\n var start = startloc.S_AGV_SITE;\r\n var end = endLoc.S_AGV_SITE;\r\n\r\n // 创建两个路径\r\n var positions = new List(){\r\n new positionCodePath()\r\n {\r\n positionCode = start,\r\n Type = \"00\"\r\n },\r\n new positionCodePath()\r\n {\r\n positionCode = end,\r\n Type = \"00\"\r\n }\r\n };\r\n\r\n //调第三方接口\r\n var model = new HaiKangOrderInfo\r\n {\r\n reqCode=task.S_TASK_NO.Trim(),\r\n reqTime=DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\"),\r\n taskCode = task.S_TASK_NO.Trim(),\r\n ctnrCode = task.S_CNTRS,\r\n taskTyp = task.S_INDEX,\r\n positionCodePath = positions\r\n };\r\n\r\n return CreateOrder(model);\r\n}", "CusMethod": { "Name": "RunTask", "Params": [ { "Index": 1, "Name": "task", "Type": "GZ.DB.Entity.OIDATABASE.TaskEntity", "Modifier": "blank" } ], "ReturnType": "System.Boolean" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325095053549", "Name": "CreateOrder", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public System.Boolean CreateOrder(System.Object m)", "EditCode": "var model = (HaiKangOrderInfo)m;\r\n var msg = \"\";\r\n var result = false;\r\n var request = JsonConvert.SerializeObject(model);\r\n var response = Settings.apiHelper.Post(Settings.HKbaseUrl + \"rcms/services/rest/hikRpcService/genAgvSchedulingTask\", request);\r\n msg = $\"[haikang-CreateOrder] request={request} response={response}\";\r\n \r\n LogHelper.Info(msg);\r\n if (response != \"\") {\r\n try {\r\n var dataResult = JsonConvert.DeserializeObject(response);\r\n if (dataResult.code == \"0\") {\r\n result = true;\r\n }\r\n }\r\n catch (Exception ex) {\r\n Console.WriteLine(ex.Message);\r\n LogHelper.Info(msg,\"海康\");\r\n }\r\n }\r\n else {\r\n msg = \"[haikang-CreateOrder]创建订单失败\";\r\n Console.WriteLine(msg);\r\n }\r\n\r\n LogHelper.Info(msg,\"海康\");\r\n return result;", "Code": "public System.Boolean CreateOrder(System.Object m)\r\n{var model = (HaiKangOrderInfo)m;\r\n var msg = \"\";\r\n var result = false;\r\n var request = JsonConvert.SerializeObject(model);\r\n var response = Settings.apiHelper.Post(Settings.HKbaseUrl + \"rcms/services/rest/hikRpcService/genAgvSchedulingTask\", request);\r\n msg = $\"[haikang-CreateOrder] request={request} response={response}\";\r\n \r\n LogHelper.Info(msg);\r\n if (response != \"\") {\r\n try {\r\n var dataResult = JsonConvert.DeserializeObject(response);\r\n if (dataResult.code == \"0\") {\r\n result = true;\r\n }\r\n }\r\n catch (Exception ex) {\r\n Console.WriteLine(ex.Message);\r\n LogHelper.Info(msg,\"海康\");\r\n }\r\n }\r\n else {\r\n msg = \"[haikang-CreateOrder]创建订单失败\";\r\n Console.WriteLine(msg);\r\n }\r\n\r\n LogHelper.Info(msg,\"海康\");\r\n return result;\r\n}", "CusMethod": { "Name": "CreateOrder", "Params": [ { "Index": 1, "Name": "m", "Type": "System.Object", "Modifier": "blank" } ], "ReturnType": "System.Boolean" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325095622918", "Name": "HttpHelper", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class HttpHelper", "EditCode": "public string Post(string url, string postData, string contentType = \"application/json\", string sessionId = \"\") {\r\n LogHelper.Info(url+\"+\"+postData);\r\n WebRequest request = WebRequest.Create(url);\r\n request.Method = \"POST\";\r\n byte[] byteArray = Encoding.UTF8.GetBytes(postData);\r\n request.ContentType = contentType;\r\n request.ContentLength = byteArray.Length;\r\n request.Timeout = 15000;\r\n if (sessionId != \"\") {\r\n request.Headers.Set(\"ASP.NET_SessionId\", sessionId);\r\n }\r\n \r\n //Authorization: UApGP6WW9FsBUqAlzxRGOw ==\r\n request.Headers.Set(\"Authorization\", \"UApGP6WW9FsBUqAlzxRGOw==\");\r\n StreamReader reader = null;\r\n Stream stream = null;\r\n WebResponse rsp = null;\r\n try {\r\n stream = request.GetRequestStream();\r\n stream.Write(byteArray, 0, byteArray.Length);\r\n stream.Close();\r\n rsp = request.GetResponse();\r\n stream = rsp.GetResponseStream();\r\n reader = new StreamReader(stream);\r\n string rrend = reader.ReadToEnd();\r\n LogHelper.Info($\"{url} response={rrend}\");\r\n return rrend;\r\n }\r\n catch (Exception ex) {\r\n LogHelper.Info($\"{url} err={ex.Message}\");\r\n return \"\";\r\n }\r\n finally {\r\n // 释放资源\r\n if (reader != null) reader.Close();\r\n if (stream != null) stream.Close();\r\n if (rsp != null) rsp.Close();\r\n }\r\n\r\n}", "Code": "public class HttpHelper\r\n{public string Post(string url, string postData, string contentType = \"application/json\", string sessionId = \"\") {\r\n LogHelper.Info(url+\"+\"+postData);\r\n WebRequest request = WebRequest.Create(url);\r\n request.Method = \"POST\";\r\n byte[] byteArray = Encoding.UTF8.GetBytes(postData);\r\n request.ContentType = contentType;\r\n request.ContentLength = byteArray.Length;\r\n request.Timeout = 15000;\r\n if (sessionId != \"\") {\r\n request.Headers.Set(\"ASP.NET_SessionId\", sessionId);\r\n }\r\n \r\n //Authorization: UApGP6WW9FsBUqAlzxRGOw ==\r\n request.Headers.Set(\"Authorization\", \"UApGP6WW9FsBUqAlzxRGOw==\");\r\n StreamReader reader = null;\r\n Stream stream = null;\r\n WebResponse rsp = null;\r\n try {\r\n stream = request.GetRequestStream();\r\n stream.Write(byteArray, 0, byteArray.Length);\r\n stream.Close();\r\n rsp = request.GetResponse();\r\n stream = rsp.GetResponseStream();\r\n reader = new StreamReader(stream);\r\n string rrend = reader.ReadToEnd();\r\n LogHelper.Info($\"{url} response={rrend}\");\r\n return rrend;\r\n }\r\n catch (Exception ex) {\r\n LogHelper.Info($\"{url} err={ex.Message}\");\r\n return \"\";\r\n }\r\n finally {\r\n // 释放资源\r\n if (reader != null) reader.Close();\r\n if (stream != null) stream.Close();\r\n if (rsp != null) rsp.Close();\r\n }\r\n\r\n}\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "HttpHelper", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325095900399", "Name": "HKResult", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class HKResult", "EditCode": "/// \r\n/// 返回编码\r\n/// \r\npublic string code { get; set; }\r\n\r\n/// \r\n/// 返回消息\r\n/// \r\npublic string message { get; set; }\r\n\r\n/// \r\n/// 请求编号\r\n/// \r\npublic string reqCode { get; set; }\r\n\r\n/// \r\n/// 自定义返回(返回任务单号)\r\n/// \r\npublic string data { get; set; }", "Code": "public class HKResult\r\n{/// \r\n/// 返回编码\r\n/// \r\npublic string code { get; set; }\r\n\r\n/// \r\n/// 返回消息\r\n/// \r\npublic string message { get; set; }\r\n\r\n/// \r\n/// 请求编号\r\n/// \r\npublic string reqCode { get; set; }\r\n\r\n/// \r\n/// 自定义返回(返回任务单号)\r\n/// \r\npublic string data { get; set; }\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "HKResult", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325100336909", "Name": "TaskisOk", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public void TaskisOk(GZ.DB.Entity.OIDATABASE.TaskEntity task)", "EditCode": "// 车辆取放申请。\r\n if (\"取货申请\" != \"\")\r\n {\r\n var device1 = Settings.deviceInfos.Find(x => x.location.Contains(task.S_START_LOC));\r\n if (device1 != null)\r\n {\r\n var left = device1.location.ToList().FindIndex(x => x == task.S_START_LOC) == 0;\r\n if (device1.deviceType == 1)\r\n {\r\n if (device1.deviceName.Contains(\"维希尔抓臂\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\"|| \"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n string V = left ? \"R01\" : \"R03\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\"|| \"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"R02\" : \"R04\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n else if(device1.deviceName.Contains(\"Js捷顺\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\")\r\n {\r\n string V = left ? \"M0\" : \"M1\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n //string V = left ? \"R01\" : \"R03\";\r\n //Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\")\r\n {\r\n string V = left ? \"M2\" : \"M3\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"M6\" : \"M7\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (\"放货申请\" != \"\")\r\n {\r\n var device1 = Settings.deviceInfos.Find(x => x.location.Contains(task.S_END_LOC));\r\n if (device1 != null)\r\n {\r\n var left = device1.location.ToList().FindIndex(x => x == task.S_END_LOC) == 0;\r\n if (device1.deviceType == 1)\r\n {\r\n if (device1.deviceName.Contains(\"维希尔抓臂\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\" || \"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n string V = left ? \"R01\" : \"R03\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\" || \"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"R02\" : \"R04\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n else if (device1.deviceName.Contains(\"Js捷顺\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\")\r\n {\r\n string V = left ? \"M0\" : \"M1\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n string V = left ? \"M4\" : \"M5\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\")\r\n {\r\n string V = left ? \"M2\" : \"M3\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"M6\" : \"M7\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n }\r\n }\r\n }", "Code": "public void TaskisOk(GZ.DB.Entity.OIDATABASE.TaskEntity task)\r\n{// 车辆取放申请。\r\n if (\"取货申请\" != \"\")\r\n {\r\n var device1 = Settings.deviceInfos.Find(x => x.location.Contains(task.S_START_LOC));\r\n if (device1 != null)\r\n {\r\n var left = device1.location.ToList().FindIndex(x => x == task.S_START_LOC) == 0;\r\n if (device1.deviceType == 1)\r\n {\r\n if (device1.deviceName.Contains(\"维希尔抓臂\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\"|| \"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n string V = left ? \"R01\" : \"R03\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\"|| \"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"R02\" : \"R04\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n else if(device1.deviceName.Contains(\"Js捷顺\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\")\r\n {\r\n string V = left ? \"M0\" : \"M1\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n //string V = left ? \"R01\" : \"R03\";\r\n //Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\")\r\n {\r\n string V = left ? \"M2\" : \"M3\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"M6\" : \"M7\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (\"放货申请\" != \"\")\r\n {\r\n var device1 = Settings.deviceInfos.Find(x => x.location.Contains(task.S_END_LOC));\r\n if (device1 != null)\r\n {\r\n var left = device1.location.ToList().FindIndex(x => x == task.S_END_LOC) == 0;\r\n if (device1.deviceType == 1)\r\n {\r\n if (device1.deviceName.Contains(\"维希尔抓臂\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\" || \"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n string V = left ? \"R01\" : \"R03\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\" || \"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"R02\" : \"R04\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n else if (device1.deviceName.Contains(\"Js捷顺\"))\r\n {\r\n if (\"IN_BEFORE\" == \"IN_BEFORE\")\r\n {\r\n string V = left ? \"M0\" : \"M1\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_BEFORE\" == \"out_BEFORE\")\r\n {\r\n string V = left ? \"M4\" : \"M5\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"IN_after\" == \"IN_after\")\r\n {\r\n string V = left ? \"M2\" : \"M3\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n if (\"out_after\" == \"out_after\")\r\n {\r\n string V = left ? \"M6\" : \"M7\";\r\n Conn.默认Redis.SetValue(device1.deviceName + \".\" + V, \"true\", device1.deviceName + \"Queue\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}", "CusMethod": { "Name": "TaskisOk", "Params": [ { "Index": 1, "Name": "task", "Type": "GZ.DB.Entity.OIDATABASE.TaskEntity", "Modifier": "blank" } ], "ReturnType": "void" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325100607380", "Name": "continueTask", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public System.Boolean continueTask(System.Object m)", "EditCode": "var model = (HaiKangOrderInfo)m;\r\nbool result = false;\r\nstring msg = \"\";\r\nvar request = JsonConvert.SerializeObject(model);\r\nvar response = Settings.apiHelper.Post(Settings.HKbaseUrl + \"rcms/services/rest/hikRpcService/continueTask\", request);\r\nmsg = $\"[haikang-CancelOrder] request={request};response={response}\";\r\nConsole.WriteLine(msg);\r\nif (response != \"\")\r\n{\r\n var dataResult = JsonConvert.DeserializeObject(response);\r\n if (dataResult.code == \"0\")\r\n {\r\n result = true;\r\n }\r\n}\r\nelse\r\n{\r\n msg = \"[haikang-CancelOrder]获取任务状态失败\";\r\n Console.WriteLine(msg);\r\n}\r\nLogHelper.Info(msg, \"海康\");\r\nreturn result;", "Code": "public System.Boolean continueTask(System.Object m)\r\n{var model = (HaiKangOrderInfo)m;\r\nbool result = false;\r\nstring msg = \"\";\r\nvar request = JsonConvert.SerializeObject(model);\r\nvar response = Settings.apiHelper.Post(Settings.HKbaseUrl + \"rcms/services/rest/hikRpcService/continueTask\", request);\r\nmsg = $\"[haikang-CancelOrder] request={request};response={response}\";\r\nConsole.WriteLine(msg);\r\nif (response != \"\")\r\n{\r\n var dataResult = JsonConvert.DeserializeObject(response);\r\n if (dataResult.code == \"0\")\r\n {\r\n result = true;\r\n }\r\n}\r\nelse\r\n{\r\n msg = \"[haikang-CancelOrder]获取任务状态失败\";\r\n Console.WriteLine(msg);\r\n}\r\nLogHelper.Info(msg, \"海康\");\r\nreturn result;\r\n}", "CusMethod": { "Name": "continueTask", "Params": [ { "Index": 1, "Name": "m", "Type": "System.Object", "Modifier": "blank" } ], "ReturnType": "System.Boolean" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325100705351", "Name": "CancelOrder", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public System.Boolean CancelOrder(System.Object m)", "EditCode": "var model = (HaiKangOrderInfo)m;\r\nbool result = false;\r\nstring msg = \"\";\r\nvar request = JsonConvert.SerializeObject(model);\r\nvar response = Settings.apiHelper.Post(Settings.HKbaseUrl + \"rcms/services/rest/hikRpcService/continueTask\", request);\r\nmsg = $\"[haikang-CancelOrder] request={request};response={response}\";\r\nConsole.WriteLine(msg);\r\nif (response != \"\") {\r\n var dataResult = JsonConvert.DeserializeObject(response);\r\n if (dataResult.code == \"0\") {\r\n result = true;\r\n }\r\n}\r\nelse {\r\n msg = \"[haikang-CancelOrder]取消订单失败\";\r\n Console.WriteLine(msg);\r\n}\r\nLogHelper.Info(msg, \"海康\");\r\nreturn result;", "Code": "public System.Boolean CancelOrder(System.Object m)\r\n{var model = (HaiKangOrderInfo)m;\r\nbool result = false;\r\nstring msg = \"\";\r\nvar request = JsonConvert.SerializeObject(model);\r\nvar response = Settings.apiHelper.Post(Settings.HKbaseUrl + \"rcms/services/rest/hikRpcService/continueTask\", request);\r\nmsg = $\"[haikang-CancelOrder] request={request};response={response}\";\r\nConsole.WriteLine(msg);\r\nif (response != \"\") {\r\n var dataResult = JsonConvert.DeserializeObject(response);\r\n if (dataResult.code == \"0\") {\r\n result = true;\r\n }\r\n}\r\nelse {\r\n msg = \"[haikang-CancelOrder]取消订单失败\";\r\n Console.WriteLine(msg);\r\n}\r\nLogHelper.Info(msg, \"海康\");\r\nreturn result;\r\n}", "CusMethod": { "Name": "CancelOrder", "Params": [ { "Index": 1, "Name": "m", "Type": "System.Object", "Modifier": "blank" } ], "ReturnType": "System.Boolean" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325131530407", "Name": "GetSerialNumber", "Desc": "", "ParentID": "", "Type": "MethodCode", "Level": "Item", "Statement": "public System.String GetSerialNumber(System.String snType, System.String prefix)", "EditCode": "int result = 0;\r\nreturn \"\";", "Code": "public System.String GetSerialNumber(System.String snType, System.String prefix)\r\n{int result = 0;\r\nreturn \"\";\r\n}", "CusMethod": { "Name": "GetSerialNumber", "Params": [ { "Index": 1, "Name": "snType", "Type": "System.String", "Modifier": "blank" }, { "Index": 2, "Name": "prefix", "Type": "System.String", "Modifier": "blank" } ], "ReturnType": "System.String" }, "CusClass": { "Name": "", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325131633664", "Name": "SYSHelper", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class SYSHelper", "EditCode": "private static object locker = new object();\r\ninternal static int GetSerialNumber(string snType, string prefix, string Vend = \"0\")\r\n{\r\n if (Vend == \"1\")\r\n Vend = DateTime.Now.ToString(\"yyMMdd\");\r\n int result = 0;\r\n lock (locker)\r\n {\r\n SYSRepository sysservice = new SYSRepository();\r\n var sId = sysservice.FindEntity(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix + Vend);\r\n\r\n if (sId != null)\r\n {\r\n \r\n sId.CN_N_MAX++;\r\n sId.CN_T_LAST = DateTime.Now;\r\n //sysservice.Update(sId);\r\n\r\n sysservice.dbcontext.Set().Attach(sId);\r\n sysservice.dbcontext.Entry(sId).Property(x => x.CN_N_MAX).CurrentValue = sId.CN_N_MAX;\r\n\r\n sysservice.dbcontext.Entry(sId).Property(x => x.CN_N_MAX).IsModified = true;\r\n sysservice.dbcontext.Entry(sId).Property(x=>x.CN_T_LAST).CurrentValue = sId.CN_T_LAST;\r\n\r\n sysservice.dbcontext.Entry(sId).Property(x=>x.CN_T_LAST).IsModified = true;\r\n \r\n sysservice.dbcontext.SaveChanges();\r\n result = sId.CN_N_MAX;\r\n }\r\n else\r\n {\r\n sId = new SYSEntity { CN_S_TYPE = snType, CN_T_LAST = DateTime.Now, CN_S_PRE = prefix + Vend, CN_N_MAX = 0,CN_S_APP_TYPE=\"WCS\" };\r\n sysservice.Insert(sId);\r\n }\r\n }\r\n return result;\r\n}", "Code": "public class SYSHelper\r\n{private static object locker = new object();\r\ninternal static int GetSerialNumber(string snType, string prefix, string Vend = \"0\")\r\n{\r\n if (Vend == \"1\")\r\n Vend = DateTime.Now.ToString(\"yyMMdd\");\r\n int result = 0;\r\n lock (locker)\r\n {\r\n SYSRepository sysservice = new SYSRepository();\r\n var sId = sysservice.FindEntity(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix + Vend);\r\n\r\n if (sId != null)\r\n {\r\n \r\n sId.CN_N_MAX++;\r\n sId.CN_T_LAST = DateTime.Now;\r\n //sysservice.Update(sId);\r\n\r\n sysservice.dbcontext.Set().Attach(sId);\r\n sysservice.dbcontext.Entry(sId).Property(x => x.CN_N_MAX).CurrentValue = sId.CN_N_MAX;\r\n\r\n sysservice.dbcontext.Entry(sId).Property(x => x.CN_N_MAX).IsModified = true;\r\n sysservice.dbcontext.Entry(sId).Property(x=>x.CN_T_LAST).CurrentValue = sId.CN_T_LAST;\r\n\r\n sysservice.dbcontext.Entry(sId).Property(x=>x.CN_T_LAST).IsModified = true;\r\n \r\n sysservice.dbcontext.SaveChanges();\r\n result = sId.CN_N_MAX;\r\n }\r\n else\r\n {\r\n sId = new SYSEntity { CN_S_TYPE = snType, CN_T_LAST = DateTime.Now, CN_S_PRE = prefix + Vend, CN_N_MAX = 0,CN_S_APP_TYPE=\"WCS\" };\r\n sysservice.Insert(sId);\r\n }\r\n }\r\n return result;\r\n}\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "SYSHelper", "InheritClass": "", "Inherits": [] } }, { "ID": "20250325152141671", "Name": "TaskProcess", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class TaskProcess", "EditCode": "internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\r\n LogHelper.Info($\"创建任务 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 = \"\";\r\n if (workMode == \"AGV\")\r\n {\r\n 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 }\r\n try\r\n {\r\n\r\n TaskEntity wmsTask = new TaskEntity()\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_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($\"创建任务 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 cntrs, string workMode = \"AGV\", int cntrCount = 1, int startLayer = 1, int endLayer = 1)\r\n{\r\n\r\n LogHelper.Info($\"创建任务 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 = \"\";\r\n if (workMode == \"AGV\")\r\n {\r\n 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 }\r\n try\r\n {\r\n\r\n TaskEntity wmsTask = new TaskEntity()\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_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($\"创建任务 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": [], "ReturnType": "" }, "CusClass": { "Name": "TaskProcess", "InheritClass": "", "Inherits": [] } }, { "ID": "20250417094750211", "Name": "Utils", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class Utils", "EditCode": "", "Code": "public class Utils\r\n{\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "Utils", "InheritClass": "", "Inherits": [] } }, { "ID": "20250531152402452", "Name": "ToWMSMES", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class ToWMSMES", "EditCode": "//2 wms mes \r\n\r\n\r\n public class CreateTask\r\n {\r\n public string taskType { get; set; }\r\n public string startBit { get; set; }\r\n public string endBit { get; set; }\r\n public string reqCode { get; set; }\r\n public string cntrCode { get; set; }\r\n\r\n internal static ReturnMsg CreatemesTask(CreateTask model)\r\n {\r\n ITaskRepository taskservice = new TaskRepository();\r\n var task = taskservice.FindEntity(x => x.S_TASK_NO == model.reqCode);\r\n if (task == null)\r\n {\r\n //var i = TaskProcess.CreateTask(\"\", model.startBit, model.endBit, string.IsNullOrEmpty(model.taskType) ? \"Mes下发\" : model.taskType, 5, new List { model.cntrCode });\r\n TaskEntity wmsTask = new TaskEntity()\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_TASK_NO = model.reqCode,\r\n S_START_LAREA = \"\",\r\n S_END_LAREA = \"\",\r\n S_DEPART_NAME = \"\",\r\n S_START_LOC = model.startBit,\r\n S_END_LOC = model.endBit,\r\n S_TYPE = model.taskType,\r\n S_SRC_NO = \"\",//\r\n N_PRIORITY = -88,\r\n S_WORK_MODE = \"agv\",\r\n S_B_STATE = \"MES\",\r\n S_CNTRS = model.cntrCode,\r\n N_START_LAYER = 1,\r\n N_END_LAYER = 1,\r\n N_CNTR_COUNT = 1\r\n };\r\n ITaskRepository taskserice = new TaskRepository();\r\n var i = taskserice.Insert(wmsTask) > 0;\r\n return new ReturnMsg { resultCode = (i ? 0 : -1), resultMsg = i ? \"\" : \"任务生成失败。\" };\r\n }\r\n else\r\n {\r\n return new ReturnMsg { resultCode = -1, resultMsg = \"任务重复下发。\" };\r\n }\r\n }\r\n \r\n public class ReturnMsg\r\n {\r\n public int resultCode { get; set; }\r\n public string resultMsg { get; set; }\r\n }\r\n \r\n \r\n internal static ReturnMsg CreatePointTask(CreateTask model)\r\n {\r\n ITaskRepository taskservice = new TaskRepository();\r\n var task = taskservice.FindEntity(x => x.S_TASK_NO == model.reqCode);\r\n if (task == null)\r\n {\r\n //var i = TaskProcess.CreateTask(\"\", model.startBit, model.endBit, string.IsNullOrEmpty(model.taskType) ? \"Mes下发\" : model.taskType, 5, new List { model.cntrCode });\r\n TaskEntity wmsTask = new TaskEntity()\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_TASK_NO = model.reqCode,\r\n S_START_LAREA = \"\",\r\n S_END_LAREA = \"\",\r\n S_DEPART_NAME = \"\",\r\n S_START_LOC = model.startBit,\r\n S_END_LOC = model.endBit,\r\n S_TYPE = model.reqCode,\r\n S_SRC_NO = \"\",//\r\n N_PRIORITY = -88,\r\n S_WORK_MODE = \"agv\",\r\n S_B_STATE = \"People\",\r\n S_CNTRS = model.cntrCode,\r\n N_START_LAYER = 1,\r\n N_END_LAYER = 1,\r\n N_CNTR_COUNT = 1\r\n };\r\n ITaskRepository taskserice = new TaskRepository();\r\n var i = taskserice.Insert(wmsTask) > 0;\r\n return new ReturnMsg { resultCode = (i ? 0 : -1), resultMsg = i ? \"\" : \"任务生成失败。\" };\r\n }\r\n else\r\n {\r\n return new ReturnMsg { resultCode = -1, resultMsg = \"任务重复下发。\" };\r\n }\r\n }\r\n }\r\n public static void ResMesTask()\r\n {\r\n ///1.\r\n \r\n AutoThread.InvokeMethod(AutoThread.Instance, \"ResolveMesTask\");\r\n //var VERX = Settings.deviceInfos?.FindAll(x => x.deviceName.Contains(\"捷瞬抓臂\"));\r\n //if ()\r\n ///2 看缓存区。 没满的。\r\n\r\n\r\n }\r\n \r\n ", "Code": "public class ToWMSMES\r\n{//2 wms mes \r\n\r\n\r\n public class CreateTask\r\n {\r\n public string taskType { get; set; }\r\n public string startBit { get; set; }\r\n public string endBit { get; set; }\r\n public string reqCode { get; set; }\r\n public string cntrCode { get; set; }\r\n\r\n internal static ReturnMsg CreatemesTask(CreateTask model)\r\n {\r\n ITaskRepository taskservice = new TaskRepository();\r\n var task = taskservice.FindEntity(x => x.S_TASK_NO == model.reqCode);\r\n if (task == null)\r\n {\r\n //var i = TaskProcess.CreateTask(\"\", model.startBit, model.endBit, string.IsNullOrEmpty(model.taskType) ? \"Mes下发\" : model.taskType, 5, new List { model.cntrCode });\r\n TaskEntity wmsTask = new TaskEntity()\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_TASK_NO = model.reqCode,\r\n S_START_LAREA = \"\",\r\n S_END_LAREA = \"\",\r\n S_DEPART_NAME = \"\",\r\n S_START_LOC = model.startBit,\r\n S_END_LOC = model.endBit,\r\n S_TYPE = model.taskType,\r\n S_SRC_NO = \"\",//\r\n N_PRIORITY = -88,\r\n S_WORK_MODE = \"agv\",\r\n S_B_STATE = \"MES\",\r\n S_CNTRS = model.cntrCode,\r\n N_START_LAYER = 1,\r\n N_END_LAYER = 1,\r\n N_CNTR_COUNT = 1\r\n };\r\n ITaskRepository taskserice = new TaskRepository();\r\n var i = taskserice.Insert(wmsTask) > 0;\r\n return new ReturnMsg { resultCode = (i ? 0 : -1), resultMsg = i ? \"\" : \"任务生成失败。\" };\r\n }\r\n else\r\n {\r\n return new ReturnMsg { resultCode = -1, resultMsg = \"任务重复下发。\" };\r\n }\r\n }\r\n \r\n public class ReturnMsg\r\n {\r\n public int resultCode { get; set; }\r\n public string resultMsg { get; set; }\r\n }\r\n \r\n \r\n internal static ReturnMsg CreatePointTask(CreateTask model)\r\n {\r\n ITaskRepository taskservice = new TaskRepository();\r\n var task = taskservice.FindEntity(x => x.S_TASK_NO == model.reqCode);\r\n if (task == null)\r\n {\r\n //var i = TaskProcess.CreateTask(\"\", model.startBit, model.endBit, string.IsNullOrEmpty(model.taskType) ? \"Mes下发\" : model.taskType, 5, new List { model.cntrCode });\r\n TaskEntity wmsTask = new TaskEntity()\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_TASK_NO = model.reqCode,\r\n S_START_LAREA = \"\",\r\n S_END_LAREA = \"\",\r\n S_DEPART_NAME = \"\",\r\n S_START_LOC = model.startBit,\r\n S_END_LOC = model.endBit,\r\n S_TYPE = model.reqCode,\r\n S_SRC_NO = \"\",//\r\n N_PRIORITY = -88,\r\n S_WORK_MODE = \"agv\",\r\n S_B_STATE = \"People\",\r\n S_CNTRS = model.cntrCode,\r\n N_START_LAYER = 1,\r\n N_END_LAYER = 1,\r\n N_CNTR_COUNT = 1\r\n };\r\n ITaskRepository taskserice = new TaskRepository();\r\n var i = taskserice.Insert(wmsTask) > 0;\r\n return new ReturnMsg { resultCode = (i ? 0 : -1), resultMsg = i ? \"\" : \"任务生成失败。\" };\r\n }\r\n else\r\n {\r\n return new ReturnMsg { resultCode = -1, resultMsg = \"任务重复下发。\" };\r\n }\r\n }\r\n }\r\n public static void ResMesTask()\r\n {\r\n ///1.\r\n \r\n AutoThread.InvokeMethod(AutoThread.Instance, \"ResolveMesTask\");\r\n //var VERX = Settings.deviceInfos?.FindAll(x => x.deviceName.Contains(\"捷瞬抓臂\"));\r\n //if ()\r\n ///2 看缓存区。 没满的。\r\n\r\n\r\n }\r\n \r\n \r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "ToWMSMES", "InheritClass": "", "Inherits": [] } }, { "ID": "20250612005504281", "Name": "TcpServer", "Desc": "", "ParentID": "", "Type": "VsCode", "Level": "Item", "Statement": "", "EditCode": "#region [自定义类-VS][20250605212036245][TcpServer]\r\nusing GZ.Device.PLC;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net.Sockets;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n\r\n public class TcpServer\r\n {\r\n public static Dictionary TrayIps = new Dictionary();\r\n public TcpServer(string ip)\r\n {\r\n Init(ip);\r\n }\r\n private void Init(string ip)\r\n {\r\n //创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)\r\n var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n try\r\n {\r\n //将该socket绑定到主机上面的某个端口\r\n socket.Bind(new IPEndPoint(IPAddress.Parse(ip), 2025));\r\n //启动监听,并且设置一个最大的队列长度\r\n socket.Listen(30);\r\n //开始接受客户端连接请求\r\n socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);\r\n }\r\n catch (Exception e)\r\n {\r\n Console.WriteLine(e.Message);\r\n }\r\n }\r\n public static Dictionary clients = new Dictionary();\r\n public static Dictionary buffers = new Dictionary();\r\n public static void ClientAccepted(IAsyncResult ar)\r\n {\r\n\r\n var socket = ar.AsyncState as Socket;\r\n var client = socket.EndAccept(ar);\r\n string remote_ip = ((System.Net.IPEndPoint)client.RemoteEndPoint).Address.ToString();\r\n if (clients.Keys.Contains(remote_ip))\r\n {\r\n clients[remote_ip] = client;\r\n }\r\n else\r\n {\r\n clients.Add(remote_ip, client);\r\n }\r\n if (!buffers.Keys.Contains(remote_ip))\r\n {\r\n buffers.Add(remote_ip, new byte[1024]);\r\n }\r\n //给客户端发送一个欢迎消息\r\n //client.Send(Encoding.Unicode.GetBytes(\"Hi there, I accept you request at \" + DateTime.Now.ToString()));\r\n Console.WriteLine(remote_ip);\r\n\r\n try\r\n {\r\n client.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);\r\n }\r\n catch (Exception ex)\r\n {\r\n Console.WriteLine($\"【接收客户端的消息异常0】:\" + ex.Message);\r\n }\r\n //准备接受下一个客户端请求\r\n socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);\r\n }\r\n\r\n\r\n public static void ReceiveMessage(IAsyncResult ar)\r\n {\r\n try\r\n {\r\n var socket = ar.AsyncState as Socket;\r\n string remote_ip = ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address.ToString();\r\n var length = socket.EndReceive(ar);\r\n if (length == 0)\r\n {\r\n clients.Remove(remote_ip);\r\n buffers.Remove(remote_ip);\r\n return;\r\n }\r\n else\r\n {\r\n if (!clients.Keys.Contains(remote_ip))\r\n {\r\n clients.Add(remote_ip, socket);\r\n }\r\n if (!buffers.Keys.Contains(remote_ip))\r\n {\r\n buffers.Add(remote_ip, new byte[1024]);\r\n }\r\n }\r\n try\r\n {\r\n if (buffers.Keys.Contains(remote_ip))\r\n {\r\n //读取出来消息内容\r\n var message = GetHexString(buffers[remote_ip], length);\r\n //16 10\r\n // Console.WriteLine($\"{DateTime.Now.ToString(\"hh:mm:ss\")} ---> \" + remote_ip + \" : \" + message);\r\n //if (message.Substring(0, 4) == \"3f00\" && message.Substring(message.Length - 4) == \"0d0a\")\r\n //{\r\n // //显示消息\r\n // //string msg = message.Replace(@\"0d\", \"\").Replace(@\"0a\", \"\").Replace(@\"0d0a\", \"\").Trim();\r\n // //PlcHelper.Receive(remote_ip, msg);\r\n // //Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//清空当前IP Buffer\r\n //}\r\n //else\r\n //{\r\n Console.WriteLine($\"【TCP信息协议异常 {DateTime.Now.Millisecond}】:IP:{remote_ip},MSG:{message}\");\r\n var mg = Encoding.ASCII.GetString(PlcHelper.Hex2Bin(message));\r\n Console.WriteLine(mg);\r\n if (mg.StartsWith(\"DK\") && mg.Trim().Length == \"DK01000024\".Length)\r\n {\r\n if(TrayIps.TryGetValue(remote_ip,out string traycode))\r\n {\r\n TrayIps[remote_ip] = traycode;\r\n }else TrayIps.Add(remote_ip, traycode);\r\n Console.WriteLine(\"TOFF\");\r\n var mst = PlcHelper.Hex2Bin(\"544F4646\");\r\n TcpServer.TcpServerSend(remote_ip, mst);\r\n }\r\n //}\r\n }\r\n else\r\n {\r\n if (!buffers.Keys.Contains(remote_ip))\r\n {\r\n buffers.Add(remote_ip, new byte[1024]);\r\n }\r\n }\r\n }\r\n catch (Exception ex)\r\n {\r\n Console.WriteLine($\"【处理客户端的消息异常2】:\" + ex.StackTrace);\r\n throw;\r\n }\r\n //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)\r\n socket.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);\r\n }\r\n catch (Exception ex)\r\n {\r\n Console.WriteLine(ex.Message);\r\n }\r\n }\r\n\r\n private static string GetHexString(byte[] buffer, int lenght)\r\n {\r\n return BitConverter.ToString(buffer, 0, lenght).Replace(\"-\", string.Empty).ToLower();\r\n }\r\n\r\n public static bool TcpServerSend(string ip, byte[] msg)\r\n {\r\n if (clients.Keys.Contains(ip))\r\n {\r\n var client = clients[ip];\r\n if (client.Connected)\r\n {\r\n try\r\n {\r\n client.Send(msg);\r\n return true;\r\n }\r\n catch (SocketException ex)\r\n {\r\n Console.WriteLine(ex.Message);\r\n clients[ip].Close();\r\n clients.Remove(ip);\r\n }\r\n }\r\n else\r\n {\r\n clients[ip].Close();\r\n clients.Remove(ip);\r\n }\r\n }\r\n else\r\n {\r\n Console.WriteLine(\"未找到设备的链接:\" + ip);\r\n }\r\n return false;\r\n\r\n }\r\n\r\n public static int GetBitdata(int num, int wid)\r\n {\r\n string bstr = Convert.ToString(num, 2);\r\n if (bstr.Length <= wid)\r\n {\r\n return 0;\r\n }\r\n return bstr[bstr.Length - wid - 1] - '0';\r\n }\r\n public static int SetBinaryDigit(int number, int n, int value)\r\n {\r\n if (value != 0 && value != 1)\r\n throw new ArgumentException(\"Value must be 0 or 1.\");\r\n\r\n string binaryStr = Convert.ToString(number, 2);\r\n\r\n // 如果 n 超出当前位数,补 0 扩展\r\n while (binaryStr.Length <= n)\r\n {\r\n binaryStr = \"0\" + binaryStr;\r\n }\r\n\r\n // 修改第 n 位(从右往左,最低位是第 0 位)\r\n char[] binaryChars = binaryStr.ToCharArray();\r\n binaryChars[binaryChars.Length - 1 - n] = value == 1 ? '1' : '0';\r\n\r\n // 转换回十进制\r\n return Convert.ToInt32(new string(binaryChars), 2);\r\n }\r\n }\r\n}\r\n\r\n#endregion [自定义类-VS][20250605212036245][TcpServer]", "Code": "#region [自定义类-VS][20250605212036245][TcpServer]\r\nusing GZ.Device.PLC;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net.Sockets;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace GZ.Projects.AuxAllWCS\r\n{\r\n\r\n public class TcpServer\r\n {\r\n public static Dictionary TrayIps = new Dictionary();\r\n public TcpServer(string ip)\r\n {\r\n Init(ip);\r\n }\r\n private void Init(string ip)\r\n {\r\n //创建一个新的Socket,这里我们使用最常用的基于TCP的Stream Socket(流式套接字)\r\n var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n try\r\n {\r\n //将该socket绑定到主机上面的某个端口\r\n socket.Bind(new IPEndPoint(IPAddress.Parse(ip), 2025));\r\n //启动监听,并且设置一个最大的队列长度\r\n socket.Listen(30);\r\n //开始接受客户端连接请求\r\n socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);\r\n }\r\n catch (Exception e)\r\n {\r\n Console.WriteLine(e.Message);\r\n }\r\n }\r\n public static Dictionary clients = new Dictionary();\r\n public static Dictionary buffers = new Dictionary();\r\n public static void ClientAccepted(IAsyncResult ar)\r\n {\r\n\r\n var socket = ar.AsyncState as Socket;\r\n var client = socket.EndAccept(ar);\r\n string remote_ip = ((System.Net.IPEndPoint)client.RemoteEndPoint).Address.ToString();\r\n if (clients.Keys.Contains(remote_ip))\r\n {\r\n clients[remote_ip] = client;\r\n }\r\n else\r\n {\r\n clients.Add(remote_ip, client);\r\n }\r\n if (!buffers.Keys.Contains(remote_ip))\r\n {\r\n buffers.Add(remote_ip, new byte[1024]);\r\n }\r\n //给客户端发送一个欢迎消息\r\n //client.Send(Encoding.Unicode.GetBytes(\"Hi there, I accept you request at \" + DateTime.Now.ToString()));\r\n Console.WriteLine(remote_ip);\r\n\r\n try\r\n {\r\n client.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);\r\n }\r\n catch (Exception ex)\r\n {\r\n Console.WriteLine($\"【接收客户端的消息异常0】:\" + ex.Message);\r\n }\r\n //准备接受下一个客户端请求\r\n socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);\r\n }\r\n\r\n\r\n public static void ReceiveMessage(IAsyncResult ar)\r\n {\r\n try\r\n {\r\n var socket = ar.AsyncState as Socket;\r\n string remote_ip = ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address.ToString();\r\n var length = socket.EndReceive(ar);\r\n if (length == 0)\r\n {\r\n clients.Remove(remote_ip);\r\n buffers.Remove(remote_ip);\r\n return;\r\n }\r\n else\r\n {\r\n if (!clients.Keys.Contains(remote_ip))\r\n {\r\n clients.Add(remote_ip, socket);\r\n }\r\n if (!buffers.Keys.Contains(remote_ip))\r\n {\r\n buffers.Add(remote_ip, new byte[1024]);\r\n }\r\n }\r\n try\r\n {\r\n if (buffers.Keys.Contains(remote_ip))\r\n {\r\n //读取出来消息内容\r\n var message = GetHexString(buffers[remote_ip], length);\r\n //16 10\r\n // Console.WriteLine($\"{DateTime.Now.ToString(\"hh:mm:ss\")} ---> \" + remote_ip + \" : \" + message);\r\n //if (message.Substring(0, 4) == \"3f00\" && message.Substring(message.Length - 4) == \"0d0a\")\r\n //{\r\n // //显示消息\r\n // //string msg = message.Replace(@\"0d\", \"\").Replace(@\"0a\", \"\").Replace(@\"0d0a\", \"\").Trim();\r\n // //PlcHelper.Receive(remote_ip, msg);\r\n // //Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//清空当前IP Buffer\r\n //}\r\n //else\r\n //{\r\n Console.WriteLine($\"【TCP信息协议异常 {DateTime.Now.Millisecond}】:IP:{remote_ip},MSG:{message}\");\r\n var mg = Encoding.ASCII.GetString(PlcHelper.Hex2Bin(message));\r\n Console.WriteLine(mg);\r\n if (mg.StartsWith(\"DK\") && mg.Trim().Length == \"DK01000024\".Length)\r\n {\r\n if(TrayIps.TryGetValue(remote_ip,out string traycode))\r\n {\r\n TrayIps[remote_ip] = traycode;\r\n }else TrayIps.Add(remote_ip, traycode);\r\n Console.WriteLine(\"TOFF\");\r\n var mst = PlcHelper.Hex2Bin(\"544F4646\");\r\n TcpServer.TcpServerSend(remote_ip, mst);\r\n }\r\n //}\r\n }\r\n else\r\n {\r\n if (!buffers.Keys.Contains(remote_ip))\r\n {\r\n buffers.Add(remote_ip, new byte[1024]);\r\n }\r\n }\r\n }\r\n catch (Exception ex)\r\n {\r\n Console.WriteLine($\"【处理客户端的消息异常2】:\" + ex.StackTrace);\r\n throw;\r\n }\r\n //接收下一个消息(因为这是一个递归的调用,所以这样就可以一直接收消息了)\r\n socket.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);\r\n }\r\n catch (Exception ex)\r\n {\r\n Console.WriteLine(ex.Message);\r\n }\r\n }\r\n\r\n private static string GetHexString(byte[] buffer, int lenght)\r\n {\r\n return BitConverter.ToString(buffer, 0, lenght).Replace(\"-\", string.Empty).ToLower();\r\n }\r\n\r\n public static bool TcpServerSend(string ip, byte[] msg)\r\n {\r\n if (clients.Keys.Contains(ip))\r\n {\r\n var client = clients[ip];\r\n if (client.Connected)\r\n {\r\n try\r\n {\r\n client.Send(msg);\r\n return true;\r\n }\r\n catch (SocketException ex)\r\n {\r\n Console.WriteLine(ex.Message);\r\n clients[ip].Close();\r\n clients.Remove(ip);\r\n }\r\n }\r\n else\r\n {\r\n clients[ip].Close();\r\n clients.Remove(ip);\r\n }\r\n }\r\n else\r\n {\r\n Console.WriteLine(\"未找到设备的链接:\" + ip);\r\n }\r\n return false;\r\n\r\n }\r\n\r\n public static int GetBitdata(int num, int wid)\r\n {\r\n string bstr = Convert.ToString(num, 2);\r\n if (bstr.Length <= wid)\r\n {\r\n return 0;\r\n }\r\n return bstr[bstr.Length - wid - 1] - '0';\r\n }\r\n public static int SetBinaryDigit(int number, int n, int value)\r\n {\r\n if (value != 0 && value != 1)\r\n throw new ArgumentException(\"Value must be 0 or 1.\");\r\n\r\n string binaryStr = Convert.ToString(number, 2);\r\n\r\n // 如果 n 超出当前位数,补 0 扩展\r\n while (binaryStr.Length <= n)\r\n {\r\n binaryStr = \"0\" + binaryStr;\r\n }\r\n\r\n // 修改第 n 位(从右往左,最低位是第 0 位)\r\n char[] binaryChars = binaryStr.ToCharArray();\r\n binaryChars[binaryChars.Length - 1 - n] = value == 1 ? '1' : '0';\r\n\r\n // 转换回十进制\r\n return Convert.ToInt32(new string(binaryChars), 2);\r\n }\r\n }\r\n}\r\n\r\n#endregion [自定义类-VS][20250605212036245][TcpServer]", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "", "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 _methodCache = new ConcurrentDictionary();\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 /// \r\n /// 配置初始化。\r\n /// \r\n /// \r\n /// \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 /// \r\n /// 捷顺1 信号处理\r\n /// \r\n /// \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 /// \r\n /// 捷顺2 信号处理\r\n /// \r\n /// \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 /// \r\n /// 维希尔1 左\r\n /// \r\n /// \r\n public void Threadwxr1L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1L 维希尔1 左 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 /// \r\n /// 维希尔1 右\r\n /// \r\n /// \r\n public void Threadwxr1R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1R 维希尔1 右 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 /// \r\n /// 维希尔2 左\r\n /// \r\n /// \r\n public void Threadwxr2L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2L 维希尔2 左 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 /// \r\n /// 维希尔2 右\r\n /// \r\n /// \r\n public void Threadwxr2R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2R 维希尔2 右 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 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充电状态}】 故障代码:【{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(\"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 有货 就2 取。 1 没货 就2 卸货, 都有货 就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 { \"1023\", \"1020\" };\r\n var RightSide = new List { \"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 没任务。 找1020 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}。工位2卸货。。\");\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 写125\");\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 也没任务。优先1工位终点1017任务。。\");\r\n //、下 1017任务 给1号工位。\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 写0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 写125\");\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 没任务工位2 没任务。 找1020 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 处理完成。taskend 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 continueTask)\r\n {\r\n Console.WriteLine($\"ThreadGrats 光栅处理 =================> \");\r\n var taskCOdes = new List { \"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 /// \r\n /// 1020 1023空框下线\r\n /// \r\n /// \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();\r\n if (Bssx == \"1020\")\r\n {\r\n if (tag.SF下料位.RArrive1003 == 1)\r\n {\r\n listtep = new List { \"1012\", \"1004\" };\r\n }\r\n else\r\n {\r\n listtep = new List { \"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 { \"1014\", \"1006\" };\r\n }\r\n else\r\n {\r\n listtep = new List { \"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 { R托盘码 }, \"RGV\");\r\n if (b)\r\n {\r\n LogHelper.Debug($\"输送线RGV空托任务 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 { 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 { 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发那科1下线.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发那科1下线.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发那科1下线.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发那科1下线.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发那科2下线.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发那科2下线.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发那科2下线.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发那科2下线.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 _methodCache = new ConcurrentDictionary();\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 /// \r\n /// 配置初始化。\r\n /// \r\n /// \r\n /// \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 /// \r\n /// 捷顺1 信号处理\r\n /// \r\n /// \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 /// \r\n /// 捷顺2 信号处理\r\n /// \r\n /// \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 /// \r\n /// 维希尔1 左\r\n /// \r\n /// \r\n public void Threadwxr1L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1L 维希尔1 左 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 /// \r\n /// 维希尔1 右\r\n /// \r\n /// \r\n public void Threadwxr1R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr1R 维希尔1 右 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 /// \r\n /// 维希尔2 左\r\n /// \r\n /// \r\n public void Threadwxr2L(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2L 维希尔2 左 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 /// \r\n /// 维希尔2 右\r\n /// \r\n /// \r\n public void Threadwxr2R(Tag tag)\r\n {\r\n Console.WriteLine($\"Threadwxr2R 维希尔2 右 =================> \");\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(\"维希尔抓臂1.R10\", \"true\", \"维希尔抓臂1Queue\");\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 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充电状态}】 故障代码:【{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(\"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 有货 就2 取。 1 没货 就2 卸货, 都有货 就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 { \"1023\", \"1020\" };\r\n var RightSide = new List { \"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 没任务。 找1020 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}。工位2卸货。。\");\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 写125\");\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 也没任务。优先1工位终点1017任务。。\");\r\n //、下 1017任务 给1号工位。\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 写0\");\r\n RedisHelper.Add($\"RGV.bit1taskOver_LAST\", \"0\", out string msg);\r\n LogHelper.Info($\"{e1017first.S_TASK_NO}> taskend 写125\");\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 没任务工位2 没任务。 找1020 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 处理完成。taskend 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 continueTask)\r\n {\r\n Console.WriteLine($\"ThreadGrats 光栅处理 =================> \");\r\n var taskCOdes = new List { \"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 /// \r\n /// 1020 1023空框下线\r\n /// \r\n /// \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();\r\n if (Bssx == \"1020\")\r\n {\r\n if (tag.SF下料位.RArrive1003 == 1)\r\n {\r\n listtep = new List { \"1012\", \"1004\" };\r\n }\r\n else\r\n {\r\n listtep = new List { \"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 { \"1014\", \"1006\" };\r\n }\r\n else\r\n {\r\n listtep = new List { \"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 { R托盘码 }, \"RGV\");\r\n if (b)\r\n {\r\n LogHelper.Debug($\"输送线RGV空托任务 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 { 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 { 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发那科1下线.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发那科1下线.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发那科1下线.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发那科1下线.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发那科2下线.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发那科2下线.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发那科2下线.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发那科2下线.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": [] } }, { "ID": "20250702112833751", "Name": "ConsoleInterceptor", "Desc": "", "ParentID": "", "Type": "ClassCode", "Level": "Item", "Statement": "public class ConsoleInterceptor:TextWriter", "EditCode": "private readonly TextWriter _originalOut;\r\n\r\npublic ConsoleInterceptor()\r\n{\r\n _originalOut = Console.Out;\r\n}\r\n\r\npublic override Encoding Encoding => Encoding.UTF8;\r\n\r\npublic override void WriteLine(string value = \"\")\r\n{\r\n string values = (string)AutoThread.InvokeMethod(AutoThread.Instance, \"WriteLine\", new object[] { value });\r\n //// 可以选择继续输出到原控制台\r\n if (!string.IsNullOrEmpty(values))\r\n _originalOut.WriteLine(values);\r\n}", "Code": "public class ConsoleInterceptor:TextWriter\r\n{private readonly TextWriter _originalOut;\r\n\r\npublic ConsoleInterceptor()\r\n{\r\n _originalOut = Console.Out;\r\n}\r\n\r\npublic override Encoding Encoding => Encoding.UTF8;\r\n\r\npublic override void WriteLine(string value = \"\")\r\n{\r\n string values = (string)AutoThread.InvokeMethod(AutoThread.Instance, \"WriteLine\", new object[] { value });\r\n //// 可以选择继续输出到原控制台\r\n if (!string.IsNullOrEmpty(values))\r\n _originalOut.WriteLine(values);\r\n}\r\n}", "CusMethod": { "Name": "", "Params": [], "ReturnType": "" }, "CusClass": { "Name": "ConsoleInterceptor", "InheritClass": "TextWriter", "Inherits": [] } } ], "CreationTime": "2025-02-26 15:31:23", "LastWriteTime": "2025-07-03 14:06:34", "HasSaved": true }