using DevExpress.XtraEditors;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace IStation.WinFrmUI.Monitor
{
public class ExportValidatedDataHelper
{
//验证数据
public static void Export(long monitorDataSourcesId,long stationId,DateTime date)
{
var packet = new BLL.StationSignalRecordPacket().Get(monitorDataSourcesId, stationId, date.Year, date.Month);
var list = packet?.StationSignalRecords?.ToList();
list = list?.Where(x => x.Time.Day == date.Day && x.Time.Minute == 0 && x.Time.Second == 0).ToList();
if (list == null || !list.Any())
{
XtraMessageBox.Show("无数据!");
return;
}
try
{
var dlg = new SaveFileDialog();
dlg.Filter = "EXCEL 文件(*.xls)|*.xls";
dlg.FileName = date.ToString("D");
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("总流量");
rowTile.CreateCell(2).SetCellValue("总扬程");
rowTile.CreateCell(3).SetCellValue("总功率");
rowTile.CreateCell(4).SetCellValue("单泵转速字典");
rowTile.CreateCell(5).SetCellValue("单泵流量字典");
rowTile.CreateCell(6).SetCellValue("单泵扬程字典");
rowTile.CreateCell(7).SetCellValue("单泵功率字典");
int rowIndex = 1;
DateTime current = DateTime.Now;
double totalHead, totalPower;
foreach (var record in list)
{
current = record.Time;
totalHead = record.PumpSignalRecords.Sum(x => x.Head) / record.PumpRunCount;
totalPower = record.PumpSignalRecords.Sum(x => x.InstantaneousPower);
var flag_rpm_dict = record.PumpSignalRecords.ToDictionary(x => x.Flag, x => x.Rpm);
var flag_flow_dict = record.PumpSignalRecords.ToDictionary(x => x.Flag, x => x.FlowRate);
var flag_head_dict = record.PumpSignalRecords.ToDictionary(x => x.Flag, x => x.Head);
var flag_power_dict = record.PumpSignalRecords.ToDictionary(x => x.Flag, x => x.InstantaneousPower);
var row = theSheet1.CreateRow(rowIndex);
rowIndex++;
int col = 0;
row.CreateCell(col).SetCellValue(current.ToString("G"));
col++;
row.CreateCell(col).SetCellValue(Trans(totalHead));
col++;
row.CreateCell(col).SetCellValue(Trans(totalPower));
col++;
row.CreateCell(col).SetCellValue(JsonHelper.Object2Json(flag_rpm_dict));
col++;
row.CreateCell(col).SetCellValue(JsonHelper.Object2Json(flag_flow_dict));
col++;
row.CreateCell(col).SetCellValue(JsonHelper.Object2Json(flag_head_dict));
col++;
row.CreateCell(col).SetCellValue(JsonHelper.Object2Json(flag_power_dict));
col++;
}
//强制Excel在打开时重新计算所有公式
theSheet1.ForceFormulaRecalculation = true;
using (FileStream fs = File.OpenWrite(dlg.FileName))
{
theBook.Write(fs);
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.ToString());
return;
}
XtraMessageBox.Show("导出成功");
}
///
/// 转换
///
private static string DoubleTrans(double doubleValue)
{
if (doubleValue < 1)
return doubleValue.ToString("0.0000");
else if (doubleValue < 10)
return doubleValue.ToString("0.000");
else if (doubleValue < 100)
return doubleValue.ToString("0.00");
else
return doubleValue.ToString("0.0");
}
///
/// 转换
///
private static double Trans(double doubleValue)
{
if (doubleValue < 1)
return Math.Round(doubleValue, 4);
else if (doubleValue < 10)
return Math.Round(doubleValue, 3);
else if (doubleValue < 100)
return Math.Round(doubleValue, 2);
else
return Math.Round(doubleValue, 1);
}
}
}