using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; namespace IStation.DAL { /// /// 监测月数据集 /// 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(SettingsD.File.FileNameSpacer); 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 GetDateFolderInfoList(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 { FullName = directory, Year = year, 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 GetMonitorDataSetFolderInfoList(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 infoList = 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 { FullName = directory, Year = year, Month = month, MonitorPointID = Id }; infoList.Add(info); } } return infoList; } /// /// 查询监测记录文件夹信息 /// private List GetMonitorDataSetFolderInfoList(long monitorDataSourcesId, int year, int month) { var dateFolderInfo = GetYearMonthFolder(monitorDataSourcesId, year, month); var directories = Directory.GetDirectories(dateFolderInfo); if (directories == null || directories.Count() < 1) return default; var infoList = new List(); foreach (var directory in directories) { var name = Path.GetFileName(directory); if (long.TryParse(name, out long Id)) { var info = new MonitorDataSetFolderInfo { FullName = directory, Year = year, Month = month, MonitorPointID = Id }; infoList.Add(info); } } return infoList; } /// /// 查询监测记录文件夹信息 /// private List GetMonitorDataSetFolderInfoList(DateFolderInfo dateFolderInfo) { if (dateFolderInfo == null) return default; var directories = Directory.GetDirectories(dateFolderInfo.FullName); if (directories == null || directories.Count() < 1) return default; var infoList = new List(); foreach (var directory in directories) { var name = Path.GetFileName(directory); if (long.TryParse(name, out long Id)) { var info = new MonitorDataSetFolderInfo { FullName = directory, Year = dateFolderInfo.Year, Month = dateFolderInfo.Month, MonitorPointID = Id }; infoList.Add(info); } } return infoList; } #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 GetSignalRecordPackFileInfoList(string dateFolderPath) { if (!Directory.Exists(dateFolderPath)) return default; if (!GetYearMonth(dateFolderPath, out int year, out int month)) return default; var monitorDirectories = Directory.GetDirectories(dateFolderPath); if (monitorDirectories == null || monitorDirectories.Count() < 1) return default; var infoList = new List(monitorDirectories.Count()); foreach (var monitorDirectory in monitorDirectories) { var list = GetSignalRecordPackFileInfoList(monitorDirectory, year, month); if (list != null && list.Any()) { infoList.AddRange(list); } } return infoList; } /// /// 查询信号记录包文件信息 /// private List GetSignalRecordPackFileInfoList(string monitorDataSetFolder, int year, int month) { if (!Directory.Exists(monitorDataSetFolder)) return default; var folderName = Path.GetFileName(monitorDataSetFolder); if (!long.TryParse(folderName, out long monitorPointId)) return default; var files = Directory.GetFiles(monitorDataSetFolder); if (files == null || files.Count() < 1) return default; var infoList = 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 { FullName = filePath, MonitorPointID = monitorPointId, SignalID = Id, Year = year, Month = month }; infoList.Add(info); } } return infoList; } /// /// 查询信号记录包文件信息 /// private List GetSignalRecordPackFileInfoList(MonitorDataSetFolderInfo monitorDataSetFolderInfo) { if (monitorDataSetFolderInfo == null) return default; var files = Directory.GetFiles(monitorDataSetFolderInfo.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 { FullName = filePath, MonitorPointID = monitorDataSetFolderInfo.MonitorPointID, SignalID = Id, Year = monitorDataSetFolderInfo.Year, Month = monitorDataSetFolderInfo.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 { Time = DateTime.Parse(strList[0]), Value = double.Parse(strList[1]) }; return model; } #endregion } }