using System; using System.Collections.Generic; using System.Linq; using WCS.Core; using WCS.Entity; namespace WCS.Service.Handlers { /// /// 设备工作器 /// /// public abstract class DeviceWork : Work where T : EntityEx { private readonly string[] _typenames; protected DeviceWork() { _typenames = typeof(T).GenericTypeArguments.Select(v => v.AssemblyQualifiedName).ToArray(); } protected abstract override void Do(T obj); protected override sealed IEnumerable InitObjects() { var arr = Device.Where(v => v.ENABLED && v.DEVICEPROTOCOLS.All(d => d.ENABLED && d.DB.ENABLED && d.DB.PLC.ENABLED)) .Where(v => _typenames.All(d => v.DEVICEPROTOCOLS.Any(e => e.DB.PROTOCOL == d))) .Where(SelectDevice).ToArray(); var res = arr.Select(v => Activator.CreateInstance(typeof(T), v) as T); return res; } } }