lixiaojun
2025-01-07 db26311246d1c1cecadf4a22dc44ffa570ee40f2
WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs
@@ -70,6 +70,12 @@
            #endregion
            #region 冷却塔
            vm.Coolings = hydroInfo.Coolings?.Select(x => Create(x, hydroInfo)).ToList();
            #endregion
            #region 水表
            vm.Meters = hydroInfo.Meters?.Select(x => Create(x, hydroInfo)).ToList();
@@ -347,6 +353,38 @@
                return default;
            }
            return new HydroHydrantMatchingViewModel(visualViewModel);
        }
        #endregion
        #region 冷却塔
        /// <summary>
        /// 创建冷却塔自动匹配ViewModel
        /// </summary>
        public static HydroCoolingMatchingViewModel Create(HydroCoolingInfo visualInfo, HydroModelInfo hydroInfo)
        {
            if (visualInfo == null)
            {
                return default;
            }
            if (hydroInfo == null)
            {
                return default;
            }
            return new HydroCoolingMatchingViewModel(visualInfo, hydroInfo);
        }
        /// <summary>
        /// 创建冷却塔自动匹配ViewModel
        /// </summary>
        public static HydroCoolingMatchingViewModel Create(HydroCoolingViewModel visualViewModel)
        {
            if (visualViewModel == null)
            {
                return default;
            }
            return new HydroCoolingMatchingViewModel(visualViewModel);
        }
        #endregion
@@ -794,6 +832,25 @@
            #endregion
            #region 消火栓
            if (hydroInfo.Coolings != null && hydroInfo.Coolings.Count > 0)
            {
                if (matchingInfo.Coolings != null && matchingInfo.Coolings.Count > 0)
                {
                    hydroInfo.Coolings.ForEach(x =>
                    {
                        var matching = matchingInfo.Coolings.Find(t => t.Code == x.Code);
                        if (Apply(hydroInfo, x, matching))
                        {
                            result = true;
                        }
                    });
                }
            }
            #endregion
            #region 水表
            if (hydroInfo.Meters != null && hydroInfo.Meters.Count > 0)
@@ -973,9 +1030,15 @@
        /// <summary>
        /// 应用
        /// </summary>
        public static bool Apply(HydroTankViewModel visualViewModel, HydroTankMatchingViewModel matching)
        public static bool Apply
            (
                HydroTankViewModel visualViewModel,
                HydroTankMatchingViewModel matching,
                HydroPropStatusHelper propStatusHelper = null,
                HydroChangeHelper changeHelper = null
            )
        {
            var bol = Apply(visualViewModel.HydroInfo, visualViewModel.Vmo, matching);
            var bol = Apply(visualViewModel.HydroInfo, visualViewModel.Vmo, matching, propStatusHelper, changeHelper);
            visualViewModel.UpdateProperty();
            return bol;
        }
@@ -983,7 +1046,14 @@
        /// <summary>
        /// 应用
        /// </summary>
        public static bool Apply(Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroTankInfo visual, HydroTankMatchingViewModel matching)
        public static bool Apply
            (
                Yw.Model.HydroModelInfo hydroInfo,
                Yw.Model.HydroTankInfo visual,
                HydroTankMatchingViewModel matching,
                HydroPropStatusHelper propStatusHelper = null,
                HydroChangeHelper changeHelper = null
            )
        {
            if (hydroInfo == null)
            {
@@ -997,51 +1067,65 @@
            {
                return false;
            }
            visual.Name = matching.Name;
            visual.DbLocked = matching.DbLocked;
            visual.DbId = matching.DbId;
            visual.ModelType = matching.ModelType;
            visual.MinLevel = matching.MinLevel;
            visual.MaxLevel = matching.MaxLevel;
            visual.DN = matching.DN;
            visual.MinVol = matching.MinVol;
            visual.OverFlow = matching.OverFlow;
            //visual.Name = matching.Name;
            //visual.DbLocked = matching.DbLocked;
            //visual.DbId = matching.DbId;
            //visual.ModelType = matching.ModelType;
            //visual.MinLevel = matching.MinLevel;
            //visual.MaxLevel = matching.MaxLevel;
            //visual.DN = matching.DN;
            //visual.MinVol = matching.MinVol;
            //visual.OverFlow = matching.OverFlow;
            bool result = false;
            if (!visual.DbLocked)
            {
                if (!string.IsNullOrEmpty(matching.MatchingModelType))
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.ModelType), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.ModelType = matching.MatchingModelType;
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingDbId))
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.DbId), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.DbId = matching.MatchingDbId;
                    result = true;
                }
                if (matching.MatchingMinLevel.HasValue)
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.MinLevel), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.MinLevel = matching.MatchingMinLevel.Value;
                    result = true;
                }
                if (matching.MatchingMaxLevel.HasValue)
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.MaxLevel), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.MaxLevel = matching.MatchingMaxLevel.Value;
                    result = true;
                }
                if (matching.MatchingDN.HasValue)
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.DN), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.DN = matching.MatchingDN.Value;
                    result = true;
                }
                if (matching.MatchingMinVol.HasValue)
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.MinVol), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.MinVol = matching.MatchingMinVol.Value;
                    result = true;
                }
                if (matching.MatchingOverFlow.HasValue)
                {
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.OverFlow), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                    changeHelper?.Append(visual, eChangeType.Update);
                    visual.OverFlow = matching.MatchingOverFlow.Value;
                    result = true;
                }
