using Yw.Model; namespace Yw.WinFrmUI { /// /// 颜色分级辅助类 /// public class HydroGradingHelper { /// /// 获取分级列表 /// public static async Task> GetGradingList(Yw.Model.HydroModelInfo hydroInfo) { if (hydroInfo == null) { return default; } var allGradingList = await BLLFactory.Instance.GetByModelID(hydroInfo.ID); if (allGradingList == null || allGradingList.Count < 1) { var config = Yw.Settings.HydroParasHelper.Hydro.Grading; if (config != null && config.Items != null && config.Items.Count > 0) { if (allGradingList == null) { allGradingList = new List(); } config.Items.ForEach(x => { var vmo = new HydroGradingVmo() { ModelID = hydroInfo.ID, Catalog = x.Catalog, PropName = x.PropName, SetValue = x.SetValue, MinValue = x.MinValue, MaxValue = x.MaxValue, Color = x.Color, SortCode = config.Items.IndexOf(x) }; allGradingList.Add(vmo); }); } } return allGradingList; } /// /// 获取应用列表 /// public static List GetApplyList(Yw.Model.HydroModelInfo hydroInfo) { if (hydroInfo == null) { return default; } var allApplyList = new List(); //闷头 if (hydroInfo.Bluntheads != null && hydroInfo.Bluntheads.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Blunthead, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Blunthead), PropName = HydroVisualCalcuProp.CalcuPress }); } //弯头 if (hydroInfo.Elbows != null && hydroInfo.Elbows.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Elbow, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Elbow), PropName = HydroVisualCalcuProp.CalcuPress }); } //三通 if (hydroInfo.Threelinks != null && hydroInfo.Threelinks.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Threelink, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Threelink), PropName = HydroVisualCalcuProp.CalcuPress }); } //四通 if (hydroInfo.Fourlinks != null && hydroInfo.Fourlinks.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Fourlink, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Fourlink), PropName = HydroVisualCalcuProp.CalcuPress }); } //喷头 if (hydroInfo.Nozzles != null && hydroInfo.Nozzles.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Nozzle, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Nozzle), PropName = HydroVisualCalcuProp.CalcuPress }); } //消火栓 if (hydroInfo.Hydrants != null && hydroInfo.Hydrants.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Hydrant, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Hydrant), PropName = HydroVisualCalcuProp.CalcuPress }); } //水表 if (hydroInfo.Meters != null && hydroInfo.Meters.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Meter, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Meter), PropName = HydroVisualCalcuProp.CalcuDemand }); } //流量计 if (hydroInfo.Flowmeters != null && hydroInfo.Flowmeters.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Flowmeter, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Flowmeter), PropName = HydroVisualCalcuProp.CalcuQ }); } //压力表 if (hydroInfo.Pressmeters != null && hydroInfo.Pressmeters.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Pressmeter, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pressmeter), PropName = HydroVisualCalcuProp.CalcuPr }); } //管道 if (hydroInfo.Pipes != null && hydroInfo.Pipes.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Pipe, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe), PropName = HydroVisualCalcuProp.CalcuFlow }); } //过渡件 if (hydroInfo.Translations != null && hydroInfo.Translations.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Translation, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Translation), PropName = HydroVisualCalcuProp.CalcuFlow }); } //水泵 if (hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Pump, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump), PropName = Yw.Hydro.ParterProp.LinkStatus }); } //阀门 if (hydroInfo.Valves != null && hydroInfo.Valves.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Valve, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve), PropName = Yw.Hydro.ParterProp.LinkStatus }); } //换热器 if (hydroInfo.Exchangers != null && hydroInfo.Exchangers.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Exchanger, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Exchanger), PropName = Yw.Hydro.ParterProp.LinkStatus }); } //压缩机 if (hydroInfo.Compressors != null && hydroInfo.Compressors.Count > 0) { allApplyList.Add(new HydroGradingApplyViewModel() { Catalog = Yw.Hydro.ParterCatalog.Compressor, CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Compressor), PropName = Yw.Hydro.ParterProp.LinkStatus }); } return allApplyList; } /// /// 获取结果列表 /// public static List GetResultList ( Yw.Model.HydroModelInfo hydroInfo, List allGradingList, List allApplyList, Dictionary allCalcuResultVisualDict ) { if (hydroInfo == null) { return default; } var allVisualList = hydroInfo.GetAllVisuals(); if (allVisualList == null || allVisualList.Count < 1) { return default; } var list = new List(); allVisualList.ForEach(x => { var result = GetResult(x, allGradingList, allApplyList, allCalcuResultVisualDict); if (result != null) { list.Add(result); } }); return list; } /// /// 获取结果 /// public static HydroGradingResultViewModel GetResult ( Yw.Model.HydroVisualInfo visual, List allGradingList, List allApplyList, Dictionary allCalcuResultVisualDict ) { if (visual == null) { return default; } if (allGradingList == null || allGradingList.Count < 1) { return default; } var allCatalogGradingList = allGradingList.Where(x => x.Catalog == visual.Catalog).ToList(); if (allCatalogGradingList == null || allCatalogGradingList.Count < 1) { return default; } if (allApplyList == null || allApplyList.Count < 1) { return default; } var apply = allApplyList.Find(x => x.Catalog == visual.Catalog); if (apply == null) { return default; } HydroGradingResultViewModel result = null; switch (apply.Catalog) { case Yw.Hydro.ParterCatalog.Pump: { var pump = visual as HydroPumpInfo; if (pump != null) { switch (apply.PropName) { case Yw.Hydro.ParterProp.LinkStatus: { var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.LinkStatus).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var grading = gradingList.Meet(pump.LinkStatus); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pump.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } break; case HydroVisualCalcuProp.CalcuFlow: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(pump.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuFlow.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pump.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; case HydroVisualCalcuProp.CalcuVelocity: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(pump.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuVelocity.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pump.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; case HydroVisualCalcuProp.CalcuHeadLoss: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(pump.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuHeadLoss.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pump.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; default: break; } } } break; case Yw.Hydro.ParterCatalog.Valve: { var valve = visual as HydroValveInfo; if (valve != null) { switch (apply.PropName) { case Yw.Hydro.ParterProp.LinkStatus: { var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.LinkStatus).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var grading = gradingList.Meet(valve.LinkStatus); if (grading != null) { result = new HydroGradingResultViewModel() { Code = valve.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } break; case HydroVisualCalcuProp.CalcuFlow: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(valve.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuFlow.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = valve.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; case HydroVisualCalcuProp.CalcuVelocity: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(valve.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuVelocity.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = valve.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; case HydroVisualCalcuProp.CalcuHeadLoss: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(valve.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuHeadLoss.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = valve.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; default: break; } } } break; case Yw.Hydro.ParterCatalog.Pipe: { var pipe = visual as HydroPipeInfo; if (pipe != null) { switch (apply.PropName) { case HydroVisualCalcuProp.CalcuFlow: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(pipe.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuFlow.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pipe.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; case HydroVisualCalcuProp.CalcuVelocity: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(pipe.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuVelocity.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pipe.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; case HydroVisualCalcuProp.CalcuHeadLoss: { var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroVisualCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList(); if (gradingList != null && gradingList.Count > 0) { var calcuResult = allCalcuResultVisualDict?.GetValue(pipe.Code); if (calcuResult is HydroCalcuLinkResult calcuLinkResult) { if (calcuLinkResult.CalcuHeadLoss.HasValue) { var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value)); if (grading != null) { result = new HydroGradingResultViewModel() { Code = pipe.Code, Catalog = apply.Catalog, PropName = apply.PropName, Color = grading.Color }; } } } } } break; default: break; } } } break; default: break; } return result; } } }