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 } }