using DevExpress.Accessibility;
|
using DevExpress.XtraCharts;
|
using DevExpress.XtraGrid.Views.Grid;
|
using IStation.BLL;
|
using IStation.Common;
|
using IStation.Model;
|
using System;
|
using System.Collections.Generic;
|
using System.Globalization;
|
|
namespace IStation.WinFrmUI.Monitor
|
{
|
public partial class ResultChartControl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public ResultChartControl()
|
{
|
InitializeComponent();
|
}
|
|
private class CurrentModel
|
{
|
/// <summary>
|
/// 名称
|
/// </summary>
|
public string Name { get; set; }
|
/// <summary>
|
/// 泵台数
|
/// </summary>
|
public string PumpCount { get; set; }
|
/// <summary>
|
/// 开机时间段
|
/// </summary>
|
public string Time { get; set; }
|
/// <summary>
|
/// 电费
|
/// </summary>
|
public double ElectricityPrice { get; set; }
|
/// <summary>
|
/// 用电量
|
/// </summary>
|
public double Electricity { get; set; }
|
/// <summary>
|
/// 取水量
|
/// </summary>
|
public double Water { get; set; }
|
/// <summary>
|
/// 持续时间
|
/// </summary>
|
public double TimeSpan { get; set; }
|
/// <summary>
|
/// 总取水量
|
/// </summary>
|
public double TotalWater { get; set; }
|
/// <summary>
|
/// 总电费
|
/// </summary>
|
public double TotalElePrice { get; set; }
|
/// <summary>
|
/// 总用电量
|
/// </summary>
|
public double TotalEle { get; set; }
|
/// <summary>
|
/// 千吨水能耗
|
/// </summary>
|
public double QDSLN { get; set; }
|
|
}
|
|
|
|
bool isSetData = false;
|
|
DateTime DateTime; //api查询需要的日期
|
DateTime ListDayTime; //listBox当前选择的日期
|
DateTime HistoryTime = new DateTime();
|
List<CurrentModel> _CurrentModel = new List<CurrentModel>();
|
PumpRunHelper _PumpRunHelper = new PumpRunHelper();
|
CalcModel.AnaPrj _Ana = null; //方案数据
|
Model.RunParasData _LastYeay = null; //去年同期
|
Model.RunParasData _CurrentData = null; //实际数据
|
List<PumpWater> _HistorypumpWater = new List<PumpWater>(); //历史参数日期重构
|
bool isChage = true;
|
|
|
List<Model.PumpWater> _CurrentPumpWater = new List<PumpWater>(); //实际参数日期重构
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
/// <param name="datetime"></param>
|
public void SetBindingData(DateTime datetime)
|
{
|
/* PumpHistoryDataFileHelper pumpHistoryDataFileHelper = new PumpHistoryDataFileHelper();
|
pumpHistoryDataFileHelper.GetHistoryData();*/
|
WaitFrmHelper.ShowWaitForm();
|
ListDayTime = datetime;
|
if (isChage) { SetTextToCheckBtn(datetime); }
|
if (checkEditCalendar.SelectedIndex == 0)
|
{
|
DateTime = datetime.AddDays(-366);
|
}
|
else //if(checkEditCalendar.SelectedIndex == 1)
|
{
|
DateTime = ConvertDateTime(datetime);
|
}
|
_Ana = IStation.BLL.AnaPrj.GetDefaultPrjByStartDay(datetime); //方案数据
|
if (HistoryTime > new DateTime(2001, 1, 1))
|
{
|
_LastYeay = _PumpRunHelper.GetByHistoryOneData(HistoryTime, out string error);
|
} //去年同期
|
else
|
{
|
_LastYeay = _PumpRunHelper.GetByHistoryOneData(DateTime, out string error);
|
}
|
_CurrentData = _PumpRunHelper.GetPumpRunParasOneDay(DateTime, out string err); //实际数据
|
MergeCurrentModel(_Ana, _LastYeay, _CurrentData);//girdview合并数据
|
SetHistoryPumpWaterParas(new DateTime(datetime.Year, datetime.Month, datetime.Day)); //历史取水量
|
SetCurretnPumpWaterParas(new DateTime(datetime.Year, datetime.Month, datetime.Day)); //实际取水量
|
GetAnaWater();
|
SetSeriseEle();
|
isChage = true;
|
HistoryTime = new DateTime();
|
WaitFrmHelper.HideWaitForm();
|
}
|
|
|
private void SetSeriseEle()
|
{
|
var SeriesHistory = this.chartControlEle.Series[1];
|
var SeriesCurrent = this.chartControlEle.Series[0];
|
var SeriesAna = this.chartControlEle.Series[2];
|
SeriesHistory.Points.Clear();
|
SeriesCurrent.Points.Clear();
|
SeriesAna.Points.Clear();
|
if (_HistorypumpWater != null)
|
{
|
foreach (var item in _HistorypumpWater)
|
{
|
SeriesHistory.Points.Add(new SeriesPoint(item.DateTime, Math.Round(item.TotalEle), 2));
|
}
|
}
|
if (_CurrentPumpWater != null)
|
{
|
foreach (var item in _CurrentPumpWater)
|
{
|
SeriesCurrent.Points.Add(new SeriesPoint(item.DateTime, Math.Round(item.TotalEle), 2));
|
}
|
}
|
if (_Ana != null && isSetData)
|
{
|
foreach (var bt in _Ana.BlockTimes)
|
{
|
foreach (var item in bt.PointTimes)
|
{
|
SeriesAna.Points.Add(new SeriesPoint(item.Time, Math.Round(item.SumPower), 2));
|
}
|
}
|
}
|
if (SeriesHistory.Points.Count == 0)
|
{
|
SeriesHistory.ShowInLegend = false;
|
}
|
else SeriesHistory.ShowInLegend = true;
|
if (SeriesCurrent.Points.Count == 0)
|
{
|
SeriesCurrent.ShowInLegend = false;
|
}
|
else SeriesAna.ShowInLegend = true;
|
if (SeriesAna.Points.Count == 0)
|
{
|
SeriesAna.ShowInLegend = false;
|
}
|
else SeriesAna.ShowInLegend = true;
|
}
|
|
|
|
//checkbtn添加item
|
private void SetTextToCheckBtn(DateTime dateTime)
|
{
|
isChage = false;
|
this.checkEditCalendar.Properties.Items.Clear();
|
this.checkEditCalendar.Properties.Items.Add($"阳历({dateTime.ToString("yyyy-MM-dd")})");
|
this.checkEditCalendar.Properties.Items.Add($"阴历({ConvertDateTime(dateTime).ToString("yyyy-MM-dd")})");
|
this.checkEditCalendar.Properties.Items.Add("自定义选择时间");
|
this.checkEditCalendar.SelectedIndex = 0;
|
|
}
|
|
|
//修改自定义时间
|
private void EditComBom(DateTime dateTime)
|
{
|
isChage = false;
|
this.checkEditCalendar.Properties.Items.RemoveAt(2);
|
this.checkEditCalendar.Properties.Items.Add($"自定义时间{dateTime}");
|
HistoryTime = dateTime;
|
SetBindingData(ListDayTime);
|
}
|
|
//合并所有开始时间-结束时间
|
private List<(DateTime, DateTime, double, double, double)> MergeList(Model.RunParasData runParasData)
|
{
|
if (runParasData == null) return null;
|
List<(DateTime, DateTime, double, double, double)> values = new List<(DateTime, DateTime, double, double, double)>();
|
foreach (var item in runParasData.Pump1)
|
{
|
values.Add((item.StartTime, item.EndTime, item.Money, item.FlowIn, item.Electric));
|
}
|
foreach (var item in runParasData.Pump2)
|
{
|
values.Add((item.StartTime, item.EndTime, item.Money, item.FlowIn, item.Electric));
|
}
|
foreach (var item in runParasData.Pump3)
|
{
|
values.Add((item.StartTime, item.EndTime, item.Money, item.FlowIn, item.Electric));
|
}
|
foreach (var item in runParasData.Pump4)
|
{
|
values.Add((item.StartTime, item.EndTime, item.Money, item.FlowIn, item.Electric));
|
}
|
foreach (var item in runParasData.Pump5)
|
{
|
values.Add((item.StartTime, item.EndTime, item.Money, item.FlowIn, item.Electric));
|
}
|
return values;
|
}
|
|
|
//农历阴历日期转换
|
private DateTime ConvertDateTime(DateTime lastYearDay)
|
{
|
// lastYearDay = new DateTime(2024, 4, 8);
|
//lastYearDay = lastYearDay.AddYears(-1);
|
// 创建一个 ChineseLunisolarCalendar 实例
|
ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar();
|
int thisYear = chineseCalendar.GetYear(lastYearDay);
|
int thisMonth = chineseCalendar.GetMonth(lastYearDay);
|
int thisDay = chineseCalendar.GetDayOfMonth(lastYearDay);
|
|
// DateTime lastYearLunarDate = new DateTime(thisYear, thisMonth, thisDay, 0, 0, 0, 0).AddYears(-1);
|
var LunarDate = convert(thisYear - 1, thisMonth, thisDay);
|
// DateTime gregorianDate = chineseCalendar.ToDateTime(thisYear, thisMonth, thisDay, 0, 0, 0, 0);
|
return LunarDate;
|
|
}
|
|
|
//阴历转换阳历
|
private DateTime convert(int year, int month, int day)
|
{
|
for (DateTime dateTime = new DateTime(year, 1, 1); dateTime < new DateTime(year, month + 3, 1); dateTime = dateTime.AddDays(1))
|
{
|
ChineseLunisolarCalendar chineseCalendar = new ChineseLunisolarCalendar();
|
int thisYear = chineseCalendar.GetYear(dateTime);
|
int thisMonth = chineseCalendar.GetMonth(dateTime);
|
int thisDay = chineseCalendar.GetDayOfMonth(dateTime);
|
if (thisYear == year && thisMonth == month && thisDay == day)
|
{
|
return dateTime;
|
}
|
|
}
|
return new DateTime(2023, 1, 1);
|
}
|
|
//获取水位数据
|
/* private void GetTideData(Model.eTideSouce eTideSouce, int sort, DateTime Startday, DateTime Endday)
|
{
|
XYDiagram main_diagram = chartControl实时数据.Diagram as XYDiagram;
|
var axisTime = main_diagram.AxisX;
|
axisTime.VisualRange.Auto = true;
|
axisTime.WholeRange.Auto = true;
|
axisTime.WholeRange.SideMarginsValue = 0;
|
axisTime.VisualRange.SideMarginsValue = 0;
|
axisTime.WholeRange.SetMinMaxValues(Startday, Startday.AddDays(1));
|
axisTime.VisualRange.SetMinMaxValues(Startday, Startday.AddDays(1));
|
var tidelist = BLL.TideHelper.GetByDayRange(eTideSouce, Startday, Endday, out string a);
|
var SeriseMonitor = this.chartControl实时数据.Series[sort];
|
SeriseMonitor.Points.Clear();
|
if (tidelist != null)
|
{
|
foreach (var item in tidelist)
|
{
|
SeriseMonitor.Points.Add(new SeriesPoint(item.Time, item.Level));
|
}
|
}
|
if (SeriseMonitor.Points.Count == 0)
|
{
|
SeriseMonitor.ShowInLegend = false;
|
}
|
else SeriseMonitor.ShowInLegend = true;
|
|
}*/
|
|
|
//添加历史取水量
|
private void SetHistoryPumpWaterParas(DateTime dateTime)
|
{
|
_HistorypumpWater.Clear();
|
var LastYearTime = dateTime.AddDays(-366);
|
XYDiagram main_diagram = chartControl实时数据.Diagram as XYDiagram;
|
var axisTime = main_diagram.AxisX;
|
axisTime.VisualRange.Auto = true;
|
axisTime.WholeRange.Auto = true;
|
axisTime.WholeRange.SideMarginsValue = 0;
|
axisTime.VisualRange.SideMarginsValue = 0;
|
// axisTime.WholeRange.SetMinMaxValues(LastYearTime, LastYearTime.AddDays(1));
|
// axisTime.VisualRange.SetMinMaxValues(LastYearTime, LastYearTime.AddDays(1));
|
var waterParas = _PumpRunHelper.GetByPumpOneDayWaterData(LastYearTime, out string error);
|
if (waterParas == null) return;
|
foreach (var item in waterParas)
|
{
|
_HistorypumpWater.Add(new PumpWater { DateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, item.DateTime.Hour, item.DateTime.Minute, 0), TotalWater = item.TotalWater, TotalEle = item.TotalEle });
|
}
|
var SeriseMonitor = this.chartControl实时数据.Series[1];
|
SeriseMonitor.Points.Clear();
|
if (_HistorypumpWater != null)
|
{
|
foreach (var item in _HistorypumpWater)
|
{
|
SeriseMonitor.Points.Add(new SeriesPoint(item.DateTime, Math.Round(item.TotalWater), 2));
|
}
|
}
|
if (SeriseMonitor.Points.Count == 0)
|
{
|
SeriseMonitor.ShowInLegend = false;
|
}
|
else SeriseMonitor.ShowInLegend = true;
|
}
|
|
|
//添加实际取水量
|
private void SetCurretnPumpWaterParas(DateTime dateTime)
|
{
|
// List<PumpWater> pumpWater = new List<PumpWater>();
|
XYDiagram main_diagram = chartControl实时数据.Diagram as XYDiagram;
|
var axisTime = main_diagram.AxisX;
|
axisTime.VisualRange.Auto = true;
|
axisTime.WholeRange.Auto = true;
|
axisTime.WholeRange.SideMarginsValue = 0;
|
axisTime.VisualRange.SideMarginsValue = 0;
|
XYDiagram main_diagramele = chartControlEle.Diagram as XYDiagram;
|
var axisTimeele = main_diagramele.AxisX;
|
axisTimeele.VisualRange.Auto = true;
|
axisTimeele.WholeRange.Auto = true;
|
axisTimeele.WholeRange.SideMarginsValue = 0;
|
axisTimeele.VisualRange.SideMarginsValue = 0;
|
// axisTime.WholeRange.SetMinMaxValues(LastYearTime, LastYearTime.AddDays(1));
|
// axisTime.VisualRange.SetMinMaxValues(LastYearTime, LastYearTime.AddDays(1));
|
var CurrentPumpWater = _PumpRunHelper.GetByPumpOneDayWaterData(dateTime, out string error);
|
var SeriseMonitor = this.chartControl实时数据.Series[0];
|
if (CurrentPumpWater == null) return;
|
_CurrentPumpWater.Clear();
|
foreach (var item in CurrentPumpWater)
|
{
|
_CurrentPumpWater.Add(new PumpWater { DateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, item.DateTime.Hour, item.DateTime.Minute, 0), TotalWater = item.TotalWater, TotalEle = item.TotalEle });
|
}
|
|
SeriseMonitor.Points.Clear();
|
if (_CurrentPumpWater != null)
|
{
|
foreach (var item in _CurrentPumpWater)
|
{
|
SeriseMonitor.Points.Add(new SeriesPoint(item.DateTime, Math.Round(item.TotalWater), 2));
|
}
|
}
|
if (SeriseMonitor.Points.Count == 0)
|
{
|
SeriseMonitor.ShowInLegend = false;
|
}
|
else SeriseMonitor.ShowInLegend = true;
|
}
|
|
|
|
//添加方案取水量
|
private void GetAnaWater()
|
{
|
XYDiagram main_diagram = chartControl实时数据.Diagram as XYDiagram;
|
var axisTime = main_diagram.AxisX;
|
axisTime.VisualRange.Auto = true;
|
axisTime.WholeRange.Auto = true;
|
axisTime.WholeRange.SideMarginsValue = 0;
|
axisTime.VisualRange.SideMarginsValue = 0;
|
var SeriseMonitor = this.chartControl实时数据.Series[2];
|
SeriseMonitor.Points.Clear();
|
if (_Ana == null || !isSetData)
|
{
|
SeriseMonitor.ShowInLegend = false;
|
return;
|
}
|
var allTime = _Ana.GetAllPointTimeList();
|
foreach (var item in allTime)
|
{
|
SeriseMonitor.Points.Add(new SeriesPoint(item.Time, item.RealFlow));
|
}
|
SeriseMonitor.ShowInLegend = true;
|
}
|
|
|
|
//比较
|
private void barBtnCompare_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
var dlg = new HistoryDlg();
|
dlg.SetBindingData(_Ana);
|
dlg.ShowDialog();
|
}
|
|
//日历check选择变换事件
|
private void checkEditCalendar_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
isChage = false;
|
if (this.checkEditCalendar.SelectedIndex == 2)
|
{
|
var dlg = new UserChoiceDateDlg();
|
dlg.ReloadEvent += EditComBom;
|
dlg.ShowDialog();
|
}
|
else { this.SetBindingData(ListDayTime); }
|
}
|
|
//显示方案数据
|
private void barCheckData_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
|
{
|
isSetData = this.barCheckData.Checked;
|
var a = new CalcModel.AnaPrj();
|
GetAnaWater();
|
SetSeriseEle();
|
MergeCurrentModel(a, _LastYeay, _CurrentData);
|
if (this.barCheckData.Checked)
|
{
|
this.barCheckData.Caption = "隐藏方案数据";
|
}
|
else this.barCheckData.Caption = "显示方案数据";
|
|
}
|
|
|
//页面类合并
|
private void MergeCurrentModel(CalcModel.AnaPrj anaPrj, Model.RunParasData LastYeay, RunParasData currentData)
|
{
|
HistoryDataAPiHelper historyDataAPiHelper = new HistoryDataAPiHelper();
|
var LastYearIsOpen = historyDataAPiHelper.MergeTimeSlots(MergeList(LastYeay));
|
|
var CurrentDateOpen = historyDataAPiHelper.MergeTimeSlots(MergeList(currentData));
|
_CurrentModel.Clear();
|
if (DateTime.Now.Date >= ListDayTime && CurrentDateOpen != null /*&& LastYearIsOpen != null *//*&& anaPrj != null*/)
|
{
|
_CurrentModel.Clear();
|
foreach (var model in CurrentDateOpen)
|
{
|
var CurrentDate = new CurrentModel
|
{
|
Name = "实际" + model.Item1.ToString("(yyyy-MM-dd)"),
|
PumpCount = string.Format("{0}台泵", model.Item3.ToString()),
|
Time = model.Item1.ToString("HH:mm") + "-" + model.Item2.ToString("HH:mm"),
|
ElectricityPrice = model.Item4 * 1000,
|
Water = model.Item5 * 1000, //km³---m³
|
Electricity = model.Item6 * 1000,
|
TimeSpan = (model.Item2 - model.Item1).TotalMinutes,
|
TotalEle = _CurrentData.Electric * 1000, //Mwh--kwh
|
TotalElePrice = _CurrentData.Money * 1000,
|
TotalWater = Math.Round(_CurrentData.FlowIn / 10, 1),//km³ ---万m³
|
QDSLN = Math.Round(((_CurrentData.Electric * 1000) / (_CurrentData.FlowIn / 10)) / 10, 1)
|
};
|
_CurrentModel.Add(CurrentDate);
|
}
|
}
|
if (_Ana != null && isSetData)
|
{
|
foreach (var item in _Ana.BlockTimes)
|
{
|
if (item.OpenPumpCount == 0)
|
{
|
continue;
|
}
|
var project = new CurrentModel
|
{
|
Name = "方案" + item.StartTime.ToString("(yyyy-MM-dd)"),
|
PumpCount = string.Format("{0}台泵", item.OpenPumpCount),
|
Time = item.StartTime.ToString("HH:mm") + "-" + item.EndTime.ToString("HH:mm"),
|
Electricity = Math.Round(item.SumPower, 2),
|
ElectricityPrice = Math.Round(item.SumMoney, 2),
|
Water = Math.Round(item.SumFlow, 2),
|
TimeSpan = (item.EndTime - item.StartTime).TotalMinutes,
|
TotalEle = Math.Round(_Ana.SumPower4Disp, 2),
|
TotalWater = _Ana.SumFlow4Disp,
|
TotalElePrice = Math.Round(_Ana.SumMoney, 2),
|
QDSLN = _Ana.QDSLN
|
|
};
|
_CurrentModel.Add(project);
|
}
|
}
|
if (LastYearIsOpen != null)
|
{
|
foreach (var model in LastYearIsOpen)
|
{
|
var LastYear = new CurrentModel
|
{
|
Name = "去年同期" + model.Item1.ToString("(yyyy-MM-dd)"),
|
PumpCount = string.Format("{0}台泵", model.Item3.ToString()),
|
Time = model.Item1.ToString("HH:mm") + "-" + model.Item2.ToString("HH:mm"),
|
ElectricityPrice = model.Item4 * 1000,
|
Water = model.Item5 * 1000,
|
Electricity = model.Item6 * 1000,
|
TimeSpan = (model.Item2 - model.Item1).TotalMinutes,
|
TotalEle = _LastYeay.Electric * 1000,
|
TotalElePrice = _LastYeay.Money * 1000,
|
TotalWater = Math.Round(_LastYeay.FlowIn / 10, 1),
|
QDSLN = Math.Round(((_LastYeay.Electric * 1000) / (_LastYeay.FlowIn / 10)) / 10, 1)
|
};
|
_CurrentModel.Add(LastYear);
|
}
|
}
|
|
this.bindingSource1.DataSource = _CurrentModel;
|
this.bindingSource1.ResetBindings(false);
|
}
|
|
|
//自定义合并
|
private void gridView2_CellMerge(object sender, CellMergeEventArgs e)
|
{
|
var gridViewPumpID1 = gridView2.GetRow(e.RowHandle1) as CurrentModel;
|
var gridViewPumpID2 = gridView2.GetRow(e.RowHandle2) as CurrentModel;
|
if (gridViewPumpID1 == gridViewPumpID2)
|
{
|
return;
|
}
|
if (gridViewPumpID1.Name != gridViewPumpID2.Name)
|
{
|
e.Merge = false;
|
e.Handled = true;
|
}
|
}
|
}
|
}
|