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