using DevExpress.XtraEditors; using IStation.WinFrmUI.Curve; using System; using System.ComponentModel; using System.IO; using System.Linq; namespace IStation.WinFrmUI.Basic { /// /// /// public partial class PumpCurveTreeListCtrl : XtraUserControl { public PumpCurveTreeListCtrl() { InitializeComponent(); this.treeList1.InitialDefaultSettings(); this.treeList1.SelectImageList = ImageLib.Lib; this.layoutControl1.SetupLayoutControl(); this.stationTreeListLookUpEdit1.SelectedChangedEvent += StationTreeListLookUpEdit1_SelectedChangedEvent; ; } public class CurrentViewModel { public CurrentViewModel() { } public CurrentViewModel(Model.Equipment equipment) { this.ID = equipment.ID.ToString(); this.Name = equipment.Name; this.ParentID = equipment.BelongID.ToString(); this.ObjectType = IStation.ObjectType.Equipment; this.Model = equipment; this.IsGroup = true; this.ImageIndex = ImageLib.Pump; } public CurrentViewModel(Model.PumpCurveMapping mapping) { this.ID = $"{mapping.CurveID}-{mapping.ID}"; this.Name = mapping.OtherName; this.ParentID = mapping.PumpID.ToString(); this.ObjectType = IStation.ObjectType.PumpCurveMapping; this.Model = mapping; this.IsGroup = false; this.IsWorkCurve = mapping.IsWorking; this.Reset(this.IsWorkCurve); } public CurrentViewModel(long mappingId, Model.PumpSpeedCurve curve) { this.ID = curve.ID.ToString(); this.Name = curve.HZ + "hz"; this.ParentID = $"{curve.PumpCurveID}-{mappingId}"; this.ObjectType = IStation.ObjectType.PumpSpeedCurve; this.Model = curve; this.IsGroup = false; this.ImageIndex = ImageLib.PumpSpeedCurve; } public string ID { get; set; } public string ParentID { get; set; } public string Name { get; set; } public string ObjectType { get; set; } public object Model { get; set; } public bool IsGroup { get; set; } public int ImageIndex { get; set; } public bool IsWorkCurve { get; set; } public void Reset(bool isWorking) { if (this.ObjectType == IStation.ObjectType.PumpCurveMapping) { this.IsWorkCurve = isWorking; this.ImageIndex = this.IsWorkCurve ? ImageLib.WorkPumpCurve : ImageLib.PumpCurve; } } } /// /// 泵站改变事件 /// public event Action StationChangedEvent; /// /// 聚焦改变事件 /// public event Action FocusedChangedEvent; private BLL.Equipment _bll = new BLL.Equipment(); private BindingList _allBindingList = null;//所有绑定列表 private Model.Station _station = null; /// /// 绑定数据 /// public void SetBindingData() { this.stationTreeListLookUpEdit1.SetBindingData(); } /// /// 绑定数据 /// public void Clear() { _allBindingList = new BindingList(); this.treeList1.DataSource = _allBindingList; this.FocusedChangedEvent?.Invoke(string.Empty, null); } //泵站变换 private void StationTreeListLookUpEdit1_SelectedChangedEvent(Model.Station obj) { _station = obj; this.StationChangedEvent?.Invoke(obj); SetBindingData(obj); } /// /// 绑定数据 /// private void SetBindingData(Model.Station model) { WaitFrmHelper.ShowWaitForm("正在加载数据..."); _allBindingList = new BindingList(); if (model != null) { var pumps = _bll.GetPumpListByBelongTypeAndBelongID(IStation.ObjectType.Station, model.ID); if (pumps != null && pumps.Any()) { var bllMapping = new BLL.PumpCurveMapping(); var bllSpeedCurve = new BLL.PumpSpeedCurve(); foreach (var pump in pumps) { _allBindingList.Add(new CurrentViewModel(pump)); var mappings = bllMapping.GetByPumpID(pump.ID); if (mappings == null || mappings.Count < 1) continue; foreach (var mapping in mappings) { _allBindingList.Add(new CurrentViewModel(mapping)); var speedCurves = bllSpeedCurve.GetByPumpCurveID(mapping.CurveID); if (speedCurves == null || speedCurves.Count < 1) continue; foreach (var speedCurve in speedCurves) { _allBindingList.Add(new CurrentViewModel(mapping.ID, speedCurve)); } } } } } this.treeList1.DataSource = _allBindingList; this.treeList1.RefreshDataSource(); var firstNode = _allBindingList.Where(x => !x.IsGroup).FirstOrDefault(); if (firstNode != null) { this.treeList1.FocusedNode = this.treeList1.FindNodeByKeyID(firstNode.ID); } WaitFrmHelper.HideWaitForm(); } /// /// 修改曲线映射别名 /// public void UpdateOtherName(string name) { var row = this.treeList1.GetCurrentViewModel(_allBindingList); if (row == null) return; row.Name = name; this.treeList1.RefreshNode(this.treeList1.FocusedNode); } /// /// 修改工作曲线 /// public void UpdateWorkingCurve() { var row = this.treeList1.GetCurrentViewModel(_allBindingList); if (row == null) return; var existWorkPumpCurve = _allBindingList.Where(x => x.ParentID == row.ParentID && x.ID != row.ID && x.IsWorkCurve).FirstOrDefault(); if (existWorkPumpCurve != null) { existWorkPumpCurve.Reset(false); } row.Reset(true); this.treeList1.RefreshDataSource(); } /// /// 删除 /// public void DeletePumpMapping(long id, long mappingId) { var node = this.treeList1.FindNodeByKeyID($"{id}-{mappingId}"); if (node == null) return; if (this.treeList1.GetDataRecordByNode(node) is CurrentViewModel vm) { _allBindingList.Remove(vm); var children = _allBindingList.Where(x => x.ParentID == vm.ID).ToList(); if (children != null && children.Any()) { foreach (var item in children) { _allBindingList.Remove(item); } } this.treeList1.RefreshDataSource(); } } private CurrentViewModel _rightClickVm = null; #region TreeList //聚焦前 private void treeList1_BeforeFocusNode(object sender, DevExpress.XtraTreeList.BeforeFocusNodeEventArgs e) { var vm = this.treeList1.GetDataRecordByNode(e.Node) as CurrentViewModel; if (vm == null) return; if (vm.IsGroup) { e.CanFocus = false; } } //聚焦改变 private void treeList1_FocusedNodeChanged(object sender, DevExpress.XtraTreeList.FocusedNodeChangedEventArgs e) { var vm = this.treeList1.GetCurrentViewModel(_allBindingList); if (vm == null || vm.IsGroup) return; this.FocusedChangedEvent?.Invoke(vm.ObjectType, vm.Model); } //鼠标点击 private void treeList1_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Right) { var hitInfo = this.treeList1.CalcHitInfo(e.Location); _rightClickVm = this.treeList1.GetDataRecordByNode(hitInfo.Node) as CurrentViewModel; if (_rightClickVm == null) return; if (_rightClickVm.IsGroup) { popMenu.ShowPopup(MousePosition); } else if (_rightClickVm.ObjectType == IStation.ObjectType.PumpCurveMapping) { var mapping = _rightClickVm.Model as Model.PumpCurveMapping; var exist = new BLL.PumpSpeedCurve().IsExistByPumpCurveID(mapping.CurveID); if (!exist) return; popCurve.ShowPopup(MousePosition); } } } #endregion #region 右键菜单 //泵详细信息 private void barBtnPumpDetail_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var vm = _rightClickVm; if (vm == null || !vm.IsGroup) return; var pump = vm.Model as Model.Equipment; var dlg = new PumpInfoDlg(); dlg.SetBindingData(pump); dlg.ShowDialog(); } //表格导入 private void barBtnImportByExcel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var vm = _rightClickVm; if (vm == null || !vm.IsGroup) return; var pump = vm.Model as Model.Equipment; var dlg = new ImportCurveByExcelDlg(); dlg.ReloadDataEvent += (curveCode, eCurveSourceFrom, featCurveExpressGroup) => { var pumpCurveExMapping = new Model.PumpCurveExMapping(); pumpCurveExMapping.CurveCode = curveCode; pumpCurveExMapping.SourceFrom = eCurveSourceFrom; pumpCurveExMapping.CreateMethod = Model.eCurveCreateMethod.Excel导入; pumpCurveExMapping.CurveInfo = featCurveExpressGroup; pumpCurveExMapping.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurveExMapping.CreateTime = DateTime.Now; pumpCurveExMapping.PumpID = pump.ID; pumpCurveExMapping.OtherName = curveCode; pumpCurveExMapping.IsWorking = false; var mappingId = new BLL.PumpCurve().InsertEx(pumpCurveExMapping); if (mappingId < 1) { return false; } var mapping = new BLL.PumpCurveMapping().GetByID(mappingId); _allBindingList.Add(new CurrentViewModel(mapping)); this.treeList1.FocusedNode = this.treeList1.FocusedNode; return true; }; dlg.ShowDialog(); } //图片导入 private void barBtnImportByImage_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var vm = _rightClickVm; if (vm == null || !vm.IsGroup) return; var pump = vm.Model as Model.Equipment; var dlg = new ImportCurveByPictureDlg(); dlg.ReloadDataEvent += (curveCode, eCurveSourceFrom, featCurveExpressGroup) => { var pumpCurveExMapping = new Model.PumpCurveExMapping(); pumpCurveExMapping.CurveCode = curveCode; pumpCurveExMapping.SourceFrom = eCurveSourceFrom; pumpCurveExMapping.CreateMethod = Model.eCurveCreateMethod.图片拟合; pumpCurveExMapping.CurveInfo = featCurveExpressGroup; pumpCurveExMapping.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurveExMapping.CreateTime = DateTime.Now; pumpCurveExMapping.PumpID = pump.ID; pumpCurveExMapping.OtherName = curveCode; pumpCurveExMapping.IsWorking = false; var mappingId = new BLL.PumpCurve().InsertEx(pumpCurveExMapping); if (mappingId < 1) { return false; } var mapping = new BLL.PumpCurveMapping().GetByID(mappingId); _allBindingList.Add(new CurrentViewModel(mapping)); this.treeList1.FocusedNode = this.treeList1.FocusedNode; return true; }; dlg.ShowDialog(); } //单点导入 private void barBtnImportByOnePoint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var vm = _rightClickVm; if (vm == null || !vm.IsGroup) return; var pump = vm.Model as Model.Equipment; var dlg = new ImportCurveByOnePointDlg(); dlg.ReloadDataEvent += (curveCode, eCurveSourceFrom, featCurveExpressGroup) => { var pumpCurveExMapping = new Model.PumpCurveExMapping(); pumpCurveExMapping.CurveCode = curveCode; pumpCurveExMapping.SourceFrom = eCurveSourceFrom; pumpCurveExMapping.CreateMethod = Model.eCurveCreateMethod.单点生成; pumpCurveExMapping.CurveInfo = featCurveExpressGroup; pumpCurveExMapping.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurveExMapping.CreateTime = DateTime.Now; pumpCurveExMapping.PumpID = pump.ID; pumpCurveExMapping.OtherName = curveCode; pumpCurveExMapping.IsWorking = false; var mappingId = new BLL.PumpCurve().InsertEx(pumpCurveExMapping); if (mappingId < 1) { return false; } var mapping = new BLL.PumpCurveMapping().GetByID(mappingId); _allBindingList.Add(new CurrentViewModel(mapping)); this.treeList1.FocusedNode = this.treeList1.FocusedNode; return true; }; dlg.ShowDialog(); } //公式导入 private void barBtnImportByExpress_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var vm = _rightClickVm; if (vm == null || !vm.IsGroup) return; var pump = vm.Model as Model.Equipment; var dlg = new ImportCurveByCurveExpressDlg(); dlg.ReloadDataEvent += (curveCode, eCurveSourceFrom, featCurveExpressGroup) => { var pumpCurveExMapping = new Model.PumpCurveExMapping(); pumpCurveExMapping.CurveCode = curveCode; pumpCurveExMapping.SourceFrom = eCurveSourceFrom; pumpCurveExMapping.CreateMethod = Model.eCurveCreateMethod.曲线表达式; pumpCurveExMapping.CurveInfo = featCurveExpressGroup; pumpCurveExMapping.ReliabilityStatus = Model.PumpCurve.eReliabilityStatus.Normal; pumpCurveExMapping.CreateTime = DateTime.Now; pumpCurveExMapping.PumpID = pump.ID; pumpCurveExMapping.OtherName = curveCode; pumpCurveExMapping.IsWorking = false; var mappingId = new BLL.PumpCurve().InsertEx(pumpCurveExMapping); if (mappingId < 1) { return false; } var mapping = new BLL.PumpCurveMapping().GetByID(mappingId); _allBindingList.Add(new CurrentViewModel(mapping)); this.treeList1.FocusedNode = this.treeList1.FocusedNode; return true; }; dlg.ShowDialog(); } //查看 private void barBtnMultiCurveView_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var mapping = _rightClickVm.Model as Model.PumpCurveMapping; var model = new BLL.PumpCurve().GetExMappingByID(mapping.PumpID, mapping.CurveID); if (model == null) return; var dlg = new MultiCurveDlg(); dlg.SetBindingData(model); dlg.ShowDialog(); } #endregion #region 菜单事件 //全部展开 private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.ExpandAll(); } //全部折叠 private void barBtnCollapseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.CollapseAll(); } //检索 private void barCkSearch_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.barCkSearch.Checked) this.treeList1.ShowFindPanel(); else this.treeList1.HideFindPanel(); } #endregion private void barExportInp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_station == null) return; var path = Path.Combine(Settings.File.RootDirectory, "陈行", _station.Name + "_inp"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var pumps = new BLL.Equipment().GetPumpListByBelongTypeAndBelongID(IStation.ObjectType.Station, _station.ID); foreach (var pump in pumps) { var curve = new BLL.PumpCurve().GetDefaultWorkingByPumpID(pump.ID); if (curve == null) continue; var fitPointsQH = curve.CurveInfo.CurveQH.GetFitPoints(100); var fitPointsQE = curve.CurveInfo.CurveQE.GetFitPoints(100); var curveQH = curve.CurveInfo.CurveQH; var curveQE = curve.CurveInfo.CurveQE; var filePath = path + "\\" + pump.Name + ".crv"; // ExportInpHelper.INPDefaultFile(filePath, pump.Name + "-" + curve.SourceFrom.GetDisplayText(), curveQH, curveQE); ExportCurveHelper.INPFile(filePath, curveQH, curveQE,100); } XtraMessageBox.Show("over"); } } }