1
0

3 Commits a80b15e25d ... ebab44bd33

Autor SHA1 Mensaje Fecha
  yg ebab44bd33 Merge branch 'master' of http://139.155.15.221:3000/zoulei/DW5S hace 3 meses
  yg bf0c2a27a6 999 hace 3 meses
  yg 0a1becd049 11 hace 3 meses

+ 29 - 0
AdService/Dto/AdConfig.cs

@@ -0,0 +1,29 @@
+namespace AdService.Controller.Dto
+{
+    /// <summary>
+    /// 采集服务配置
+    /// </summary>
+    [Serializable]
+    public class AdConfig
+    {
+        /// <summary>
+        /// 数据存储目录
+        /// </summary>
+        public string DataDir { get; set; }
+
+        /// <summary>
+        /// 清理目录
+        /// </summary>
+        public string ClearDir { get; set; }
+
+        /// <summary>
+        /// 磁盘可用空间百分比
+        /// </summary>
+        public float ClearCondition { get; set; }
+
+        /// <summary>
+        /// 删除{ClearHours}小时的数据
+        /// </summary>
+        public int ClearHours { get; set; }
+    }
+}

+ 89 - 0
AdService/Service/AdcService.cs

@@ -0,0 +1,89 @@
+
+namespace AdService.Service
+{
+    /// <summary>
+    /// 采集服务
+    /// </summary>
+    public class AdcService
+    {
+        /// <summary>
+        /// 单例
+        /// </summary>
+        public static AdcService Instance { get; private set; } = new AdcService();
+
+        private bool isBusy = false;
+
+        //是否持续采集
+        private bool isSustain = true;
+
+        /// <summary>
+        /// 启动采集(无采集卡)
+        /// </summary>
+        /// <param name="dtos"></param>
+        /// <returns></returns>
+        public async Task<AdcResultDto> StartTestAsync(List<AdCard> dtos)
+        {
+            if (isBusy)
+            {
+                throw new Exception("上次采集未结束");
+            }
+            try
+            {
+                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<SignalFile> signalFiles = new List<SignalFile>();
+                        string addate = Path.Combine("D:\\work\\data", DateTime.Now.ToString("yyyyMMdd_HH"));//20250307_10
+                        Directory.CreateDirectory(addate);
+                        foreach (var item in dtos)
+                        {
+                            for (int i = 0; i < item.AdChannels.Count; i++)
+                            {
+                                var fsad = item.ClockFreq / item.Mutil;
+                                SignalFile signal = new SignalFile()
+                                {
+                                    AdCardID = item.AdChannels[i].AdCardID.ToString(),
+                                    ChNum = item.AdChannels[i].ChNum,
+                                    Fs = (int)fsad,
+                                    SatInfoID = item.AdChannels[i].SatInfoID.ToString(),
+                                    SigTime = DateTime.Now,
+                                    DirName = "D:\\work\\data",
+                                };
+                                File.WriteAllBytes(Path.Combine("D:\\work\\data", signal.DateDirName, signal.FileName), bytes);
+                              
+                                signalFiles.Add(signal);
+                            }
+                            adcResult.FileList = signalFiles;
+                        }
+
+                        Thread.Sleep(1000 * 15);
+                    }
+
+                });
+                return adcResult;
+            }
+            finally
+            {
+                await Task.Delay(5000);
+                isBusy = false;
+            }
+
+        }
+
+
+        /// <summary>
+        /// 停止采集
+        /// </summary>
+        public void StopAd()
+        {
+            isSustain = false;
+        }
+
+
+    }
+}

+ 4 - 0
AdService/globalusings.cs

@@ -0,0 +1,4 @@
+global using Microsoft.AspNetCore.Mvc;
+global using DW5S.DTO;
+global using DW5S.Entity;
+global using DW5S.WebApi;

+ 3 - 0
AdService/test.cmd

@@ -0,0 +1,3 @@
+chcp 65001
+sc create 采集服务 binpath= %cd%\AdService.exe start= auto displayname= "采集服务 "
+pause

BIN
AdService/test.dat


BIN
DW5S.App/dw5s.db


+ 44 - 0
DW5S.DTO/AdcResultDto.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DW5S.DTO
+{
+    /// <summary>
+    /// 采集结果
+    /// </summary>
+    [Serializable]
+    public class AdcResultDto
+    {
+
+        /// <summary>
+        /// 采集结果
+        /// </summary>
+        public AdcResultDto()
+        {
+            FileList = new List<SignalFile>();
+        }
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public AdcResultDto(DateTime startTime) : this()
+        {
+            StartTime = startTime;
+        }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime StartTime { get; set; }
+
+
+        /// <summary>
+        /// 文件列表
+        /// </summary>
+        public List<SignalFile> FileList { get; set; }
+
+    }
+}

+ 207 - 0
DW5S.DTO/SignalFileDto.cs

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