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
|
{
|
/// <summary>
|
/// 监测月数据集
|
/// </summary>
|
public partial class MonitorDataSet : IDAL.IMonitorDataSet
|
{
|
//监测数据集概要实例
|
MonitorDataSetSummary _monitorDataSetSummary = new MonitorDataSetSummary();
|
|
#region Path
|
|
/// <summary>
|
/// 查询文件路径
|
/// </summary>
|
private string GetMonitorDataFolder(long projectId, long sceneId)
|
{
|
return MonitorDataSetConfig.GetMonitorDataFolder(projectId, sceneId);
|
}
|
|
/// <summary>
|
/// 查询数据集文件夹路径
|
/// </summary>
|
private string GetMonitorDataSetFolder(long projectId, long sceneId, long monitorPointId, int year, int month)
|
{
|
return MonitorDataSetConfig.GetMonitorDataSetFolder(projectId, sceneId, monitorPointId, year, month);
|
}
|
|
/// <summary>
|
/// 查询信号文件路径
|
/// </summary>
|
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
|
|
/// <summary>
|
/// 查询监测数据集
|
/// </summary>
|
public List<Model.MonitorDataSet> 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<Model.MonitorDataSet>(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;
|
}
|
|
/// <summary>
|
/// 查询监测数据集
|
/// </summary>
|
public List<Model.MonitorDataSet> 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<Model.MonitorDataSet>(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;
|
}
|
|
/// <summary>
|
/// 查询监测数据集
|
/// </summary>
|
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<Model.SignalRecordPacket>(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
|
|
/// <summary>
|
/// 查询信号记录包
|
/// </summary>
|
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<Model.SignalRecord>(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;
|
}
|
|
/// <summary>
|
/// 查询信号记录包
|
/// </summary>
|
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<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;
|
}
|
|
#endregion
|
|
#region SignalRecord
|
|
/// <summary>
|
/// 查询信号记录
|
/// </summary>
|
public List<Model.SignalRecord> 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<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 projectId, long sceneId, IEnumerable<Model.MonitorDataSet> 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;
|
}
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
public bool Save(long projectId, long sceneId, long monitorPointId, long signalId, List<Model.SignalRecord> 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
|
|
}
|
}
|