using DevExpress.Utils.Extensions;
|
using DevExpress.Utils.Svg;
|
using Yw.DAL.Basic;
|
using Yw.Vmo;
|
|
namespace HStation.WinFrmUI
|
{
|
public partial class SimulationFunctionCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public SimulationFunctionCtrl()
|
{
|
InitializeComponent();
|
this.layoutControl1.SetupLayoutControl();
|
}
|
|
/// <summary>
|
/// 显示项目站信息事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> ShowProjectSiteInfoEvent;
|
/// <summary>
|
/// 显示项目站模拟事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent;
|
/// <summary>
|
/// 显示项目站工况事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent;
|
/// <summary>
|
/// 项目站工况选择改变事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
|
/// <summary>
|
/// 项目站工况更新事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo> ProjectSiteWorkingUpdateEvent;
|
/// <summary>
|
/// 项目站工况移除事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo> ProjectSiteWorkingRemoveEvent;
|
/// <summary>
|
/// 创建项目站方案事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> CreateProjectSiteSchemeEvent;
|
|
private XhsProjectVmo _project = null;//项目
|
private XhsProjectSiteVmo _projectSite = null;//项目站
|
private Yw.Model.HydroModelInfo _hydroInfo = null;//模型信息
|
private Dictionary<HydroWorkingVmo, bool> _allWorkingCheckedListDict = null;//所有工况选择列表字典
|
private Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo> _allSchemeHydroInfoDict = null;//所有方案水力信息列表
|
private Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>> _allSchemeWorkingCheckedListDict = null;//所有方案工况选择列表字典
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public async Task SetBindingData(XhsProjectVmo project)
|
{
|
if (project == null)
|
{
|
return;
|
}
|
_project = project;
|
var overlay = this.ShowOverlay();
|
_projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
|
var relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
|
if (relation == null)
|
{
|
return;
|
}
|
var allWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(relation.ModelID);
|
allWorkingList?.ForEach(x =>
|
{
|
AppendWorking(null, x);
|
});
|
var allSchemeList = await BLLFactory<HStation.BLL.XhsScheme>.Instance.GetBySiteID(_projectSite.ID);
|
allSchemeList?.ForEach(async x =>
|
{
|
AppendScheme(x);
|
var schemeRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, x.ID, HStation.Xhs.Purpose.Simulation);
|
if (schemeRelation != null)
|
{
|
var allSchemeWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(schemeRelation.ModelID);
|
allSchemeWorkingList?.ForEach(y =>
|
{
|
AppendWorking(x, y);
|
});
|
}
|
});
|
await ShowInfo();
|
overlay.Close();
|
}
|
|
#region 通用方法
|
|
/// <summary>
|
/// 获取水力信息
|
/// UseCache 是否使用缓存
|
/// </summary>
|
public async Task<Yw.Model.HydroModelInfo> GetHydroInfo(XhsSchemeVmo scheme, bool useCache)
|
{
|
Yw.Model.HydroModelInfo hydroInfo = null;
|
if (!useCache)
|
{
|
hydroInfo = await GetHydroInfo(scheme);
|
if (hydroInfo == null)
|
{
|
return default;
|
}
|
}
|
|
if (scheme == null)
|
{
|
if (hydroInfo == null)
|
{
|
if (_hydroInfo == null)
|
{
|
_hydroInfo = await GetHydroInfo(null);
|
}
|
return _hydroInfo;
|
}
|
_hydroInfo = hydroInfo;
|
return _hydroInfo;
|
}
|
|
if (_allSchemeHydroInfoDict == null)
|
{
|
_allSchemeHydroInfoDict = new Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
|
}
|
|
if (hydroInfo == null)
|
{
|
if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
|
{
|
hydroInfo = await GetHydroInfo(scheme);
|
_allSchemeHydroInfoDict.Add(scheme, hydroInfo);
|
return hydroInfo;
|
}
|
}
|
|
if (_allSchemeHydroInfoDict.ContainsKey(scheme))
|
{
|
_allSchemeHydroInfoDict[scheme] = hydroInfo;
|
}
|
else
|
{
|
_allSchemeHydroInfoDict.Add(scheme, hydroInfo);
|
}
|
|
return hydroInfo;
|
}
|
|
//获取水力信息
|
private async Task<Yw.Model.HydroModelInfo> GetHydroInfo(XhsSchemeVmo scheme)
|
{
|
if (_project == null)
|
{
|
return default;
|
}
|
if (_projectSite == null)
|
{
|
return default;
|
}
|
|
HydroModelRelationVmo relation = null;
|
if (scheme == null)
|
{
|
relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
|
}
|
else
|
{
|
relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation);
|
}
|
if (relation == null)
|
{
|
return default;
|
}
|
var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID);
|
return hydroInfo;
|
}
|
|
/// <summary>
|
/// 添加方案
|
/// </summary>
|
public void AppendScheme(XhsSchemeVmo scheme)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (scheme == null)
|
{
|
return;
|
}
|
|
var elementScheme = new DevExpress.XtraBars.Navigation.AccordionControlElement();
|
elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
|
elementScheme.Text = scheme.Name;
|
elementScheme.Hint = scheme.Description;
|
elementScheme.Tag = scheme;
|
elementScheme.ImageOptions.ImageIndex = 3;
|
elementScheme.Click += async (sender, e) =>
|
{
|
var hydroInfo = await GetHydroInfo(scheme, true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
Dictionary<HydroWorkingVmo, bool> dict = null;
|
if (_allSchemeWorkingCheckedListDict != null)
|
{
|
if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
|
{
|
dict = _allSchemeWorkingCheckedListDict[scheme];
|
}
|
}
|
this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, dict, this.svgImg32[3]);
|
};
|
this.elementProjectSiteSchemeList.Elements.Add(elementScheme);
|
this.elementProjectSiteSchemeList.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
|
if (_allSchemeHydroInfoDict == null)
|
{
|
_allSchemeHydroInfoDict = new Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
|
}
|
if (_allSchemeWorkingCheckedListDict == null)
|
{
|
_allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
|
}
|
if (!_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
|
{
|
_allSchemeWorkingCheckedListDict.Add(scheme, new Dictionary<HydroWorkingVmo, bool>());
|
}
|
}
|
|
/// <summary>
|
/// 添加工况
|
/// 纯添加,不会触发事件
|
/// </summary>
|
public void AppendWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
if (scheme == null)
|
{
|
var ckEdit = new CheckEdit();
|
ckEdit.Properties.AutoWidth = true;
|
ckEdit.Properties.Caption = string.Empty;
|
ckEdit.Checked = false;
|
ckEdit.CheckedChanged += (sender, e) =>
|
{
|
if (_allWorkingCheckedListDict != null)
|
{
|
if (_allWorkingCheckedListDict.ContainsKey(working))
|
{
|
_allWorkingCheckedListDict[working] = ckEdit.Checked;
|
}
|
}
|
this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, null, working, ckEdit.Checked);
|
};
|
this.accordionControl1.Controls.Add(ckEdit);
|
var elementWorking = new DevExpress.XtraBars.Navigation.AccordionControlElement();
|
elementWorking.HeaderControl = ckEdit;
|
elementWorking.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
|
elementWorking.Text = working.Name;
|
elementWorking.Hint = working.Description;
|
elementWorking.Tag = working;
|
elementWorking.Click += async (sender, e) =>
|
{
|
var hydroInfo = await GetHydroInfo(null, true);
|
this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, null, hydroInfo, working, this.svgImg32[4]);
|
};
|
this.elementProjectSiteSimulation.Elements.Add(elementWorking);
|
this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
|
if (_allWorkingCheckedListDict == null)
|
{
|
_allWorkingCheckedListDict = new Dictionary<HydroWorkingVmo, bool>();
|
}
|
if (!_allWorkingCheckedListDict.ContainsKey(working))
|
{
|
_allWorkingCheckedListDict.Add(working, false);
|
}
|
}
|
else
|
{
|
var elementScheme = this.elementProjectSiteSchemeList.Elements
|
.FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
|
if (elementScheme == null)
|
{
|
return;
|
}
|
var ckEdit = new CheckEdit();
|
ckEdit.Properties.AutoWidth = true;
|
ckEdit.Properties.Caption = string.Empty;
|
ckEdit.Checked = false;
|
ckEdit.CheckedChanged += (sender, e) =>
|
{
|
if (_allSchemeWorkingCheckedListDict != null)
|
{
|
if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
|
{
|
var workingCheckedDict = _allSchemeWorkingCheckedListDict[scheme];
|
if (workingCheckedDict.ContainsKey(working))
|
{
|
workingCheckedDict[working] = ckEdit.Checked;
|
}
|
}
|
}
|
this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, scheme, working, ckEdit.Checked);
|
};
|
this.accordionControl1.Controls.Add(ckEdit);
|
var elementWorking = new DevExpress.XtraBars.Navigation.AccordionControlElement();
|
elementWorking.HeaderControl = ckEdit;
|
elementWorking.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
|
elementWorking.Text = working.Name;
|
elementWorking.Hint = working.Description;
|
elementWorking.Tag = working;
|
elementWorking.Click += async (sender, e) =>
|
{
|
var hydroInfo = await GetHydroInfo(scheme, true);
|
this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]);
|
};
|
elementScheme.Elements.Add(elementWorking);
|
elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
|
if (_allSchemeWorkingCheckedListDict == null)
|
{
|
_allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
|
}
|
if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
|
{
|
var workingCheckedDict = _allSchemeWorkingCheckedListDict[scheme];
|
if (workingCheckedDict != null)
|
{
|
if (!workingCheckedDict.ContainsKey(working))
|
{
|
workingCheckedDict.Add(working, false);
|
}
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新工况
|
/// 更新,会触发更新事件
|
/// </summary>
|
public void UpdateWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
|
if (scheme == null)
|
{
|
var element = this.elementProjectSiteSimulation.Elements.
|
Where(x => (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == working.ID).FirstOrDefault();
|
if (element == null)
|
{
|
return;
|
}
|
element.Tag = working;
|
element.Text = working.Name;
|
element.Hint = working.Description;
|
if (_allWorkingCheckedListDict != null)
|
{
|
var key = _allWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == working.ID);
|
if (key != null)
|
{
|
var hasChecked = _allWorkingCheckedListDict[key];
|
_allWorkingCheckedListDict.Remove(key);
|
_allWorkingCheckedListDict.Add(key, hasChecked);
|
}
|
}
|
}
|
else
|
{
|
var elementScheme = this.elementProjectSiteSchemeList.Elements
|
.FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
|
if (elementScheme == null)
|
{
|
return;
|
}
|
var element = elementScheme.Elements.
|
Where(x => (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == working.ID).FirstOrDefault();
|
if (element == null)
|
{
|
return;
|
}
|
element.Tag = working;
|
element.Text = working.Name;
|
element.Hint = working.Description;
|
if (_allSchemeWorkingCheckedListDict != null)
|
{
|
var schemeKey = _allSchemeWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == scheme.ID);
|
if (schemeKey != null)
|
{
|
var workingCheckedDict = _allSchemeWorkingCheckedListDict[schemeKey];
|
if (workingCheckedDict != null)
|
{
|
var workingKey = workingCheckedDict.Keys.FirstOrDefault(x => x.ID == working.ID);
|
if (workingKey != null)
|
{
|
var hasChecked = workingCheckedDict[workingKey];
|
workingCheckedDict.Remove(workingKey);
|
workingCheckedDict.Add(working, hasChecked);
|
}
|
}
|
}
|
}
|
}
|
|
this.ProjectSiteWorkingUpdateEvent?.Invoke(_project, _projectSite, scheme, working);
|
}
|
|
/// <summary>
|
/// 移除工况
|
/// 移除,会触发移除事件
|
/// </summary>
|
public void RemoveWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
if (scheme == null)
|
{
|
var element = this.elementProjectSiteSimulation.Elements.
|
Where(x => (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == working.ID).FirstOrDefault();
|
if (element == null)
|
{
|
return;
|
}
|
if (element.HeaderControl != null)
|
{
|
this.accordionControl1.Controls.Remove(element.HeaderControl);
|
}
|
this.elementProjectSiteSimulation.Elements.Remove(element);
|
if (this.elementProjectSiteSimulation.Elements.Count < 1)
|
{
|
this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
|
}
|
if (_allWorkingCheckedListDict != null)
|
{
|
var key = _allWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == working.ID);
|
if (key != null)
|
{
|
_allWorkingCheckedListDict.Remove(key);
|
}
|
}
|
}
|
else
|
{
|
var elementScheme = this.elementProjectSiteSchemeList.Elements
|
.FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
|
if (elementScheme == null)
|
{
|
return;
|
}
|
var element = elementScheme.Elements.
|
Where(x => (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == working.ID).FirstOrDefault();
|
if (element == null)
|
{
|
return;
|
}
|
if (element.HeaderControl != null)
|
{
|
this.accordionControl1.Controls.Remove(element.HeaderControl);
|
}
|
elementScheme.Elements.Remove(element);
|
if (elementScheme.Elements.Count < 1)
|
{
|
elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
|
}
|
if (_allSchemeWorkingCheckedListDict != null)
|
{
|
var schemeKey = _allSchemeWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == scheme.ID);
|
if (schemeKey != null)
|
{
|
var workingCheckedDict = _allSchemeWorkingCheckedListDict[schemeKey];
|
if (workingCheckedDict != null)
|
{
|
var workingKey = workingCheckedDict.Keys.FirstOrDefault(x => x.ID == working.ID);
|
if (workingKey != null)
|
{
|
workingCheckedDict.Remove(workingKey);
|
}
|
}
|
}
|
}
|
}
|
|
this.ProjectSiteWorkingRemoveEvent?.Invoke(_project, _projectSite, scheme, working);
|
}
|
|
//显示信息
|
private async Task ShowInfo()
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(null, true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
this.ShowProjectSiteInfoEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[0]);
|
}
|
|
#endregion
|
|
//项目站概况
|
private async void elementProjectSiteInfo_Click(object sender, EventArgs e)
|
{
|
await ShowInfo();
|
}
|
|
//项目站水力模拟
|
private async void elementProjectSiteSimulation_Click(object sender, EventArgs e)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(null, true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, null, hydroInfo, _allWorkingCheckedListDict, this.svgImg32[1]);
|
}
|
|
//创建项目站方案
|
private async void accordionControl1_ContextButtonClick(object sender, DevExpress.Utils.ContextItemClickEventArgs e)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var element = e.DataItem as DevExpress.XtraBars.Navigation.AccordionControlElement;
|
if (element != this.elementProjectSiteSchemeList)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(null, true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]);
|
}
|
|
|
|
|
}
|
}
|