using DevExpress.Utils.Extensions; using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; namespace IStation.WinFrmUI.Basic { public partial class PumpCurveMgrPage : DocumentPage { public PumpCurveMgrPage() { InitializeComponent(); this.PageTitle.Caption = "泵曲线"; this.gridViewCurvePoints.SetNormalView(); this.pumpCurveMappingListCtrl1.FocusedChangedEvent += PumpCurveMappingListCtrl1_FocusedChangedEvent; this.curveExpressChart1.OnCurveCoordinateParasChanged += CurveExpressChart1_OnCurveCoordinateParasChanged; } private string _belongType; private Model.Equipment _product = null; private Model.PumpCurveExMapping _pumpCurveExMapping = null; /// /// 初始化数据 /// public override void InitialDataSource() { _pumpCurveExMapping = null; this.pumpCurveMappingListCtrl1.SetBindingData(); } //曲线变换列表 private void PumpCurveMappingListCtrl1_FocusedChangedEvent(string objectType, object obj) { _belongType = objectType; _product = null; _pumpCurveExMapping = null; if (string.IsNullOrEmpty(objectType) || obj == null) { this.tabPane1.Pages.ForEach(x => x.PageVisible = false); } var isProduct = _belongType == IStation.ObjectType.Equipment; this.tabNavigationPageCurveView.PageVisible = !isProduct; this.tabNavigationPageCurveEdit.PageVisible = !isProduct; this.tabNavigationPageOnePoint.PageVisible = isProduct; this.tabNavigationPageExcel.PageVisible = isProduct; this.tabNavigationPageCurveExpress.PageVisible = isProduct; this.tabNavigationPagePicture.PageVisible = isProduct; if (objectType == IStation.ObjectType.Equipment) { this.tabPane1.SelectedPage = this.tabNavigationPageOnePoint; this.ribbonControl1.SelectedPage = this.ribbonPageOnePoint; _product = obj as Model.Equipment; } else if (objectType == IStation.ObjectType.PumpCurveExMapping) { this.tabPane1.SelectedPage = this.tabNavigationPageCurveView; this.ribbonControl1.SelectedPage = this.ribbonPageCurveMgr; _pumpCurveExMapping = obj as Model.PumpCurveExMapping; this.curveExpressChart1.InitialChartData(); SetBindingData(_pumpCurveExMapping); } else if (objectType == IStation.ObjectType.PumpSpeedCurve) { this.tabPane1.SelectedPage = this.tabNavigationPageCurveView; this.ribbonControl1.SelectedPage = this.ribbonPageCurveMgr; var speedCurve = obj as Model.PumpSpeedCurve; this.curveExpressChart1.InitialChartData(); SetBindingData(speedCurve); } } #region 曲线 //绑定数据 private void SetBindingData(Model.PumpCurve pumpCurve) { if (pumpCurve == null || pumpCurve.CurveInfo == null) return; if (pumpCurve.CurveInfo.CurveQH == null) return; List qhPoints, qePoints = null, qpPoints = null; var curveInfo = pumpCurve.CurveInfo; if (curveInfo.CurveQH.DefinePoints != null) qhPoints = curveInfo.CurveQH.DefinePoints; else qhPoints = curveInfo.CurveQH.GetFitPoints(12); if (curveInfo.CurveQE != null) if (curveInfo.CurveQE.DefinePoints != null) qePoints = curveInfo.CurveQE.DefinePoints; else qePoints = curveInfo.CurveQE?.GetFitPoints(12); if (curveInfo.CurveQP != null) if (curveInfo.CurveQP?.DefinePoints != null) qpPoints = curveInfo.CurveQP.DefinePoints; else qpPoints = curveInfo.CurveQP?.GetFitPoints(12); #region 曲线 /* var fre = Convert.ToDouble(this.barTrackBarHZ.EditValue); SetFrequence(pumpCurve.CurveInfo, fre);*/ this.curveExpressChart1.SetBindingData(curveInfo.CurveQH, curveInfo.CurveQE, curveInfo.CurveQP, qhPoints, qePoints, qpPoints, pumpCurve.CoordParas); #endregion #region 曲线编辑 Model.eCurveFitType qhFitType = curveInfo.CurveQH.FitType, qeFitType = Model.eCurveFitType.CubicCurve, qpFitType = Model.eCurveFitType.CubicCurve; if (curveInfo.CurveQE != null) qeFitType = curveInfo.CurveQE.FitType; if (curveInfo.CurveQP != null) qpFitType = curveInfo.CurveQP.FitType; this.curveExpressEditCtrl1.SetBindingData(qhPoints, qePoints, qpPoints, qhFitType, qeFitType, qpFitType); this.curveExpressEditCtrl1.Enabled = true; #endregion } //绑定数据 private void SetBindingData(Model.PumpSpeedCurve pumpSpeedCurve) { if (pumpSpeedCurve == null || pumpSpeedCurve.CurveInfo == null) return; if (pumpSpeedCurve.CurveInfo.CurveQH == null) return; List qhPoints, qePoints = null, qpPoints = null; var curveInfo = pumpSpeedCurve.CurveInfo; if (curveInfo.CurveQH.DefinePoints != null) qhPoints = curveInfo.CurveQH.DefinePoints; else qhPoints = curveInfo.CurveQH.GetFitPoints(12); if (curveInfo.CurveQE != null) if (curveInfo.CurveQE.DefinePoints != null) qePoints = curveInfo.CurveQE.DefinePoints; else qePoints = curveInfo.CurveQE?.GetFitPoints(12); if (curveInfo.CurveQP != null) if (curveInfo.CurveQP?.DefinePoints != null) qpPoints = curveInfo.CurveQP.DefinePoints; else qpPoints = curveInfo.CurveQP?.GetFitPoints(12); #region 曲线 this.curveExpressChart1.SetBindingData(curveInfo.CurveQH, curveInfo.CurveQE, curveInfo.CurveQP, qhPoints, qePoints, qpPoints, pumpSpeedCurve.CoordParas); #endregion #region 曲线编辑 Model.eCurveFitType qhFitType = curveInfo.CurveQH.FitType, qeFitType = Model.eCurveFitType.CubicCurve, qpFitType = Model.eCurveFitType.CubicCurve; if (curveInfo.CurveQE != null) qeFitType = curveInfo.CurveQE.FitType; if (curveInfo.CurveQP != null) qpFitType = curveInfo.CurveQP.FitType; this.curveExpressEditCtrl1.SetBindingData(qhPoints, qePoints, qpPoints, qhFitType, qeFitType, qpFitType); this.curveExpressEditCtrl1.Enabled = true; #endregion } //坐标变换修改 private void CurveExpressChart1_OnCurveCoordinateParasChanged(Model.CurveCoordinateParas obj) { _pumpCurveExMapping.CoordParas = obj; if (!new BLL.PumpCurve().Update(_pumpCurveExMapping)) { XtraMessageBox.Show("修改失败!"); return; } XtraMessageBox.Show("修改成功!"); } //修改泵曲线信息 private void barBtnEditPumpCurveInfo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; WaitFrmHelper.ShowWaitForm(); var dlg = new EditPumpCurveInfoDlg(); dlg.Shown += delegate { WaitFrmHelper.HideWaitForm(); }; dlg.SetBindingData(_pumpCurveExMapping); dlg.ReloadDataEvent += (rhs) => { rhs.UpdateTime = DateTime.Now; var result = new BLL.PumpCurve().Update(rhs); if (result) { _pumpCurveExMapping.Reset(rhs); SetBindingData(_pumpCurveExMapping); } return result; }; dlg.ShowDialog(); } //修改泵曲线名称 private void barBtnEditPumpCurveOtherName_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; WaitFrmHelper.ShowWaitForm(); var dlg = new EditOtherNameDlg(); dlg.Shown += delegate { WaitFrmHelper.HideWaitForm(); }; dlg.SetBindingData(_pumpCurveExMapping.OtherName); dlg.ReloadDataEvent += (rhs) => { var mapping = new BLL.PumpCurveMapping().GetByID(_pumpCurveExMapping.MappingID); mapping.OtherName = rhs; var result = new BLL.PumpCurveMapping().Update(mapping); if (result) { _pumpCurveExMapping.Reset(mapping); this.pumpCurveMappingListCtrl1.UpdateOtherName(rhs); } return result; }; dlg.ShowDialog(); } //设置工作曲线 private void barBtnSetWorkPumpCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; var result = new BLL.PumpCurveMapping().UpdateWorkCurve(_pumpCurveExMapping.MappingID); if (result) { _pumpCurveExMapping.IsWorking = true; this.pumpCurveMappingListCtrl1.UpdateWorkingCurve(); } } //复制并延长曲线 private void barBtnCopyAndExpandCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; var dlg = new CopyAndExpandCurveDlg(); dlg.SetBindingData(_pumpCurveExMapping); dlg.ReloadDataEvent += (otherName, curveExpressGroup) => { var pumpCurve = new Model.PumpCurve(_pumpCurveExMapping); pumpCurve.CurveInfo = curveExpressGroup; pumpCurve.ID = 0; var pumpCurveId = new BLL.PumpCurve().Insert(pumpCurve); if (pumpCurveId < 1) return false; pumpCurve.ID = pumpCurveId; var pumpCurveMapping = new Model.PumpCurveMapping(); pumpCurveMapping.PumpID = _pumpCurveExMapping.PumpID; pumpCurveMapping.CurveID = pumpCurveId; pumpCurveMapping.OtherName = otherName; pumpCurveMapping.IsWorking = false; var pumpCurveMappingId = new BLL.PumpCurveMapping().Insert(pumpCurveMapping); if (pumpCurveMappingId < 1) return false; pumpCurveMapping.ID = pumpCurveMappingId; this.pumpCurveMappingListCtrl1.AddPumpCurveMapping(pumpCurveMapping); return true; }; dlg.ShowDialog(); } //删除曲线 private void barBtnDeleteCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; if (XtraMessageBox.Show("是否删除曲线?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) return; var result = new BLL.PumpCurve().DeleteByID(_pumpCurveExMapping.ID, out string msg); if (!result) { XtraMessageBox.Show("删除失败!"); return; } this.pumpCurveMappingListCtrl1.DeletePumpMapping(_pumpCurveExMapping.MappingID); } //刷新 private void barBtnReload_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.tabPane1.SelectedPage == this.tabNavigationPageCurveEdit) { XtraMessageBox.Show("曲线编辑页面无法刷新!"); return; } InitialDataSource(); } //导出inp文件曲线 private void barBtnExportCrv_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; if (_pumpCurveExMapping.CurveInfo.CurveQH == null && _pumpCurveExMapping.CurveInfo.CurveQE == null) return; ExportCurveHelper.INPFile(_pumpCurveExMapping); } //导出ycm文件 private void barBtnExportYCM_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; if (_pumpCurveExMapping.CurveInfo.CurveQH == null && _pumpCurveExMapping.CurveInfo.CurveQE == null) return; var json = PumpCurveDtoHelper.ExportJson(_pumpCurveExMapping); if (string.IsNullOrEmpty(json)) { XtraMessageBox.Show("无法解析!"); return; } var dlg = new SaveFileDialog(); dlg.Title = "导出 .ycm 文件"; dlg.FileName = $"{_pumpCurveExMapping.CurveCode}.ycm"; dlg.Filter = "ycm (*.ycm)|*.ycm"; if (dlg.ShowDialog() != DialogResult.OK) return; var filePath = dlg.FileName; File.WriteAllText(filePath, json); XtraMessageBox.Show("导出成功!"); } #endregion #region 曲线编辑 //曲线编辑 设置图表坐标 private void barBtnSetCurveEditCoord_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; this.curveExpressEditCtrl1.SetCoordinateByDialog(); } //曲线编辑 取消修改 private void barBtnCancelCurveEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (XtraMessageBox.Show("是否取消修改?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) return; SetBindingData(_pumpCurveExMapping); } //曲线编辑 保存 private void barBtnSaveCurveEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_pumpCurveExMapping == null) return; if (XtraMessageBox.Show("是否保存曲线?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) return; var bol = this.curveExpressEditCtrl1.GetPoints(out List pointsQH, out List pointsQE, out List pointsQP, out Model.eCurveFitType fitTypeQH, out Model.eCurveFitType fitTypeQE, out Model.eCurveFitType fitTypeQP); if (!bol) return; var featCurveExpressGroup = new Model.FeatCurveExpressGroup(); var featCurvePointGroup = new Model.FeatCurvePointGroup(); if (pointsQH != null) { featCurveExpressGroup.CurveQH = new Model.CurveExpress(pointsQH, fitTypeQH, true); featCurvePointGroup.PointQH = pointsQH; } if (pointsQE != null) { featCurveExpressGroup.CurveQE = new Model.CurveExpress(pointsQE, fitTypeQE, true); featCurvePointGroup.PointQE = pointsQE; } if (pointsQP != null) { featCurveExpressGroup.CurveQP = new Model.CurveExpress(pointsQP, fitTypeQP, true); featCurvePointGroup.PointQP = pointsQP; } _pumpCurveExMapping.CurveInfo = featCurveExpressGroup; // _pumpCurveExMapping.PointInfo = featCurvePointGroup; var result = new BLL.PumpCurve().Update(_pumpCurveExMapping); if (!result) { XtraMessageBox.Show("保存失败!"); return; } XtraMessageBox.Show("保存成功!"); } #endregion //选择页变换 private void tabPane1_SelectedPageChanged(object sender, DevExpress.XtraBars.Navigation.SelectedPageChangedEventArgs e) { if (this.tabPane1.SelectedPage == this.tabNavigationPageCurveView) { this.ribbonControl1.SelectedPage = this.ribbonPageCurveMgr; } else if (this.tabPane1.SelectedPage == this.tabNavigationPageCurveEdit) { this.ribbonControl1.SelectedPage = this.ribbonPageCurveEdit; } else if (this.tabPane1.SelectedPage == this.tabNavigationPageOnePoint) { this.ribbonControl1.SelectedPage = this.ribbonPageOnePoint; } else if (this.tabPane1.SelectedPage == this.tabNavigationPageExcel) { this.ribbonControl1.SelectedPage = this.ribbonPageExcel; } else if (this.tabPane1.SelectedPage == this.tabNavigationPageCurveExpress) { this.ribbonControl1.SelectedPage = this.ribbonPageCurveExpress; } else if (this.tabPane1.SelectedPage == this.tabNavigationPagePicture) { this.ribbonControl1.SelectedPage = this.ribbonPagePicture; } } private void barBtnSaveByOnePoint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (XtraMessageBox.Show($"确认导入{_product.Name}?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK) return; var bol = this.importCurveByOnePointCtrl1.GetCurve(out string curveCode, out Model.eCurveSourceFrom eCurveSourceFrom, out Model.FeatCurvePointGroup featCurvePointGroup, out Model.FeatCurveExpressGroup featCurveExpressGroup); if (!bol) { XtraMessageBox.Show("至少录入四个点!"); return; } var pumpCurve = new Model.PumpCurve(); pumpCurve.CurveCode = curveCode; pumpCurve.SourceFrom = eCurveSourceFrom; pumpCurve.CreateMethod = Model.eCurveCreateMethod.单点生成; pumpCurve.CurveInfo = featCurveExpressGroup; // pumpCurve.PointInfo = featCurvePointGroup; pumpCurve.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurve.CreateTime = DateTime.Now; pumpCurve.ID = new BLL.PumpCurve().Insert(pumpCurve); if (pumpCurve.ID > 0) { var pumpCurveMapping = new Model.PumpCurveMapping(); pumpCurveMapping.PumpID = _product.ID; pumpCurveMapping.CurveID = pumpCurve.ID; pumpCurveMapping.OtherName = pumpCurve.CurveCode; pumpCurveMapping.SortCode = 1; pumpCurveMapping.IsWorking = false; pumpCurveMapping.ID = new BLL.PumpCurveMapping().Insert(pumpCurveMapping); if (pumpCurveMapping.ID < 1) { var result = new BLL.PumpCurve().DeleteByID(pumpCurve.ID, out string msg); XtraMessageBox.Show("保存失败!"); return; } this.pumpCurveMappingListCtrl1.AddPumpCurveMapping(pumpCurveMapping); } XtraMessageBox.Show("保存成功!"); } private void barBtnSaveByExcel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (XtraMessageBox.Show($"确认导入{_product.Name}?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK) return; var bol = this.importCurveByExcelCtrl1.GetCurve(out string curveCode, out Model.eCurveSourceFrom eCurveSourceFrom, out Model.FeatCurvePointGroup featCurvePointGroup, out Model.FeatCurveExpressGroup featCurveExpressGroup); if (!bol) { return; } var pumpCurve = new Model.PumpCurve(); pumpCurve.CurveCode = curveCode; pumpCurve.SourceFrom = eCurveSourceFrom; pumpCurve.CreateMethod = Model.eCurveCreateMethod.Excel导入; pumpCurve.CurveInfo = featCurveExpressGroup; // pumpCurve.PointInfo = featCurvePointGroup; pumpCurve.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurve.CreateTime = DateTime.Now; pumpCurve.ID = new BLL.PumpCurve().Insert(pumpCurve); if (pumpCurve.ID > 0) { var pumpCurveMapping = new Model.PumpCurveMapping(); pumpCurveMapping.PumpID = _product.ID; pumpCurveMapping.CurveID = pumpCurve.ID; pumpCurveMapping.OtherName = pumpCurve.CurveCode; pumpCurveMapping.SortCode = 1; pumpCurveMapping.IsWorking = false; pumpCurveMapping.ID = new BLL.PumpCurveMapping().Insert(pumpCurveMapping); if (pumpCurveMapping.ID < 1) { var result = new BLL.PumpCurve().DeleteByID(pumpCurve.ID, out string msg); XtraMessageBox.Show("保存失败!"); return; } this.pumpCurveMappingListCtrl1.AddPumpCurveMapping(pumpCurveMapping); } XtraMessageBox.Show("保存成功!"); } private void barBtnSaveByCurveExpress_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (XtraMessageBox.Show($"确认导入{_product.Name}?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK) return; var bol = this.importCurveByCurveExpressCtrl1.GetCurve(out string curveCode, out Model.eCurveSourceFrom eCurveSourceFrom, out Model.FeatCurvePointGroup featCurvePointGroup, out Model.FeatCurveExpressGroup featCurveExpressGroup); if (!bol) { return; } var pumpCurve = new Model.PumpCurve(); pumpCurve.CurveCode = curveCode; pumpCurve.SourceFrom = eCurveSourceFrom; pumpCurve.CreateMethod = Model.eCurveCreateMethod.曲线表达式; pumpCurve.CurveInfo = featCurveExpressGroup; // pumpCurve.PointInfo = featCurvePointGroup; pumpCurve.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurve.CreateTime = DateTime.Now; pumpCurve.ID = new BLL.PumpCurve().Insert(pumpCurve); if (pumpCurve.ID > 0) { var pumpCurveMapping = new Model.PumpCurveMapping(); pumpCurveMapping.PumpID = _product.ID; pumpCurveMapping.CurveID = pumpCurve.ID; pumpCurveMapping.OtherName = pumpCurve.CurveCode; pumpCurveMapping.SortCode = 1; pumpCurveMapping.IsWorking = false; pumpCurveMapping.ID = new BLL.PumpCurveMapping().Insert(pumpCurveMapping); if (pumpCurveMapping.ID < 1) { var result = new BLL.PumpCurve().DeleteByID(pumpCurve.ID, out string msg); XtraMessageBox.Show("保存失败!"); return; } this.pumpCurveMappingListCtrl1.AddPumpCurveMapping(pumpCurveMapping); } XtraMessageBox.Show("保存成功!"); } private void barBtnSaveByPicture_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (XtraMessageBox.Show($"确认导入{_product.Name}?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK) return; var bol = this.importCurveByPictureCtrl1.GetCurve(out string curveCode, out Model.eCurveSourceFrom eCurveSourceFrom, out Model.FeatCurvePointGroup featCurvePointGroup, out Model.FeatCurveExpressGroup featCurveExpressGroup); if (!bol) { return; } var pumpCurve = new Model.PumpCurve(); pumpCurve.CurveCode = curveCode; pumpCurve.SourceFrom = eCurveSourceFrom; pumpCurve.CreateMethod = Model.eCurveCreateMethod.图片拟合; pumpCurve.CurveInfo = featCurveExpressGroup; // pumpCurve.PointInfo = featCurvePointGroup; pumpCurve.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurve.CreateTime = DateTime.Now; pumpCurve.ID = new BLL.PumpCurve().Insert(pumpCurve); if (pumpCurve.ID > 0) { var pumpCurveMapping = new Model.PumpCurveMapping(); pumpCurveMapping.PumpID = _product.ID; pumpCurveMapping.CurveID = pumpCurve.ID; pumpCurveMapping.OtherName = pumpCurve.CurveCode; pumpCurveMapping.SortCode = 1; pumpCurveMapping.IsWorking = false; pumpCurveMapping.ID = new BLL.PumpCurveMapping().Insert(pumpCurveMapping); if (pumpCurveMapping.ID < 1) { var result = new BLL.PumpCurve().DeleteByID(pumpCurve.ID, out string msg); XtraMessageBox.Show("保存失败!"); return; } this.pumpCurveMappingListCtrl1.AddPumpCurveMapping(pumpCurveMapping); } XtraMessageBox.Show("保存成功!"); } } }