1
czw
2025-07-02 3492292c4f006945781714b731303a12b0f1dd3a
2025Äê6ÔÂ12ÈÕ/AuxAllWCS/Build/Project/´úÂë/×Ô¶¨ÒåÀà.cs
@@ -28,483 +28,512 @@
using GZ.DB.Repository.OIDATABASE;
using GZ.DB.IRepository.OIDATABASE;
using GZ.DB.Entity.OIDATABASE;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using NLog.Fluent;
namespace GZ.Projects.AuxAllWCS
{
public class Settings
{
#region    [自定义类][20250323144531864][Settings]
         public static bool FirstG {get;set;}=false;
    public class Settings
    {
        #region    [自定义类][20250323144531864][Settings]
        public static bool FirstG { get; set; } = false;
        public static string HostToAgvServerUrl { get; set; }
        public static List<deviceInfo> deviceInfos { get; set; } = new List<deviceInfo>();
        public static List<string> RunProcs { get; set; } = new List<string>();
        public static string HKbaseUrl { get; set; }
        public static string MESbaseUrl { get; set; }
        public static string WMSbaseUrl { get; set; }
        public static readonly HttpHelper apiHelper = new HttpHelper();
        public static string GetTimeStamp(DateTime? time = null)
      {
          TimeSpan ts = DateTime.UtcNow - (time ?? new DateTime(1970, 1, 1, 0, 0, 0, 0));
          return Convert.ToInt64(ts.TotalMilliseconds).ToString();
      }
#endregion [自定义类][20250323144531864][Settings]
}
public class LogHelper
{
#region    [自定义类][20250323145442478][LogHelper]
   public static Dictionary<string, ILogger> loggers = new Dictionary<string, ILogger>();
public static void Debug(string message, string name = "") {
    ILogger logger = null;
    if (loggers.Keys.Contains(name)) {
        logger = loggers[name];
    }
    else {
        logger = LogFactory.CreateLogger(name);
        if (logger != null) {
            loggers.Add(name, logger);
        {
            TimeSpan ts = DateTime.UtcNow - (time ?? new DateTime(1970, 1, 1, 0, 0, 0, 0));
            return Convert.ToInt64(ts.TotalMilliseconds).ToString();
        }
        else {
            logger = LogFactory.CreateLogger("console");
        #endregion [自定义类][20250323144531864][Settings]
    }
    public class LogHelper
    {
        #region    [自定义类][20250323145442478][LogHelper]
        public static Dictionary<string, ILogger> loggers = new Dictionary<string, ILogger>();
        public static void Debug(string message, string name = "")
        {
            ILogger logger = null;
            if (loggers.Keys.Contains(name))
            {
                logger = loggers[name];
            }
            else
            {
                logger = LogFactory.CreateLogger(name);
                if (logger != null)
                {
                    loggers.Add(name, logger);
                }
                else
                {
                    logger = LogFactory.CreateLogger("console");
                }
            }
            if (logger != null)
            {
                logger.Debug(message);
            }
        }
    }
    if (logger != null) {
        logger.Debug(message);
    }
}
public static void Info(string message, string name = "") {
    //logger.Info(message);
    ILogger logger = null;
    if (loggers.Keys.Contains(name)) {
        logger = loggers[name];
    }
    else {
        logger = LogFactory.CreateLogger(name);
        if (logger != null) {
            loggers.Add(name, logger);
        public static void Info(string message, string name = "")
        {
            //logger.Info(message);
            ILogger logger = null;
            if (loggers.Keys.Contains(name))
            {
                logger = loggers[name];
            }
            else
            {
                logger = LogFactory.CreateLogger(name);
                if (logger != null)
                {
                    loggers.Add(name, logger);
                }
                else
                {
                    logger = LogFactory.CreateLogger("infoFile");
                }
            }
            if (logger != null)
            {
                logger.Info(message);
            }
        }
        else {
            logger = LogFactory.CreateLogger("infoFile");
        public static void Error(string message, Exception ex, string name = "")
        {
            //logger.Error(ex, message);
            ILogger logger = null;
            if (loggers.Keys.Contains(name))
            {
                logger = loggers[name];
            }
            else
            {
                logger = LogFactory.CreateLogger(name);
                if (logger != null)
                {
                    loggers.Add(name, logger);
                }
                else
                {
                    logger = LogFactory.CreateLogger("errorFile");
                }
            }
            if (logger != null)
            {
                logger.Error($"{message}{ex.StackTrace}");
            }
        }
        #endregion [自定义类][20250323145442478][LogHelper]
    }
    if (logger != null) {
        logger.Info(message);
    }
}
public static void Error(string message, Exception ex, string name = "") {
    //logger.Error(ex, message);
    ILogger logger = null;
    if (loggers.Keys.Contains(name)) {
        logger = loggers[name];
    }
    else {
        logger = LogFactory.CreateLogger(name);
        if (logger != null) {
            loggers.Add(name, logger);
    public class LogFactory
    {
        #region    [自定义类][20250323145505759][LogFactory]
        /// <summary>
        /// é€šè¿‡é…ç½®æ–‡ä»¶é…ç½®æ—¥å¿—
        /// </summary>
        static LogFactory()
        {
            var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "杭奥" };
            LogManager.Configuration = DefaultConfig(loggerNames);
        }
        else {
            logger = LogFactory.CreateLogger("errorFile");
        public static ILogger CreateLogger(string name)
        {
            var logger = LogManager.GetLogger(name);
            return logger;
        }
        public static LoggingConfiguration DefaultConfig(List<string> loggerNames)
        {
            var config = new LoggingConfiguration();
            loggerNames.ForEach(a =>
            {
                var target = new FileTarget();
                target.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M
                target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
                target.ArchiveFileName = @"${basedir}/Logs/" + a + "/{####}.txt";
                target.FileName = @"${basedir}/Logs/" + a + "/${shortdate}.txt";//当前文件路径
                target.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
                config.AddTarget(a, target);
                config.AddRuleForOneLevel(LogLevel.Info, target, a);
            });
            // æ·»åŠ target-console
            //var consoleTarget = new ColoredConsoleTarget();
            //consoleTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
            //config.AddTarget("console", consoleTarget);
            //config.AddRule(LogLevel.Debug, LogLevel.Fatal, consoleTarget);
            //添加target-info
            var infoFileTarget = new FileTarget();
            infoFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M
            infoFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
            infoFileTarget.ArchiveFileName = @"${basedir}/Logs/Info/{####}.txt";
            infoFileTarget.FileName = @"${basedir}/Logs/Info/${shortdate}.txt";//当前文件路径
            infoFileTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
            config.AddTarget("infoFile", infoFileTarget);
            config.AddRuleForOneLevel(LogLevel.Info, infoFileTarget);//INFO写在Info文件
            //添加target-err
            var errorFileTarget = new FileTarget();
            errorFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M
            errorFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
            errorFileTarget.ArchiveFileName = @"${basedir}/Logs/Error/{####}.txt";
            errorFileTarget.FileName = @"${basedir}/Logs/Error/${shortdate}.txt";
            errorFileTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
            config.AddTarget("errorFile", errorFileTarget);
            config.AddRule(LogLevel.Error, LogLevel.Fatal, errorFileTarget);
            return config;
        }
        #endregion [自定义类][20250323145505759][LogFactory]
    }
    if (logger != null) {
        logger.Error($"{message}{ex.StackTrace}");
    public class HaiKangOrderInfo
    {
        #region    [自定义类][20250324165635320][HaiKangOrderInfo]
        /// <summary>
        /// è¯·æ±‚编号(编号唯一)
        /// </summary>
        public string reqCode { get; set; }
        /// <summary>
        /// è¯·æ±‚æ—¶é—´
        /// </summary>
        public string reqTime { get; set; }
        /// <summary>
        /// å®¢æˆ·ç«¯ç¼–号(如PDA、HCWMS等)
        /// </summary>
        public string clientCode { get; set; }
        /// <summary>
        /// ä»¤ç‰Œå·
        /// </summary>
        public string tokenCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        public string taskTyp { get; set; }
        /// <summary>
        /// å®¹å™¨ç±»åž‹ï¼ˆå‰è½¦é¡¹ç›®å¿…传)
        /// ï¼ˆå‰è½¦/CTU ä¸“用)
        /// </summary>
        public string ctnrTyp { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号(叉车/CTU ä¸“用)
        /// </summary>
        public string ctnrCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡æ¨¡å¼ï¼ˆ0-普通、1-出库、2-入库、3-移库 ï¼‰
        /// </summary>
        public string taskMode { get; set; }
        /// <summary>
        /// å·¥ä½œä½
        /// </summary>
        public string wbCode { get; set; }
        /// <summary>
        /// è´§æž¶ç¼–号
        /// </summary>
        public string podCode { get; set; }
        /// <summary>
        /// æ–¹å‘(180:左、0:右、90:上、-90:下 ï¼‰
        /// </summary>
        public string podDir { get; set; }
        /// <summary>
        /// è´§æž¶ç±»åž‹
        /// </summary>
        public string podTyp { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡æˆ–货架上的物料唯一编码
        /// </summary>
        public string materialLot { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        public string priority { get; set; }
        /// <summary>
        /// ç»„编号
        /// </summary>
        public string groupId { get; set; }
        /// <summary>
        /// è‡ªå®šä¹‰å­—段.JSON æ ¼å¼
        /// </summary>
        public string data { get; set; }
        /// <summary>
        /// å–消类型
        /// </summary>
        public string forceCancel { get; set; }
        /// <summary>
        /// å›žåº“区域编码
        /// </summary>
        public string matterArea { get; set; }
        /// <summary>
        /// å–消该AGV正在执行的任务单
        /// </summary>
        public string agvCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡å•ç¼–å·
        /// </summary>
        public string taskCode { get; set; }
        /// <summary>
        /// åœ°ç  X åæ ‡
        /// </summary>
        public string cooX { get; set; }
        /// <summary>
        /// åœ°ç  Y åæ ‡
        /// </summary>
        public string cooY { get; set; }
        /// <summary>
        /// å½“前位置编号
        /// </summary>
        public string currentPositionCode { get; set; }
        /// <summary>
        /// åœ°å›¾ç¼–号
        /// </summary>
        public string mapCode { get; set; }
        /// <summary>
        /// åœ°ç ç¼–号
        /// </summary>
        public string mapDataCode { get; set; }
        /// <summary>
        /// ä»“位编号
        /// </summary>
        public string stgBinCode { get; set; }
        /// <summary>
        /// æ–¹æ³•名
        /// </summary>
        public string method { get; set; }
        /// <summary>
        /// AGV ç¼–号
        /// </summary>
        public string robotCode { get; set; }
        /// <summary>
        /// å®¹å™¨ç±»åž‹
        /// </summary>
        public string ctnrType { get; set; }
        /// <summary>
        /// å··é“编号
        /// </summary>
        public string roadWayCode { get; set; }
        /// <summary>
        /// å··é“内顺序号
        /// </summary>
        public string seq { get; set; }
        /// <summary>
        /// è®¾å¤‡ç¼–号
        /// </summary>
        public string eqpCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡è·¯å¾„é›†åˆ
        /// </summary>
        public List<positionCodePath> positionCodePath { get; set; }
        #endregion [自定义类][20250324165635320][HaiKangOrderInfo]
    }
}
#endregion [自定义类][20250323145442478][LogHelper]
}
public class LogFactory
{
#region    [自定义类][20250323145505759][LogFactory]
    /// <summary>
 /// é€šè¿‡é…ç½®æ–‡ä»¶é…ç½®æ—¥å¿—
 /// </summary>
 static LogFactory() {
     var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "杭奥" };
     LogManager.Configuration = DefaultConfig(loggerNames);
 }
 public static ILogger CreateLogger(string name) {
     var logger = LogManager.GetLogger(name);
     return logger;
 }
    public class positionCodePath
    {
        #region    [自定义类][20250324165724429][positionCodePath]
 public static LoggingConfiguration DefaultConfig(List<string> loggerNames) {
     var config = new LoggingConfiguration();
     loggerNames.ForEach(a => {
         var target = new FileTarget();
         target.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M
         target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
         target.ArchiveFileName = @"${basedir}/Logs/" + a + "/{####}.txt";
         target.FileName = @"${basedir}/Logs/" + a + "/${shortdate}.txt";//当前文件路径
         target.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
        /// <summary>
        /// ä»»åŠ¡ç¼–å·
        /// </summary>
        public string positionCode { get; set; }
         config.AddTarget(a, target);
         config.AddRuleForOneLevel(LogLevel.Info, target, a);
     });
     // æ·»åŠ target-console
     var consoleTarget = new ColoredConsoleTarget();
     consoleTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
     config.AddTarget("console", consoleTarget);
     config.AddRule(LogLevel.Debug, LogLevel.Fatal, consoleTarget);
     //添加target-info
     var infoFileTarget = new FileTarget();
     infoFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M
     infoFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
     infoFileTarget.ArchiveFileName = @"${basedir}/Logs/Info/{####}.txt";
     infoFileTarget.FileName = @"${basedir}/Logs/Info/${shortdate}.txt";//当前文件路径
     infoFileTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
     config.AddTarget("infoFile", infoFileTarget);
     config.AddRuleForOneLevel(LogLevel.Info, infoFileTarget);//INFO写在Info文件
     //添加target-err
     var errorFileTarget = new FileTarget();
     errorFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M
     errorFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
     errorFileTarget.ArchiveFileName = @"${basedir}/Logs/Error/{####}.txt";
     errorFileTarget.FileName = @"${basedir}/Logs/Error/${shortdate}.txt";
     errorFileTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}";
     config.AddTarget("errorFile", errorFileTarget);
     config.AddRule(LogLevel.Error, LogLevel.Fatal, errorFileTarget);
     return config;
 }
#endregion [自定义类][20250323145505759][LogFactory]
}
public class HaiKangOrderInfo
{
#region    [自定义类][20250324165635320][HaiKangOrderInfo]
            /// <summary>
            /// è¯·æ±‚编号(编号唯一)
            /// </summary>
            public string reqCode { get; set; }
            /// <summary>
            /// è¯·æ±‚æ—¶é—´
            /// </summary>
            public string reqTime { get; set; }
            /// <summary>
            /// å®¢æˆ·ç«¯ç¼–号(如PDA、HCWMS等)
            /// </summary>
            public string clientCode { get; set; }
            /// <summary>
            /// ä»¤ç‰Œå·
            /// </summary>
            public string tokenCode { get; set; }
            /// <summary>
            /// ä»»åŠ¡ç±»åž‹
            /// </summary>
            public string taskTyp { get; set; }
            /// <summary>
            /// å®¹å™¨ç±»åž‹ï¼ˆå‰è½¦é¡¹ç›®å¿…传)
            /// ï¼ˆå‰è½¦/CTU ä¸“用)
            /// </summary>
            public string ctnrTyp { get; set; }
            /// <summary>
            /// å®¹å™¨ç¼–号(叉车/CTU ä¸“用)
            /// </summary>
            public string ctnrCode { get; set; }
            /// <summary>
            /// ä»»åŠ¡æ¨¡å¼ï¼ˆ0-普通、1-出库、2-入库、3-移库 ï¼‰
            /// </summary>
            public string taskMode { get; set; }
            /// <summary>
            /// å·¥ä½œä½
            /// </summary>
            public string wbCode { get; set; }
            /// <summary>
            /// è´§æž¶ç¼–号
            /// </summary>
            public string podCode { get; set; }
            /// <summary>
            /// æ–¹å‘(180:左、0:右、90:上、-90:下 ï¼‰
            /// </summary>
            public string podDir { get; set; }
            /// <summary>
            /// è´§æž¶ç±»åž‹
            /// </summary>
            public string podTyp { get; set; }
            /// <summary>
            /// ç‰©æ–™æ‰¹æ¬¡æˆ–货架上的物料唯一编码
            /// </summary>
            public string materialLot { get; set; }
            /// <summary>
            /// ä¼˜å…ˆçº§
            /// </summary>
            public string priority { get; set; }
            /// <summary>
            /// ç»„编号
            /// </summary>
            public string groupId { get; set; }
            /// <summary>
            /// è‡ªå®šä¹‰å­—段.JSON æ ¼å¼
            /// </summary>
            public string data { get; set; }
            /// <summary>
            /// å–消类型
            /// </summary>
            public string forceCancel { get; set; }
            /// <summary>
            /// å›žåº“区域编码
            /// </summary>
            public string matterArea { get; set; }
            /// <summary>
            /// å–消该AGV正在执行的任务单
            /// </summary>
            public string agvCode { get; set; }
            /// <summary>
            /// ä»»åŠ¡å•ç¼–å·
            /// </summary>
            public string taskCode { get; set; }
            /// <summary>
            /// åœ°ç  X åæ ‡
            /// </summary>
            public string cooX { get; set; }
            /// <summary>
            /// åœ°ç  Y åæ ‡
            /// </summary>
            public string cooY { get; set; }
            /// <summary>
            /// å½“前位置编号
            /// </summary>
            public string currentPositionCode { get; set; }
            /// <summary>
            /// åœ°å›¾ç¼–号
            /// </summary>
            public string mapCode { get; set; }
            /// <summary>
            /// åœ°ç ç¼–号
            /// </summary>
            public string mapDataCode { get; set; }
            /// <summary>
            /// ä»“位编号
            /// </summary>
            public string stgBinCode { get; set; }
            /// <summary>
            /// æ–¹æ³•名
            /// </summary>
            public string method { get; set; }
            /// <summary>
            /// AGV ç¼–号
            /// </summary>
            public string robotCode { get; set; }
            /// <summary>
            /// å®¹å™¨ç±»åž‹
            /// </summary>
            public string ctnrType { get; set; }
            /// <summary>
            /// å··é“编号
            /// </summary>
            public string roadWayCode { get; set; }
            /// <summary>
            /// å··é“内顺序号
            /// </summary>
            public string seq { get; set; }
            /// <summary>
            /// è®¾å¤‡ç¼–号
            /// </summary>
            public string eqpCode { get; set; }
            /// <summary>
            /// ä»»åŠ¡è·¯å¾„é›†åˆ
            /// </summary>
            public List<positionCodePath> positionCodePath { get; set; }
#endregion [自定义类][20250324165635320][HaiKangOrderInfo]
}
public class positionCodePath
{
#region    [自定义类][20250324165724429][positionCodePath]
            /// <summary>
            /// ä»»åŠ¡ç¼–å·
            /// </summary>
            public string positionCode { get; set; }
            /// <summary>
            /// ç±»åž‹
            /// </summary>
            public string Type { get; set; }
#endregion [自定义类][20250324165724429][positionCodePath]
}
public class HkReturnResult
{
#region    [自定义类][20250324171912560][HkReturnResult]
            /// <summary>
            /// è¿”回状态码
            /// </summary>
            public int code { get; set; }
            /// <summary>
            /// è¿”回说明
            /// </summary>
            public string message { get; set; }
            /// <summary>
            /// ä»»åŠ¡å·
            /// </summary>
            public string reqCode { get; set; }
#endregion [自定义类][20250324171912560][HkReturnResult]
}
public class deviceInfo
{
#region    [自定义类][20250325083629462][deviceInfo]
            public string address { get; set; }
            public string deviceName { get; set; }
            public string FuLeLineNo { get; set; }
            public string[] deviceNo { get; set; }
            /// <summary>
            ///  å¯¹åº”线体 -优先级
            /// </summary>
            public string[] areaPriy { get; set; }
            public string[] location { get; set; }
            /// <summary>
            ///  1 ç»´å¸Œå°”机械臂
            ///  2 æ·çž¬æœºæ¢°è‡‚臂
            ///  3 æ·çž¬è¾“送线
            /// </summary>
            public int deviceType { get; set; }
            public int enable { get; set; }
            /// <summary>
            /// ä»»åŠ¡æƒé‡ã€‚
            /// </summary>
            public int taskPri { get; set; } = 60;
#endregion [自定义类][20250325083629462][deviceInfo]
}
public class HttpHelper
{
#region    [自定义类][20250325095622918][HttpHelper]
   public string Post(string url, string postData, string contentType = "application/json", string sessionId = "") {
    LogHelper.Info(url+"+"+postData);
    WebRequest request = WebRequest.Create(url);
    request.Method = "POST";
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    request.ContentType = contentType;
    request.ContentLength = byteArray.Length;
    request.Timeout = 15000;
    if (sessionId != "") {
        request.Headers.Set("ASP.NET_SessionId", sessionId);
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        public string Type { get; set; }
        #endregion [自定义类][20250324165724429][positionCodePath]
    }
    public class HkReturnResult
    {
        #region    [自定义类][20250324171912560][HkReturnResult]
        /// <summary>
        /// è¿”回状态码
        /// </summary>
        public int code { get; set; }
        /// <summary>
        /// è¿”回说明
        /// </summary>
        public string message { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string reqCode { get; set; }
        #endregion [自定义类][20250324171912560][HkReturnResult]
    }
    public class deviceInfo
    {
        #region    [自定义类][20250325083629462][deviceInfo]
        public string address { get; set; }
        public string deviceName { get; set; }
        public string FuLeLineNo { get; set; }
        public string[] deviceNo { get; set; }
        /// <summary>
        ///  å¯¹åº”线体 -优先级
        /// </summary>
        public string[] areaPriy { get; set; }
        public string[] location { get; set; }
        /// <summary>
        ///  1 ç»´å¸Œå°”机械臂
        ///  2 æ·çž¬æœºæ¢°è‡‚臂
        ///  3 æ·çž¬è¾“送线
        /// </summary>
        public int deviceType { get; set; }
        public int enable { get; set; }
        /// <summary>
        /// ä»»åŠ¡æƒé‡ã€‚
        /// </summary>
        public int taskPri { get; set; } = 60;
        #endregion [自定义类][20250325083629462][deviceInfo]
    }
    public class HttpHelper
    {
        #region    [自定义类][20250325095622918][HttpHelper]
        public string Post(string url, string postData, string contentType = "application/json", string sessionId = "")
        {
            LogHelper.Info(url + "+" + postData);
            WebRequest request = WebRequest.Create(url);
            request.Method = "POST";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentType = contentType;
            request.ContentLength = byteArray.Length;
            request.Timeout = 15000;
            if (sessionId != "")
            {
                request.Headers.Set("ASP.NET_SessionId", sessionId);
            }
            //Authorization: UApGP6WW9FsBUqAlzxRGOw ==
            request.Headers.Set("Authorization", "UApGP6WW9FsBUqAlzxRGOw==");
    StreamReader reader = null;
    Stream stream = null;
    WebResponse rsp = null;
    try {
        stream = request.GetRequestStream();
        stream.Write(byteArray, 0, byteArray.Length);
        stream.Close();
        rsp = request.GetResponse();
        stream = rsp.GetResponseStream();
        reader = new StreamReader(stream);
        string rrend =  reader.ReadToEnd();
        LogHelper.Info($"{url} response={rrend}");
        return rrend;
            StreamReader reader = null;
            Stream stream = null;
            WebResponse rsp = null;
            try
            {
                stream = request.GetRequestStream();
                stream.Write(byteArray, 0, byteArray.Length);
                stream.Close();
                rsp = request.GetResponse();
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream);
                string rrend = reader.ReadToEnd();
                LogHelper.Info($"{url} response={rrend}");
                return rrend;
            }
            catch (Exception ex)
            {
                LogHelper.Info($"{url} err={ex.Message}");
                return "";
            }
            finally
            {
                // é‡Šæ”¾èµ„源
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }
        }
        #endregion [自定义类][20250325095622918][HttpHelper]
    }
    catch (Exception ex) {
        LogHelper.Info($"{url} err={ex.Message}");
        return "";
    }
    finally {
        // é‡Šæ”¾èµ„源
        if (reader != null) reader.Close();
        if (stream != null) stream.Close();
        if (rsp != null) rsp.Close();
    }
}
#endregion [自定义类][20250325095622918][HttpHelper]
}
public class HKResult
{
#region    [自定义类][20250325095900399][HKResult]
   /// <summary>
/// è¿”回编码
/// </summary>
public string code { get; set; }
/// <summary>
/// è¿”回消息
/// </summary>
public string message { get; set; }
/// <summary>
/// è¯·æ±‚编号
/// </summary>
public string reqCode { get; set; }
/// <summary>
/// è‡ªå®šä¹‰è¿”回(返回任务单号)
/// </summary>
public string data { get; set; }
#endregion [自定义类][20250325095900399][HKResult]
}
public class SYSHelper
{
#region    [自定义类][20250325131633664][SYSHelper]
   private static object locker = new object();
internal static int GetSerialNumber(string snType, string prefix, string Vend = "0")
{
    if (Vend == "1")
        Vend = DateTime.Now.ToString("yyMMdd");
    int result = 0;
    lock (locker)
    public class HKResult
    {
        SYSRepository sysservice = new SYSRepository();
        var sId = sysservice.FindEntity(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix + Vend);
        #region    [自定义类][20250325095900399][HKResult]
        /// <summary>
        /// è¿”回编码
        /// </summary>
        public string code { get; set; }
        if (sId != null)
        /// <summary>
        /// è¿”回消息
        /// </summary>
        public string message { get; set; }
        /// <summary>
        /// è¯·æ±‚编号
        /// </summary>
        public string reqCode { get; set; }
        /// <summary>
        /// è‡ªå®šä¹‰è¿”回(返回任务单号)
        /// </summary>
        public string data { get; set; }
        #endregion [自定义类][20250325095900399][HKResult]
    }
    public class SYSHelper
    {
        #region    [自定义类][20250325131633664][SYSHelper]
        private static object locker = new object();
        internal static int GetSerialNumber(string snType, string prefix, string Vend = "0")
        {
            if (Vend == "1")
                Vend = DateTime.Now.ToString("yyMMdd");
            int result = 0;
            lock (locker)
            {
                SYSRepository sysservice = new SYSRepository();
                var sId = sysservice.FindEntity(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix + Vend);
                if (sId != null)
                {
                    sId.CN_N_MAX++;
                    sId.CN_T_LAST = DateTime.Now;
                    //sysservice.Update(sId);
@@ -513,71 +542,75 @@
                    sysservice.dbcontext.Entry(sId).Property(x => x.CN_N_MAX).CurrentValue = sId.CN_N_MAX;
                    sysservice.dbcontext.Entry(sId).Property(x => x.CN_N_MAX).IsModified = true;
                    sysservice.dbcontext.Entry(sId).Property(x=>x.CN_T_LAST).CurrentValue = sId.CN_T_LAST;
                    sysservice.dbcontext.Entry(sId).Property(x => x.CN_T_LAST).CurrentValue = sId.CN_T_LAST;
                    sysservice.dbcontext.Entry(sId).Property(x=>x.CN_T_LAST).IsModified = true;
                    sysservice.dbcontext.Entry(sId).Property(x => x.CN_T_LAST).IsModified = true;
                    sysservice.dbcontext.SaveChanges();
                    result = sId.CN_N_MAX;
                }
                else
                {
                    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" };
                    sysservice.Insert(sId);
                }
            }
            return result;
        }
        else
        {
            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" };
            sysservice.Insert(sId);
        }
        #endregion [自定义类][20250325131633664][SYSHelper]
    }
    return result;
}
#endregion [自定义类][20250325131633664][SYSHelper]
}
public class TaskProcess
{
#region    [自定义类][20250325152141671][TaskProcess]
   internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
{
            LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to}开始创建>");
     var cntrInfo = string.Join(",", cntrs);
 ILocRepository locc = new LocRepository();
 var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
 var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);
    public class TaskProcess
    {
        #region    [自定义类][20250325152141671][TaskProcess]
        internal static bool CreateTask(string no, string from, string to, string taskType, int pri, List<string> cntrs, string workMode = "AGV", int cntrCount = 1, int startLayer = 1, int endLayer = 1)
        {
            LogHelper.Info($"创建任务 from:{from}>to {to}开始创建>");
            var cntrInfo = string.Join(",", cntrs);
            ILocRepository locc = new LocRepository();
            var fromLoc = locc.FindEntity(x => x.S_LOC_CODE == from);
            var endLoc = locc.FindEntity(x => x.S_LOC_CODE == to);
            var s = Settings.deviceInfos.Find(x => x.location.Contains(from)) != null;
            var e = Settings.deviceInfos.Find(x => x.location.Contains(to)) != null;
            string t = "F01";
            if (s && !e) t = "A002";
            if (!s && e) t = "A003";
            if (s && e) t = "A004";
 try
 {
            string t = "";
            if (workMode == "AGV")
            {
                t = "F01";
                if (s && !e) t = "A002";
                if (!s && e) t = "A003";
                if (s && e) t = "A004";
            }
            try
            {
     TaskEntity wmsTask = new TaskEntity()
     {
        S_ID = Guid.NewGuid().ToString(),
      S_STATE = "编辑",
      T_CREATE = DateTime.Now,
      T_MODIFY = DateTime.Now,
                TaskEntity wmsTask = new TaskEntity()
                {
                    S_ID = Guid.NewGuid().ToString(),
                    S_STATE = "编辑",
                    T_CREATE = DateTime.Now,
                    T_MODIFY = DateTime.Now,
         S_TASK_NO = GenerateTaskNo(),
         S_START_LAREA = fromLoc.S_AREA_CODE,
         S_END_LAREA = endLoc.S_AREA_CODE,
         S_DEPART_NAME = "",
         S_START_LOC = from,
         S_END_LOC = to,
         S_TYPE = taskType,
         S_SRC_NO = no,//
         N_PRIORITY = pri,
         S_WORK_MODE = workMode,
         S_B_STATE = "未执行",
         S_CNTRS = cntrInfo,
         N_START_LAYER = startLayer,
         N_END_LAYER = endLayer,
         N_CNTR_COUNT = cntrCount,
                    S_INDEX=t,
     };
     ITaskRepository taskserice = new TaskRepository();
     taskserice.Insert(wmsTask);
                    S_TASK_NO = GenerateTaskNo(),
                    S_START_LAREA = fromLoc.S_AREA_CODE,
                    S_END_LAREA = endLoc.S_AREA_CODE,
                    S_DEPART_NAME = "",
                    S_START_LOC = from,
                    S_END_LOC = to,
                    S_TYPE = taskType,
                    S_SRC_NO = no,//
                    N_PRIORITY = pri,
                    S_WORK_MODE = workMode,
                    S_B_STATE = "未执行",
                    S_CNTRS = cntrInfo,
                    N_START_LAYER = startLayer,
                    N_END_LAYER = endLayer,
                    N_CNTR_COUNT = cntrCount,
                    S_INDEX = t,
                };
                ITaskRepository taskserice = new TaskRepository();
                taskserice.Insert(wmsTask);
                if (workMode == "AGV")
                {
                    fromLoc.S_LOCK_STATE = "出库锁";
@@ -585,19 +618,19 @@
                    locc.Update(fromLoc);
                    locc.Update(endLoc);
                }
                LogHelper.Debug($"输送线RGV空托任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
                LogHelper.Info($"创建任务 from:{from}>to {to} åˆ›å»º{wmsTask.S_TASK_NO}成功");
                return true;
 }
 catch (Exception ex)
 {
     LogHelper.Error("CreateTask" + ex.Message, ex);
     return false;
 }
}
            }
            catch (Exception ex)
            {
                LogHelper.Error("CreateTask" + ex.Message, ex);
                return false;
            }
        }
     internal static void AddActionRecord(string no, string state, string forkliftNo, string extData,string strloc,string endloc)
        internal static void AddActionRecord(string no, string state, string forkliftNo, string extData, string strloc, string endloc)
        {
            var action = new TaskActEntity()
            {
@@ -605,8 +638,8 @@
                S_STATE = "编辑",
                T_CREATE = DateTime.Now,
                T_MODIFY = DateTime.Now,
                S_START_LOC= strloc,
                S_END_LOC= endloc,
                S_START_LOC = strloc,
                S_END_LOC = endloc,
                S_ACTION_CODE = state,
                S_TASK_NO = no,
                S_EQ_NO = forkliftNo,
@@ -624,18 +657,18 @@
            var date = DateTime.Now.ToString("yyMMdd");
            return $"TN{date}{id.ToString().PadLeft(4, '0')}";
        }
#endregion [自定义类][20250325152141671][TaskProcess]
}
public class Utils
{
#region    [自定义类][20250417094750211][Utils]
#endregion [自定义类][20250417094750211][Utils]
}
public class ToWMSMES
{
#region    [自定义类][20250531152402452][ToWMSMES]
   //2 wms  mes
        #endregion [自定义类][20250325152141671][TaskProcess]
    }
    public class Utils
    {
        #region    [自定义类][20250417094750211][Utils]
        #endregion [自定义类][20250417094750211][Utils]
    }
    public class ToWMSMES
    {
        #region    [自定义类][20250531152402452][ToWMSMES]
        //2 wms  mes
        public class CreateTask
@@ -666,7 +699,7 @@
                        S_DEPART_NAME = "",
                        S_START_LOC = model.startBit,
                        S_END_LOC = model.endBit,
                        S_TYPE = model.reqCode,
                        S_TYPE = model.taskType,
                        S_SRC_NO = "",//
                        N_PRIORITY = -88,
                        S_WORK_MODE = "agv",
@@ -685,14 +718,14 @@
                    return new ReturnMsg { resultCode = -1, resultMsg = "任务重复下发。" };
                }
            }
        public class ReturnMsg
        {
            public int resultCode { get; set; }
            public string resultMsg { get; set; }
        }
            public class ReturnMsg
            {
                public int resultCode { get; set; }
                public string resultMsg { get; set; }
            }
            internal static ReturnMsg CreatePointTask(CreateTask model)
            {
                ITaskRepository taskservice = new TaskRepository();
@@ -734,137 +767,14 @@
        }
        public static void ResMesTask()
        {
            AutoThread.InvokeMethod(AutoThread.Instance, "ResolveMesTask");
            ///1.
            TaskRepository taskservice = new TaskRepository();
            var tasks = taskservice.FindList(x =>( x.S_B_STATE == "MES"|| x.S_B_STATE == "People") && x.N_PRIORITY == -88);
            var VERXs = Settings.deviceInfos?.FindAll(x => x.deviceType==2);
            //if (VERXs.Any())
                foreach (var task in tasks)
                {
                    var sx = VERXs?.Find(x => x.location.Contains(task.S_END_LOC));
                    if (sx == null)
                    {
                        //直接生成对应任务。
                        var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_START_LOC, task.S_END_LOC, task.S_TYPE, 6, task.S_CNTRS.Split(',').ToList());
                        if (res)
                        {
                            //task.N_PRIORITY = 0;
                            taskservice.dbcontext.Set<TaskEntity>().Attach(task);
                            taskservice.dbcontext.Entry(task).Property(x => x.N_PRIORITY).CurrentValue = 0;
                            taskservice.dbcontext.Entry(task).Property(x => x.N_PRIORITY).IsModified = true;
                            taskservice.dbcontext.SaveChanges();
                        }
                    }
                    else
                    {
                       var sindex = sx.location.ToList().IndexOf(task.S_END_LOC);
                        LocRepository locRepository = new LocRepository();
                        //生成跳跃任务。  -- æ‰˜ç›˜è´§ä½è¡¨ã€‚
                        var t1s = taskservice.FindList(x => x.S_SRC_NO == task.S_TASK_NO);
                        if (t1s.Any())
                        {
                            var t1 = t1s.OrderBy(x => x.T_CREATE).LastOrDefault();
                            if (t1.S_END_LOC == task.S_END_LOC)
                            {
                                task.N_PRIORITY = 0;
                                task.S_B_STATE = "MES_完成";
                                taskservice.Update(task);
                                continue;
                            }
                            if (t1.S_B_STATE == "完成")
                            {
                                //1.终点是否有托盘。 ä¾æ®æ˜¯ç»ˆç‚¹çš„任务是 ä½œä¸ºç»ˆç‚¹ï¼Œè¿˜æ˜¯èµ·ç‚¹ã€‚
                                //var ec = taskservice.FindList(x => (x.S_START_LOC == task.S_START_LOC || x.S_END_LOC == task.S_END_LOC) /*&& DateTime.Now.Subtract(x.T_CREATE).TotalHours < 5*/).OrderByDescending(x => x.T_CREATE).FirstOrDefault();//($"select top 1 * from TN_TASK WHERE S_START_LOC='{task.S_END_LOC}' OR S_END_LOC='{task.S_END_LOC}' ORDER BY T_CREATE DESC");
                        //var ec = taskservice.FindList(x => x.S_START_LOC == task.S_START_LOC && x.S_END_LOC == task.S_START_LOC, new Common.Data.Pagination
        //                        {
        //                            page = 1,
        //                            sidx = "T_CREATE",
        //                            sord = "desc",
        //                            rows = 1
        //                        }).FirstOrDefault();
                          TaskEntity ec = null;
                        var dev = Conn.默认Redis.GetValue(sx.deviceName + "." + (sindex == 0 ? "D1224" : "D1225"));
                        if (dev?.Trim() == "1")
                            ec = taskservice.FindList(x =>x.S_END_LOC == task.S_END_LOC&&x.S_B_STATE=="完成", new Common.Data.Pagination
                            {
                                page = 1,
                                sidx = "T_CREATE",
                                sord = "desc",
                                rows = 1
                            }).FirstOrDefault();
                        if (t1.S_START_LOC == task.S_START_LOC && ec != null)//!= task.S_END_LOC)
                                {
                                    //第二段。
                                    LocEntity endLoc = null;
                                    var di = sx;
                                    if (di != null)
                                    {
                                        foreach (var ssloc in di.deviceNo)
                                        {
                                            var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);
                                            if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == "无")
                                            {
                                                endLoc = endloc;
                                                break;
                                            }
                                        }
                                        if (endLoc != null)
                                        {
                                            var res = TaskProcess.CreateTask(task.S_TASK_NO, task.S_END_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "下空", 7, ec.S_CNTRS.Split(',').ToList());
                                            if (res)
                                            {
                                                task.N_PRIORITY = 0; taskservice.Update(task);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    var res = TaskProcess.CreateTask(task.S_TASK_NO, t1.S_END_LOC, task.S_END_LOC, task.S_TYPE + "补满", 6, task.S_CNTRS.Split(',').ToList());
                                    if (res)
                                    {
                                        task.N_PRIORITY = 0; taskservice.Update(task);
                                    }
                                }
                            }
                        }
                        else
                        {
                            //生成第一段。
                            LocEntity endLoc = null;
                            var di = sx;
                            if (di != null)
                            {
                                foreach (var ssloc in di.deviceNo)
                                {
                                    var endloc = locRepository.FindEntity(x => x.S_LOC_CODE == ssloc);
                                    if (endloc != null && endloc.N_CURRENT_NUM == 0 && endloc.S_LOCK_STATE == "无")
                                    {
                                        endLoc = endloc;
                                        break;
                                    }
                                }
                                if (endLoc != null)
                                {
                                    var res = TaskProcess.CreateTask("", task.S_START_LOC, endLoc.S_LOC_CODE, task.S_TYPE + "满转", 8, task.S_CNTRS.Split(',').ToList());
                                    if (res)
                                    {
                                        task.N_PRIORITY = 0; taskservice.Update(task);
                                    }
                                }
                            }
                        }
                    }
                }
            //var VERX = Settings.deviceInfos?.FindAll(x => x.deviceName.Contains("捷瞬抓臂"));
            //if ()
            ///2  çœ‹ç¼“存区。 æ²¡æ»¡çš„。
        }
#endregion [自定义类][20250531152402452][ToWMSMES]
}
        #endregion [自定义类][20250531152402452][ToWMSMES]
    }
}