zoulei 1 년 전
부모
커밋
3de575a823
1개의 변경된 파일73개의 추가작업 그리고 12개의 파일을 삭제
  1. 73 12
      Service/X2D1TaskServer54/Service/HistoryTaskService.cs

+ 73 - 12
Service/X2D1TaskServer54/Service/HistoryTaskService.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Configuration;
+using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Text;
@@ -35,7 +36,7 @@ namespace X3TaskServer54.Service
             CapDir = ConfigurationManager.AppSettings["CapDir"].Trim();
             DdcDir = ConfigurationManager.AppSettings["DdcDir"].Trim();
             PosResDir = ConfigurationManager.AppSettings["PosResDir"].Trim();
-            var PosDtoFactorstr = ConfigurationManager.AppSettings["PosResDir"].Trim();
+            var PosDtoFactorstr = ConfigurationManager.AppSettings["PosDtoFactor"].Trim();
             int.TryParse(PosDtoFactorstr, out PosDtoFactor);
             if (PosDtoFactor == 0) PosDtoFactor = 1;
         }
@@ -44,6 +45,7 @@ namespace X3TaskServer54.Service
             cts = new CancellationTokenSource();
             Task.Run(async () =>
             {
+                LogHelper.Info($"【任务{dto.ID}】开始执行...");
                 //点击定位平台右上角查看接口可以在浏览器中查看平台提供的所有接口详细信息
                 while (!cts.IsCancellationRequested)
                 {
@@ -61,6 +63,10 @@ namespace X3TaskServer54.Service
                             return;
                         }
                         Directory.CreateDirectory(DdcDir);
+                        Directory.CreateDirectory(PosResDir);
+                        LogHelper.Info($"【任务{dto.ID}】检测结果目录[{DetectDir}]");
+                        LogHelper.Info($"【任务{dto.ID}】AD采集目录[{CapDir}]");
+                        LogHelper.Info($"【任务{dto.ID}】DDC输出目录[{DdcDir}]");
                         try
                         {
                             var mainInfo = ConfigurationManager.AppSettings["MainSatInfo"].Replace(",", ",").Trim();
@@ -98,16 +104,20 @@ namespace X3TaskServer54.Service
                             foreach (var item in groupFile)
                             {
                                 var slotsInfo = SlotHelper.GetFileSlots(item.File);//某个频点的所有时隙
+                                if (!Debugger.IsAttached)
+                                    File.Delete(item.File);//检测检测结果文件
                                 if (slotsInfo.Slots.Any())
                                     listSlotsInfo.Add(slotsInfo);
-                                else
-                                {
-                                    LogHelper.Warning($"【任务{dto.ID}】{slotsInfo.AdTime:yyyyMMddHHmmss}时刻频点{slotsInfo.FreqDownMHz}MHz无检测结果,跳过此组文件");
-                                }
+                                LogHelper.Warning($"【任务{dto.ID}】{slotsInfo.AdTime:yyyyMMddHHmmss}时刻频点{slotsInfo.FreqDownMHz}共{slotsInfo.Slots.Count}个突发");
                             }
                             if (!listSlotsInfo.Any()) continue;
                             var adFiles = Directory.EnumerateFiles(CapDir, "*.dat", SearchOption.TopDirectoryOnly).Select(p => StringToAdFile(p))
                                 .Where(p => p.AdTime == listSlotsInfo.First().AdTime);
+                            if (!adFiles.Any())
+                            {
+                                LogHelper.Warning($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻找不到原始AD文件,跳过此组文件");
+                                continue;
+                            }
                             var first = listSlotsInfo.First();
                             var sigs = listSlotsInfo.Select(p => new DDCSig() { FreqDownHz = (int)(p.FreqDownMHz * 1e6), Mult = (int)first.Multi, Slots = p });
                             List<DDCFile> chDDCFiles = new List<DDCFile>();//同一个时刻多个频点多个通道的DDC数据
@@ -118,6 +128,8 @@ namespace X3TaskServer54.Service
                                 //227=变频器频点255-(140-112))
                                 var ddcRes = DDCHelper.DDC(adFile.File, adFile.AdTime, adFile.ChNo, (long)(first.FsampleM * 1e6), (long)(227 * 1e6), DdcDir, sigs);
                                 chDDCFiles.AddRange(StringToDDCFile(ddcRes));
+                                if (!Debugger.IsAttached)
+                                    File.Delete(adFile.File);//删除AD文件
                             });
                             LogHelper.Info($"【任务{dto.ID}】{listSlotsInfo.First().AdTime:yyyyMMddHHmmss}时刻DDC处理完成");
                             if (!chDDCFiles.Any())
@@ -165,13 +177,14 @@ namespace X3TaskServer54.Service
                                     smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
                                     snrThreshold = 15,
                                 };
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估开始...");
                                 var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
                                 if (result1.code != 200)
                                 {
                                     LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估出错.{result1.msg}");
                                     continue;
                                 }
-                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估完成.");
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻1星CPU参估完成");
                                 cgDto = new CpuCgMultiDto()
                                 {
                                     dtCenter = 0,
@@ -182,12 +195,14 @@ namespace X3TaskServer54.Service
                                     smpPositions = sig.Slots.Slots.Select(p => new SmpPosition() { TimeSeconds = p.TimeSeconds, smpStart = p.StartPoint, smpCount = p.Len }).ToList(),
                                     snrThreshold = 15,
                                 };
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻2星CPU参估开始...");
                                 var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
                                 if (result2.code != 200)
                                 {
                                     LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星邻2星CPU参估出错.{result2.msg}");
                                     continue;
                                 }
+                                //删除DDC文件
                                 File.Delete(ch0File.File);
                                 File.Delete(ch1File.File);
                                 File.Delete(ch2File.File);
@@ -204,10 +219,10 @@ namespace X3TaskServer54.Service
                                     try
                                     {
                                         if (cts.IsCancellationRequested) break;
-                                        X3TwoDtoNoParPosDto x2D1 = new X3TwoDtoNoParPosDto()
+                                        X3TwoDtoNoParPosDto x3 = new X3TwoDtoNoParPosDto()
                                         {
                                             TaskID = dto.ID,
-                                            //SigTime = capTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),//该方法有误差
+                                            //SigTime = capTime.AddSeconds(data1[i].Smpstart / (double)ch0File.Fs),
                                             SigTime = capTime.AddSeconds(data1[i].TimeSeconds),
                                             MainCode = MainSatCode,
                                             Adja1Code = Adja1SatCode,
@@ -226,23 +241,69 @@ namespace X3TaskServer54.Service
                                             Snr1 = data1[i].Snr,
                                             Dto2 = PosDtoFactor * data2[i].Dt,
                                             Dfo2 = data2[i].Df,
-                                            Snr2 = data2[i].Df,
+                                            Snr2 = data2[i].Snr,
                                             SatTxLon = dto.CapLon,
                                             SatTxLat = dto.CapLat,
                                             FreqDown = ch0File.FreqDownMHz * 1e6,
                                             CheckRes = new CheckResDto()
                                             {
                                                 FileName = Path.GetFileName(ch0File.File),
-                                                SmpCount = sig.Slots.Slots[i].StartPoint,
-                                                SmpStart = sig.Slots.Slots[i].Len,
+                                                SmpStart = sig.Slots.Slots[i].StartPoint,
+                                                SmpCount = sig.Slots.Slots[i].Len,
                                                 PosCheckType = EnumPosCheckTypeDto.DAMA,
                                             }
                                         };
-                                        var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x2D1);
+                                        var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX3TwoDtoNoParAsync", x3);
                                         if (result.code != 200)
                                         {
                                             LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
                                         }
+                                        else
+                                        {
+                                            var posRes = result.data;
+                                            double posLon = posRes.PosLon;
+                                            double posLat = posRes.PosLat;
+                                            if (x3.Snr1 == 0 || x3.Snr2 == 0)
+                                            {
+                                                posLon = 0;
+                                                posLat = 0;
+                                            }
+                                            StringBuilder sb = new StringBuilder();
+                                            sb.Append($"{x3.SigTime:yyyy}\t");
+                                            sb.Append($"{x3.SigTime:MM}\t");
+                                            sb.Append($"{x3.SigTime:dd}\t");
+                                            sb.Append($"{x3.SigTime:HH}\t");
+                                            sb.Append($"{x3.SigTime:mm}\t");
+                                            sb.Append($"{x3.SigTime:ss}\t");
+                                            sb.Append($"{x3.SigTime:fff}\t");
+                                            sb.Append($"{x3.CheckRes.SmpCount * 1000 / ch0File.Fs:D4}\t");//信号持续时间ms
+                                            sb.Append($"{Convert.ToInt64(group.First().FreqDownMHz * 1e6):D12}\t");//下行频点
+                                            sb.Append($"{Convert.ToInt64((group.First().FreqDownMHz + 44) * 1e6):D12}\t");//上行频点
+                                            sb.Append($"{4}\t");//信号样式(暂定有这些1:CPM,2:BPSK,4:QPSK),
+                                            sb.Append($"{0:D4}\t");//目标序号
+                                            sb.Append($"res\t");
+                                            sb.Append($"{Convert.ToInt64(posLon * 1e6):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(posLat * 1e6):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(0 * 1e3):D8}\t");//定位误差km
+                                            sb.Append($"{Convert.ToInt64(x3.Dto1 * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(x3.Dfo1 * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(x3.Snr1 * 1e2):D6}\t");
+                                            sb.Append($"{Convert.ToInt64(x3.Dto2 * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(x3.Dfo2 * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(x3.Snr2 * 1e2):D6}\t");
+                                            sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(0 * 1e2):D10}\t");
+                                            sb.Append($"{Convert.ToInt64(0 * 1e2):D6}\t");
+                                            sb.Append($"{0:D8}\t");//长轴
+                                            sb.Append($"{0:D8}\t");//短轴
+                                            sb.Append($"{0:D7}\t");//倾角
+                                            sb.Append($"{data1.Count:D2}\t");//时隙属性
+                                            sb.Append($"{1}\t");//所属卫星
+                                            sb.Append($"{950:D3}\t");//置信度
+                                            sb.Append($"{3}\r\n");//定位体制(星地=3)
+                                            string resFile = Path.Combine(PosResDir, $"定位结果_{posRes.SigTime:yyyyMMdd}.txt");
+                                            File.AppendAllText(resFile, sb.ToString());
+                                        }
                                     }
                                     catch (Exception ex)
                                     {