using Newtonsoft.Json; using PlcSiemens.Core.Extension; using ServiceCenter; using ServiceCenter.Logs; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using SqlSugar; using System.Text; using WCS.Core; using WCS.Entity; using WCS.WorkEngineering; namespace WCS.Service { /// /// 工作服务 /// public class Worker : BackgroundService { /// /// 记录器 /// private readonly ILogger _logger; /// /// 构造函数 /// /// 记录器 public Worker(ILogger logger) { _logger = logger; } public static readonly string WcsDlog = "WCSDlog"; public static readonly string Wcsdb = "WCSDB"; /// /// 执行 /// /// 停止令牌 /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { if (stoppingToken.IsCancellationRequested) return; #region 启用日志 //var logConfigText = RedisHub.Default.Check("LogConfigText") ?? throw new Exception("请在Redis中配置log4net相关内容"); //var logConfig = JsonConvert.DeserializeObject(logConfigText); //LogHub.SetConfigInfo(logConfig!); #endregion 启用日志 _logger.LogInformation("WCS开始启动"); Configs.ProtocolProxyBaseType = typeof(ProtocolProxy); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Configs.StringEncoding = Encoding.UTF8; //var warehouseName = RedisHub.Default.Check("WarehouseName") ?? throw new Exception("请在Redis中配置仓库名称"); //if (string.IsNullOrEmpty(warehouseName)) throw new Exception("请在Redis中配置仓库名称"); //ServiceHub.SetWarehouseName(warehouseName); #region 初始化数据库连接 var dbConnectionStrings = RedisHub.Default.Check("DbConnectionStrings") ?? throw new Exception("请在Redis中配置数据库连接相关内容"); ServiceHub.DbConnectionStrings = JsonConvert.DeserializeObject>(dbConnectionStrings); if (ServiceHub.DbConnectionStrings != null) { if (ServiceHub.DbConnectionStrings.All(v => v.Key != Wcsdb)) throw new Exception("请在DbConnectionStrings中配置WCS基础数据库连接字符串"); if (ServiceHub.DbConnectionStrings.All(v => v.Key == Wcsdb && !v.IsDefault)) throw new Exception("请在DbConnectionStrings中配置WCS基础数据库为默认数据库"); // if (ServiceHub.DbConnectionStrings.All(v => v.Key != WcsDlog)) throw new Exception("请在DbConnectionStrings中配置WCS日志数据库连接字符串"); } //设置连接信息 List connectionConfigs = new List(); foreach (var connectionString in ServiceHub.DbConnectionStrings!) { connectionConfigs.Add(new ConnectionConfig() { ConfigId = connectionString.Key, ConnectionString = connectionString.ConnectionString,//连接符字串 DbType = connectionString.DbType,//数据库类型 IsAutoCloseConnection = true,//不设成true要手动close }); }; SqlSugarHelper.SetDb(new SqlSugarScope(connectionConfigs)); //初始化数据库 SqlSugarHelper.Do(db => { foreach (var connectionString in ServiceHub.DbConnectionStrings!) { var _db = db.Connect.GetConnectionScope(connectionString.Key); switch (connectionString.Key) { case "WCSDB"://WCS基本数据库 SqlSugarHelper.SetDefault(connectionString.Key); _db.CodeFirst.InitTables(typeof(WCS_PlcData)); _db.CodeFirst.InitTables(typeof(WCS_TaskInfo)); _db.CodeFirst.InitTables(typeof(WCS_TaskDtl)); _db.CodeFirst.InitTables(typeof(WCS_TaskOld)); _db.CodeFirst.InitTables(typeof(WCS_AgvTaskInfo)); break; case "WCSDlog"://WCS日志数据库 //SqlSugarHelper.SetDefault(connectionString.Key); //_db.CodeFirst.InitTables(typeof(w)); //_db.CodeFirst.InitTables(typeof(WCS_TaskInfo)); //_db.CodeFirst.InitTables(typeof(WCS_TaskDtl)); //_db.CodeFirst.InitTables(typeof(WCS_TaskOld)); //_db.CodeFirst.InitTables(typeof(WCS_AgvTaskInfo)); break; default: //其他库 break; }; }; }); #endregion 初始化数据库连接 #region 初始化设备信息 WorkStart.InitializeDeviceInfo(); #endregion 初始化设备信息 #region 初始化PLC访问器及PLC读取协议 //创建PLC访问器 Configs.PLCAccessorCreater = new PLCAccessors.PLCAccessorsCreater(); try { #region 唤醒所有的世界 World.StartAll(); #endregion 唤醒所有的世界 _logger.LogInformation("WCS启动成功"); } catch (Exception ex) { _logger.LogError("WCS启动失败{0}", ex.Message); } #endregion 初始化PLC访问器及PLC读取协议 LogHub.init(); } } }