@@ -1057,7 +1141,7 @@
                        curvevol.ModelType = string.Empty;
                        curvevol.DbLocked = false;
                        curvevol.DbId = matching.MatchingCurveDbId;
                        curvevol.CurveType = Yw.WinFrmUI.HydroCurve.TankVol;
                        curvevol.CurveType = Yw.WinFrmUI.HydroCurveType.CurveVol;
                        curvevol.CurveData = matching.MatchingVolCurve?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                        if (hydroInfo.Curves == null)
                        {
@@ -1065,6 +1149,7 @@
                        }
                        hydroInfo.Curves.Add(curvevol);
                        visual.VolCurve = curvevol.Code;
                        changeHelper?.Append(curvevol, eChangeType.Add);
                        result = true;
                    }
                    else
@@ -1073,7 +1158,22 @@
                        {
                            curvevol.DbId = matching.MatchingCurveDbId;
                            curvevol.CurveData = matching.MatchingVolCurve?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                            changeHelper?.Append(curvevol, eChangeType.Update);
                            result = true;
                        }
                    }
                    propStatusHelper?.UpdatePropStatus(visual.Code, nameof(visual.VolCurve), ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}通过产品配置匹配修复");
                }
                else
                {
                    if (!string.IsNullOrEmpty(visual.VolCurve))
                    {
                        var volCurve = hydroInfo?.Curves?.Find(x => x.Code == visual.VolCurve);
                        if (volCurve != null)
                        {
                            hydroInfo.Curves?.RemoveAll(x => x.Code == visual.VolCurve);
                            visual.VolCurve = string.Empty;
                            changeHelper?.Append(volCurve, eChangeType.Remove);
                        }
                    }
                }
@@ -1112,13 +1212,13 @@
            {
                return false;
            }
            visual.Name = matching.Name;
            visual.DbLocked = matching.DbLocked;
            visual.DbId = matching.DbId;
            visual.ModelType = matching.ModelType;
            visual.Caliber = matching.Caliber;
            visual.Material = matching.Material;
            visual.MinorLoss = matching.MinorLoss;
            //visual.Name = matching.Name;
            //visual.DbLocked = matching.DbLocked;
            //visual.DbId = matching.DbId;
            //visual.ModelType = matching.ModelType;
            //visual.Caliber = matching.Caliber;
            //visual.Material = matching.Material;
            //visual.MinorLoss = matching.MinorLoss;
            bool result = false;
            if (!visual.DbLocked)
@@ -1540,6 +1640,89 @@
                if (matching.MatchingCoefficient.HasValue)
                {
                    visual.Coefficient = matching.MatchingCoefficient.Value;
                    result = true;
                }
            }
            return result;
        }
        #endregion
        #region 冷却塔
        /// <summary>
        /// 应用
        /// </summary>
        public static bool Apply(HydroCoolingViewModel visualViewModel, HydroCoolingMatchingViewModel matching)
        {
            var bol = Apply(visualViewModel.HydroInfo, visualViewModel.Vmo, matching);
            visualViewModel.UpdateProperty();
            return bol;
        }
        /// <summary>
        /// 应用
        /// </summary>
        public static bool Apply(Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroCoolingInfo visual, HydroCoolingMatchingViewModel matching)
        {
            if (hydroInfo == null)
            {
                return false;
            }
            if (visual == null)
            {
                return false;
            }
            if (matching == null)
            {
                return false;
            }
            visual.Name = matching.Name;
            visual.DbLocked = matching.DbLocked;
            visual.DbId = matching.DbId;
            visual.ModelType = matching.ModelType;
            visual.Material = matching.Material;
            visual.Caliber = matching.Caliber;
            visual.MinorLoss = matching.MinorLoss;
            visual.Coefficient = matching.Coefficient;
            visual.LowerLimit = matching.LowerLimit;
            bool result = false;
            if (!visual.DbLocked)
            {
                if (!string.IsNullOrEmpty(matching.MatchingModelType))
                {
                    visual.ModelType = matching.MatchingModelType;
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingDbId))
                {
                    visual.DbId = matching.MatchingDbId;
                    result = true;
                }
                if (matching.MatchingCaliber.HasValue)
                {
                    visual.Caliber = matching.MatchingCaliber.Value;
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingMaterial))
                {
                    visual.Material = matching.MatchingMaterial;
                    result = true;
                }
                if (matching.MatchingMinorLoss.HasValue)
                {
                    visual.MinorLoss = matching.MatchingMinorLoss.Value;
                    result = true;
                }
                if (matching.MatchingCoefficient.HasValue)
                {
                    visual.Coefficient = matching.MatchingCoefficient.Value;
                    result = true;
                }
                if (matching.MatchingLowerLimit.HasValue)
                {
                    visual.LowerLimit = matching.MatchingLowerLimit.Value;
                    result = true;
                }
            }
