SignalFileDto.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace DW5S.DTO
  8. {
  9. /// <summary>
  10. /// 信号文件
  11. /// </summary>
  12. public class SignalFile
  13. {
  14. public const string SigTimeFolderFormat = "yyyyMMdd_HH";
  15. public const string SigTimeFileFormat = "yyyyMMddHHmmss";
  16. public const string SigFreqFormat = "#######0.000###";
  17. public const string BandWidthFormat = "######0.###";
  18. /// <summary>
  19. /// 信号文件实体类
  20. /// </summary>
  21. public SignalFile()
  22. {
  23. }
  24. /// <summary>
  25. /// 信号时间
  26. /// </summary>
  27. public DateTime SigTime { get; set; }
  28. /// <summary>
  29. /// 信号频点
  30. /// </summary>
  31. public long SigFreq { get; set; }
  32. /// <summary>
  33. /// 信号带宽
  34. /// </summary>
  35. public int BandWidth { get; set; }
  36. /// <summary>
  37. /// 采样率
  38. /// </summary>
  39. public int Fs { get; set; }
  40. /// <summary>
  41. /// 接收站编码
  42. /// </summary>
  43. public string SiteCode { get; set; }
  44. /// <summary>
  45. /// 采集卡编码
  46. /// </summary>
  47. public string AdCardID { get; set; }
  48. /// <summary>
  49. /// 采集通道编号
  50. /// </summary>
  51. public int ChNum { get; set; }
  52. /// <summary>
  53. /// 卫星编号
  54. /// </summary>
  55. public string SatInfoID { get; set; }
  56. /// <summary>
  57. /// 日志目录(E:\data)
  58. /// </summary>
  59. public string DirName { get; set; }
  60. /// <summary>
  61. /// 日期目录名称(20241129_13)
  62. /// </summary>
  63. public string DateDirName => SigTime.ToString(SigTimeFolderFormat);
  64. /// <summary>
  65. /// 文件名称(xxx.dat)
  66. /// </summary>
  67. public string FileName => GetFileName(SigTime, SigFreq, BandWidth, Fs, SiteCode, AdCardID, ChNum, SatInfoID);
  68. /// <summary>
  69. /// http下载文件名称(http://127.0.0.1/data/xxx.dat)
  70. /// </summary>
  71. public string HttpFile { get; set; }
  72. /// <summary>
  73. /// 获取文件全路径
  74. /// </summary>
  75. public string GetLocalFullName()
  76. {
  77. return FileName;
  78. }
  79. /// <summary>
  80. /// 获取文件全路径
  81. /// </summary>
  82. public string GetLocalFullPath()
  83. {
  84. string fullName = Path.Combine(DirName, DateDirName, FileName);
  85. return fullName;
  86. }
  87. /// <summary>
  88. /// 将文件名转换为信号文件对象
  89. /// </summary>
  90. /// <param name="input"></param>
  91. /// <returns></returns>
  92. public static SignalFile Parse(string input)
  93. {
  94. if (string.IsNullOrWhiteSpace(input)) return null;
  95. input = Path.GetFileNameWithoutExtension(input);
  96. var items = input.Split('_');
  97. var result = new SignalFile();
  98. DateTime sigTime;
  99. if (DateTime.TryParseExact(items[0], SigTimeFileFormat, CultureInfo.CurrentUICulture, DateTimeStyles.None, out sigTime))
  100. {
  101. result.SigTime = sigTime;
  102. }
  103. foreach (var item in items)
  104. {
  105. var key = item[0];
  106. var val = item.Substring(1);
  107. switch (key)
  108. {
  109. case 'F':
  110. result.SigFreq = double.TryParse(val, out double sigFreq) ? (long)Math.Round(sigFreq * 1e6, 0) : 0L;
  111. break;
  112. case 'W':
  113. result.BandWidth = double.TryParse(val, out double bandWidth) ? (int)Math.Round(bandWidth * 1e3) : 0;
  114. break;
  115. case 'C':
  116. result.Fs = int.TryParse(val, out int fs) ? fs : 0;
  117. break;
  118. case 'R':
  119. result.SiteCode = val;
  120. break;
  121. case 'K':
  122. result.AdCardID = val;
  123. break;
  124. case 'T':
  125. result.ChNum = int.TryParse(val, out int chNum) ? chNum : 0;
  126. break;
  127. case 'S':
  128. result.SatInfoID = val;
  129. break;
  130. }
  131. }
  132. return result;
  133. }
  134. /// <summary>
  135. /// 获取文件名称
  136. /// </summary>
  137. /// <param name="sigTime">信号时间</param>
  138. /// <param name="sigFreq">信号频点</param>
  139. /// <param name="bandWidth">信号带宽</param>
  140. /// <param name="fs">采样率</param>
  141. /// <param name="satNum">卫星编号</param>
  142. /// <param name="siteCode">站点编码</param>
  143. /// <param name="adcCode">采集卡编码</param>
  144. /// <param name="chNum">通道号</param>
  145. /// <param name="nullText">值为空时的替换符</param>
  146. /// <returns></returns>
  147. public static string GetFileName(DateTime? sigTime, long? sigFreq, int? bandWidth, int? fs, string siteCode, string adcCode, int? chNum, string satNum, string nullText = "")
  148. {
  149. string sigTimeText = sigTime.HasValue ? sigTime.Value.ToString(SigTimeFileFormat) : nullText;
  150. string sigFreqText = sigFreq.HasValue && sigFreq > 0 ? "_F" + Math.Round(sigFreq.Value * 1e-6, 6).ToString(SigFreqFormat) : nullText;
  151. string bandWidthText = bandWidth.HasValue && bandWidth > 0 ? "_W" + Math.Round(bandWidth.Value * 1e-3, 3).ToString(BandWidthFormat) : nullText;
  152. string fsText = fs.HasValue && fs > 0 ? "_C" + fs.Value.ToString() : nullText;
  153. string siteCodeText = !string.IsNullOrWhiteSpace(siteCode) ? "_" + siteCode.Trim() : nullText;
  154. string adcCodeText = !string.IsNullOrWhiteSpace(adcCode) ? "_" + adcCode.Trim() : nullText;
  155. string chNumText = chNum.HasValue && chNum > 0 ? $"_T{chNum}" : nullText;
  156. string satNumText = !string.IsNullOrWhiteSpace(satNum) ? "_S" + satNum.Trim() : nullText;
  157. return string.Concat(sigTimeText, sigFreqText, bandWidthText, fsText, siteCodeText, adcCodeText, chNumText, satNumText, ".dat");
  158. }
  159. /// <summary>
  160. /// 创建信号文件基础信息
  161. /// </summary>
  162. /// <param name="sigTime">信号时间</param>
  163. /// <param name="sigFreq">信号频点</param>
  164. /// <param name="bandWidth">信号带宽</param>
  165. /// <param name="fs">采样率(个)</param>
  166. /// <param name="satNum">卫星编号</param>
  167. /// <param name="siteCode">站点编码</param>
  168. /// <param name="adcCode">采集卡编码</param>
  169. /// <param name="chNum">通道号</param>
  170. /// <returns></returns>
  171. public static SignalFile Create(DateTime sigTime, long sigFreq, int bandWidth, int fs, string siteCode, string adcCode, int chNum, string satNum)
  172. {
  173. var result = new SignalFile()
  174. {
  175. SigTime = sigTime,
  176. SigFreq = sigFreq,
  177. BandWidth = bandWidth,
  178. Fs = fs,
  179. SiteCode = siteCode,
  180. AdCardID = adcCode,
  181. ChNum = chNum,
  182. SatInfoID = satNum
  183. };
  184. return result;
  185. }
  186. }
  187. }