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