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();
}
}
}