Worker.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using DBHelper;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.Extensions.Hosting;
  4. using Microsoft.Extensions.Logging;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using WCS.Core;
  13. using WCS.Entity;
  14. namespace WCS.Service
  15. {
  16. public class Worker : BackgroundService
  17. {
  18. private readonly ILogger<Worker> _logger;
  19. public Worker(ILogger<Worker> logger)
  20. {
  21. _logger = logger;
  22. }
  23. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  24. {
  25. if (stoppingToken.IsCancellationRequested)
  26. return;
  27. _logger.LogInformation("WCS开始启动");
  28. Configs.ProtocolProxyBaseType = typeof(ProtocolProxy);
  29. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  30. Configs.StringEncoding = Encoding.UTF8;
  31. DB.SetDefaultDbContextType<WCSDB>();
  32. Configs.DoCmds = act =>
  33. {
  34. DB.Do(db =>
  35. {
  36. var cmds = db.Default.Set<WCS_CMD>().Where(v => v.ENABLED).ToArray();
  37. Parallel.ForEach(cmds, cmd =>
  38. {
  39. act(cmd);
  40. cmd.ENABLED = false;
  41. });
  42. });
  43. };
  44. PLCAccessor.Creater = new PLCAccessors.PLCAccessorsCreater();
  45. try
  46. {
  47. DB.Do(db =>
  48. {
  49. var items = db.Default.Set<WCS_DEVICEPROTOCOL>()
  50. //.Where(v=>v.DB.NO==537)
  51. .Where(v => v.ENABLED && v.DEVICE.ENABLED && v.DB.ENABLED && v.DB.PLC.ENABLED)
  52. .Include(v => v.DEVICE)
  53. .Include(v => v.DB.PLC).ToArray();
  54. items.Select(v => v.Data()).ToArray();
  55. LogicHandler.AllObjects.AddRange(items);
  56. var devices = items.GroupBy(v => v.DEVICE).Select(v => v.Key).ToArray();
  57. LogicHandler.AllObjects.AddRange(devices);
  58. });
  59. var managerTypes = Assembly.GetExecutingAssembly().GetTypes().Where(v => v.IsSubclassOf(typeof(LogicHandler)) && !v.IsGenericType).ToArray();
  60. foreach (var type in managerTypes)
  61. {
  62. var m = Activator.CreateInstance(type);
  63. LogicHandler.AddManager(m as LogicHandler);
  64. }
  65. LogicHandler.StartAll();
  66. _logger.LogInformation("WCS启动成功");
  67. }
  68. catch(Exception ex)
  69. {
  70. _logger.LogError("WCS启动失败{0}", ex.Message);
  71. }
  72. }
  73. public override Task StopAsync(CancellationToken cancellationToken)
  74. {
  75. _logger.LogError("WCS关闭");
  76. LogicHandler.StopAll();
  77. return base.StopAsync(cancellationToken);
  78. }
  79. }
  80. }