From 46f64905a3c309a50c0f245b3350cdeb8dd699c6 Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期三, 22 一月 2025 17:29:02 +0800 Subject: [PATCH] 计算优化 --- WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs | 422 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 272 insertions(+), 150 deletions(-) diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs index a490c8a..da2f1f2 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs @@ -4,7 +4,6 @@ using DevExpress.XtraEditors.Repository; using DevExpress.XtraLayout.Utils; using DevExpress.XtraVerticalGrid.Events; -using Yw.Model; namespace Yw.WinFrmUI { @@ -42,10 +41,8 @@ /// 鍒嗙骇灞炴�у�兼敼鍙樹簨浠� /// </summary> public event Action<HydroVisualViewModel> GradingPropertyValueChangedEvent; - /// <summary> - /// 姘存祦鍔ㄧ敾灞炴�у�兼敼鍙樹簨浠� - /// </summary> - public event Action<HydroVisualViewModel> FlowEffectPropertyValueChangedEvent; + + /// <summary> /// 寮鸿皟杩炴帴鑺傜偣浜嬩欢 /// 绗竴涓弬鏁颁负鏈韩Code @@ -57,6 +54,26 @@ /// </summary> public event Action<HydroVisualViewModel> HydroViewEvent; + private HydroChangeHelper _changeHelper = null;//鏀瑰彉杈呭姪绫� + private HydroPropStatusHelper _propStatusHelper = null;//灞炴�х姸鎬佽緟鍔╃被 + + /// <summary> + /// 鍒濆鍖栨暟鎹� + /// </summary> + public void InitialData + ( + HydroChangeHelper changeHelper, + HydroPropStatusHelper propStatusHelper + ) + { + _changeHelper = changeHelper; + _propStatusHelper = propStatusHelper; + } + + /// <summary> + /// 鍏佽淇敼 + /// </summary> + public bool AllowEdit { get; set; } /// <summary> /// 缁戝畾瀵硅薄 @@ -70,21 +87,29 @@ } set { - this.barBtnChangeLink.Visibility = value is HydroLinkViewModel ? BarItemVisibility.Always : BarItemVisibility.Never; - this.barBtnMatchingDb.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always; - this.barBtnView.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always; - if (value != null) - { - if (value is HydroReservoirViewModel) - { - this.barBtnMatchingDb.Visibility = BarItemVisibility.Never; - } - else if (value is HydroJunctionViewModel) - { - this.barBtnMatchingDb.Visibility = BarItemVisibility.Never; - } - } - this.propertyGridControl1.SelectedObject = value; + SetSelectedObject(value); + } + } + + //璁剧疆閫夋嫨瀵硅薄 + private void SetSelectedObject(HydroVisualViewModel vm) + { + if (this.AllowEdit) + { + this.barBtnChangeLink.Visibility = vm is HydroLinkViewModel ? BarItemVisibility.Always : BarItemVisibility.Never; + this.barBtnMatchingDb.Visibility = vm == null ? BarItemVisibility.Never : BarItemVisibility.Always; + } + else + { + this.barBtnMatchingDb.Visibility = BarItemVisibility.Never; + this.barBtnChangeLink.Visibility = BarItemVisibility.Never; + } + this.barBtnView.Visibility = vm == null ? BarItemVisibility.Never : BarItemVisibility.Always; + var selectObj = this.propertyGridControl1.SelectedObject as HydroVisualViewModel; + this.propertyGridControl1.SelectedObject = vm; + if (selectObj == vm) + { + this.propertyGridControl1.UpdateRows(); } } @@ -148,10 +173,17 @@ { return; } + var realFieldName = fieldName; //灞炴�ф弿杩板櫒 var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); if (descriptor != null) { + //鐪熷疄灞炴�у悕绉� + var realPropAttri = (HydroRealProAttribute)descriptor.Attributes[typeof(HydroRealProAttribute)]; + if (realPropAttri != null) + { + realFieldName = realPropAttri.RealPropName; + } //鍚嶇О var displayNameAttri = (DisplayNameAttribute)descriptor.Attributes[typeof(DisplayNameAttribute)]; if (displayNameAttri != null && !string.IsNullOrEmpty(displayNameAttri.DisplayName)) @@ -170,33 +202,10 @@ var vm = GetPropertyViewModel(e.Row); if (vm != null) { - var propStatus = vm.GetPropStatus(fieldName); - if (propStatus != null) + var propStatusInfo = _propStatusHelper?.GetPropStatusInfo(vm.Code, realFieldName); + if (propStatusInfo != null) { - switch (propStatus.PropStatus) - { - case Yw.Hydro.ePropStatus.Error: - { - e.Appearance.ForeColor = Color.Red; - } - break; - case Yw.Hydro.ePropStatus.Normal: - { - e.Appearance.ForeColor = Color.Black; - } - break; - case Yw.Hydro.ePropStatus.Lack: - { - e.Appearance.ForeColor = Color.Green; - } - break; - case Yw.Hydro.ePropStatus.Abnormal: - { - e.Appearance.ForeColor = Color.Orange; - } - break; - default: break; - } + e.Appearance.ForeColor = HydroPropStatusColorHelper.GetColor(propStatusInfo.PropStatus); } } } @@ -217,8 +226,15 @@ { e.CellText = ((DateTime)e.Properties.Value).ToString("yyyy-MM-dd HH:mm:ss"); } + else if (fullTypeName == typeof(string[]).FullName) + { + var stringValue = (string[])e.Properties.Value; + e.CellText = stringValue?.Length.ToString(); + } else { + + var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); if (descriptor != null) { @@ -256,10 +272,28 @@ } var descriptor = this.propertyGridControl1.GetPropertyDescriptor(this.propertyGridControl1.FocusedRow); - var showEditor = (ShowEditorAttribute)descriptor.Attributes[typeof(ShowEditorAttribute)]; - if (showEditor != null) + + if (this.AllowEdit) { - if (!showEditor.ShowEditor) + var showEditor = (ShowEditorAttribute)descriptor.Attributes[typeof(ShowEditorAttribute)]; + if (showEditor != null) + { + if (!showEditor.ShowEditor) + { + e.Cancel = true; + return; + } + } + } + else + { + var showEditorInView = (ShowEditorInViewAttribute)descriptor.Attributes[typeof(ShowEditorInViewAttribute)]; + if (showEditorInView == null) + { + e.Cancel = true; + return; + } + if (!showEditorInView.ShowEditor) { e.Cancel = true; return; @@ -300,15 +334,18 @@ #region 瀵屾枃鏈� - var attri_multi = (MultiTextAttribute)descriptor.Attributes[typeof(MultiTextAttribute)]; - if (attri_multi != null) + if (descriptor != null) { - var memoEdit = new RepositoryItemMemoEdit(); - if (e.Row.Properties.ReadOnly == true) + var attri_multi = (MultiTextAttribute)descriptor.Attributes[typeof(MultiTextAttribute)]; + if (attri_multi != null) { - memoEdit.ReadOnly = true; + var memoEdit = new RepositoryItemMemoEdit(); + if (e.Row.Properties.ReadOnly == true) + { + memoEdit.ReadOnly = true; + } + e.RepositoryItem = memoEdit; } - e.RepositoryItem = memoEdit; } #endregion @@ -328,65 +365,87 @@ #region 鏇茬嚎 - var curvePropAttri = (HydroCurveProAttribute)descriptor.Attributes[typeof(HydroCurveProAttribute)]; - if (curvePropAttri != null) + if (descriptor != null) { - var buttonEdit = new RepositoryItemButtonEdit(); - buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; - buttonEdit.ButtonClick += delegate + var curvePropAttri = (HydroCurveProAttribute)descriptor.Attributes[typeof(HydroCurveProAttribute)]; + if (curvePropAttri != null) { - var vm = GetPropertyViewModel(e.Row); - if (vm == null) + var buttonEdit = new RepositoryItemButtonEdit(); + buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; + buttonEdit.ButtonClick += delegate { - return; - } - this.SetCurveEvent?.Invoke(vm, curvePropAttri.Curve, curvePropAttri.CurveType); - }; - e.RepositoryItem = buttonEdit; + var vm = GetPropertyViewModel(e.Row); + if (vm == null) + { + return; + } + if (string.IsNullOrEmpty(curvePropAttri.CurveType)) + { + this.SetCurveEvent?.Invoke(vm, curvePropAttri.Curve, curvePropAttri.CurveType); + } + else + { + if (e.Row.Properties.Value == null || string.IsNullOrEmpty(e.Row.Properties.Value.ToString())) + { + return; + } + this.radialMenu1.ShowPopup(MousePosition); + } + }; + e.RepositoryItem = buttonEdit; + } } #endregion #region 妯″紡 - var patternProAttri = (HydroPatternProAttribute)descriptor.Attributes[typeof(HydroPatternProAttribute)]; - if (patternProAttri != null) + if (descriptor != null) { - var buttonEdit = new RepositoryItemButtonEdit(); - buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; - buttonEdit.ButtonClick += delegate + var patternProAttri = (HydroPatternProAttribute)descriptor.Attributes[typeof(HydroPatternProAttribute)]; + if (patternProAttri != null) { + var buttonEdit = new RepositoryItemButtonEdit(); + buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; + buttonEdit.ButtonClick += delegate + { - }; - e.RepositoryItem = buttonEdit; + }; + e.RepositoryItem = buttonEdit; + } } + #endregion #region 鏍囩 - var flagsProAttri = (HydroFlagsProAttribute)descriptor.Attributes[typeof(HydroFlagsProAttribute)]; - if (flagsProAttri != null) + if (descriptor != null) { - var buttonEdit = new RepositoryItemButtonEdit(); - buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; - buttonEdit.ButtonClick += async delegate + var flagsProAttri = (HydroFlagsProAttribute)descriptor.Attributes[typeof(HydroFlagsProAttribute)]; + if (flagsProAttri != null) { - var vm = GetPropertyViewModel(e.Row); - var flagVmoList = await BLLFactory<Yw.BLL.SysFlag>.Instance.GetBySysType(Yw.Hydro.DataType.HydroParter); - var dbFlagList = flagVmoList?.Select(x => x.Name).Distinct().ToList(); - var dlg = new SetFlagsDlg(); - dlg.SetBindingData(dbFlagList, vm.Vmo.Flags); - dlg.ReloadDataEvent += (flags) => + var buttonEdit = new RepositoryItemButtonEdit(); + buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; + buttonEdit.ButtonClick += async delegate { - vm.Vmo.Flags = flags; - vm.Flags = Yw.Untity.FlagsHelper.ToString(flags); - UpdateRows(); - this.PropertyValueChangedEvent?.Invoke(vm); + var vm = GetPropertyViewModel(e.Row); + var flagVmoList = await BLLFactory<Yw.BLL.SysFlag>.Instance.GetBySysType(Yw.Hydro.DataType.HydroParter); + var dbFlagList = flagVmoList?.Select(x => x.Name).Distinct().ToList(); + var dlg = new SetFlagsDlg(); + dlg.SetBindingData(dbFlagList, vm.Vmo.Flags); + dlg.ReloadDataEvent += (flags) => + { + vm.Vmo.Flags = flags; + vm.Flags = Yw.Untity.FlagsHelper.ToString(flags); + this.propertyGridControl1.UpdateRows(); + this.propertyGridControl1.RefreshEditor(); + this.PropertyValueChangedEvent?.Invoke(vm); + }; + dlg.ShowDialog(); }; - dlg.ShowDialog(); - }; - e.RepositoryItem = buttonEdit; + e.RepositoryItem = buttonEdit; + } } #endregion @@ -395,18 +454,21 @@ if (e.Row.Properties.Value != null) { - var linkCodeAttri = (HydroLinkProAttribute)descriptor.Attributes[typeof(HydroLinkProAttribute)]; - if (linkCodeAttri != null) + if (descriptor != null) { - var buttonEdit = new RepositoryItemButtonEdit(); - buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; - buttonEdit.ButtonClick += delegate + var linkCodeAttri = (HydroLinkProAttribute)descriptor.Attributes[typeof(HydroLinkProAttribute)]; + if (linkCodeAttri != null) { - var vm = GetPropertyViewModel(e.Row); - var vmLink = vm as HydroLinkViewModel; - this.BlinkLinkNodeEvent?.Invoke(vmLink, e.Row.Properties.Value.ToString()); - }; - e.RepositoryItem = buttonEdit; + var buttonEdit = new RepositoryItemButtonEdit(); + buttonEdit.TextEditStyle = TextEditStyles.DisableTextEditor; + buttonEdit.ButtonClick += delegate + { + var vm = GetPropertyViewModel(e.Row); + var vmLink = vm as HydroLinkViewModel; + this.BlinkLinkNodeEvent?.Invoke(vmLink, e.Row.Properties.Value.ToString()); + }; + e.RepositoryItem = buttonEdit; + } } } @@ -416,10 +478,6 @@ if (vm is HydroValveViewModel valve) { - if (fieldName == nameof(HydroValveViewModel.ValveSetting)) - { - e.Row.Visible = false; - } switch (valve.Vmo.ValveType) { case Yw.Hydro.ValveType.PSV: @@ -432,11 +490,7 @@ { e.Row.Visible = false; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) - { - e.Row.Visible = false; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { e.Row.Visible = false; } @@ -452,11 +506,7 @@ { e.Row.Visible = false; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) - { - e.Row.Visible = false; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { e.Row.Visible = false; } @@ -472,11 +522,7 @@ { e.Row.Visible = false; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) - { - e.Row.Visible = false; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { e.Row.Visible = false; } @@ -492,11 +538,7 @@ { e.Row.Visible = true; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) - { - e.Row.Visible = false; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { e.Row.Visible = false; } @@ -512,11 +554,7 @@ { e.Row.Visible = false; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) - { - e.Row.Visible = true; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { e.Row.Visible = false; } @@ -532,13 +570,9 @@ { e.Row.Visible = false; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { e.Row.Visible = false; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) - { - e.Row.Visible = true; } } break; @@ -552,13 +586,9 @@ { e.Row.Visible = false; } - if (fieldName == nameof(HydroValveViewModel.ValveOL)) + if (fieldName == nameof(HydroValveViewModel.ValveLength)) { - e.Row.Visible = false; - } - if (fieldName == nameof(HydroValveViewModel.ValveQL)) - { - e.Row.Visible = false; + e.Row.Visible = true; } } break; @@ -587,9 +617,18 @@ } vm.UpdateVmoProperty(); this.PropertyValueChangedEvent?.Invoke(vm); + + var realFieldName = fieldName; var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row); if (descriptor != null) { + //鐪熷疄灞炴�у悕绉� + var realPropAttri = (HydroRealProAttribute)descriptor.Attributes[typeof(HydroRealProAttribute)]; + if (realPropAttri != null) + { + realFieldName = realPropAttri.RealPropName; + } + var hydroMarkPropAttri = descriptor.Attributes[typeof(HydroMarkProAttribute)]; if (hydroMarkPropAttri != null) { @@ -602,13 +641,10 @@ this.GradingPropertyValueChangedEvent?.Invoke(vm); } - var hydroFlowDirectionPropAttri = descriptor.Attributes[typeof(HydroFlowDirectionProAttribute)]; - if (hydroFlowDirectionPropAttri != null) - { - this.FlowEffectPropertyValueChangedEvent?.Invoke(vm); - } this.propertyGridControl1.UpdateRows(); } + _changeHelper?.Append(vm.Vmo, eChangeType.Update); + _propStatusHelper?.UpdatePropStatus(vm.Code, realFieldName, Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃灞炴�ф帶浠朵慨鏀�"); } //Db鍖归厤 @@ -625,6 +661,11 @@ //鏀瑰彉杩炴帴鑺傜偣 private void barBtnChangeLink_ItemClick(object sender, ItemClickEventArgs e) { + var result = XtraMessageBox.Show("鏄惁纭璋冩暣涓婁笅娓革紵", "璇㈤棶", MessageBoxButtons.YesNo) == DialogResult.Yes; + if (!result) + { + return; + } var link = this.SelectedObject as HydroLinkViewModel; if (link != null) { @@ -632,6 +673,34 @@ link.StartCode = link.EndCode; link.EndCode = tempCode; link.UpdateVmoProperty(); + + _propStatusHelper?.UpdatePropStatus(link.Code, nameof(link.Vmo.StartCode), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}璋冩暣涓婁笅娓�"); + _propStatusHelper?.UpdatePropStatus(link.Code, nameof(link.Vmo.EndCode), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}璋冩暣涓婁笅娓�"); + + var translation = this.SelectedObject as HydroTranslationViewModel; + if (translation != null) + { + var tempDiameter = translation.StartDiameter; + translation.StartDiameter = translation.EndDiameter; + translation.EndDiameter = tempDiameter; + translation.UpdateVmoProperty(); + _propStatusHelper?.UpdatePropStatus(translation.Code, nameof(translation.Vmo.StartDiameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}璋冩暣涓婁笅娓�"); + _propStatusHelper?.UpdatePropStatus(translation.Code, nameof(translation.Vmo.EndDiameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}璋冩暣涓婁笅娓�"); + } + + var pump = this.SelectedObject as HydroPumpViewModel; + if (pump != null) + { + var tempDiameter = pump.InletDiameter; + pump.InletDiameter = pump.OutletDiameter; + pump.OutletDiameter = tempDiameter; + pump.UpdateVmoProperty(); + _propStatusHelper?.UpdatePropStatus(pump.Code, nameof(pump.Vmo.InletDiameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}璋冩暣涓婁笅娓�"); + _propStatusHelper?.UpdatePropStatus(pump.Code, nameof(pump.Vmo.OutletDiameter), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}璋冩暣涓婁笅娓�"); + } + + _changeHelper?.Append(link.Vmo, eChangeType.Update); + this.propertyGridControl1.UpdateRows(); } } @@ -687,7 +756,7 @@ string caption = string.Empty; string descrition = string.Empty; - + string realFieldName = fieldName; //灞炴�ф弿杩板櫒 @@ -707,13 +776,66 @@ { descrition = descritionAttri.Description; } + + //鐪熷疄灞炴�у悕绉� + var realPropAttri = (HydroRealProAttribute)descriptor.Attributes[typeof(HydroRealProAttribute)]; + if (realPropAttri != null) + { + realFieldName = realPropAttri.RealPropName; + } } - var propStatus = vm.GetPropStatus(fieldName); - this.hydroVisualPropertyDescriptionCtrl1.SetBindingData(caption, descrition, propStatus); + var propStatusInfo = _propStatusHelper?.GetPropStatusInfo(vm.Code, realFieldName); + this.hydroVisualPropertyDescriptionCtrl1.SetBindingData(caption, descrition, propStatusInfo); } + //鏌ョ湅鏇茬嚎 + private void barBtnViewCurve_ItemClick(object sender, ItemClickEventArgs e) + { + var vm = this.SelectedObject; + if (vm == null) + { + return; + } + var row = this.propertyGridControl1.FocusedRow; + var code = row.Properties.Value?.ToString(); + var curve = vm.HydroInfo.Curves?.Find(x => x.Code == code); + if (curve == null) + { + return; + } + var dlg = new HydroCurveViewDlg(); + dlg.SetBindingData(curve); + dlg.ShowDialog(); + } + + //缂栬緫鏇茬嚎 + private void barBtnEditCurve_ItemClick(object sender, ItemClickEventArgs e) + { + var vm = this.SelectedObject; + if (vm == null) + { + return; + } + var row = this.propertyGridControl1.FocusedRow; + var code = row.Properties.Value?.ToString(); + var curve = vm.HydroInfo.Curves?.Find(x => x.Code == code); + if (curve == null) + { + return; + } + var dlg = new HydroCurveEditDlg(); + dlg.ReloadDataEvent += (rhs) => + { + _changeHelper?.Append(rhs, eChangeType.Update); + }; + dlg.SetBindingData(curve); + dlg.ShowDialog(); + } + + + } } -- Gitblit v1.9.3