using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
|
namespace IStation.DAL
|
{
|
/// <summary>
|
/// 监测月数据集
|
/// </summary>
|
public partial class MonitorDataSet
|
{
|
//监测数据集概要实例
|
readonly MonitorDataSetSummary _monitorDataSetSummary = new MonitorDataSetSummary();
|
|
#region Path
|
|
/// <summary>
|
/// 查询监测数据集文件夹
|
/// </summary>
|
public string GetRootFolder(long monitorDataSourcesId)
|
{
|
var monitorDataSourcesFolder = FileHelper.GetMonitorDataSourcesFolder(Settings.Project.ID, monitorDataSourcesId);
|
if (!Directory.Exists(monitorDataSourcesFolder))
|
Directory.CreateDirectory(monitorDataSourcesFolder);
|
var monitorDataSetFolder = Path.Combine(monitorDataSourcesFolder, Settings.File.MonitorDataFolder);
|
if (!Directory.Exists(monitorDataSetFolder))
|
Directory.CreateDirectory(monitorDataSetFolder);
|
return monitorDataSetFolder;
|
}
|
|
/// <summary>
|
/// 查询日期文件夹
|
/// </summary>
|
public string GetYearMonthFolder(long monitorDataSourcesId, int year, int month)
|
{
|
var monitorDataSetFolder = GetRootFolder(monitorDataSourcesId);
|
var timeFolderName = "";
|
if (month < 10)
|
{
|
timeFolderName = $"{year}{Settings.File.FileNameSpacer}0{month}";
|
}
|
else
|
{
|
timeFolderName = $"{year}{Settings.File.FileNameSpacer}{month}";
|
}
|
var timeFolderPath = Path.Combine(monitorDataSetFolder, timeFolderName);
|
if (!Directory.Exists(timeFolderPath))
|
Directory.CreateDirectory(timeFolderPath);
|
return timeFolderPath;
|
}
|
|
/// <summary>
|
/// 查询监测数据集文件夹
|
/// </summary>
|
public string GetMonitorDataSetFolder(long monitorDataSourcesId, long monitorPointId, int year, int month)
|
{
|
var timeFolder = GetYearMonthFolder(monitorDataSourcesId, year, month);
|
var monitorPointFolderPath = Path.Combine(timeFolder, monitorPointId.ToString());
|
if (!Directory.Exists(monitorPointFolderPath))
|
Directory.CreateDirectory(monitorPointFolderPath);
|
return monitorPointFolderPath;
|
}
|
|
/// <summary>
|
/// 查询信号记录文件路径
|
/// </summary>
|
public bool GetSignalRecordPacketFile(long monitorDataSourcesId, long monitorPointId, long signaId, int year, int month, out string filePath)
|
{
|
var monitorPointFolder = GetMonitorDataSetFolder(monitorDataSourcesId, monitorPointId, year, month);
|
filePath = Path.Combine(monitorPointFolder, signaId + Settings.File.SignalRecordFileExtension);
|
return File.Exists(filePath);
|
}
|
|
#endregion
|
|
#region Get
|
|
#region MonitorDataSet
|
|
/// <summary>
|
/// 查询监测数据集
|
/// </summary>
|
public List<Model.MonitorDataSet> GetMonitorDataSet(long monitorDataSourcesId)
|
{
|
var rootFolder = this.GetRootFolder(monitorDataSourcesId);
|
var dateFolderInfoList = this.GetDateFolderInfoList(rootFolder);
|
if (dateFolderInfoList == null || dateFolderInfoList.Count() < 1)
|
return default;
|
|
var MonitorDataSetCount = _monitorDataSetSummary.GetMonitorDataSetCount(monitorDataSourcesId);
|
var MonitorDataSetList = new List<Model.MonitorDataSet>(MonitorDataSetCount);
|
foreach (var dateFolderInfo in dateFolderInfoList)
|
{
|
var monitorDataSetFolderInfoList = this.GetMonitorDataSetFolderInfoList(dateFolderInfo);
|
if (monitorDataSetFolderInfoList == null || monitorDataSetFolderInfoList.Count < 1)
|
continue;
|
|
foreach (var monitorDataSetFolderInfo in monitorDataSetFolderInfoList)
|
{
|
var monitorPointId = monitorDataSetFolderInfo.MonitorPointID;
|
var year = monitorDataSetFolderInfo.Year;
|
var month = monitorDataSetFolderInfo.Month;
|
var MonitorDataSet = GetMonitorDataSet(monitorDataSourcesId, monitorPointId, year, month);
|
if (MonitorDataSet != null)
|
MonitorDataSetList.Add(MonitorDataSet);
|
}
|
}
|
return MonitorDataSetList;
|
}
|
|
/// <summary>
|
/// 查询监测数据集
|
/// </summary>
|
public List<Model.MonitorDataSet> GetMonitorDataSet(long monitorDataSourcesId, long monitorPointId)
|
{
|
|
if (monitorPointId < 1)
|
return default;
|
|
var rootFolder = this.GetRootFolder(monitorDataSourcesId);
|
var dateFolderInfoList = this.GetDateFolderInfoList(rootFolder);
|
if (dateFolderInfoList == null || dateFolderInfoList.Count() < 1)
|
return default;
|
|
var MonitorDataSetList = new List<Model.MonitorDataSet>(dateFolderInfoList.Count());
|
foreach (var dateFolderInfo in dateFolderInfoList)
|
{
|
var monitorDataSetFolderInfoList = this.GetMonitorDataSetFolderInfoList(dateFolderInfo);
|
if (monitorDataSetFolderInfoList == null || monitorDataSetFolderInfoList.Count < 1)
|
continue;
|
var monitorDataSetFolderInfo = monitorDataSetFolderInfoList.Find(x => x.MonitorPointID == monitorPointId);
|
if (monitorDataSetFolderInfo == null)
|
continue;
|
var year = monitorDataSetFolderInfo.Year;
|
var month = monitorDataSetFolderInfo.Month;
|
var MonitorDataSet = GetMonitorDataSet(monitorDataSourcesId, monitorPointId, year, month);
|
if (MonitorDataSet != null)
|
MonitorDataSetList.Add(MonitorDataSet);
|
}
|
|
return MonitorDataSetList;
|
}
|
|
|
/// <summary>
|
/// 查询监测数据集
|
/// </summary>
|
public Model.MonitorDataSet GetMonitorDataSet(long monitorDataSourcesId, long monitorPointId, int year, int month)
|
{
|
if (monitorPointId < 1)
|
return default;
|
|
var monitorDataSetFolder = this.GetMonitorDataSetFolder(monitorDataSourcesId, monitorPointId, year, month);
|
var signalRecordPacketFileInfoList = this.GetSignalRecordPackFileInfoList(monitorDataSetFolder, year, month);
|
if (signalRecordPacketFileInfoList == null || signalRecordPacketFileInfoList.Count < 1)
|
return default;
|
|
var signalRecordPacketCount = _monitorDataSetSummary.GetSignalRecordPacketCount(monitorDataSourcesId, monitorPointId, year, month);
|
if (signalRecordPacketCount < 1)
|
return default;
|
|
var MonitorDataSet = new Model.MonitorDataSet
|
{
|
MonitorPointID = monitorPointId,
|
Year = year,
|
Month = month,
|
PacketList = new List<Model.SignalRecordPacket>(signalRecordPacketCount)
|
};
|
|
foreach (var signalRecordFile in signalRecordPacketFileInfoList)
|
{
|
var signalId = signalRecordFile.SignalID;
|
var signalRecordPacket = GetSignalRecordPacket(monitorDataSourcesId, monitorPointId, signalId, year, month);
|
if (signalRecordPacket != null)
|
{
|
MonitorDataSet.PacketList.Add(signalRecordPacket);
|
}
|
}
|
|
return MonitorDataSet;
|
}
|
|
#endregion
|
|
#region SignalRecordPacket
|
|
/// <summary>
|
/// 查询信号记录包
|
/// </summary>
|
public Model.SignalRecordPacket GetSignalRecordPacket(long monitorDataSourcesId, long monitorPointId, long signalId)
|
{
|
if (monitorPointId < 1)
|
return default;
|
if (signalId < 1)
|
return default;
|
|
var rootFolder = this.GetRootFolder(monitorDataSourcesId);
|
var dateFolderInfoList = this.GetDateFolderInfoList(rootFolder);
|
if (dateFolderInfoList == null || dateFolderInfoList.Count() < 1)
|
return default;
|
|
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(monitorDataSourcesId, monitorPointId, signalId);
|
if (signalRecordCount < 1)
|
return default;
|
|
var signalRecordPacket = new Model.SignalRecordPacket
|
{
|
SignalID = signalId,
|
RecordList = new List<Model.SignalRecord>(signalRecordCount)
|
};
|
|
foreach (var dateFolderInfo in dateFolderInfoList)
|
{
|
var year = dateFolderInfo.Year;
|
var month = dateFolderInfo.Month;
|
var valid = this.GetSignalRecordPacketFile(monitorDataSourcesId, monitorPointId, signalId, year, month, out string filePath);
|
if (!valid)
|
continue;
|
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
using (var sr = new StreamReader(fs, Encoding.UTF8))
|
{
|
var strLine = string.Empty;
|
while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
|
{
|
var content = FromDsString(strLine);
|
signalRecordPacket.RecordList.Add(content);
|
}
|
}
|
}
|
return signalRecordPacket;
|
}
|
|
/// <summary>
|
/// 查询信号记录包
|
/// </summary>
|
public Model.SignalRecordPacket GetSignalRecordPacket(long monitorDataSourcesId, long monitorPointId, long signalId, int year, int month)
|
{
|
if (monitorPointId < 1)
|
return default;
|
if (signalId < 1)
|
return default;
|
|
var valid = this.GetSignalRecordPacketFile(monitorDataSourcesId, monitorPointId, signalId, year, month, out string filePath);
|
if (!valid)
|
return default;
|
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(monitorDataSourcesId, monitorPointId, signalId, year, month);
|
if (signalRecordCount < 1)
|
return default;
|
|
var signalRecordPacket = new Model.SignalRecordPacket
|
{
|
SignalID = signalId,
|
RecordList = new List<Model.SignalRecord>(signalRecordCount)
|
};
|
|
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
using (var sr = new StreamReader(fs, Encoding.UTF8))
|
{
|
var strLine = string.Empty;
|
while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
|
{
|
var content = FromDsString(strLine);
|
signalRecordPacket.RecordList.Add(content);
|
}
|
}
|
return signalRecordPacket;
|
}
|
|
|
/// <summary>
|
/// 查询信号记录包
|
/// </summary>
|
public List<Model.SignalRecordPacket> GetSignalRecordPacket(long monitorDataSourcesId, List<long> signalIds, int year, int month)
|
{
|
if (signalIds == null || !signalIds.Any())
|
return default;
|
|
var dateFolder = this.GetYearMonthFolder(monitorDataSourcesId, year, month);
|
var signalRecordPackFileInfoList = this.GetSignalRecordPackFileInfoList(dateFolder);
|
if (signalRecordPackFileInfoList == null || signalRecordPackFileInfoList.Count() < 1)
|
return default;
|
signalRecordPackFileInfoList = signalRecordPackFileInfoList.Where(x => signalIds.Contains(x.SignalID)).ToList();
|
|
var signalRecordPackets = new List<Model.SignalRecordPacket>();
|
foreach (var signalFolderInfo in signalRecordPackFileInfoList)
|
{
|
var monitorPointId = signalFolderInfo.MonitorPointID;
|
var signalId = signalFolderInfo.SignalID;
|
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(monitorDataSourcesId, monitorPointId, signalId, year, month);
|
if (signalRecordCount < 1)
|
return default;
|
|
var signalRecordPacket = new Model.SignalRecordPacket
|
{
|
SignalID = signalId,
|
RecordList = new List<Model.SignalRecord>(signalRecordCount)
|
};
|
using (var fs = new FileStream(signalFolderInfo.FullName, FileMode.Open, FileAccess.Read))
|
using (var sr = new StreamReader(fs, Encoding.UTF8))
|
{
|
var strLine = string.Empty;
|
while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
|
{
|
var content = FromDsString(strLine);
|
signalRecordPacket.RecordList.Add(content);
|
}
|
}
|
|
signalRecordPackets.Add(signalRecordPacket);
|
}
|
return signalRecordPackets;
|
}
|
|
#endregion
|
|
#region SignalRecord
|
|
/// <summary>
|
/// 查询信号记录
|
/// </summary>
|
public List<Model.SignalRecord> GetSignalRecord(long monitorDataSourcesId, long monitorPointId, long signalId, int year, int month)
|
{
|
if (monitorPointId < 1)
|
return default;
|
if (signalId < 1)
|
return default;
|
|
var valid = this.GetSignalRecordPacketFile(monitorDataSourcesId, monitorPointId, signalId, year, month, out string filePath);
|
if (!valid)
|
return default;
|
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(monitorDataSourcesId, monitorPointId, signalId, year, month);
|
if (signalRecordCount < 1)
|
return default;
|
|
var signalRecordList = new List<Model.SignalRecord>(signalRecordCount);
|
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
using (var sr = new StreamReader(fs, Encoding.UTF8))
|
{
|
var strLine = string.Empty;
|
while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
|
{
|
var content = FromDsString(strLine);
|
signalRecordList.Add(content);
|
}
|
}
|
return signalRecordList;
|
}
|
|
#endregion
|
|
#endregion
|
|
#region Save
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
public bool Save(long monitorDataSourcesId, IEnumerable<Model.MonitorDataSet> list)
|
{
|
if (list == null || list.Count() < 1)
|
return default;
|
for (int i = 0; i < list.Count(); i++)
|
{
|
var dataSet = list.ElementAt(i);
|
if (!Save(monitorDataSourcesId, dataSet))
|
{
|
//未做判断
|
}
|
}
|
return true;
|
}
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
public bool Save(long monitorDataSourcesId, Model.MonitorDataSet rhs)
|
{
|
if (rhs == null)
|
return default;
|
if (rhs.PacketList == null || rhs.PacketList.Count < 1)
|
return default;
|
|
var monitorPointId = rhs.MonitorPointID;
|
var year = rhs.Year;
|
var month = rhs.Month;
|
for (int i = 0; i < rhs.PacketList.Count; i++)
|
{
|
var packet = rhs.PacketList[i];
|
if (!Save(monitorDataSourcesId, monitorPointId, packet.SignalID, packet.RecordList, year, month))
|
{
|
//未做判断
|
}
|
}
|
return true;
|
}
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
public bool Save(long monitorDataSourcesId, long monitorPointId, long signalId, List<Model.SignalRecord> signalRecords, int year, int month)
|
{
|
if (monitorPointId < 1)
|
return default;
|
if (signalId < 1)
|
return default;
|
if (signalRecords == null || signalRecords.Count < 1)
|
return default;
|
|
GetSignalRecordPacketFile(monitorDataSourcesId, monitorPointId, signalId, year, month, out string filePath);
|
using (var fs = new FileStream(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, FileShare.ReadWrite))
|
using (var sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
|
{
|
foreach (var record in signalRecords)
|
{
|
var strLine = ToDsString(record);
|
sw.WriteLine(strLine);
|
}
|
}
|
|
var model = new Model.MonitorDataSetSummary
|
{
|
MonitorPointID = monitorPointId,
|
SignalID = signalId,
|
Year = year,
|
Month = month,
|
MinTime = signalRecords.Min(x => x.Time),
|
MaxTime = signalRecords.Max(x => x.Time),
|
Count = signalRecords.Count()
|
};
|
if (_monitorDataSetSummary.Set(monitorDataSourcesId, model, year, month))
|
return false;
|
return true;
|
}
|
|
#endregion
|
|
#region Clear
|
|
/// <summary>
|
/// 清空
|
/// </summary>
|
public bool Clear(long monitorDataSourcesId, long monitorPointId, long signalId)
|
{
|
if (monitorPointId < 1)
|
return default;
|
if (signalId < 1)
|
return default;
|
var yearMonths = _monitorDataSetSummary.GetYearMonth(monitorDataSourcesId);
|
if (yearMonths != null && yearMonths.Any())
|
{
|
foreach (var yearMonth in yearMonths)
|
{
|
var exist = GetSignalRecordPacketFile(monitorDataSourcesId, monitorPointId, signalId, yearMonth.Year, yearMonth.Month, out string filePath);
|
if (!exist)
|
continue;
|
File.Delete(filePath);
|
}
|
}
|
return true;
|
}
|
|
#endregion
|
}
|
}
|