|
@@ -0,0 +1,207 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Globalization;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+
|
|
|
+namespace DW5S.DTO
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// 信号文件
|
|
|
+ /// </summary>
|
|
|
+ public class SignalFile
|
|
|
+ {
|
|
|
+ public const string SigTimeFolderFormat = "yyyyMMdd_HH";
|
|
|
+ public const string SigTimeFileFormat = "yyyyMMddHHmmss";
|
|
|
+ public const string SigFreqFormat = "#######0.000###";
|
|
|
+ public const string BandWidthFormat = "######0.###";
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 信号文件实体类
|
|
|
+ /// </summary>
|
|
|
+ public SignalFile()
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 信号时间
|
|
|
+ /// </summary>
|
|
|
+ public DateTime SigTime { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 信号频点
|
|
|
+ /// </summary>
|
|
|
+ public long SigFreq { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 信号带宽
|
|
|
+ /// </summary>
|
|
|
+ public int BandWidth { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 采样率
|
|
|
+ /// </summary>
|
|
|
+ public int Fs { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 接收站编码
|
|
|
+ /// </summary>
|
|
|
+ public string SiteCode { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 采集卡编码
|
|
|
+ /// </summary>
|
|
|
+ public string AdCardID { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 采集通道编号
|
|
|
+ /// </summary>
|
|
|
+ public int ChNum { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 卫星编号
|
|
|
+ /// </summary>
|
|
|
+ public string SatInfoID { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 日志目录(E:\data)
|
|
|
+ /// </summary>
|
|
|
+ public string DirName { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 日期目录名称(20241129_13)
|
|
|
+ /// </summary>
|
|
|
+ public string DateDirName => SigTime.ToString(SigTimeFolderFormat);
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 文件名称(xxx.dat)
|
|
|
+ /// </summary>
|
|
|
+ public string FileName => GetFileName(SigTime, SigFreq, BandWidth, Fs, SiteCode, AdCardID, ChNum, SatInfoID);
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// http下载文件名称(http://127.0.0.1/data/xxx.dat)
|
|
|
+ /// </summary>
|
|
|
+ public string HttpFile { get; set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取文件全路径
|
|
|
+ /// </summary>
|
|
|
+ public string GetLocalFullName()
|
|
|
+ {
|
|
|
+ return FileName;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取文件全路径
|
|
|
+ /// </summary>
|
|
|
+ public string GetLocalFullPath()
|
|
|
+ {
|
|
|
+ string fullName = Path.Combine(DirName, DateDirName, FileName);
|
|
|
+ return fullName;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 将文件名转换为信号文件对象
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="input"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static SignalFile Parse(string input)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrWhiteSpace(input)) return null;
|
|
|
+ input = Path.GetFileNameWithoutExtension(input);
|
|
|
+ var items = input.Split('_');
|
|
|
+
|
|
|
+ var result = new SignalFile();
|
|
|
+ DateTime sigTime;
|
|
|
+ if (DateTime.TryParseExact(items[0], SigTimeFileFormat, CultureInfo.CurrentUICulture, DateTimeStyles.None, out sigTime))
|
|
|
+ {
|
|
|
+ result.SigTime = sigTime;
|
|
|
+ }
|
|
|
+ foreach (var item in items)
|
|
|
+ {
|
|
|
+ var key = item[0];
|
|
|
+ var val = item.Substring(1);
|
|
|
+ switch (key)
|
|
|
+ {
|
|
|
+ case 'F':
|
|
|
+ result.SigFreq = double.TryParse(val, out double sigFreq) ? (long)Math.Round(sigFreq * 1e6, 0) : 0L;
|
|
|
+ break;
|
|
|
+ case 'W':
|
|
|
+ result.BandWidth = double.TryParse(val, out double bandWidth) ? (int)Math.Round(bandWidth * 1e3) : 0;
|
|
|
+ break;
|
|
|
+ case 'C':
|
|
|
+ result.Fs = int.TryParse(val, out int fs) ? fs : 0;
|
|
|
+ break;
|
|
|
+ case 'R':
|
|
|
+ result.SiteCode = val;
|
|
|
+ break;
|
|
|
+ case 'K':
|
|
|
+ result.AdCardID = val;
|
|
|
+ break;
|
|
|
+ case 'T':
|
|
|
+ result.ChNum = int.TryParse(val, out int chNum) ? chNum : 0;
|
|
|
+ break;
|
|
|
+ case 'S':
|
|
|
+ result.SatInfoID = val;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取文件名称
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sigTime">信号时间</param>
|
|
|
+ /// <param name="sigFreq">信号频点</param>
|
|
|
+ /// <param name="bandWidth">信号带宽</param>
|
|
|
+ /// <param name="fs">采样率</param>
|
|
|
+ /// <param name="satNum">卫星编号</param>
|
|
|
+ /// <param name="siteCode">站点编码</param>
|
|
|
+ /// <param name="adcCode">采集卡编码</param>
|
|
|
+ /// <param name="chNum">通道号</param>
|
|
|
+ /// <param name="nullText">值为空时的替换符</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static string GetFileName(DateTime? sigTime, long? sigFreq, int? bandWidth, int? fs, string siteCode, string adcCode, int? chNum, string satNum, string nullText = "")
|
|
|
+ {
|
|
|
+ string sigTimeText = sigTime.HasValue ? sigTime.Value.ToString(SigTimeFileFormat) : nullText;
|
|
|
+ string sigFreqText = sigFreq.HasValue && sigFreq > 0 ? "_F" + Math.Round(sigFreq.Value * 1e-6, 6).ToString(SigFreqFormat) : nullText;
|
|
|
+ string bandWidthText = bandWidth.HasValue && bandWidth > 0 ? "_W" + Math.Round(bandWidth.Value * 1e-3, 3).ToString(BandWidthFormat) : nullText;
|
|
|
+ string fsText = fs.HasValue && fs > 0 ? "_C" + fs.Value.ToString() : nullText;
|
|
|
+ string siteCodeText = !string.IsNullOrWhiteSpace(siteCode) ? "_" + siteCode.Trim() : nullText;
|
|
|
+ string adcCodeText = !string.IsNullOrWhiteSpace(adcCode) ? "_" + adcCode.Trim() : nullText;
|
|
|
+ string chNumText = chNum.HasValue && chNum > 0 ? $"_T{chNum}" : nullText;
|
|
|
+ string satNumText = !string.IsNullOrWhiteSpace(satNum) ? "_S" + satNum.Trim() : nullText;
|
|
|
+ return string.Concat(sigTimeText, sigFreqText, bandWidthText, fsText, siteCodeText, adcCodeText, chNumText, satNumText, ".dat");
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 创建信号文件基础信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sigTime">信号时间</param>
|
|
|
+ /// <param name="sigFreq">信号频点</param>
|
|
|
+ /// <param name="bandWidth">信号带宽</param>
|
|
|
+ /// <param name="fs">采样率(个)</param>
|
|
|
+ /// <param name="satNum">卫星编号</param>
|
|
|
+ /// <param name="siteCode">站点编码</param>
|
|
|
+ /// <param name="adcCode">采集卡编码</param>
|
|
|
+ /// <param name="chNum">通道号</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static SignalFile Create(DateTime sigTime, long sigFreq, int bandWidth, int fs, string siteCode, string adcCode, int chNum, string satNum)
|
|
|
+ {
|
|
|
+ var result = new SignalFile()
|
|
|
+ {
|
|
|
+ SigTime = sigTime,
|
|
|
+ SigFreq = sigFreq,
|
|
|
+ BandWidth = bandWidth,
|
|
|
+ Fs = fs,
|
|
|
+ SiteCode = siteCode,
|
|
|
+ AdCardID = adcCode,
|
|
|
+ ChNum = chNum,
|
|
|
+ SatInfoID = satNum
|
|
|
+ };
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|