using DevExpress.Utils.About;
using DevExpress.Utils.Extensions;
using IStation.Model;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace IStation.WinFrmUI
{
///
/// 导出 WaterDesk 所需数据
///
public partial class ExportWaterDeskHelper
{
public class TimeValue
{
public TimeValue() { }
public TimeValue(DateTime t,double v)
{
this.Time= t;
this.Value= v;
}
public DateTime Time { get; set; }
public double Value { get; set; }
}
public class DataColumn
{
public string Title { get; set; }
public int Index { get; set; }
public List TimeValueList { get; set; }
}
static BLL.StationSignalRecordPacket _packet = new BLL.StationSignalRecordPacket();
///
/// 导出全部
///
///
///
///
///
///
///
public static bool Export(long monitorDataSourcesId, long stationId, int year, int month, int timeStep = 300)
{
var station = new BLL.Station().GetByID(stationId);
if (station == null)
return default;
var bllSummary = new BLL.MonitorDataSetSummary();
var yearMonths = bllSummary.GetYearMonth(monitorDataSourcesId);
if (yearMonths == null || !yearMonths.Any())
return default;
var bllEquipment = new BLL.Equipment();
var enginePumps = bllEquipment.GetEnginePumpListByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
if (enginePumps == null || !enginePumps.Any())
return default;
var bllMonitorPoint = new BLL.MonitorPoint();
var bllEquipmentMonitorMapping = new BLL.EquipmentMonitorMapping();
var bllMonitorDataSet = new BLL.MonitorDataSet();
var dataColumnDict = new Dictionary>();
var pumpParasDict = new Dictionary();
var pumpMonitorPointDict = new Dictionary>();
var stationMonitorPointList = new List();
var signalIds = new List();
foreach (var enginePump in enginePumps)
{
var pump = bllEquipment.GetChildPumpByEnginePumpID(enginePump.ID);
if (pump == null)
continue;
var equipmentMonitorMappings = bllEquipmentMonitorMapping.GetByEquipmentID(enginePump.ID);
if (equipmentMonitorMappings == null || !equipmentMonitorMappings.Any())
continue;
var monitorPointIds = equipmentMonitorMappings.Select(x => x.MonitorPointID).ToList();
var monitorPoints = bllMonitorPoint.GetExSignalWithSignalTypeByIds(monitorPointIds);
monitorPoints = monitorPoints?.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
monitorPoints = monitorPoints?.Where(x => x.SignalType!=IStation.SignalType.频率).ToList();
monitorPoints = monitorPoints?.Where(x => x.Flags!=null&&!x.Flags.Contains(Flags.总站)).ToList();
if (monitorPoints == null || !monitorPoints.Any())
continue;
pumpParasDict.Add(enginePump.SortCode, pump.RatedParas);
pumpMonitorPointDict.Add(enginePump.SortCode, monitorPoints);
signalIds.AddRange(monitorPoints.Select(x => x.SignalID));
foreach (var item in monitorPoints)
{
dataColumnDict[item.TagName] = new List();
}
}
var monitorPoints_station = bllMonitorPoint.GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
monitorPoints_station = monitorPoints_station?.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
stationMonitorPointList = monitorPoints_station?
.Where(x => x.Flags != null && x.Flags.Contains(IStation.Flags.总站)).ToList();
if (stationMonitorPointList != null && stationMonitorPointList.Any())
{
signalIds.AddRange(stationMonitorPointList.Select(x => x.SignalID));
foreach (var item in stationMonitorPointList)
{
dataColumnDict[item.TagName] = new List();
}
}
signalIds = signalIds.Distinct().ToList();
var monthSignalRecordPackets = new List(yearMonths.Count);
var summaries = bllSummary.GetAllByDate(monitorDataSourcesId, year, month);
if (summaries == null || !summaries.Any())
return default;
var minTime = summaries.Min(x => x.MinTime);
var maxTime = summaries.Max(x => x.MaxTime);
var totalSeconds = (int)(maxTime - minTime).TotalSeconds;
var startDay = minTime.AddDays(1);
var days = (maxTime - minTime).Days;
var capacity = _packet.CalcuCapacity(days, timeStep);// 每个月的数据量
var findIndexDict = new Dictionary();// 查找数据下标
var recordDict = new Dictionary();// 数据字典
signalIds.ForEach(x =>
{
findIndexDict.Add(x, 0);
recordDict.Add(x, IStation.Error.Default);
});
var signalRecordPackets = bllMonitorDataSet.GetSignalRecordPacket(monitorDataSourcesId, signalIds, year, month);
if (signalRecordPackets == null || !signalRecordPackets.Any())
return default;
for (int i = 0; i <= days; i++) //按天整理数据
{
var day = startDay.AddDays(i);
for (int seconds = 0; seconds < _packet.TotalSecondsOfDay; seconds += timeStep) //00点的数据不要
{
var realTime = day.AddSeconds(seconds);
_packet.GetRecordDict(realTime, signalRecordPackets, findIndexDict, recordDict, timeStep, out bool existRecord);
if (!existRecord)
continue;
if (stationMonitorPointList != null && stationMonitorPointList.Any())
{
foreach (var stationMonitorPoint in stationMonitorPointList)
{
var time = realTime;
var value = recordDict[stationMonitorPoint.SignalID];
if (stationMonitorPoint.SignalType == IStation.SignalType.压力)
{
value = Model.CurveCalcuHelper.Mpa2M(value);
}
else if (stationMonitorPoint.SignalType == IStation.SignalType.瞬时流量)
{
value = value < 0 ? 0 : value;
}
var timeValue = new TimeValue(time, value);
dataColumnDict[stationMonitorPoint.TagName].Add(timeValue);
}
}
foreach (var pumpMonitorPointItem in pumpMonitorPointDict)
{
var key = pumpMonitorPointItem.Key;
var pumpParas = pumpParasDict[key];
var pumpMonitorPointList = pumpMonitorPointItem.Value;
foreach (var pumpMonitorPoint in pumpMonitorPointList)
{
var time = realTime;
var value = recordDict[pumpMonitorPoint.SignalID];
if (pumpMonitorPoint.SignalType == IStation.SignalType.转速)
{
value = value / pumpParas.Nr;
value = value < 0 ? 0 : value;
value = value > 1 ? 1 : value;
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.频率)
{
value = value / 50;
value = value < 0 ? 0 : value;
value = value > 1 ? 1 : value;
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.压力)
{
value = Model.CurveCalcuHelper.Mpa2M(value);
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.瞬时流量)
{
value = value < 0 ? 0 : value;
}
var timeValue = new TimeValue(time, value);
dataColumnDict[pumpMonitorPoint.TagName].Add(timeValue);
}
}
}
}
var pressure_monitor_points = monitorPoints_station.Where(x => x.SignalType == IStation.SignalType.压力).ToList();
var flow_monitor_points = monitorPoints_station.Where(x => x.SignalType == IStation.SignalType.瞬时流量).ToList();
var mode_excel_data_column_list = new List();
var pressure_scada_data_column_list = new List();
var flow_scada_data_column_list = new List();
var index = 0;
foreach (var item in dataColumnDict)
{
var dataColumn = new DataColumn();
dataColumn.Title = item.Key;
dataColumn.Index = index;
dataColumn.TimeValueList = item.Value;
if (pressure_monitor_points.Exists(p => p.TagName == item.Key))
{
pressure_scada_data_column_list.Add(dataColumn);
continue;
}
if (flow_monitor_points.Exists(p => p.TagName == item.Key))
{
flow_scada_data_column_list.Add(dataColumn);
}
mode_excel_data_column_list.Add(dataColumn);
index++;
}
var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WaterDesk模型验证数据");
if (!Directory.Exists(root_folder))
{
Directory.CreateDirectory(root_folder);
}
var stationName = station.Name;
var mode_excel_file_name = root_folder + "\\" + $"{stationName}-模式.xls";
Export2Excel(mode_excel_file_name, mode_excel_data_column_list);
var pressure_scada_file_name = root_folder + "\\" + $"{stationName}-压力-Scada.csv";
ExportCSV(pressure_scada_file_name, pressure_scada_data_column_list);
var flow_scada_file_name = root_folder + "\\" + $"{stationName}-流量-Scada.csv";
ExportCSV(flow_scada_file_name, flow_scada_data_column_list);
return true;
}
///
/// 按天导出
///
///
///
///
///
public static bool Export(long monitorDataSourcesId, long stationId, int timeStep = 300)
{
var station = new BLL.Station().GetByID(stationId);
if (station == null)
return default;
var bllSummary = new BLL.MonitorDataSetSummary();
var yearMonths = bllSummary.GetYearMonth(monitorDataSourcesId);
if (yearMonths == null || !yearMonths.Any())
return default;
var bllEquipment = new BLL.Equipment();
var enginePumps = bllEquipment.GetEnginePumpListByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
if (enginePumps == null || !enginePumps.Any())
return default;
var bllMonitorPoint = new BLL.MonitorPoint();
var bllEquipmentMonitorMapping = new BLL.EquipmentMonitorMapping();
var bllMonitorDataSet = new BLL.MonitorDataSet();
var dataColumnDict = new Dictionary>();
var dataColumnDayDict = new Dictionary>();
var pumpParasDict = new Dictionary();
var pumpMonitorPointDict = new Dictionary>();
var stationMonitorPointList = new List();
var signalIds = new List();
foreach (var enginePump in enginePumps)
{
var pump = bllEquipment.GetChildPumpByEnginePumpID(enginePump.ID);
if (pump == null)
continue;
var equipmentMonitorMappings = bllEquipmentMonitorMapping.GetByEquipmentID(enginePump.ID);
if (equipmentMonitorMappings == null || !equipmentMonitorMappings.Any())
continue;
var monitorPointIds = equipmentMonitorMappings.Select(x => x.MonitorPointID).ToList();
var monitorPoints = bllMonitorPoint.GetExSignalWithSignalTypeByIds(monitorPointIds);
monitorPoints = monitorPoints?.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
monitorPoints = monitorPoints?.Where(x => x.SignalType != IStation.SignalType.频率).ToList();
monitorPoints = monitorPoints?.Where(x => x.Flags != null && !x.Flags.Contains(Flags.总站)).ToList();
if (monitorPoints == null || !monitorPoints.Any())
continue;
pumpParasDict.Add(enginePump.SortCode, pump.RatedParas);
pumpMonitorPointDict.Add(enginePump.SortCode, monitorPoints);
signalIds.AddRange(monitorPoints.Select(x => x.SignalID));
foreach (var item in monitorPoints)
{
dataColumnDict[item.TagName] = new List();
dataColumnDayDict[item.TagName] = new List();
}
}
var monitorPoints_station = bllMonitorPoint.GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
monitorPoints_station = monitorPoints_station?.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
stationMonitorPointList = monitorPoints_station?
.Where(x => x.Flags != null && x.Flags.Contains(IStation.Flags.总站)).ToList();
if (stationMonitorPointList != null && stationMonitorPointList.Any())
{
signalIds.AddRange(stationMonitorPointList.Select(x => x.SignalID));
foreach (var item in stationMonitorPointList)
{
dataColumnDict[item.TagName] = new List();
dataColumnDayDict[item.TagName] = new List();
}
}
signalIds = signalIds.Distinct().ToList();
var monthSignalRecordPackets = new List(yearMonths.Count);
var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WaterDesk模型验证数据");
if (!Directory.Exists(root_folder))
{
Directory.CreateDirectory(root_folder);
}
var root_day_folder = Path.Combine(root_folder, "Day");
if (!Directory.Exists(root_day_folder))
{
Directory.CreateDirectory(root_day_folder);
}
var stationName = station.Name;
var pressure_monitor_points = monitorPoints_station.Where(x => x.SignalType == IStation.SignalType.压力).ToList();
var flow_monitor_points = monitorPoints_station.Where(x => x.SignalType == IStation.SignalType.瞬时流量).ToList();
foreach (var yearMonth in yearMonths)
{
var year = yearMonth.Year;
var month = yearMonth.Month;
var summaries = bllSummary.GetAllByDate(monitorDataSourcesId, year, month);
if (summaries == null || !summaries.Any())
return default;
var minTime = summaries.Min(x => x.MinTime);
var maxTime = summaries.Max(x => x.MaxTime);
var totalSeconds = (int)(maxTime - minTime).TotalSeconds;
var startDay = minTime;
var days = (maxTime - minTime).Days;
var capacity = _packet.CalcuCapacity(days, timeStep);// 每个月的数据量
var findIndexDict = new Dictionary();// 查找数据下标
var recordDict = new Dictionary();// 数据字典
signalIds.ForEach(x =>
{
findIndexDict.Add(x, 0);
recordDict.Add(x, IStation.Error.Default);
});
var signalRecordPackets = bllMonitorDataSet.GetSignalRecordPacket(monitorDataSourcesId, signalIds, year, month);
if (signalRecordPackets == null || !signalRecordPackets.Any())
return default;
for (int i = 0; i <= days; i++) //按天整理数据
{
var day = startDay.AddDays(i);
dataColumnDayDict.ForEach(x => x.Value.Clear());
var mode_excel_day_data_column_list = new List();
for (int seconds = 0; seconds < _packet.TotalSecondsOfDay; seconds += timeStep) //00点的数据不要
{
var realTime = day.AddSeconds(seconds);
_packet.GetRecordDict(realTime, signalRecordPackets, findIndexDict, recordDict, timeStep, out bool existRecord);
if (!existRecord)
continue;
if (stationMonitorPointList != null && stationMonitorPointList.Any())
{
foreach (var stationMonitorPoint in stationMonitorPointList)
{
var time = realTime;
var value = recordDict[stationMonitorPoint.SignalID];
if (stationMonitorPoint.SignalType == IStation.SignalType.压力)
{
value = Model.CurveCalcuHelper.Mpa2M(value);
}
else if (stationMonitorPoint.SignalType == IStation.SignalType.瞬时流量)
{
value = value < 0 ? 0 : value;
}
var timeValue = new TimeValue(time, value);
dataColumnDict[stationMonitorPoint.TagName].Add(timeValue);
dataColumnDayDict[stationMonitorPoint.TagName].Add(timeValue);
}
}
foreach (var pumpMonitorPointItem in pumpMonitorPointDict)
{
var key = pumpMonitorPointItem.Key;
var pumpParas = pumpParasDict[key];
var pumpMonitorPointList = pumpMonitorPointItem.Value;
foreach (var pumpMonitorPoint in pumpMonitorPointList)
{
var time = realTime;
var value = recordDict[pumpMonitorPoint.SignalID];
if (pumpMonitorPoint.SignalType == IStation.SignalType.转速)
{
if (key==23&&time.Month==8&&time.Day==1)
{
}
value = value / pumpParas.Nr;
value = value < 0 ? 0 : value;
value = value > 1 ? 1 : value;
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.频率)
{
value = value / 50;
value = value < 0 ? 0 : value;
value = value > 1 ? 1 : value;
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.压力)
{
value = Model.CurveCalcuHelper.Mpa2M(value);
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.瞬时流量)
{
value = value < 0 ? 0 : value;
}
var timeValue = new TimeValue(time, value);
dataColumnDict[pumpMonitorPoint.TagName].Add(timeValue);
dataColumnDayDict[pumpMonitorPoint.TagName].Add(timeValue);
}
}
}
var index_day = 0;
for (int j = 0; j < dataColumnDayDict.Count; j++)
{
var dayItem = dataColumnDayDict.ElementAt(j);
if (pressure_monitor_points.Exists(p => p.TagName == dayItem.Key))
{
continue;
}
var dataColumn = new DataColumn();
dataColumn.Title = dayItem.Key;
dataColumn.Index = index_day;
dataColumn.TimeValueList = dayItem.Value;
mode_excel_day_data_column_list.Add(dataColumn);
index_day++;
}
var mode_excel_day_file_name = root_day_folder + "\\" + $"{day.ToString("D")}-{stationName}-模式.xls";
Export2Excel(mode_excel_day_file_name, mode_excel_day_data_column_list);
}
}
var mode_excel_data_column_list = new List();
var pressure_scada_data_column_list = new List();
var flow_scada_data_column_list = new List();
var index = 0;
foreach (var item in dataColumnDict)
{
var dataColumn = new DataColumn();
dataColumn.Title = item.Key;
dataColumn.Index = index;
dataColumn.TimeValueList = item.Value;
if (pressure_monitor_points.Exists(p => p.TagName == item.Key))
{
pressure_scada_data_column_list.Add(dataColumn);
continue;
}
if (flow_monitor_points.Exists(p => p.TagName == item.Key))
{
flow_scada_data_column_list.Add(dataColumn);
}
mode_excel_data_column_list.Add(dataColumn);
index++;
}
//var mode_excel_file_name = root_folder + "\\" + $"{stationName}-模式.xls";
//Export2Excel(mode_excel_file_name, mode_excel_data_column_list);
var pressure_scada_file_name = root_folder + "\\" + $"{stationName}-压力-Scada.csv";
ExportCSV(pressure_scada_file_name, pressure_scada_data_column_list);
var flow_scada_file_name = root_folder + "\\" + $"{stationName}-流量-Scada.csv";
ExportCSV(flow_scada_file_name, flow_scada_data_column_list);
return true;
}
///
/// 按天导出
///
///
///
///
///
///
///
public static bool ExportByDay(long monitorDataSourcesId, long stationId, int year, int month, int timeStep = 300)
{
var station = new BLL.Station().GetByID(stationId);
if (station == null)
return default;
var bllSummary = new BLL.MonitorDataSetSummary();
var yearMonths = bllSummary.GetYearMonth(monitorDataSourcesId);
if (yearMonths == null || !yearMonths.Any())
return default;
var bllEquipment = new BLL.Equipment();
var enginePumps = bllEquipment.GetEnginePumpListByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
if (enginePumps == null || !enginePumps.Any())
return default;
var bllMonitorPoint = new BLL.MonitorPoint();
var bllEquipmentMonitorMapping = new BLL.EquipmentMonitorMapping();
var bllMonitorDataSet = new BLL.MonitorDataSet();
var dataColumnDict = new Dictionary>();
var dataColumnDayDict = new Dictionary>();
var pumpParasDict = new Dictionary();
var pumpMonitorPointDict = new Dictionary>();
var stationMonitorPointList = new List();
var signalIds = new List();
foreach (var enginePump in enginePumps)
{
var pump = bllEquipment.GetChildPumpByEnginePumpID(enginePump.ID);
if (pump == null)
continue;
var equipmentMonitorMappings = bllEquipmentMonitorMapping.GetByEquipmentID(enginePump.ID);
if (equipmentMonitorMappings == null || !equipmentMonitorMappings.Any())
continue;
var monitorPointIds = equipmentMonitorMappings.Select(x => x.MonitorPointID).ToList();
var monitorPoints = bllMonitorPoint.GetExSignalWithSignalTypeByIds(monitorPointIds);
monitorPoints = monitorPoints?.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
monitorPoints = monitorPoints?.Where(x => x.SignalType != IStation.SignalType.频率).ToList();
monitorPoints = monitorPoints?.Where(x => x.Flags!=null&&!x.Flags.Contains(Flags.总站)).ToList();
if (monitorPoints == null || !monitorPoints.Any())
continue;
pumpParasDict.Add(enginePump.SortCode, pump.RatedParas);
pumpMonitorPointDict.Add(enginePump.SortCode, monitorPoints);
signalIds.AddRange(monitorPoints.Select(x => x.SignalID));
foreach (var item in monitorPoints)
{
dataColumnDict[item.TagName] = new List();
dataColumnDayDict[item.TagName] = new List();
}
}
var monitorPoints_station = bllMonitorPoint.GetExSignalWithSignalTypeByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
monitorPoints_station = monitorPoints_station?.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
stationMonitorPointList = monitorPoints_station?
.Where(x => x.Flags != null && x.Flags.Contains(IStation.Flags.总站)).ToList();
if (stationMonitorPointList != null && stationMonitorPointList.Any())
{
signalIds.AddRange(stationMonitorPointList.Select(x => x.SignalID));
foreach (var item in stationMonitorPointList)
{
dataColumnDict[item.TagName] = new List();
dataColumnDayDict[item.TagName] = new List();
}
}
signalIds = signalIds.Distinct().ToList();
var monthSignalRecordPackets = new List(yearMonths.Count);
var summaries = bllSummary.GetAllByDate(monitorDataSourcesId, year, month);
if (summaries == null || !summaries.Any())
return default;
var minTime = summaries.Min(x => x.MinTime);
var maxTime = summaries.Max(x => x.MaxTime);
var totalSeconds = (int)(maxTime - minTime).TotalSeconds;
var startDay = minTime.AddDays(1);
var days = (maxTime - minTime).Days;
var capacity = _packet.CalcuCapacity(days, timeStep);// 每个月的数据量
var findIndexDict = new Dictionary();// 查找数据下标
var recordDict = new Dictionary();// 数据字典
signalIds.ForEach(x =>
{
findIndexDict.Add(x, 0);
recordDict.Add(x, IStation.Error.Default);
});
var signalRecordPackets = bllMonitorDataSet.GetSignalRecordPacket(monitorDataSourcesId, signalIds, year, month);
if (signalRecordPackets == null || !signalRecordPackets.Any())
return default;
var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WaterDesk模型验证数据");
if (!Directory.Exists(root_folder))
{
Directory.CreateDirectory(root_folder);
}
var root_day_folder = Path.Combine(root_folder, "Day");
if (!Directory.Exists(root_day_folder))
{
Directory.CreateDirectory(root_day_folder);
}
var stationName = station.Name;
var pressure_monitor_points = monitorPoints_station.Where(x => x.SignalType == IStation.SignalType.压力).ToList();
var flow_monitor_points = monitorPoints_station.Where(x => x.SignalType == IStation.SignalType.瞬时流量).ToList();
for (int i = 0; i <= days; i++) //按天整理数据
{
var day = startDay.AddDays(i);
dataColumnDayDict.ForEach(x => x.Value.Clear());
var mode_excel_day_data_column_list = new List();
for (int seconds = 0; seconds < _packet.TotalSecondsOfDay; seconds += timeStep) //00点的数据不要
{
var realTime = day.AddSeconds(seconds);
_packet.GetRecordDict(realTime, signalRecordPackets, findIndexDict, recordDict, timeStep, out bool existRecord);
if (!existRecord)
continue;
if (stationMonitorPointList != null && stationMonitorPointList.Any())
{
foreach (var stationMonitorPoint in stationMonitorPointList)
{
var time = realTime;
var value = recordDict[stationMonitorPoint.SignalID];
if (stationMonitorPoint.SignalType == IStation.SignalType.压力)
{
value = Model.CurveCalcuHelper.Mpa2M(value);
}
else if (stationMonitorPoint.SignalType == IStation.SignalType.瞬时流量)
{
value = value < 0 ? 0 : value;
}
var timeValue = new TimeValue(time, value);
dataColumnDict[stationMonitorPoint.TagName].Add(timeValue);
dataColumnDayDict[stationMonitorPoint.TagName].Add(timeValue);
}
}
foreach (var pumpMonitorPointItem in pumpMonitorPointDict)
{
var key = pumpMonitorPointItem.Key;
var pumpParas = pumpParasDict[key];
var pumpMonitorPointList = pumpMonitorPointItem.Value;
foreach (var pumpMonitorPoint in pumpMonitorPointList)
{
var time = realTime;
var value = recordDict[pumpMonitorPoint.SignalID];
if (pumpMonitorPoint.SignalType == IStation.SignalType.转速)
{
value = value / pumpParas.Nr;
value = value < 0 ? 0 : value;
value = value > 1 ? 1 : value;
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.频率)
{
value = value / 50;
value = value < 0 ? 0 : value;
value = value > 1 ? 1 : value;
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.压力)
{
value = Model.CurveCalcuHelper.Mpa2M(value);
}
else if (pumpMonitorPoint.SignalType == IStation.SignalType.瞬时流量)
{
value = value < 0 ? 0 : value;
}
var timeValue = new TimeValue(time, value);
dataColumnDict[pumpMonitorPoint.TagName].Add(timeValue);
dataColumnDayDict[pumpMonitorPoint.TagName].Add(timeValue);
}
}
}
var index_day = 0;
for (int j = 0; j < dataColumnDayDict.Count; j++)
{
var dayItem = dataColumnDayDict.ElementAt(j);
if (pressure_monitor_points.Exists(p => p.TagName == dayItem.Key))
{
continue;
}
var dataColumn = new DataColumn();
dataColumn.Title = dayItem.Key;
dataColumn.Index = index_day;
dataColumn.TimeValueList = dayItem.Value;
mode_excel_day_data_column_list.Add(dataColumn);
index_day++;
}
var mode_excel_day_file_name = root_day_folder + "\\" + $"{day.ToString("D")}-{stationName}-模式.xls";
Export2Excel(mode_excel_day_file_name, mode_excel_day_data_column_list);
}
var mode_excel_data_column_list = new List();
var pressure_scada_data_column_list = new List();
var flow_scada_data_column_list = new List();
var index = 0;
foreach (var item in dataColumnDict)
{
var dataColumn = new DataColumn();
dataColumn.Title = item.Key;
dataColumn.Index = index;
dataColumn.TimeValueList = item.Value;
if (pressure_monitor_points.Exists(p => p.TagName == item.Key))
{
pressure_scada_data_column_list.Add(dataColumn);
continue;
}
if (flow_monitor_points.Exists(p => p.TagName == item.Key))
{
flow_scada_data_column_list.Add(dataColumn);
}
mode_excel_data_column_list.Add(dataColumn);
index++;
}
var mode_excel_file_name = root_folder + "\\" + $"{stationName}-模式.xls";
Export2Excel(mode_excel_file_name, mode_excel_data_column_list);
var pressure_scada_file_name = root_folder + "\\" + $"{stationName}-压力-Scada.csv";
ExportCSV(pressure_scada_file_name, pressure_scada_data_column_list);
var flow_scada_file_name = root_folder + "\\" + $"{stationName}-流量-Scada.csv";
ExportCSV(flow_scada_file_name, flow_scada_data_column_list);
return true;
}
public static bool Export2Excel(string fileName, List dataColumnList)
{
//try
//{
HSSFWorkbook theBook = new HSSFWorkbook();
var theSheet1 = theBook.CreateSheet("Sheet1");
IRow rowTile = theSheet1.CreateRow(0);
foreach (var info in dataColumnList)
{
rowTile.CreateCell(info.Index).SetCellValue(info.Title);
}
foreach (var item in dataColumnList)
{
for (int i = 1; i < item.TimeValueList.Count; i++)
{
var record = item.TimeValueList[i-1];
IRow row;
if (theSheet1.LastRowNum < i)
{
row = theSheet1.CreateRow(i);
}
else
{
row = theSheet1.GetRow(i);
}
row.CreateCell(item.Index).SetCellValue(record.Value == IStation.Error.Default ? 0 : record.Value);
}
}
//强制Excel在打开时重新计算所有公式
theSheet1.ForceFormulaRecalculation = true;
using (FileStream fs = File.OpenWrite(fileName))
{
theBook.Write(fs);
}
//}
//catch (Exception ex)
//{
// XtraMessageBox.Show(ex.Message);
//}
return true;
}
public static void ExportCSV(string fileName, List dataColumnList)
{
using (var fs = new FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write, FileShare.ReadWrite))
using (var sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
{
sw.WriteLine("ScadaID,Time,Value");
foreach (var item in dataColumnList)
{
for (int i = 0; i < item.TimeValueList.Count; i++)
{
var r = item.TimeValueList[i];
var v = r.Value == IStation.Error.Default ? 0 : r.Value;
sw.WriteLine($"{item.Title},{r.Time:yyyy-MM-dd HH:mm:ss},{v}");
}
}
}
}
}
}