@@ -1993,7 +2176,7 @@
                        curveqh.ModelType = string.Empty;
                        curveqh.DbLocked = false;
                        curveqh.DbId = matching.MatchingCurveDbId;
                        curveqh.CurveType = Yw.WinFrmUI.HydroCurve.PumpQH;
                        curveqh.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQH;
                        curveqh.CurveData = matching.MatchingCurveQH?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                        if (hydroInfo.Curves == null)
                        {
@@ -2024,7 +2207,7 @@
                        curveqp.ModelType = string.Empty;
                        curveqp.DbLocked = false;
                        curveqp.DbId = matching.MatchingCurveDbId;
                        curveqp.CurveType = Yw.WinFrmUI.HydroCurve.PumpQP;
                        curveqp.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQP;
                        curveqp.CurveData = matching.MatchingCurveQP?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                        if (hydroInfo.Curves == null)
                        {
@@ -2055,7 +2238,7 @@
                        curveqe.ModelType = string.Empty;
                        curveqe.DbLocked = false;
                        curveqe.DbId = matching.MatchingCurveDbId;
                        curveqe.CurveType = Yw.WinFrmUI.HydroCurve.PumpQE;
                        curveqe.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQE;
                        curveqe.CurveData = matching.MatchingCurveQE?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                        if (hydroInfo.Curves == null)
                        {
@@ -2129,37 +2312,31 @@
                if (!string.IsNullOrEmpty(matching.MatchingModelType))
                {
                    visual.ModelType = matching.MatchingModelType;
                    visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Matching, "通过基础数据匹配修复");
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingDbId))
                {
                    visual.DbId = matching.MatchingDbId;
                    visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Matching, "通过基础数据匹配修复");
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingMaterial))
                {
                    visual.Material = matching.MatchingMaterial;
                    visual.UpdatePropStatus(nameof(visual.Material), ePropStatus.Matching, "通过基础数据匹配修复");
                    result = true;
                }
                if (matching.MatchingDiameter.HasValue)
                {
                    visual.Diameter = matching.MatchingDiameter.Value;
                    visual.UpdatePropStatus(nameof(visual.Diameter), ePropStatus.Matching, "通过基础数据匹配修复");
                    result = true;
                }
                if (matching.MatchingMinorLoss.HasValue)
                {
                    visual.MinorLoss = matching.MatchingMinorLoss.Value;
                    visual.UpdatePropStatus(nameof(visual.MinorLoss), ePropStatus.Matching, "通过基础数据匹配修复");
                    result = true;
                }
                if (matching.MatchingValveType.HasValue)
                {
                    visual.ValveType = HydroValveTypeEnumHelper.GetValveTypeCode(matching.MatchingValveType.Value);
                    visual.UpdatePropStatus(nameof(visual.ValveType), ePropStatus.Matching, "通过基础数据匹配修复");
                    result = true;
                }
                switch (visual.ValveType)
@@ -2169,7 +2346,6 @@
                            if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                            {
                                visual.ValveSetting = matching.MatchingValveSetting;
                                visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "通过基础数据匹配修复");
                                result = true;
                            }
                        }
@@ -2179,7 +2355,6 @@
                            if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                            {
                                visual.ValveSetting = matching.MatchingValveSetting;
                                visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "通过基础数据匹配修复");
                                result = true;
                            }
                        }
@@ -2189,7 +2364,6 @@
                            if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                            {
                                visual.ValveSetting = matching.MatchingValveSetting;
                                visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "通过基础数据匹配修复");
                                result = true;
                            }
                        }
