using System;
using System.Text;
using System.Collections.Generic;
using System.Data;
using System.Runtime.Serialization;
using System.Linq;
using System.IO;
using System.Runtime.InteropServices;
using System.Xml.Linq;
using System.Net.Sockets;
namespace IStation.DAL.LocalFile
{
///
/// 监测月数据集
///
public partial class MonitorDataSet : IDAL.IMonitorDataSet
{
//监测数据集概要实例
MonitorDataSetSummary _monitorDataSetSummary = new MonitorDataSetSummary();
#region Path
///
/// 查询文件路径
///
private string GetMonitorDataFolder(long projectId, long sceneId)
{
return MonitorDataSetConfig.GetMonitorDataFolder(projectId, sceneId);
}
///
/// 查询数据集文件夹路径
///
private string GetMonitorDataSetFolder(long projectId, long sceneId, long monitorPointId, int year, int month)
{
return MonitorDataSetConfig.GetMonitorDataSetFolder(projectId, sceneId, monitorPointId, year, month);
}
///
/// 查询信号文件路径
///
private bool GetSignalRecordPacketFile(long projectId, long sceneId, long monitorPointId, long signaId, int year, int month, out string filePath)
{
filePath = MonitorDataSetConfig.GetSignalRecordFile(projectId, sceneId, monitorPointId, signaId, year, month);
if (!File.Exists(filePath))
return false;
return true;
}
#endregion
#region Get
#region MonitorDataSet
///
/// 查询监测数据集
///
public List GetMonitorDataSet(long projectId, long sceneId)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
var rootFolder = this.GetMonitorDataFolder(projectId, sceneId);
var dateFolderInfos = this.GetDateFolderInfos(rootFolder);
if (dateFolderInfos == null || dateFolderInfos.Count() < 1)
return default;
var MonitorDataSetCount = _monitorDataSetSummary.GetMonitorDataSetCount(projectId, sceneId);
var MonitorDataSetList = new List(MonitorDataSetCount);
foreach (var dateFolderInfo in dateFolderInfos)
{
var montiorDataSetFolderInfos = this.GetMonitorDataSetFolderInfos(dateFolderInfo);
if (montiorDataSetFolderInfos == null || montiorDataSetFolderInfos.Count < 1)
continue;
foreach (var montiorDataSetFolderInfo in montiorDataSetFolderInfos)
{
var monitorPointId = montiorDataSetFolderInfo.MonitorPointId;
var year = montiorDataSetFolderInfo.Year;
var month = montiorDataSetFolderInfo.Month;
var MonitorDataSet = GetMonitorDataSet(projectId, sceneId, monitorPointId, year, month);
if (MonitorDataSet != null)
MonitorDataSetList.Add(MonitorDataSet);
}
}
return MonitorDataSetList;
}
///
/// 查询监测数据集
///
public List GetMonitorDataSet(long projectId, long sceneId, long monitorPointId)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (monitorPointId < 1)
return default;
var rootFolder = this.GetMonitorDataFolder(projectId, sceneId);
var dateFolderInfos = this.GetDateFolderInfos(rootFolder);
if (dateFolderInfos == null || dateFolderInfos.Count() < 1)
return default;
var MonitorDataSetList = new List(dateFolderInfos.Count());
foreach (var dateFolderInfo in dateFolderInfos)
{
var montiorDataSetFolderInfos = this.GetMonitorDataSetFolderInfos(dateFolderInfo);
if (montiorDataSetFolderInfos == null || montiorDataSetFolderInfos.Count < 1)
continue;
var montiorDataSetFolderInfo = montiorDataSetFolderInfos.Find(x => x.MonitorPointId == monitorPointId);
if (montiorDataSetFolderInfo == null)
continue;
var year = montiorDataSetFolderInfo.Year;
var month = montiorDataSetFolderInfo.Month;
var MonitorDataSet = GetMonitorDataSet(projectId, sceneId, monitorPointId, year, month);
if (MonitorDataSet != null)
MonitorDataSetList.Add(MonitorDataSet);
}
return MonitorDataSetList;
}
///
/// 查询监测数据集
///
public Model.MonitorDataSet GetMonitorDataSet(long projectId, long sceneId, long monitorPointId, int year, int month)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (monitorPointId < 1)
return default;
var monitorDataSetFolder = this.GetMonitorDataSetFolder(projectId, sceneId, monitorPointId, year, month);
var signalRecordPacketFileInfos = this.GetSignalRecordPackFileInfos(monitorDataSetFolder, year, month);
if (signalRecordPacketFileInfos == null || signalRecordPacketFileInfos.Count < 1)
return default;
var signalRecordPacketCount = _monitorDataSetSummary.GetSignalRecordPacketCount(projectId, sceneId, monitorPointId, year, month);
if (signalRecordPacketCount < 1)
return default;
var MonitorDataSet = new Model.MonitorDataSet();
MonitorDataSet.MonitorPointId = monitorPointId;
MonitorDataSet.Year = year;
MonitorDataSet.Month = month;
MonitorDataSet.PacketList = new List(signalRecordPacketCount);
foreach (var signalRecordFile in signalRecordPacketFileInfos)
{
var signalId = signalRecordFile.SignalId;
var signalRecordPacket = GetSignalRecordPacket(projectId, sceneId, monitorPointId, signalId, year, month);
if (signalRecordPacket != null)
{
MonitorDataSet.PacketList.Add(signalRecordPacket);
}
}
return MonitorDataSet;
}
#endregion
#region SignalRecordPacket
///
/// 查询信号记录包
///
public Model.SignalRecordPacket GetSignalRecordPacket(long projectId, long sceneId, long monitorPointId, long signalId)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (monitorPointId < 1)
return default;
if (signalId < 1)
return default;
var rootFolder = this.GetMonitorDataFolder(projectId, sceneId);
var dateFolderInfos = this.GetDateFolderInfos(rootFolder);
if (dateFolderInfos == null || dateFolderInfos.Count() < 1)
return default;
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(projectId, sceneId, monitorPointId, signalId);
if (signalRecordCount < 1)
return default;
var signalRecordPacket = new Model.SignalRecordPacket();
signalRecordPacket.SignalId = signalId;
signalRecordPacket.RecordList = new List(signalRecordCount);
foreach (var dateFolderInfo in dateFolderInfos)
{
var year = dateFolderInfo.Year;
var month = dateFolderInfo.Month;
var valid = this.GetSignalRecordPacketFile(projectId, sceneId, 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;
}
///
/// 查询信号记录包
///
public Model.SignalRecordPacket GetSignalRecordPacket(long projectId, long sceneId, long monitorPointId, long signalId, int year, int month)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (monitorPointId < 1)
return default;
if (signalId < 1)
return default;
var valid = this.GetSignalRecordPacketFile(projectId, sceneId, monitorPointId, signalId, year, month, out string filePath);
if (!valid)
return default;
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(projectId, sceneId, monitorPointId, signalId, year, month);
if (signalRecordCount < 1)
return default;
var signalRecordPacket = new Model.SignalRecordPacket();
signalRecordPacket.SignalId = signalId;
signalRecordPacket.RecordList = new List(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;
}
#endregion
#region SignalRecord
///
/// 查询信号记录
///
public List GetSignalRecord(long projectId, long sceneId, long monitorPointId, long signalId, int year, int month)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (monitorPointId < 1)
return default;
if (signalId < 1)
return default;
var valid = this.GetSignalRecordPacketFile(projectId, sceneId, monitorPointId, signalId, year, month, out string filePath);
if (!valid)
return default;
var signalRecordCount = _monitorDataSetSummary.GetSignalRecordCount(projectId, sceneId, monitorPointId, signalId, year, month);
if (signalRecordCount < 1)
return default;
var signalRecordList = new List(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
///
/// 保存
///
public bool Save(long projectId, long sceneId, IEnumerable list)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (list == null || list.Count() < 1)
return default;
for (int i = 0; i < list.Count(); i++)
{
var dataSet = list.ElementAt(i);
if (!Save(projectId, sceneId, dataSet))
{
//未做判断
}
}
return true;
}
///
/// 保存
///
public bool Save(long projectId, long sceneId, Model.MonitorDataSet rhs)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
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(projectId, sceneId, monitorPointId, packet.SignalId, packet.RecordList, year, month))
{
//未做判断
}
}
return true;
}
///
/// 保存
///
public bool Save(long projectId, long sceneId, long monitorPointId, long signalId, List signalRecords, int year, int month)
{
if (projectId < 1)
return default;
if (sceneId < 1)
return default;
if (monitorPointId < 1)
return default;
if (signalId < 1)
return default;
if (signalRecords == null || signalRecords.Count < 1)
return default;
var valid = GetSignalRecordPacketFile(projectId, sceneId, 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();
model.MonitorPointId = monitorPointId;
model.SignalId = signalId;
model.Year = year;
model.Month = month;
model.MinTime = signalRecords.Min(x => x.Time);
model.MaxTime = signalRecords.Max(x => x.Time);
model.Count = signalRecords.Count();
if (_monitorDataSetSummary.Set(projectId, sceneId, model, year, month))
return false;
return true;
}
#endregion
}
}