using DBHelper; using Logs; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; using WCS.Core; using WCS.Entity; using WCS.Service.Log; namespace WCS.Service { public class Worker : BackgroundService { private readonly ILogger _logger; public Worker(ILogger logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { if (stoppingToken.IsCancellationRequested) return; var logconfig = JsonConvert.DeserializeObject(File.ReadAllText("config.json", Encoding.Default)); Logs.LogHelper.SetConfigInfo(logconfig); _logger.LogInformation("WCS开始启动"); InfoLog.INFO_INIT("WCS开始启动"); Configs.DebugRedisUrl = "127.0.0.1"; Configs.ProtocolProxyBaseType = typeof(ProtocolProxy); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Configs.StringEncoding = Encoding.UTF8; DB.SetDefaultDbContextType(); Configs.PublishEvent += () => { WMS.UploadDevInfo(); ProtocolProxy.Do(); }; Configs.UploadException = (d, s) => { if (s == "接口调用中") return; if (ProtocolProxy.AllDatas.ContainsKey(d)) { ProtocolProxy.AllDatas[d].Info = s; ProtocolProxy.AllDatas[d].Frame = LogicHandler.Frame; } WMS.TaskException(d, s); }; LogicHandler.DbLog = (msg, device, type) => Helpers.LogHelper.AddWCS_EXCEPTION(msg, device, type); //Configs.DoCmds = act => //{ // DB.Do(db => // { // var cmds = db.Default.Set().Where(v => v.ENABLED).ToArray(); // Parallel.ForEach(cmds, cmd => // { // act(cmd); // cmd.ENABLED = false; // }); // }); //}; PLCAccessor.Creater = new PLCAccessors.PLCAccessorsCreater(); try { DB.Do(db => { var items = db.Default.Set() //.Where(v => v.ENABLED && v.DEVICE.ENABLED && v.DB.ENABLED && v.DB.PLC.ENABLED) .Include(v => v.DEVICE.ROUTES) .Include(v => v.DEVICE.PATHS) .Include(v => v.DEVICE.PATHPOINTS) .Include(v => v.DB.PLC).ToArray(); items.Select(v => v.Data()).ToArray(); LogicHandler.AllObjects.AddRange(items); //var devices = items.GroupBy(v => v.DEVICE).Select(v => v.Key).ToArray(); var devices = db.Default.Set().Include(v => v.ROUTES).Include(v => v.PATHS).Include(v => v.DEVICEGROUP).Include(v => v.PATHPOINTS).ToArray(); LogicHandler.AllObjects.AddRange(devices); }); #region 设备扩展数据配置 Device.AddFlag(DF.一楼RGV放货, "G1035", "G1044", "G1053", "G1062"); Device.AddFlag(DF.堆垛机, "SRM1", "SRM2", "SRM3", "SRM4", "SRM5", "SRM6", "SRM7", "SRM8"); Device.AddFlag(DF.SRM取货, "G1040", "G1042", "G1049", "G1051", "G1058", "G1060", "G1067"); Device.AddFlag(DF.SRM取货, "G1040", "G1042", "G1049", "G1051", "G1058", "G1060", "G1067"); Device.AddFlag(DF.月台出货, "G1469", "G1561", "G1538", "G1574", "G1509"); Device.AddFlag(DF.月台区, "G1469", "G1561", "G1538", "G1574", "G1509"); Device.AddFlag(DF.RGV1, "G1244"); Device.AddFlag(DF.RGV2, "G1244"); Device.AddFlag(DF.SRM放货, "1473", "1476","1493","1494"); #endregion 设备扩展数据配置 var managerTypes = Assembly.GetExecutingAssembly().GetTypes().Where(v => v.IsSubclassOf(typeof(LogicHandler)) && !v.IsGenericType && !v.IsAbstract).ToArray(); foreach (var type in managerTypes) { var m = Activator.CreateInstance(type); LogicHandler.AddManager(m as LogicHandler); } LogicHandler.StartAll(); //Uploader.Start(); _logger.LogInformation("WCS启动成功"); InfoLog.INFO_INIT("WCS启动成功"); } catch (Exception ex) { _logger.LogError("WCS启动失败{0}", ex.Message); InfoLog.INFO_INIT($"WCS启动失败{ex.Message}"); } } private bool Stoped = false; public override Task StopAsync(CancellationToken cancellationToken) { _logger.LogError("WCS关闭"); InfoLog.INFO_INIT("WCS关闭"); LogicHandler.StopAll(); //Uploader.Stop(); return base.StopAsync(cancellationToken); } } }