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");
}
}
}