using DevExpress.XtraCharts; using DevExpress.XtraEditors; using NPOI.HSSF.UserModel; using NPOI.SS.Formula.Functions; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Yw.WinFrmUI; namespace PBS.WinFrmUI.DataAnalysis { public partial class EnergyAnalysis : DocumentPage { private string startCode = "[&start&]"; private string endCode = "[&end&]"; private string paramCode = "[¶m&]"; private string getenergyanalyCode = "getenergyanaly";//获取能耗分析数据 private string analydayCode = "analyday";//校验能耗分析 public EnergyAnalysis() { this.PageTitle.Caption = "能耗分析"; InitializeComponent(); _series_ysl.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; _series_ydl.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; _series_qds.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; ((SideBySideBarSeriesLabel)_series_ysl.Label).Position = BarSeriesLabelPosition.Top; ((SideBySideBarSeriesLabel)_series_ydl.Label).Position = BarSeriesLabelPosition.Top; _series_ysl.CrosshairLabelPattern = "用水量:{V:N2} m³"; _series_ydl.CrosshairLabelPattern = "用电量:{V:N2} kW·h"; _series_qds.CrosshairLabelPattern = "千吨水能耗:{V:N2} kW·h/km³"; } private void InitDate() { this.dateEditStartDate.Text = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd"); this.dateEditEndDate.Text = DateTime.Now.ToString("yyyy-MM-dd"); } List _models; public void BindData(List models) { _models = models; this.pumpEnergyViewModelBindingSource.DataSource = models; this.gridView4.RefreshData(); SetChart(models); } // private XYDiagram _diagram_xy { get { return this.chartControl1.Diagram as XYDiagram; } } private Series _series_ysl { get { return this.chartControl1.Series[1]; } } private Series _series_ydl { get { return this.chartControl1.Series[0]; } } private Series _series_qds { get { return this.chartControl1.Series[2]; } } private void SetChart(List models) { this.chartControl1.BeginInit(); _series_ysl.Points.Clear(); _series_ydl.Points.Clear(); _series_qds.Points.Clear(); foreach (var item in models) { _series_ysl.Points.Add(new SeriesPoint(item.Day, item.Supply)); _series_ydl.Points.Add(new SeriesPoint(item.Day, item.Electricity)); _series_qds.Points.Add(new SeriesPoint(item.Day, item.EnergyOfWater)); } //chartControl1.Series.Clear(); //var seriesSupply = new Series("用水量", ViewType.Bar); //seriesSupply.DataSource = models; //seriesSupply.ArgumentScaleType = ScaleType.Qualitative; //seriesSupply.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; //var labelSupply = (SideBySideBarSeriesLabel)seriesSupply.Label; //labelSupply.Position = BarSeriesLabelPosition.Top; //seriesSupply.ArgumentDataMember = "Day"; //seriesSupply.ValueScaleType = ScaleType.Numerical; //seriesSupply.ValueDataMembers.AddRange(new string[] { "Supply" }); //var seriesElectricity = new Series("用电量", ViewType.Bar); //seriesElectricity.DataSource = models; //seriesElectricity.ArgumentScaleType = ScaleType.Qualitative; //seriesElectricity.ArgumentDataMember = "Day"; //seriesElectricity.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; //var labelElectricity = (SideBySideBarSeriesLabel)seriesElectricity.Label; //labelElectricity.Position = BarSeriesLabelPosition.Top; //seriesElectricity.ValueScaleType = ScaleType.Numerical; //seriesElectricity.ValueDataMembers.AddRange(new string[] { "Electricity" }); //var xy_diagram = this.chartControl1.Diagram as XYDiagram; //var axis_y = new SecondaryAxisY(); //axis_y.Title.Text = "%"; //axis_y.Alignment = AxisAlignment.Far; //axis_y.Visibility = DevExpress.Utils.DefaultBoolean.True; //xy_diagram.SecondaryAxesY.Add(axis_y); //var lineEnergyOfWater = new Series("吨水能耗", ViewType.Line); //lineEnergyOfWater.DataSource = models; //lineEnergyOfWater.ArgumentScaleType = ScaleType.Qualitative; //lineEnergyOfWater.ArgumentDataMember = "Day"; //lineEnergyOfWater.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; //lineEnergyOfWater.ValueScaleType = ScaleType.Numerical; ////var labelEnergyOfWater = (SideBySideBarSeriesLabel)lineEnergyOfWater.Label; ////labelEnergyOfWater.Position = BarSeriesLabelPosition.Top; //lineEnergyOfWater.ValueDataMembers.AddRange(new string[] { "EnergyOfWater" }); //((LineSeriesView)lineEnergyOfWater.View).AxisY = axis_y; //chartControl1.Series.Add(seriesSupply); //chartControl1.Series.Add(seriesElectricity); //chartControl1.Series.Add(lineEnergyOfWater); this.chartControl1.EndInit(); } private void EboxFormEnergyAnalysis_Load(object sender, EventArgs e) { InitDate(); Search(); } private void Search() { var m = new GetCalcValueModel() { StartDate = DateTime.Parse(this.dateEditStartDate.EditValue.ToString()), EndDate = DateTime.Parse(this.dateEditEndDate.EditValue.ToString()), }; SendText(startCode + getenergyanalyCode + paramCode + JsonHelper.Object2Json(m) + endCode); } public event EventHandler SendData; private void SendText(string content) { //BluetoothHelper.GetInstance().SendData(content); SendData?.Invoke(null, content); } /// /// 查询 /// /// /// private void simpleButton1_Click(object sender, EventArgs e) { Search(); } /// /// 导出 /// /// /// private void simpleButton2_Click(object sender, EventArgs e) { ExportXLS(); } public void ExportXLS() { try { if (_models == null || _models.Count == 0) { XtraMessageBox.Show("没有可导出的数据!"); return; } var dlg = new SaveFileDialog(); dlg.Filter = "EXCEL 文件(*.xls)|*.xls"; if (dlg.ShowDialog() != DialogResult.OK) return; HSSFWorkbook theBook = new HSSFWorkbook(); var theSheet1 = theBook.CreateSheet("Sheet1"); IRow rowTile = theSheet1.CreateRow(0); rowTile.CreateCell(0).SetCellValue("日期"); rowTile.CreateCell(1).SetCellValue("用水量(m³)"); rowTile.CreateCell(2).SetCellValue("用电量(kW·h)"); rowTile.CreateCell(3).SetCellValue("千吨水能耗(kW·h/km³)"); for (int rowIndex = 1; rowIndex <= _models.Count; rowIndex++) { int col = 0; IRow row = theSheet1.CreateRow(rowIndex); var celValue = _models[rowIndex - 1].Day; var dt = DateTime.Parse(celValue); row.CreateCell(col).SetCellValue(celValue + " " + dt.ToString("dddd")); col++; row.CreateCell(col).SetCellValue((double)_models[rowIndex - 1].Supply); col++; row.CreateCell(col).SetCellValue((double)_models[rowIndex - 1].Electricity); col++; row.CreateCell(col).SetCellValue((double)_models[rowIndex - 1].EnergyOfWater); col++; } //强制Excel在打开时重新计算所有公式 theSheet1.ForceFormulaRecalculation = true; using (FileStream fs = File.OpenWrite(dlg.FileName)) { theBook.Write(fs); } XtraMessageBox.Show("导出成功"); } catch (Exception ex) { XtraMessageBox.Show(ex.ToString()); } } /// /// 前三个月 /// /// /// private void simpleButton3_Click(object sender, EventArgs e) { this.dateEditStartDate.Text = DateTime.Now.AddMonths(-3).ToString("yyyy-MM-dd"); this.dateEditEndDate.Text = DateTime.Now.ToString("yyyy-MM-dd"); Search(); } /// /// 前一个月 /// /// /// private void simpleButton4_Click(object sender, EventArgs e) { this.dateEditStartDate.Text = DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd"); this.dateEditEndDate.Text = DateTime.Now.ToString("yyyy-MM-dd"); Search(); } /// /// 前半个月 /// /// /// private void simpleButton6_Click(object sender, EventArgs e) { this.dateEditStartDate.Text = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd"); this.dateEditEndDate.Text = DateTime.Now.ToString("yyyy-MM-dd"); Search(); } private void simpleButton5_Click(object sender, EventArgs e) { var dlg = new AnalyDayForm(); if (dlg.ShowDialog() == DialogResult.OK) { var dt = dlg.CurrDateTime; SendText(startCode + analydayCode + paramCode + dt + endCode); MessageBoxHelper.ShowInfo("操作成功"); } } private void gridView4_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column.FieldName == "Day") { var celValue = e.Value.ToString(); var dt = DateTime.Parse(celValue); e.DisplayText = celValue + " " + dt.ToString("dddd"); } } } }