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 += () => { 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); PLCAccessor.Creater = new PLCAccessors.PLCAccessorsCreater(); try { DB.Do(db => { var items = db.Default.Set() .Include(v => v.DEVICE.ROUTES) .Include(v => v.DEVICE.PATHS) .Include(v => v.DB.PLC).ToArray(); items.Select(v => v.Data()).ToArray(); LogicHandler.AllObjects.AddRange(items); var devices = db.Default.Set().Include(v => v.ROUTES).Include(v => v.PATHS).Include(v => v.DEVICEGROUP).ToArray(); LogicHandler.AllObjects.AddRange(devices); }); #region 设备扩展数据配置 Device.AddFlag(DF.一楼RGV放货, "G1035", "G1044", "G1053", "G1062"); Device.AddFlag(DF.SRM, "SRM1", "SRM2", "SRM3", "SRM4", "SRM5", "SRM6", "SRM7", "SRM8"); Device.AddFlag(DF.月台, "G1469", "G1561", "G1538", "G1574", "G1509"); Device.AddFlag(DF.SRM二级品取货, "1040", "1041", "1042", "1043", "1049", "1050", "1051", "1052"); Device.AddFlag(DF.SRM二级品取货, "1058", "1059", "1060", "1061", "1067", "1068"); Device.AddFlag(DF.SRMBOPP取货, "1195", "1194", "1193", "1192", "1204", "1203", "1202", "1201"); Device.AddFlag(DF.SRMBOPP取货, "1213", "1212", "1210", "1211", "1220", "1219", "1230", "1228"); Device.AddFlag(DF.SRM月台放货, "1473", "1476", "1474", "1475", "1491", "1492", "1493", "1494"); Device.AddFlag(DF.SRM月台放货, "1520", "1521", "1522", "1523", "1545", "1546", "1451", "1453"); Device.AddFlag(DF.SRM涂布取货, "1431", "1432", "1422", "1423", "1424", "1425", "1415", "1416"); Device.AddFlag(DF.SRM涂布取货, "1605", "1606", "1406", "1407", "1408", "1409"); Device.AddFlag(DF.SRM涂布放货, "1283", "1284", "1290", "1291", "1292", "1293", "1299", "1300"); Device.AddFlag(DF.SRM涂布放货, "1301", "1302", "1308", "1309", "1310", "1311"); Device.AddFlag(DF.涂布RGV, "RGV9", "RGV10", "RGV11", "RGV12", "RGV13", "RGV14"); Device.AddFlag(DF.涂布RGV取货设备组, "G2", "G3", "G5", "G7", "G9", "G11"); Device.AddFlag(DF.涂布RGV放货设备组, "G1", "G4", "G6", "G8", "G10"); Device.AddFlag(DF.涂布出库RGV取货站台, "1285", "1286", "1294", "1295", "1303", "1304", "1312", "1313"); Device.AddFlag(DF.涂布入库RGV取货站台, "1391", "1392", "1399", "1400"); Device.AddFlag(DF.涂布RGV取货站台, "1285", "1286", "1294", "1295", "1303", "1304", "1312", "1313"); Device.AddFlag(DF.涂布RGV取货站台, "1391", "1392", "1399", "1400"); Device.AddFlag(DF.BOPPRGV, "RGV1", "RGV2", "RGV3", "RGV4", "RGV5", "RGV6", "RGV7"); //Device.AddFlag(DF.BOPPRGV取货设备组, "G17", "G18", "G19", "G20", "G21", "G22", "G23"); Device.AddFlag(DF.BOPPRGV取货设备组, "G19", "G23"); Device.AddFlag(DF.BOPPRGV放货设备组, "G12", "G13", "G14", "G15", "G16"); #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); } } }