|
@@ -19,13 +19,13 @@ namespace XdCxRhDW.App
|
|
|
/// </summary>
|
|
|
public class X2D1PosHandle
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
public int TaskId;
|
|
|
//十分钟时间内的数据
|
|
|
- private int TimeSeconds = 10 * 60;//十分钟
|
|
|
+ private int TimeSeconds = 30 * 60;//十分钟
|
|
|
private bool isRuning = true;
|
|
|
|
|
|
- BlockingCollection<X2D1NoXlNoParlPosDto> posDtos = new BlockingCollection<X2D1NoXlNoParlPosDto>();
|
|
|
+ BlockingCollection<X2D1NoXlNoParlPosDto> posItems = new BlockingCollection<X2D1NoXlNoParlPosDto>();
|
|
|
public X2D1PosHandle(int taskId)
|
|
|
{
|
|
|
TaskId = taskId;
|
|
@@ -41,32 +41,46 @@ namespace XdCxRhDW.App
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- var dto = posDtos.Take();
|
|
|
-
|
|
|
+ var dto = posItems.Take();
|
|
|
FixedStation fixedStation;
|
|
|
+ int fixedStationId = dto.FixedStationId.HasValue ? dto.FixedStationId.Value : 0;
|
|
|
using (RHDWContext db = new RHDWContext())
|
|
|
{
|
|
|
- fixedStation = await db.FixedStation.FirstAsync(f => f.ID == dto.FixedStationId.Value);
|
|
|
+ fixedStation = await db.FixedStation.FirstOrDefaultAsync(f => f.ID == dto.FixedStationId.Value);
|
|
|
+ }
|
|
|
+ if (fixedStation == null)//没有固定站
|
|
|
+ {
|
|
|
+ SendX2D1NoXlNoParAsync(dto);
|
|
|
+ continue;
|
|
|
}
|
|
|
-
|
|
|
- DateTime min = dto.SigTime.AddSeconds(-TimeSeconds);
|
|
|
- DateTime max = dto.SigTime.AddSeconds(TimeSeconds);
|
|
|
using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime, true))
|
|
|
{
|
|
|
- //获取十分钟之内的固定站数据
|
|
|
- var cgRess = await db.CgRes.Where(m => m.FixedStationResID == dto.FixedStationId && dto.SigTime >= min && dto.SigTime <= max).OrderBy(d => d.SigTime).ToListAsync();
|
|
|
+ DateTime min = dto.SigTime.AddSeconds(-TimeSeconds);
|
|
|
+ DateTime max = dto.SigTime.AddSeconds(TimeSeconds);
|
|
|
+ //获取设定分钟之内的固定站数据
|
|
|
+ var cgResRefs = await db.CgRes.Where(m => m.TaskID == dto.TaskID && m.FixedStationID == dto.FixedStationId && m.SigTime >= min && m.SigTime <= max).OrderBy(d => d.SigTime).ToListAsync();
|
|
|
|
|
|
List<CgRes> matchCgList = new List<CgRes>();
|
|
|
- cgRess.ForEach(c =>
|
|
|
+ cgResRefs.ForEach(c =>
|
|
|
{
|
|
|
if ((dto.SigTime - c.SigTime).TotalSeconds <= TimeSeconds)
|
|
|
{
|
|
|
matchCgList.Add(c);
|
|
|
}
|
|
|
});
|
|
|
-#warning 获取最近时间的时差值,若没找到参考信号就做无参 是否要等待?
|
|
|
- var point1 = matchCgList.Where(c => c.SigTime <= dto.SigTime).FirstOrDefault();
|
|
|
- var point2 = matchCgList.Where(c => c.SigTime >= dto.SigTime).FirstOrDefault();
|
|
|
+ var cgOrderList = matchCgList.OrderBy(d => d.SigTime).ToList();
|
|
|
+ var point1 = cgOrderList.Where(c => c.SigTime <= dto.SigTime).FirstOrDefault();
|
|
|
+ var point2 = cgOrderList.Where(c => c.SigTime >= dto.SigTime).FirstOrDefault();
|
|
|
+
|
|
|
+ if (point1 == null || point2 == null)//若参考频点未出结果,查找目标信号出
|
|
|
+ {
|
|
|
+ bool isTarAny = await db.CgRes.AnyAsync(m => m.TaskID == dto.TaskID && m.TarFreqUp.HasValue&&m.TarFreqUp.Value== fixedStation.FreqUpHz && m.SigTime >= dto.SigTime);
|
|
|
+ if (!isTarAny)//目标未出结果
|
|
|
+ {
|
|
|
+ Append(dto);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
bool isSucces = false;
|
|
|
if (point1 != null && point2 != null)
|
|
|
{
|
|
@@ -118,19 +132,7 @@ namespace XdCxRhDW.App
|
|
|
}
|
|
|
if (!isSucces)
|
|
|
{
|
|
|
- dto.BeFindRef = false;
|
|
|
- dto.FixedStationId = null;
|
|
|
- var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoXlNoParAsync"), dto);
|
|
|
- if (result.code != 200)
|
|
|
- {
|
|
|
- Serilog.Log.Error($"{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位失败{result.msg}");
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- Serilog.Log.Error($"{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位完成{result.msg}");
|
|
|
- }
|
|
|
-
|
|
|
+ SendX2D1NoXlNoParAsync(dto);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -143,9 +145,29 @@ namespace XdCxRhDW.App
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发送两星一地无参定位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ private async void SendX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
|
|
|
+ {
|
|
|
+ dto.BeFindRef = false;
|
|
|
+ dto.FixedStationId = null;
|
|
|
+ var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoXlNoParAsync"), dto);
|
|
|
+ if (result.code != 200)
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位失败{result.msg}");
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Serilog.Log.Error($"{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位完成{result.msg}");
|
|
|
+ }
|
|
|
+ }
|
|
|
public void Append(X2D1NoXlNoParlPosDto dto)
|
|
|
{
|
|
|
- bool ret = posDtos.TryAdd(dto);
|
|
|
+ bool ret = posItems.TryAdd(dto);
|
|
|
if (!ret)
|
|
|
{
|
|
|
Serilog.Log.Error($"【任务{dto.TaskID}】添加取参考Dto");
|