@@ -2199,7 +2373,6 @@
                            if (!string.IsNullOrEmpty(matching.MatchingValveSetting))
                            {
                                visual.ValveSetting = matching.MatchingValveSetting;
                                visual.UpdatePropStatus(nameof(visual.ValveSetting), ePropStatus.Matching, "通过基础数据匹配修复");
                                result = true;
                            }
                        }
@@ -2219,7 +2392,7 @@
                                    curveol.ModelType = visual.ModelType;
                                    curveol.DbLocked = false;
                                    curveol.DbId = matching.MatchingCurveDbId;
                                    curveol.CurveType = Yw.WinFrmUI.HydroCurve.ValveOL;
                                    curveol.CurveType = Yw.WinFrmUI.HydroCurveType.CurveOL;
                                    curveol.CurveData = matching.MatchingCurveOL?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                                    if (hydroInfo.Curves == null)
                                    {
@@ -2234,6 +2407,7 @@
                                    if (!curveol.DbLocked)
                                    {
                                        curveol.DbId = matching.MatchingCurveDbId;
                                        curveol.CurveType = Yw.WinFrmUI.HydroCurveType.CurveOL;
                                        curveol.CurveData = matching.MatchingCurveOL?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                                        result = true;
                                    }
@@ -2245,7 +2419,7 @@
                        {
                            if (!string.IsNullOrEmpty(matching.MatchingCurveDbId))
                            {
                                //阀门开度损失系数曲线
                                //水头损失曲线
                                var curveql = hydroInfo.Curves?.Find(x => x.Code == visual.ValveSetting);
                                if (curveql == null)
                                {
@@ -2256,7 +2430,7 @@
                                    curveql.ModelType = visual.ModelType;
                                    curveql.DbLocked = false;
                                    curveql.DbId = matching.MatchingCurveDbId;
                                    curveql.CurveType = Yw.WinFrmUI.HydroCurve.ValveOL;
                                    curveql.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQL;
                                    curveql.CurveData = matching.MatchingCurveQL?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                                    if (hydroInfo.Curves == null)
                                    {
@@ -2271,6 +2445,7 @@
                                    if (!curveql.DbLocked)
                                    {
                                        curveql.DbId = matching.MatchingCurveDbId;
                                        curveql.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQL;
                                        curveql.CurveData = matching.MatchingCurveQL?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                                        result = true;
                                    }
@@ -2368,7 +2543,7 @@
                        curvevql.ModelType = string.Empty;
                        curvevql.DbLocked = false;
                        curvevql.DbId = matching.MatchingCurveDbId;
                        curvevql.CurveType = Yw.WinFrmUI.HydroCurve.ExchangerQL;
                        curvevql.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQL;
                        curvevql.CurveData = matching.MatchingCurveQL?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                        if (hydroInfo.Curves == null)
                        {
@@ -2437,31 +2612,26 @@
                if (!string.IsNullOrEmpty(matching.MatchingModelType))
                {
                    visual.ModelType = matching.MatchingModelType;
                    visual.UpdatePropStatus(nameof(visual.ModelType), ePropStatus.Normal, "匹配修复");
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingDbId))
                {
                    visual.DbId = matching.MatchingDbId;
                    visual.UpdatePropStatus(nameof(visual.DbId), ePropStatus.Normal, "匹配修复");
                    result = true;
                }
                if (!string.IsNullOrEmpty(matching.MatchingMaterial))
                {
                    visual.Material = matching.MatchingMaterial;
                    visual.UpdatePropStatus(nameof(visual.Material), ePropStatus.Normal, "匹配修复");
                    result = true;
                }
                if (matching.MatchingDiameter.HasValue)
                {
                    visual.Diameter = matching.MatchingDiameter.Value;
                    visual.UpdatePropStatus(nameof(visual.Diameter), ePropStatus.Normal, "匹配修复");
                    result = true;
                }
                if (matching.MatchingMinorLoss.HasValue)
                {
                    visual.MinorLoss = matching.MatchingMinorLoss.Value;
                    visual.UpdatePropStatus(nameof(visual.MinorLoss), ePropStatus.Normal, "匹配修复");
                    result = true;
                }
@@ -2477,7 +2647,7 @@
                        curvevql.ModelType = string.Empty;
                        curvevql.DbLocked = false;
                        curvevql.DbId = matching.MatchingCurveDbId;
                        curvevql.CurveType = Yw.WinFrmUI.HydroCurve.CompressorQL;
                        curvevql.CurveType = Yw.WinFrmUI.HydroCurveType.CurveQL;
                        curvevql.CurveData = matching.MatchingCurveQL?.Select(x => new Yw.Model.Hydro.CurvePoint(x.X, x.Y)).ToList();
                        if (hydroInfo.Curves == null)
                        {