namespace Yw.WinFrmUI { /// /// /// public static class HydroModelInfoCheckExtensions { /// /// 校验 /// public static HydroCheckResult Check(this Yw.Model.HydroModelInfo hydroInfo) { var result = new HydroCheckResult(); if (hydroInfo == null) { result.Succeed = false; return result; } //验证水源 var checkItemLackSource = new HydroCheckItem() { Mode = HydroCheckMode.Global, Type = HydroCheckType.LackSource, Code = string.Empty, Failed = false, Reason = "至少包含一座水库或水池(水箱)" }; var allSourceList = hydroInfo.GetAllSources(); result.Items.Add(checkItemLackSource); if (allSourceList == null || allSourceList.Count < 1) { checkItemLackSource.Failed = true; } //验证连接节点 var checkItemLackJunction = new HydroCheckItem() { Mode = HydroCheckMode.Global, Type = HydroCheckType.LackJunction, Code = string.Empty, Failed = false, Reason = "至少包含一个连接节点" }; result.Items.Add(checkItemLackJunction); var allJunctionList = hydroInfo.GetAllJunctions(); if (allJunctionList == null || allJunctionList.Count < 1) { checkItemLackJunction.Failed = true; } //验证水泵 var allPumpList = hydroInfo.Pumps; if (allPumpList == null) { allPumpList = new List(); } var checkItemLackPump = new HydroCheckItem() { Mode = HydroCheckMode.Global, Type = HydroCheckType.LackPump, Code = string.Empty, Failed = false, Reason = "至少包含一台水泵" }; result.Items.Add(checkItemLackPump); if (allPumpList.Count < 1) { checkItemLackPump.Failed = true; } //验证孤立节点 var allNodeList = hydroInfo.GetAllNodes(); var allLinkList = hydroInfo.GetAllLinks(); foreach (var node in allNodeList) { var checkItemAloneNode = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AloneNode, Code = node.Code, Failed = false, Reason = "判断是否有管段连接" }; result.Items.Add(checkItemAloneNode); if (!allLinkList.Exists(x => x.StartCode == node.Code || x.EndCode == node.Code)) { checkItemAloneNode.Failed = true; } } //验证管段异常连接 foreach (var link in allLinkList) { var checkItemAbnormalLink = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AbnormalLink, Code = link.Code, Failed = false, Reason = "管段异常连接" }; result.Items.Add(checkItemAbnormalLink); var startNode = allNodeList.Find(x => x.Code == link.StartCode); var endNode = allNodeList.Find(x => x.Code == link.EndCode); //孤立管段 if (startNode == null && startNode == null) { checkItemAbnormalLink.Failed = true; checkItemAbnormalLink.Reason = "孤立管段"; } else { if (startNode == null) { checkItemAbnormalLink.Failed = true; checkItemAbnormalLink.Reason = "缺少上游节点"; } else if (endNode == null) { checkItemAbnormalLink.Failed = true; checkItemAbnormalLink.Reason = "缺少下游节点"; } else { if (startNode == endNode) { checkItemAbnormalLink.Failed = true; checkItemAbnormalLink.Reason = "上下游节点相同"; } } } } //验证水库 //验证水池 //验证水箱 //验证水泵 foreach (var pump in allPumpList) { //额定功率 var checkItemRatedP = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AbnormalProp, Code = pump.Code, Failed = false, Reason = "判断水泵额定功率" }; result.Items.Add(checkItemRatedP); if (pump.RatedP < 10) { checkItemRatedP.Failed = true; checkItemRatedP.Reason = "水泵额定功率设定错误"; } //流量扬程曲线 var checkItemCurveQH = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AbnormalProp, Code = pump.Code, Failed = false, Reason = "判断是否设置流量扬程曲线" }; result.Items.Add(checkItemCurveQH); if (string.IsNullOrEmpty(pump.CurveQH)) { checkItemCurveQH.Failed = true; checkItemCurveQH.Reason = "未设置流量扬程曲线"; } else { var curve = hydroInfo.Curves?.Find(x => x.Code == pump.CurveQH); if (curve == null) { checkItemCurveQH.Failed = true; checkItemCurveQH.Reason = "流量扬程曲线设置错误"; } } } //验证管道 var allPipeList = hydroInfo.Pipes; if (allPipeList == null) { allPipeList = new List(); } foreach (var pipe in allPipeList) { //长度 var checkItemLength = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AbnormalProp, Code = pipe.Code, Failed = false, Reason = "判断管道长度" }; result.Items.Add(checkItemLength); if (pipe.Length <= 0) { checkItemLength.Failed = true; checkItemLength.Reason = "管道长度属性设置错误"; } //直径 var checkItemDiameter = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AbnormalProp, Code = pipe.Code, Failed = false, Reason = "判断管道直径" }; result.Items.Add(checkItemDiameter); if (pipe.Diameter <= 10 || pipe.Diameter > 10000) { checkItemDiameter.Failed = true; checkItemDiameter.Reason = "管道直径区间(10,10000]"; } //粗糙系数 var checkItemRoughness = new HydroCheckItem() { Mode = HydroCheckMode.Item, Type = HydroCheckType.AbnormalProp, Code = pipe.Code, Failed = false, Reason = "判断管道粗糙系数" }; result.Items.Add(checkItemRoughness); if (pipe.Roughness <= 5 || pipe.Roughness > 10000) { checkItemRoughness.Failed = true; checkItemRoughness.Reason = "管道粗糙系数(5,10000]"; } } if (result.Items.Exists(x => x.Failed)) { result.Succeed = false; } return result; } } }