using AdService.Controller.Dto; using Newtonsoft.Json; namespace AdService.Service { /// /// 采集服务 /// public class AdcService { /// /// 单例 /// public static AdcService Instance { get; private set; } = new AdcService(); private bool isBusy = false; //是否持续采集 private bool isSustain = true; ILogger logger { get; set; } /// /// 启动采集(无采集卡) /// /// /// public async Task StartTestAsync(List dtos) { if (isBusy) { throw new Exception("上次采集未结束"); } try { StreamReader sr = new StreamReader(Directory.GetCurrentDirectory() + "/appsettings.json"); string json = sr.ReadToEnd(); // 解析 JSON 字符串 var adConfig = JsonConvert.DeserializeObject(json); isBusy = true; string test = Path.Combine(Directory.GetCurrentDirectory(), "test.dat");//测试数据 var bytes = File.ReadAllBytes(test); AdcResultDto adcResult = new AdcResultDto(DateTime.Now); await Task.Run(() => { while (isSustain) { List signalFiles = new List(); string addate = Path.Combine(adConfig.DataDir, DateTime.Now.ToString("yyyyMMdd_HH"));//20250307_10 Directory.CreateDirectory(addate); foreach (var item in dtos) { var fsad = item.ClockFreq / item.Mutil; SignalFile signal = new SignalFile() { ChNum = item.Channel, Fs = (int)fsad, SatInfoID = item.SatCode.ToString(), SigTime = DateTime.Now, DirName = adConfig.DataDir, }; var fileName = String.Concat(signal.DateDirName+"_Sat",item.SatCode+"_CH",item.Channel+"_freq",fsad+".dat"); File.WriteAllBytes(Path.Combine(adConfig.DataDir, signal.DateDirName, fileName), bytes); signalFiles.Add(signal); } Thread.Sleep(1000 * 15); } }); return adcResult; } finally { await Task.Delay(5000); isBusy = false; } } /// /// 停止采集 /// public void StopAd() { isSustain = false; } } }