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; namespace IStation.DAL.LocalFile { /// /// 监测月数据集 /// public partial class MonitorDataSet { /// /// 日期文件夹信息类 /// private class DateFolderInfo { public string FullName { get; set; } public int Year { get; set; } public int Month { get; set; } } #region DateFolderInfo /// /// 查询年月 /// private bool GetYearMonth(string folderPath, out int year, out int month) { year = month = 0; if (!Directory.Exists(folderPath)) return false; var name = Path.GetFileName(folderPath); var strList = name.Split(MonitorDataSetConfig.Separator); if (strList.Length != 2) return false; if (!int.TryParse(strList[0], out year)) { return false; } if (!int.TryParse(strList[1], out month)) { return false; } return true; } /// /// 查询日期文件夹信息列表 /// private List GetDateFolderInfos(string monitorDataFolderPath) { if (!Directory.Exists(monitorDataFolderPath)) return default; var directories = Directory.GetDirectories(monitorDataFolderPath); if (directories == null || directories.Count() < 1) return default; var list = new List(directories.Count()); foreach (var directory in directories) { if (!GetYearMonth(directory, out int year, out int month)) continue; var info = new DateFolderInfo(); info.FullName = directory; info.Year = year; info.Month = month; list.Add(info); } if (list.Count > 0) { list = list.OrderBy(x => x.Year).ThenBy(x => x.Month).ToList(); } return list; } #endregion /// /// 监测月数据集文件夹信息类 /// private class MonitorDataSetFolderInfo { public string FullName { get; set; } public long MonitorPointId { get; set; } public int Year { get; set; } public int Month { get; set; } } #region MonitorDataSetFolderInfo /// /// 查询监测记录文件夹信息 /// private List GetMonitorDataSetFolderInfos(string dateFolderPath) { if (!Directory.Exists(dateFolderPath)) return default; if (!GetYearMonth(dateFolderPath, out int year, out int month)) return default; var directories = Directory.GetDirectories(dateFolderPath); if (directories == null || directories.Count() < 1) return default; var infos = new List(directories.Count()); foreach (var directory in directories) { var name = Path.GetFileName(directory); if (long.TryParse(name, out long Id)) { var info = new MonitorDataSetFolderInfo(); info.FullName = directory; info.Year = year; info.Month = month; info.MonitorPointId = Id; infos.Add(info); } } return infos; } /// /// 查询监测记录文件夹信息 /// private List GetMonitorDataSetFolderInfos(DateFolderInfo dateFolderInfo) { if (dateFolderInfo == null) return default; var directories = Directory.GetDirectories(dateFolderInfo.FullName); if (directories == null || directories.Count() < 1) return default; var infos = new List(); foreach (var directory in directories) { var name = Path.GetFileName(directory); if (long.TryParse(name, out long Id)) { var info = new MonitorDataSetFolderInfo(); info.FullName = directory; info.Year = dateFolderInfo.Year; info.Month = dateFolderInfo.Month; info.MonitorPointId = Id; infos.Add(info); } } return infos; } #endregion /// /// 信号记录包文件信息类 /// public class SignalRecordPackFileInfo { public string FullName { get; set; } public long MonitorPointId { get; set; } public long SignalId { get; set; } public int Year { get; set; } public int Month { get; set; } } #region SignalRecordPackFileInfo /// /// 查询信号记录包文件信息 /// private List GetSignalRecordPackFileInfos(string montiorDataSetFolder, int year, int month) { if (!Directory.Exists(montiorDataSetFolder)) return default; var folderName = Path.GetFileName(montiorDataSetFolder); if (!long.TryParse(folderName, out long montiorPointId)) return default; var files = Directory.GetFiles(montiorDataSetFolder); if (files == null || files.Count() < 1) return default; var infos = new List(files.Count()); foreach (var filePath in files) { var name = Path.GetFileNameWithoutExtension(filePath); if (long.TryParse(name, out long Id)) { var info = new SignalRecordPackFileInfo(); info.FullName = filePath; info.MonitorPointId = montiorPointId; info.SignalId = Id; info.Year = year; info.Month = month; infos.Add(info); } } return infos; } /// /// 查询信号记录包文件信息 /// private List GetSignalRecordPackFileInfos(MonitorDataSetFolderInfo montiorDataSetFolderInfo) { if (montiorDataSetFolderInfo == null) return default; var files = Directory.GetFiles(montiorDataSetFolderInfo.FullName); if (files == null || files.Count() < 1) return default; var infos = new List(files.Count()); foreach (var filePath in files) { var name = Path.GetFileNameWithoutExtension(filePath); if (long.TryParse(name, out long Id)) { var info = new SignalRecordPackFileInfo(); info.FullName = filePath; info.MonitorPointId = montiorDataSetFolderInfo.MonitorPointId; info.SignalId = Id; info.Year = montiorDataSetFolderInfo.Year; info.Month = montiorDataSetFolderInfo.Month; infos.Add(info); } } return infos; } #endregion #region CsvConvert //To private string ToDsString(Model.SignalRecord record) { return $"{record.Time:yyyy-MM-dd HH:mm:ss},{record.Value}"; } //from public Model.SignalRecord FromDsString(string dsString) { var strList = dsString.Split(','); if (strList.Length < 2) return default; var model = new Model.SignalRecord(); model.Time = DateTime.Parse(strList[0]); model.Value = double.Parse(strList[1]); return model; } #endregion } }