|
@@ -1,4 +1,5 @@
|
|
|
-using System;
|
|
|
+using MySqlX.XDevAPI.Common;
|
|
|
+using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Globalization;
|
|
|
using System.IO;
|
|
@@ -7,7 +8,7 @@ using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using XdCxRhDW.Dto;
|
|
|
|
|
|
-namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
+namespace XdCxRhDW.X2D1TaskServer.Tasks
|
|
|
{
|
|
|
public class X2D1Task : HistoryTaskI
|
|
|
{
|
|
@@ -26,15 +27,29 @@ namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
IEnumerable<string> files;
|
|
|
try
|
|
|
{
|
|
|
+ if (!Directory.Exists(capfile))
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】执行异常,路径[{capfile}]不存在!");
|
|
|
+ await Task.Delay(5000);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
files = Directory.EnumerateFiles(capfile, "*.dat");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- LogHelper.Info($"查询历史任务:{dto.ID}采集数据异常:{ex.Message}");
|
|
|
- Thread.Sleep(1000);
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】执行异常.{ex.Message}", ex);
|
|
|
+ await Task.Delay(5000);
|
|
|
continue;
|
|
|
}
|
|
|
- var groups = files.Select(f => FileToHistoryFile(f)).GroupBy(m => m.CapTime).OrderBy(m => m.Key);
|
|
|
+ IOrderedEnumerable<IGrouping<DateTime, HistoryFile>> groups = null;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ groups = files.Select(f => FileToHistoryFile(f)).GroupBy(m => m.CapTime).OrderBy(m => m.Key);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】执行异常", ex);
|
|
|
+ }
|
|
|
foreach (var item in groups)
|
|
|
{
|
|
|
if (!IsRuning)
|
|
@@ -44,40 +59,39 @@ namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
var finfos = item.ToList();
|
|
|
if (finfos.Count < 3)
|
|
|
{
|
|
|
- LogHelper.Info($"历史任务:{dto.ID}采集时刻:{finfos.First().CapTime:yyyy-MM-dd HH:mm:ss}文件数量只有{finfos.Count}个,不满足");
|
|
|
+ LogHelper.Warning($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻文件数量只有{finfos.Count}个,跳过此组数据");
|
|
|
continue;
|
|
|
}
|
|
|
//超短波信号
|
|
|
var dinfo = finfos.FirstOrDefault(m => m.Ch == 1);
|
|
|
if (dinfo == null)
|
|
|
{
|
|
|
- LogHelper.Info($"历史任务:{dto.ID}采集时刻:{finfos.First().CapTime:yyyy-MM-dd HH:mm:ss}未找到超短波信号ch1文件,不满足");
|
|
|
+ LogHelper.Warning($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻未找到超短波信号ch1文件,跳过此组数据");
|
|
|
continue;
|
|
|
}
|
|
|
//主星
|
|
|
var minfo = finfos.FirstOrDefault(m => m.Ch == 2);
|
|
|
if (minfo == null)
|
|
|
{
|
|
|
- LogHelper.Info($"历史任务:{dto.ID}采集时刻:{finfos.First().CapTime:yyyy-MM-dd HH:mm:ss}未找到主星信号ch2文件,不满足");
|
|
|
+ LogHelper.Warning($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻未找到主星信号ch2文件,跳过此组数据");
|
|
|
continue;
|
|
|
}
|
|
|
//邻1
|
|
|
var ninfo = finfos.FirstOrDefault(m => m.Ch == 3);
|
|
|
if (ninfo == null)
|
|
|
{
|
|
|
- LogHelper.Info($"历史任务:{dto.ID}采集时刻:{finfos.First().CapTime:yyyy-MM-dd HH:mm:ss}未找到邻星信号ch3文件,不满足");
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻未找到邻星信号ch3文件,跳过此组数据");
|
|
|
continue;
|
|
|
}
|
|
|
try
|
|
|
{
|
|
|
- var txInfos = await GetTxInfoAsync();
|
|
|
+ var txInfos = await GetTxInfoAsync(dto);
|
|
|
var satTx = txInfos.First(t => t.TxType == EnumTxType.Rec);
|
|
|
var cdbTx = txInfos.First(t => t.TxType == EnumTxType.Cdb);
|
|
|
var refTx = txInfos.First(t => t.TxType == EnumTxType.Ref);
|
|
|
//根据信号类型执行检测或参数估计
|
|
|
if (dto.SigType == EnumSigTypeDto.Normal)
|
|
|
{
|
|
|
-
|
|
|
var xd = await GPUCalcAsync(minfo.FilePath, dinfo.FilePath, minfo.FsHz, 260000, 40000);
|
|
|
var sx = await GPUCalcAsync(minfo.FilePath, ninfo.FilePath, minfo.FsHz, 0, 40000);
|
|
|
X2D1NoXlPosDto x2D1 = new X2D1NoXlPosDto()
|
|
@@ -111,7 +125,7 @@ namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
|
|
|
if (mDetect.Count() <= 0)
|
|
|
{
|
|
|
- LogHelper.Info($"历史任务:{dto.ID}文件{minfo.FilePath}未检测出结果");
|
|
|
+ LogHelper.Warning($"【任务{dto.ID}】文件[{minfo.FilePath}]无检测结果");
|
|
|
continue;
|
|
|
}
|
|
|
//主星文件
|
|
@@ -121,17 +135,6 @@ namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
var smps = mDetect.Select(m => new SmpPosition() { smpStart = m.Start, smpCount = m.Length }).ToList();
|
|
|
|
|
|
int dtRange = 40000;
|
|
|
-
|
|
|
- //提取时隙有效数据
|
|
|
- //var mdfile = await ExtractMergeAsync(mfile, nfile.OutFsHz, smps, 0, dtRange, minfo.Ch);
|
|
|
- //var ddfile = await ExtractMergeAsync(dfile.File, nfile.OutFsHz, smps, -260000, dtRange, dinfo.Ch);
|
|
|
- //var ndfile = await ExtractMergeAsync(nfile.File, nfile.OutFsHz, smps, 0, dtRange, ninfo.Ch);
|
|
|
-
|
|
|
- //var xds = await CPUCalcAsync(mdfile.file, ddfile.file, dfile.OutFsHz, ddfile.positions, -260000, dtRange);
|
|
|
- //var sxs = await CPUCalcAsync(mdfile.file, ndfile.file, nfile.OutFsHz, ndfile.positions, 0, dtRange);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
var xds = await CPUCalcAsync(mfile, dfile.File, dfile.OutFsHz, smps, -260000, dtRange);
|
|
|
var sxs = await CPUCalcAsync(mfile, nfile.File, nfile.OutFsHz, smps, 0, dtRange);
|
|
|
|
|
@@ -143,53 +146,46 @@ namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
- try
|
|
|
+
|
|
|
+ X2D1NoXlPosDto x2D1 = new X2D1NoXlPosDto()
|
|
|
{
|
|
|
- X2D1NoXlPosDto x2D1 = new X2D1NoXlPosDto()
|
|
|
+ TaskID = dto.ID,
|
|
|
+ SigTime = minfo.CapTime.AddSeconds(sxitem.Smpstart / nfile.OutFsHz),
|
|
|
+ MainCode = minfo.SatId,
|
|
|
+ AdjaCode = ninfo.SatId,
|
|
|
+ SxDto = sxitem.Dt,
|
|
|
+ XdDto = xd == null ? 0 : xd.Dt,
|
|
|
+ SatTxLon = satTx.Lon,
|
|
|
+ SatTxLat = satTx.Lat,
|
|
|
+ CdbTxLon = cdbTx.Lon,
|
|
|
+ CdbTxLat = cdbTx.Lat,
|
|
|
+ RefLon = refTx.Lon,
|
|
|
+ RefLat = refTx.Lat,
|
|
|
+ FreqDown = minfo.FreqHz * 1e-6,
|
|
|
+ FreqUp = dinfo.FreqHz * 1e-6,
|
|
|
+ XdDfo = xd == null ? 0 : xd.Df,
|
|
|
+ XdSnr = xd == null ? 0 : xd.Snr,
|
|
|
+ SxDfo = sxitem.Df,
|
|
|
+ SxSnr = sxitem.Snr,
|
|
|
+ CheckRes = new CheckResDto()
|
|
|
{
|
|
|
- TaskID = dto.ID,
|
|
|
- SigTime = minfo.CapTime.AddSeconds(sxitem.Smpstart / nfile.OutFsHz),
|
|
|
- MainCode = minfo.SatId,
|
|
|
- AdjaCode = ninfo.SatId,
|
|
|
- SxDto = sxitem.Dt,
|
|
|
- XdDto = xd == null ? 0 : xd.Dt,
|
|
|
- SatTxLon = satTx.Lon,
|
|
|
- SatTxLat = satTx.Lat,
|
|
|
- CdbTxLon = cdbTx.Lon,
|
|
|
- CdbTxLat = cdbTx.Lat,
|
|
|
- RefLon = refTx.Lon,
|
|
|
- RefLat = refTx.Lat,
|
|
|
- FreqDown = minfo.FreqHz * 1e-6,
|
|
|
- FreqUp = dinfo.FreqHz * 1e-6,
|
|
|
- XdDfo = xd == null ? 0 : xd.Df,
|
|
|
- XdSnr = xd == null ? 0 : xd.Snr,
|
|
|
- SxDfo = sxitem.Df,
|
|
|
- SxSnr = sxitem.Snr,
|
|
|
- CheckRes = new CheckResDto()
|
|
|
- {
|
|
|
- FileName = deitem.File1,
|
|
|
- ModRate = deitem.ModRate,
|
|
|
- ModType = deitem.ModType,
|
|
|
- SmpCount = deitem.Length,
|
|
|
- SmpStart = deitem.Start,
|
|
|
- UserName = deitem.UserName,
|
|
|
- PosCheckType = deitem.DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
|
|
|
- }
|
|
|
- };
|
|
|
- await X2D1NoXlAsync(x2D1);
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- LogHelper.Info($"历史任务:{dto.ID}异常:{ex.Message}");
|
|
|
- continue;
|
|
|
- }
|
|
|
+ FileName = deitem.File1,
|
|
|
+ ModRate = deitem.ModRate,
|
|
|
+ ModType = deitem.ModType,
|
|
|
+ SmpCount = deitem.Length,
|
|
|
+ SmpStart = deitem.Start,
|
|
|
+ UserName = deitem.UserName,
|
|
|
+ PosCheckType = deitem.DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
|
|
|
+ }
|
|
|
+ };
|
|
|
+ await X2D1NoXlAsync(x2D1);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- LogHelper.Info($"执行历史任务:{dto.ID}异常:{ex.Message}");
|
|
|
+ LogHelper.Info($"【任务{dto.ID}】执行异常:{ex.Message}");
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -201,35 +197,44 @@ namespace XdCxRhDW.X2D1TaskServer.Task
|
|
|
}
|
|
|
|
|
|
|
|
|
- private async Task<bool> X2D1NoXlAsync(X2D1NoXlPosDto x2D1)
|
|
|
+ private async Task X2D1NoXlAsync(X2D1NoXlPosDto x2D1)
|
|
|
{
|
|
|
- var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlAsync", x2D1);
|
|
|
- if (result.code != 200)
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlAsync", x2D1);
|
|
|
+ if (result.code != 200)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{x2D1.TaskID}】定位异常.{result.msg}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
- LogHelper.Error($"推送历史任务定位结果:{x2D1.TaskID}异常:{result.msg}");
|
|
|
- return false;
|
|
|
+ LogHelper.Error($"【任务{x2D1.TaskID}】定位异常.", ex);
|
|
|
}
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
- private async Task<List<TxInfo>> GetTxInfoAsync()
|
|
|
+ private async Task<List<TxInfo>> GetTxInfoAsync(HistoryTaskProcessingDto dto)
|
|
|
{
|
|
|
List<TxInfo> infos = new List<TxInfo>();
|
|
|
- var result = await HttpHelper.GetRequestAsync<(TxInfo recTx, TxInfo cdbTx, TxInfo cxTx, TxInfo refLoc)>(baseUrl + "Tx/GetTxInfoAsync");
|
|
|
- if (result.code != 200)
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var result = await HttpHelper.GetRequestAsync<(TxInfo recTx, TxInfo cdbTx, TxInfo cxTx, TxInfo refLoc)>(baseUrl + "Tx/GetTxInfoAsync");
|
|
|
+ if (result.code != 200)
|
|
|
+ {
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】获取天线信息异常.{result.msg}");
|
|
|
+ return infos;
|
|
|
+ }
|
|
|
+ infos.Add(result.data.recTx == null ? new TxInfo() { TxType = EnumTxType.Rec } : result.data.recTx);
|
|
|
+ infos.Add(result.data.cdbTx == null ? new TxInfo() { TxType = EnumTxType.Cdb } : result.data.cdbTx);
|
|
|
+ infos.Add(result.data.cxTx == null ? new TxInfo() { TxType = EnumTxType.Cx } : result.data.cxTx);
|
|
|
+ infos.Add(result.data.refLoc == null ? new TxInfo() { TxType = EnumTxType.Ref } : result.data.refLoc);
|
|
|
+ return infos;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
- infos.Add(new TxInfo() { TxType = EnumTxType.Rec });
|
|
|
- infos.Add(new TxInfo() { TxType = EnumTxType.Cdb });
|
|
|
- infos.Add(new TxInfo() { TxType = EnumTxType.Cx });
|
|
|
- infos.Add(new TxInfo() { TxType = EnumTxType.Ref });
|
|
|
- LogHelper.Error($"历史任务获取天线信息失败");
|
|
|
+ LogHelper.Error($"【任务{dto.ID}】获取天线信息异常.", ex);
|
|
|
return infos;
|
|
|
}
|
|
|
- infos.Add(result.data.recTx == null ? new TxInfo() { TxType = EnumTxType.Rec } : result.data.recTx);
|
|
|
- infos.Add(result.data.cdbTx == null ? new TxInfo() { TxType = EnumTxType.Cdb } : result.data.cdbTx);
|
|
|
- infos.Add(result.data.cxTx == null ? new TxInfo() { TxType = EnumTxType.Cx } : result.data.cxTx);
|
|
|
- infos.Add(result.data.refLoc == null ? new TxInfo() { TxType = EnumTxType.Ref } : result.data.refLoc);
|
|
|
- return infos;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|