using System.Collections.Generic; using System.Linq; using IvfTl.Control.Entity.InitEntitys; namespace ivf_tl_Control { /// /// 启动期坏舱决策(无 I/O,纯函数,可单测)。 /// 规则:坏舱=故障清单中已知舱号(HouseSn>0);可跑舱=发现的舱−坏舱;致命=零可跑舱。 /// 单舱/部分舱坏绝不致命 —— 落实 spec §34。 /// public static class StartupFaultPolicy { public static HashSet BadHouseSns(IEnumerable faults) => faults.Where(f => f.HouseSn > 0).Select(f => f.HouseSn).ToHashSet(); public static List RunnableHouses(IEnumerable discovered, IEnumerable faults) { var bad = BadHouseSns(faults); return discovered.Where(sn => !bad.Contains(sn)).Distinct().OrderBy(x => x).ToList(); } public static bool IsFatal(IReadOnlyList runnableHouses) => runnableHouses == null || runnableHouses.Count == 0; } }