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, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent;
|
/// <summary>
|
/// 显示项目站工况事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent;
|
/// <summary>
|
/// 项目站工况选择改变事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
|
/// <summary>
|
/// 项目站工况更新事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo> ProjectSiteWorkingUpdateEvent;
|
/// <summary>
|
/// 项目站工况移除事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo> ProjectSiteWorkingRemoveEvent;
|
/// <summary>
|
/// 显示项目站方案事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSchemeEvent;
|
/// <summary>
|
/// 显示项目站方案工况事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteSchemeWorkingEvent;
|
/// <summary>
|
/// 项目站方案工况选择工况事件
|
/// </summary>
|
public event Action<XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteSchemeWorkingCheckedEvent;
|
/// <summary>
|
/// 项目站方案工况更新事件
|
/// </summary>
|
public event Action<XhsSchemeVmo, HydroWorkingVmo> ProjectSiteSchemeWorkingUpdateEvent;
|
/// <summary>
|
/// 项目站方案工况移除事件
|
/// </summary>
|
public event Action<XhsSchemeVmo, HydroWorkingVmo> ProjectSiteSchemeWorkingRemoveEvent;
|
|
|
|
/// <summary>
|
/// 创建项目站方案事件
|
/// </summary>
|
public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> CreateProjectSiteSchemeEvent;
|
|
/// <summary>
|
/// 比对项目工况事件
|
/// </summary>
|
public event Action<SvgImage> CompareProjectWorkingEvent;
|
|
|
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);
|
if (allWorkingList != null && allWorkingList.Count > 0)
|
{
|
_allWorkingCheckedListDict = new Dictionary<HydroWorkingVmo, bool>();
|
foreach (var working in allWorkingList)
|
{
|
_allWorkingCheckedListDict.Add(working, false);
|
AppendWorking(working);
|
}
|
}
|
var allSchemeList = await BLLFactory<HStation.BLL.XhsScheme>.Instance.GetBySiteID(_projectSite.ID);
|
if (allSchemeList != null && allSchemeList.Count > 0)
|
{
|
_allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
|
foreach (var scheme in allSchemeList)
|
{
|
AppendScheme(scheme);
|
var schemeRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation);
|
if (schemeRelation != null)
|
{
|
var allSchemeWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(schemeRelation.ModelID);
|
if (allSchemeWorkingList != null && allSchemeWorkingList.Count > 0)
|
{
|
_allSchemeWorkingCheckedListDict.Add(scheme, new Dictionary<HydroWorkingVmo, bool>());
|
foreach (var schemeWorking in allSchemeWorkingList)
|
{
|
_allSchemeWorkingCheckedListDict[scheme].Add(schemeWorking, false);
|
AppendSchemeWorking(scheme, schemeWorking);
|
}
|
}
|
}
|
}
|
}
|
overlay.Close();
|
}
|
|
#region 获取水力信息
|
|
/// <summary>
|
/// 获取水力信息
|
/// UseCache 是否使用缓存
|
/// </summary>
|
public async Task<Yw.Model.HydroModelInfo> GetHydroInfo(bool useCache)
|
{
|
if (!useCache)
|
{
|
_hydroInfo = await GetHydroInfo();
|
if (_hydroInfo == null)
|
{
|
return null;
|
}
|
}
|
if (_hydroInfo == null)
|
{
|
_hydroInfo = await GetHydroInfo();
|
}
|
return _hydroInfo;
|
}
|
|
//获取水力信息
|
private async Task<Yw.Model.HydroModelInfo> GetHydroInfo()
|
{
|
if (_project == null)
|
{
|
return default;
|
}
|
if (_projectSite == null)
|
{
|
return default;
|
}
|
var relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
|
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
|
if (relation == null)
|
{
|
return null;
|
}
|
var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID);
|
return hydroInfo;
|
}
|
|
#endregion
|
|
#region 获取方案水力信息
|
|
/// <summary>
|
/// 获取方案水力信息
|
/// UseCache 是否使用缓存
|
/// </summary>
|
public async Task<Yw.Model.HydroModelInfo> GetSchemeHydroInfo(XhsSchemeVmo scheme, bool useCache)
|
{
|
if (_project == null)
|
{
|
return default;
|
}
|
if (_projectSite == null)
|
{
|
return default;
|
}
|
if (scheme == null)
|
{
|
return default;
|
}
|
if (!useCache)
|
{
|
var hydroInfo = await GetSchemeHydroInfo(scheme);
|
if (hydroInfo == null)
|
{
|
return null;
|
}
|
if (_allSchemeHydroInfoDict == null)
|
{
|
_allSchemeHydroInfoDict = new Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
|
}
|
if (_allSchemeHydroInfoDict.ContainsKey(scheme))
|
{
|
_allSchemeHydroInfoDict[scheme] = hydroInfo;
|
}
|
else
|
{
|
_allSchemeHydroInfoDict.Add(scheme, hydroInfo);
|
}
|
return hydroInfo;
|
}
|
if (_allSchemeHydroInfoDict == null)
|
{
|
_allSchemeHydroInfoDict = new Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
|
}
|
if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
|
{
|
var hydroInfo = await GetSchemeHydroInfo(scheme);
|
_allSchemeHydroInfoDict.Add(scheme, hydroInfo);
|
return hydroInfo;
|
}
|
return _allSchemeHydroInfoDict[scheme];
|
}
|
|
//获取方案水力信息
|
private async Task<Yw.Model.HydroModelInfo> GetSchemeHydroInfo(XhsSchemeVmo scheme)
|
{
|
if (_project == null)
|
{
|
return default;
|
}
|
if (_projectSite == null)
|
{
|
return default;
|
}
|
if (scheme == null)
|
{
|
return default;
|
}
|
var 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;
|
}
|
|
#endregion
|
|
#region 项目站工况方法
|
|
/// <summary>
|
/// 添加工况
|
/// 纯添加,不会触发事件
|
/// </summary>
|
public void AppendWorking(Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
|
var ckEdit = new CheckEdit();
|
ckEdit.Properties.AutoWidth = true;
|
ckEdit.Properties.Caption = string.Empty;
|
ckEdit.CheckedChanged += async (sender, e) =>
|
{
|
if (_allWorkingCheckedListDict == null)
|
{
|
_allWorkingCheckedListDict = new Dictionary<HydroWorkingVmo, bool>();
|
}
|
if (_allWorkingCheckedListDict.ContainsKey(working))
|
{
|
_allWorkingCheckedListDict[working] = ckEdit.Checked;
|
}
|
else
|
{
|
_allWorkingCheckedListDict.Add(working, ckEdit.Checked);
|
}
|
var hydroInfo = await GetHydroInfo(true);
|
this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, hydroInfo, 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(true);
|
this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, hydroInfo, working, this.svgImg32[4]);
|
};
|
this.elementProjectSiteSimulation.Elements.Add(elementWorking);
|
}
|
|
/// <summary>
|
/// 更新工况
|
/// 更新,会触发更新事件
|
/// </summary>
|
public async void UpdateWorking(Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(true);
|
if (working == null)
|
{
|
return;
|
}
|
var element = this.elementProjectSiteSimulation.Elements.
|
Where(x => x.Tag != null && (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;
|
this.ProjectSiteWorkingUpdateEvent?.Invoke(_project, _projectSite, hydroInfo, working);
|
}
|
|
/// <summary>
|
/// 移除工况
|
/// 移除,会触发移除事件
|
/// </summary>
|
public async void RemoveWorking(Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(true);
|
if (working == null)
|
{
|
return;
|
}
|
var element = this.elementProjectSiteSimulation.Elements.
|
Where(x => x.Tag != null && (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;
|
}
|
this.ProjectSiteWorkingRemoveEvent?.Invoke(_project, _projectSite, hydroInfo, working);
|
}
|
|
#endregion
|
|
#region 项目站方案
|
|
/// <summary>
|
/// 添加方案
|
/// </summary>
|
public void AppendScheme(XhsSchemeVmo scheme)
|
{
|
if (scheme == null)
|
{
|
return;
|
}
|
this.elementSchemeList.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
|
var elementScheme = new DevExpress.XtraBars.Navigation.AccordionControlElement();
|
elementScheme.Text = scheme.Name;
|
elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
|
elementScheme.ImageOptions.ImageIndex = 3;
|
elementScheme.Tag = scheme;
|
elementScheme.Click += async (sender, e) =>
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetSchemeHydroInfo(scheme);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
Dictionary<HydroWorkingVmo, bool> dict = null;
|
if (_allSchemeWorkingCheckedListDict != null)
|
{
|
if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
|
{
|
dict = _allSchemeWorkingCheckedListDict[scheme];
|
}
|
}
|
this.ShowProjectSiteSchemeEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, dict, this.svgImg32[3]);
|
};
|
this.elementSchemeList.Elements.Add(elementScheme);
|
}
|
|
#endregion
|
|
#region 项目站方案工况
|
|
/// <summary>
|
/// 添加方案工况
|
/// </summary>
|
public void AppendSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (scheme == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
var elementScheme = this.elementSchemeList.Elements.FirstOrDefault(x => x.Tag is XhsSchemeVmo && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
|
if (elementScheme == null)
|
{
|
return;
|
}
|
elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
|
var ckEdit = new CheckEdit();
|
ckEdit.Properties.AutoWidth = true;
|
ckEdit.Properties.Caption = string.Empty;
|
ckEdit.CheckedChanged += (sender, e) =>
|
{
|
this.ProjectSiteSchemeWorkingCheckedEvent?.Invoke(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 GetSchemeHydroInfo(scheme, true);
|
this.ShowProjectSiteSchemeWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]);
|
};
|
elementScheme.Elements.Add(elementWorking);
|
}
|
|
/// <summary>
|
/// 更新方案工况
|
/// 更新,会触发更新事件
|
/// </summary>
|
public void UpdateSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (scheme == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
var elementScheme = this.elementSchemeList.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;
|
this.ProjectSiteSchemeWorkingUpdateEvent?.Invoke(scheme, working);
|
}
|
|
/// <summary>
|
/// 移除方案工况
|
/// </summary>
|
public void RemoveSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
if (scheme == null)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
var elementScheme = this.elementSchemeList.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;
|
}
|
this.ProjectSiteSchemeWorkingRemoveEvent?.Invoke(scheme, working);
|
}
|
|
|
#endregion
|
|
|
//元素点击事件
|
private void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e)
|
{
|
|
}
|
|
//项目站概况
|
private async void elementProjectSiteInfo_Click(object sender, EventArgs e)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
this.ShowProjectSiteInfoEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[0]);
|
}
|
|
//项目站水力模拟
|
private async void elementProjectSiteSimulation_Click(object sender, EventArgs e)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, hydroInfo, _allWorkingCheckedListDict, this.svgImg32[1]);
|
}
|
|
//创建项目站方案
|
private async void btnCreateProjectSiteScheme_Click(object sender, EventArgs e)
|
{
|
if (_project == null)
|
{
|
return;
|
}
|
if (_projectSite == null)
|
{
|
return;
|
}
|
var hydroInfo = await GetHydroInfo(true);
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]);
|
}
|
|
//工况对比
|
private void btnCompareWorking_Click(object sender, EventArgs e)
|
{
|
this.CompareProjectWorkingEvent?.Invoke(this.svgImg32[5]);
|
}
|
|
|
}
|
}
|