DeviceWork.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. namespace WCS.Service.Handlers
  7. {
  8. /// <summary>
  9. /// 设备工作器
  10. /// </summary>
  11. /// <typeparam name="T"></typeparam>
  12. public abstract class DeviceWork<T> : Work<T> where T : EntityEx<WCS_DEVICE>
  13. {
  14. private readonly string[] _typenames;
  15. protected DeviceWork()
  16. {
  17. _typenames = typeof(T).GenericTypeArguments.Select(v => v.AssemblyQualifiedName).ToArray();
  18. }
  19. protected abstract override void Do(T obj);
  20. protected override sealed IEnumerable<T> InitObjects()
  21. {
  22. var arr = Device.Where(v => v.ENABLED && v.DEVICEPROTOCOLS.All(d => d.ENABLED && d.DB.ENABLED && d.DB.PLC.ENABLED))
  23. .Where(v => _typenames.All(d => v.DEVICEPROTOCOLS.Any(e => e.DB.PROTOCOL == d)))
  24. .Where(SelectDevice).ToArray();
  25. var res = arr.Select(v => Activator.CreateInstance(typeof(T), v) as T);
  26. return res;
  27. }
  28. }
  29. }