StartupFaultPolicy.cs 1.0 KB

1234567891011121314151617181920212223242526
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using IvfTl.Control.Entity.InitEntitys;
  4. namespace ivf_tl_Control
  5. {
  6. /// <summary>
  7. /// 启动期坏舱决策(无 I/O,纯函数,可单测)。
  8. /// 规则:坏舱=故障清单中已知舱号(HouseSn>0);可跑舱=发现的舱−坏舱;致命=零可跑舱。
  9. /// 单舱/部分舱坏绝不致命 —— 落实 spec §34。
  10. /// </summary>
  11. public static class StartupFaultPolicy
  12. {
  13. public static HashSet<int> BadHouseSns(IEnumerable<HouseFault> faults)
  14. => faults.Where(f => f.HouseSn > 0).Select(f => f.HouseSn).ToHashSet();
  15. public static List<int> RunnableHouses(IEnumerable<int> discovered, IEnumerable<HouseFault> faults)
  16. {
  17. var bad = BadHouseSns(faults);
  18. return discovered.Where(sn => !bad.Contains(sn)).Distinct().OrderBy(x => x).ToList();
  19. }
  20. public static bool IsFatal(IReadOnlyList<int> runnableHouses)
  21. => runnableHouses == null || runnableHouses.Count == 0;
  22. }
  23. }