Jelajahi Sumber

邹大哥添加了目标用户及取参考流程测试及修改

wyq 8 bulan lalu
induk
melakukan
7dcbac28f3

+ 1 - 0
Service/CheckServer/Controllers/CheckController.cs

@@ -126,6 +126,7 @@ namespace CheckServer.Controllers
                         list.Add(detectRes);
                     }
                 }
+                list = list.OrderBy(l => l.Start).ToList();
                 await LogUI.Info($"文件{Path.GetFileName(dto.file1)}检测完成");
                 return Success(list);
             }

+ 0 - 3
Service/X2D1TaskServer/App.config

@@ -14,9 +14,6 @@
 		<!--融合定位平台Http地址-->
 		<add key="PosPlatformAddr" value="http://127.0.0.1:8092" />
 
-		<!--定位时差系数-->
-		<add key="PosDtoFactor" value="1" />
-
 		<!--实时任务采集时长(秒)-->
 		<add key="CapSeconds" value="60" />
 

+ 4 - 1
Service/X2D1TaskServer/Controllers/X2D1TaskProcessingController.cs

@@ -38,7 +38,10 @@ namespace X2D1TaskServer.Controllers
         {
             try
             {
-
+                if (dto.ForTest)
+                {
+                    LogUI.Warning($"任务{dto.ID}正在使用仿真结果执行定位流程").Wait(5000);
+                }
                 if (dto.TaskType == EnumTaskTypeDto.History)
                 {
                     if (_tskHservice.Stop(dto.ID))

+ 0 - 3
Service/X2D1TaskServer/Service/TaskHistoryService.cs

@@ -45,9 +45,6 @@ namespace X2D1TaskServer.Service
                     return;
                 }
                 await LogUI.Info($"【任务{dto.ID}】开始执行...");
-
-                await LogUI.Info($"【任务{dto.ID}】定位时差系数={_config.posDtoFactor}");
-
                 await LogUI.Info($"【任务{dto.ID}】检测类型={_config.checkFileTypeStr}");
                 string threadStr = _config.threadCount == 0 ? "不限制" : _config.threadCount.ToString();
                 await LogUI.Info($"【任务{dto.ID}】线程个数={threadStr}");

+ 0 - 2
Service/X2D1TaskServer/Service/TaskRealService.cs

@@ -47,8 +47,6 @@ namespace X2D1TaskServer.Service
                 }
 
                 await LogUI.Info($"【任务{dto.ID}】开始执行...");
-
-                await LogUI.Info($"【任务{dto.ID}】定位时差系数={_config.posDtoFactor}");
                 string checkFileTypeStr = "上行信号";
                 if (_config.checkFileType != 0)
                     checkFileTypeStr = "主星下行信号";

+ 170 - 143
Service/X2D1TaskServer/Service/TaskService.cs

@@ -1,4 +1,6 @@
 //using Org.BouncyCastle.Security;
+using DPP_YH_Core.Extensions;
+using Mysqlx.Datatypes;
 using System;
 using System.Collections.Generic;
 using System.Configuration;
@@ -28,7 +30,6 @@ namespace X2D1TaskServer.Service
                 _config.adjaSatDelay = AppConfigHelper.Get<double?>("AdjaSatDelay");
                 _config.checkFileType = AppConfigHelper.Get("CheckFileType", 0);
                 _config.threadCount = AppConfigHelper.Get("ThreadCount", 0).NotLessThanZero();
-                _config.posDtoFactor = AppConfigHelper.Get("PosDtoFactor", 1);
             }
             catch (Exception ex)
             {
@@ -89,20 +90,20 @@ namespace X2D1TaskServer.Service
         /// <param name="time"></param>
         internal void ResetTime(int formatFlag, ref DateTime time)
         {
-            //if (formatFlag == 0)
-            //{
-            //    time = DateTime.MaxValue;
-            //}
-            //else if (formatFlag == 1)
-            //{
-            //    var newTime = new DateTime(time.Year, time.Month, time.Day, 0, 0, 0);
-            //    time = newTime.AddHours(24);
-            //}
-            //else
-            //{
-            //    var newTime = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
-            //    time = newTime.AddHours(1);
-            //}
+            if (formatFlag == 0)
+            {
+                time = DateTime.MaxValue;
+            }
+            else if (formatFlag == 1)
+            {
+                var newTime = new DateTime(time.Year, time.Month, time.Day, 0, 0, 0);
+                time = newTime.AddHours(24);
+            }
+            else
+            {
+                var newTime = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
+                time = newTime.AddHours(1);
+            }
         }
 
         /// <summary>
@@ -135,14 +136,13 @@ namespace X2D1TaskServer.Service
                     _ = LogUI.Error($"文件[{Path.GetFileName(filePath)}]格式异常,解析时间信息出错");
                     return null;
                 }
-                //if (dateTime <= preTime)
-                //{
-                //    //已处理,跳过此文件
-                //    return null;
-                //}
+                if (dateTime <= preTime)
+                {
+                    //已处理,跳过此文件
+                    return null;
+                }
                 historyFile.CapTime = dateTime;
 
-
                 //采集通道
                 var chstr = strs.Skip(strs.Length - 2).Take(1).First();
                 int.TryParse(chstr, out int ch);
@@ -446,7 +446,15 @@ namespace X2D1TaskServer.Service
                         //检测
                         (bool deret, List<DetectResDto> deteRes) = await DetectCalc(cdbFile, mainFile, paramInfo, cts);
                         if (!deret) continue;
-
+                        //参考信号模拟偶尔没有的情况
+                        if (dto.ForTest && dto.FixedStationDto != null && dto.FixedStationDto.FreqUp == dinfo.FreqHz)
+                        {
+                            Random r = new Random();
+                            if (r.Next(1, 10) > 5)
+                            {
+                                deteRes = deteRes.Take(1).ToList();
+                            }
+                        }
                         var smps = deteRes.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
                         var cgDto = new CpuCgMultiDto()
                         {
@@ -531,30 +539,27 @@ namespace X2D1TaskServer.Service
                             continue;
                         }
 
-                        //执行参考信号
-                        List<DetectResDto> refDetects = await DoRefAsync(dto, paramInfo, deteRes, data1, data2, cts);
 
-                        //目标信号
-                        string msg = $"【任务{dto.ID}】目标信号[{paramInfo.TaskSig.FreqUp / 1e6:f3}MHz]{capTime:yyyyMMddHHmmss}时刻";
-                        bool beFindRef = false;
-                        if (refDetects != null && refDetects.Count > 0)//有符合规则的固定站参考信号
-                        {
-                            beFindRef = true;
-                            data1 = data1.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
-                            data2 = data2.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
-                        }
-                        //构建目标信号定位模型
-                        var tar = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, deteRes, data1, data2, cts, msg);
 
-                        if (beFindRef)//有符合规则的固定站参考信号就把目标信号添加目标缓存中
+                        //执行参考信号
+                        (var refDetects, bool needWait) = await DoRefAsync(dto, paramInfo, deteRes, data1, data2, cts);
+                        if (!needWait)
                         {
-                            await AddTarCacheAsync(tar, msg);
+                            //构建目标信号定位模型
+                            string msg = $"【任务{dto.ID}】目标信号[{paramInfo.TaskSig.FreqUp / 1e6:f3}MHz]{capTime:yyyyMMddHHmmss}时刻,无参定位";
+                            await LogUI.Info(msg);
+                            var tar = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, deteRes, data1, data2, cts, msg);
+                            await DoX2D1NoParPosAsync(tar, cts, msg, dto.ForTest);
                         }
-                        else//其他都执行原有的无参流程
+                        else
                         {
-                            await DoX2D1NoParPosAsync(tar, paramInfo.Minfo.CapTime, cts, msg);
+                            data1 = data1.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
+                            data2 = data2.Where(c => !refDetects.Any(r => r.Start == c.Smpstart && r.Length == c.Smplen)).ToList();
+                            string msg = $"【任务{dto.ID}】目标信号[{paramInfo.TaskSig.FreqUp / 1e6:f3}MHz]{capTime:yyyyMMddHHmmss}时刻,等待参考";
+                            await LogUI.Info(msg);
+                            var tar = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, deteRes, data1, data2, cts, msg);
+                            await AddTarCacheAsync(tar, msg);
                         }
-
                     }
                     catch (TaskCanceledException)
                     {
@@ -574,7 +579,7 @@ namespace X2D1TaskServer.Service
         }
 
 
-        private List<X2D1NoXlNoParlPosDto> BuildX2D1NoXlNoParlPosDto(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> deteRes, List<CpuCgResDto> data1, List<CpuCgResDto> data2, CancellationTokenSource cts, string msg)
+        private List<X2D1NoXlNoParlPosDto> BuildX2D1NoXlNoParlPosDto(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> deteRes, List<CpuCgResDto> data1, List<CpuCgResDto> data2, CancellationTokenSource cts, string msg, string target = null)
         {
             int fixedStationId = dto.FixedStationDto != null ? dto.FixedStationDto.FixedStationId : 0;
             List<X2D1NoXlNoParlPosDto> list = new List<X2D1NoXlNoParlPosDto>();
@@ -599,7 +604,8 @@ namespace X2D1TaskServer.Service
                         CdbTxLat = dto.CdbLat,
                         FreqDown = paramInfo.Minfo.FreqHz,
                         FreqUp = paramInfo.Dinfo.FreqHz,
-                        FixedStationId = fixedStationId,
+                        Target = target,
+                        CalcConfidence = true,
                         CheckRes = new CheckResDto()
                         {
                             FileName = Path.GetFileName(paramInfo.Dinfo.FilePath),
@@ -618,19 +624,19 @@ namespace X2D1TaskServer.Service
                         //卫星转发某些频点可能有时延,无参定位由于不能抵消需要减去这个时延
                         if (_config.checkFileType == 0)
                         {
-                            x2D1.SxDto = data1[i].Dt * _config.posDtoFactor - data2[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
+                            x2D1.SxDto = data1[i].Dt - data2[i].Dt - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
                             x2D1.SxDfo = data1[i].Df - data2[i].Df;
                             x2D1.SxSnr = (data1[i].Snr + data2[i].Snr) / 2;
-                            x2D1.XdDto = data1[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value;
+                            x2D1.XdDto = data1[i].Dt - paramInfo.Delay1.Value;
                             x2D1.XdDfo = data1[i].Df;
                             x2D1.XdSnr = data1[i].Snr;
                         }
                         else
                         {
-                            x2D1.SxDto = data2[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
+                            x2D1.SxDto = data2[i].Dt - paramInfo.Delay1.Value + paramInfo.Delay2.Value;
                             x2D1.SxDfo = data2[i].Df;
                             x2D1.SxSnr = data2[i].Snr;
-                            x2D1.XdDto = data1[i].Dt * _config.posDtoFactor - paramInfo.Delay1.Value;
+                            x2D1.XdDto = data1[i].Dt - paramInfo.Delay1.Value;
                             x2D1.XdDfo = data1[i].Df;
                             x2D1.XdSnr = data1[i].Snr;
                         }
@@ -645,7 +651,7 @@ namespace X2D1TaskServer.Service
             return list;
         }
         Random r = new Random();
-        private async Task DoX2D1NoParPosAsync(List<X2D1NoXlNoParlPosDto> x2D1s, DateTime capTime, CancellationTokenSource cts, string msg)
+        private async Task DoX2D1NoParPosAsync(List<X2D1NoXlNoParlPosDto> x2D1s, CancellationTokenSource cts, string msg, bool forTest)
         {
 
             foreach (var x2D1 in x2D1s)
@@ -653,68 +659,77 @@ namespace X2D1TaskServer.Service
                 try
                 {
                     if (cts.IsCancellationRequested) break;
-                    //var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
-
-                    #region 测试代码
-                    X2D1NoParPosDto dto = new X2D1NoParPosDto()
+                    if (forTest)
                     {
-                        AdjaCode = x2D1.AdjaCode,
-                        SxDto = x2D1.SxDto,
-                        SatTxLat = x2D1.SatTxLat,
-                        AdjaVX = 0,
-                        AdjaVY = 0,
-                        AdjaVZ = 0,
-                        MainVX = 0,
-                        MainVY = 0,
-                        MainVZ = 0,
-                        MainX = 10401572.0412,
-                        MainY = 40762347.5788,
-                        MainZ = 2311671.1075,
-                        AdjaX = 25526808.8297,
-                        AdjaY = 33541855.6479,
-                        AdjaZ = 65652.2217,
-                        CalcConfidence = x2D1.CalcConfidence,
-                        CdbTxLat = x2D1.CdbTxLat,
-                        CdbTxLon = x2D1.CdbTxLon,
-                        CheckRes = x2D1.CheckRes,
-                        FreqDown = x2D1.FreqDown,
-                        FreqUp = x2D1.FreqUp,
-                        MainCode = x2D1.MainCode,
-                        SatTxLon = x2D1.SatTxLon,
-                        SigTime = x2D1.SigTime,
-                        SxDfo = x2D1.SxDfo,
-                        SxSnr = x2D1.SxSnr,
-                        TaskID = x2D1.TaskID,
-                        TheoryDfoCalc = x2D1.TheoryDfoCalc,
-                        XdDfo = x2D1.XdDfo,
-                        XdDto = x2D1.XdDto,
-                        XdSnr = x2D1.XdSnr,
+                        X2D1NoParPosDto dto2 = new X2D1NoParPosDto()
+                        {
+                            AdjaCode = x2D1.AdjaCode,
+                            SxDto = x2D1.SxDto,
+                            SatTxLat = x2D1.SatTxLat,
+                            AdjaVX = 0,
+                            AdjaVY = 0,
+                            AdjaVZ = 0,
+                            MainVX = 0,
+                            MainVY = 0,
+                            MainVZ = 0,
+                            MainX = 10401572.0412,
+                            MainY = 40762347.5788,
+                            MainZ = 2311671.1075,
+                            AdjaX = 25526808.8297,
+                            AdjaY = 33541855.6479,
+                            AdjaZ = 65652.2217,
+                            CalcConfidence = x2D1.CalcConfidence,
+                            CdbTxLat = x2D1.CdbTxLat,
+                            CdbTxLon = x2D1.CdbTxLon,
+                            CheckRes = x2D1.CheckRes,
+                            FreqDown = x2D1.FreqDown,
+                            FreqUp = x2D1.FreqUp,
+                            MainCode = x2D1.MainCode,
+                            SatTxLon = x2D1.SatTxLon,
+                            SigTime = x2D1.SigTime,
+                            SxDfo = x2D1.SxDfo,
+                            SxSnr = x2D1.SxSnr,
+                            TaskID = x2D1.TaskID,
+                            TheoryDfoCalc = x2D1.TheoryDfoCalc,
+                            XdDfo = x2D1.XdDfo,
+                            XdDto = x2D1.XdDto,
+                            XdSnr = x2D1.XdSnr,
+                            Target = "固定站",
 
-                    };
-                    dto.SatTxLon = 43;
-                    dto.SatTxLat = 11.57;
-                    dto.CdbTxLon = 43;
-                    dto.CdbTxLat = 11.57;
-                    var mainEcef = (dto.MainX, dto.MainY, dto.MainZ);
-                    var adjaEcef = (dto.AdjaX, dto.AdjaY, dto.AdjaZ);
-                    var lon = r.Next(38, 48) + Math.Round(r.NextDouble(), 3);
-                    var lat = r.Next(7, 16) + Math.Round(r.NextDouble(), 3);
-                    var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
-                    var recEcef = PhysicsHelper.GeoToEcef((dto.SatTxLon, dto.SatTxLat, 0));
-                    var d1 = PhysicsHelper.Dto(tarEcef, mainEcef, recEcef);
-                    var d2 = PhysicsHelper.Dto(tarEcef, adjaEcef, recEcef);
-                    var d3 = PhysicsHelper.Dto(tarEcef, recEcef);
-                    var dto1 = (d1 - d2) * 1e6 + r.Next(-50, 51);
-                    var dto2 = (d1 - d3) * 1e6 + r.Next(-50, 51);
-                    dto.SxDto = Math.Round(dto1, 3);
-                    dto.XdDto = Math.Round(dto2, 3);
-                    var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoParAsync", dto);
-                    #endregion
-
-                    if (result.code != 200)
+                        };
+                        dto2.SatTxLon = 43;
+                        dto2.SatTxLat = 11.57;
+                        dto2.CdbTxLon = 43;
+                        dto2.CdbTxLat = 11.57;
+                        var mainEcef = (dto2.MainX, dto2.MainY, dto2.MainZ);
+                        var adjaEcef = (dto2.AdjaX, dto2.AdjaY, dto2.AdjaZ);
+                        var lon = 42.5;
+                        var lat = 11.5;
+                        var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
+                        var recEcef = PhysicsHelper.GeoToEcef((dto2.SatTxLon, dto2.SatTxLat, 0));
+                        var d1 = PhysicsHelper.Dto(tarEcef, mainEcef, recEcef);
+                        var d2 = PhysicsHelper.Dto(tarEcef, adjaEcef, recEcef);
+                        var d3 = PhysicsHelper.Dto(tarEcef, recEcef);
+                        var dto1 = (d1 - d2) * 1e6 + r.Next(-50, 51);
+                        var dto22 = (d1 - d3) * 1e6 + r.Next(-50, 51);
+                        dto2.SxDto = Math.Round(dto1, 3);
+                        dto2.XdDto = Math.Round(dto22, 3);
+
+                        var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoParAsync", dto2);
+                        if (result.code != 200)
+                        {
+                            await LogUI.Error($"{msg},{x2D1.SigTime:yyyyMMddHHmmss}时刻定位异常.{result.msg}");
+                        }
+                    }
+                    else
                     {
-                        await LogUI.Error($"{msg},{x2D1.SigTime:yyyyMMddHHmmss}时刻定位异常.{result.msg}");
+                        var result = await HttpHelper.PostRequestAsync<PosResDto>(_config.baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
+                        if (result.code != 200)
+                        {
+                            await LogUI.Error($"{msg},{x2D1.SigTime:yyyyMMddHHmmss}时刻定位异常.{result.msg}");
+                        }
                     }
+
                 }
                 catch (Exception ex)
                 {
@@ -758,7 +773,7 @@ namespace X2D1TaskServer.Service
             }
         }
         /// <summary>
-        /// 做参考信号
+        /// 返回参考突发集合
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="paramInfo"></param>
@@ -767,31 +782,28 @@ namespace X2D1TaskServer.Service
         /// <param name="cg2"></param>
         /// <param name="cts"></param>
         /// <returns></returns>
-        private async Task<List<DetectResDto>> DoRefAsync(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> detects, List<CpuCgResDto> cg1, List<CpuCgResDto> cg2, CancellationTokenSource cts)
+        private async Task<Tuple<List<DetectResDto>, bool>> DoRefAsync(X2D1TaskHandleDto dto, BaseParamInfo paramInfo, List<DetectResDto> detects, List<CpuCgResDto> cg1, List<CpuCgResDto> cg2, CancellationTokenSource cts)
         {
-            bool beRef = false;
-
+            List<DetectResDto> refDetects = new List<DetectResDto>();
             //没有固定站时 做无参
             if (dto.FixedStationDto == null)
             {
-                return null;
+                return Tuple.Create(refDetects, false);
             }
             //检测下行信号 做无参
             if (_config.checkFileType != 0)
             {
-                return null;
+                return Tuple.Create(refDetects, false);
             }
+
             //过滤不是固定站的频点
             if (dto.FixedStationDto.FreqUp != paramInfo.TaskSig.FreqUp)
             {
-                return null;
-            }
-            if (dto.FixedStationDto != null && _config.checkFileType == 0)
-            {
-                beRef = true;
+                return Tuple.Create(refDetects, true);
+                //return null;
             }
+
             //获取满足固定站条件的参考信号 
-            List<DetectResDto> refDetects = new List<DetectResDto>();
             for (int i = 0; i < detects.Count; i++)
             {
                 if (i + 1 == detects.Count)
@@ -813,9 +825,8 @@ namespace X2D1TaskServer.Service
             if (refDetects.Count == 0)
             {
                 await SendZeroRefCacheAsync(dto, capTime, msg);
-                beRef = false;
+                return Tuple.Create(refDetects, true);
             }
-            if (!beRef) return null;
 
             await LogUI.Info($"【任务{dto.ID}】参考信号[{dto.FixedStationDto.FreqUp / 1e6:f3}MHz],{capTime:yyyyMMddHHmmss}时刻{_config.checkFileTypeStr}检测完成,共{refDetects.Count}个时隙");
             var smps = refDetects.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
@@ -825,41 +836,66 @@ namespace X2D1TaskServer.Service
             {
                 await SendZeroRefCacheAsync(dto, capTime, msg);
                 await LogUI.Error($"【任务{dto.ID}】参考信号[{dto.FixedStationDto.FreqUp / 1e6:f3}MHz],{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
-                return null;
+                refDetects.Clear();
+                return Tuple.Create(refDetects, true);
             }
             //构建参考信号定位模型
-            var refSigDto = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, refDetects, data1, data2, cts, msg);
+            var refSigDto = BuildX2D1NoXlNoParlPosDto(dto, paramInfo, refDetects, data1, data2, cts, msg, "固定站");
             //执行三星无参定位
-            await DoX2D1NoParPosAsync(refSigDto, paramInfo.Minfo.CapTime, cts, msg);
+            await DoX2D1NoParPosAsync(refSigDto, cts, msg, dto.ForTest);
 
             List<TaskCgDto> cgItems = new List<TaskCgDto>();
             foreach (var item in refSigDto)
             {
-                var ephMain = await GetSatEphAsync(dto.MainSatCode, item.SigTime);
-                var ephAdja = await GetSatEphAsync(dto.AdjaSatCode, item.SigTime);
-                if (ephMain == null || ephAdja == null) continue;
+                //已知主邻、主地的测量时差,求样本
+                //主地(测量值)+Δ=样本主(Δ表示超短站到固定站的理论距离)
+                //样本主-主邻1(测量值)=样本邻
+
                 var tarEcef = PhysicsHelper.GeoToEcef((dto.FixedStationDto.Lon, dto.FixedStationDto.Lat, 0));
-                var ecefXl1 = (ephMain.X, ephMain.Y, ephMain.Z);
-                var ecefXl2 = (ephAdja.X, ephAdja.Y, ephAdja.Z);
                 var ecefCdb = PhysicsHelper.GeoToEcef((dto.CdbLon, dto.CdbLat, 0));
-                var ecefRec = PhysicsHelper.GeoToEcef((dto.CapLon, dto.CapLat, 0));
-                var mtdt1 = PhysicsHelper.Dto(tarEcef, ecefXl1, ecefRec);
-                var atdt2 = PhysicsHelper.Dto(tarEcef, ecefXl2, ecefRec);
+                var delta = PhysicsHelper.Dto(tarEcef, ecefCdb) * 1e6;
+                var dtoYbMain = item.XdDto + delta;
+                var dtoYbAdja = dtoYbMain - item.SxDto;
+
                 TaskCgDto cgItem = new TaskCgDto
                 {
                     TaskID = dto.ID,
                     FixedLon = dto.FixedStationDto.Lon,
                     FixedLat = dto.FixedStationDto.Lat,
                     SigTime = item.SigTime,
-                    MainYbDto = mtdt1,
-                    AdjaYbDto = atdt2,
+                    MainYbDto = dtoYbMain,
+                    AdjaYbDto = dtoYbAdja,
                     YbSnr = 40,
                 };
                 cgItems.Add(cgItem);
             }
             //添加参考信号缓存
+
+            if (dto.ForTest)
+            {
+                foreach (var item in cgItems)
+                {
+                    var refLon = dto.FixedStationDto.Lon;
+                    var refLat = dto.FixedStationDto.Lat;
+
+                    var recLon = 43;
+                    var recLat = 11.57;
+
+                    var refEcef = PhysicsHelper.GeoToEcef((refLon, refLat, 0));
+                    var recEcef = PhysicsHelper.GeoToEcef((recLon, recLat, 0));
+
+                    var ecefMain = (10401572.0412, 40762347.5788, 2311671.1075);
+                    var ecefAdja = (25526808.8297, 33541855.6479, 65652.2217);
+
+                    var d1 = PhysicsHelper.Dto(refEcef, ecefMain, recEcef);
+                    var d2 = PhysicsHelper.Dto(refEcef, ecefAdja, recEcef);
+                    item.MainYbDto = d1 * 1e6;
+                    item.AdjaYbDto = d2 * 1e6;
+                }
+            }
+
             await AddRefCacheAsync(cgItems, msg);
-            return refDetects;
+            return Tuple.Create(refDetects, true);
         }
 
         private async Task SendZeroRefCacheAsync(X2D1TaskHandleDto dto, DateTime capTime, string msg)
@@ -880,15 +916,6 @@ namespace X2D1TaskServer.Service
             await AddRefCacheAsync(cgItems, msg);
         }
 
-        private async Task<SatEphResDto> GetSatEphAsync(int satcode, DateTime sigtime)
-        {
-            var result = await HttpHelper.PostRequestAsync<SatEphResDto>(_config.baseUrl + "Xl/XLCalc", new SatDto() { SatCode = satcode, SigTime = sigtime });
-            if (result.code != 200)
-            {
-                await LogUI.Error($"卫星:{satcode},{sigtime:yyyyMMddHHmmss}时刻获取星历异常.{result.msg}");
-                return null;
-            }
-            return result.data;
-        }
+
     }
 }

+ 0 - 5
Service/X2D1TaskServer/Service/TaskSvrConfig.cs

@@ -28,11 +28,6 @@
         /// </summary>
         public int threadCount { get; set; } = 0;
 
-        /// <summary>
-        /// //定位时时差系数
-        /// </summary>
-        public int posDtoFactor { get; set; }
-
         public string checkFileTypeStr
         {
             get

+ 55 - 17
XdCxRhDW.Api/AddIns/定位/PosApi.cs

@@ -17,7 +17,7 @@ namespace XdCxRhDW.Api
     public static class PosApi
     {
         //置信度统计次数
-        private static int confidenceCount = 10000;
+        private static int confidenceCount = 100;
 
         //置信度有效距离(m)
         private static int confidenceDistance = 10000;
@@ -268,7 +268,6 @@ namespace XdCxRhDW.Api
             double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
             double[] res = new double[6];
             X2D1_PosNoRef20240305_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, zone, dto1, dtoCdb, res);
-            ConvertToGeoPoint(res);
             var posRes = ConvertToGeoPoint(res);
             if (CalcConfidence && IsGeoPoint2(posRes))
             {
@@ -418,33 +417,72 @@ namespace XdCxRhDW.Api
                 else if (flag == 5)
                     lon += 0.001;
             }
-            double[] res;
+            double[] posRes;
             var p1 = list.OrderBy(p => p.Item4 * p.Item4 + p.Item3 * p.Item3).FirstOrDefault();
             if (p1 == default)
             {
-                res = new double[7] { 999, 999, 0, 999, 999, 0, -1 };
-                return res;
+                posRes = new double[7] { 999, 999, 0, 999, 999, 0, -1 };
+                return posRes;
             }
             var p2 = list.Where(p => PhysicsHelper.DistanceGeo((p1.Item1, p1.Item2, 0), (p.Item1, p.Item2, 0)) > 10000).OrderBy(p => p.Item4 * p.Item4 + p.Item3 * p.Item3).FirstOrDefault();
             if (p2 == default)
-                res = new double[7] { p1.Item1, p1.Item2, 0, 999, 999, 0, -1 };
+                posRes = new double[7] { p1.Item1, p1.Item2, 0, 999, 999, 0, -1 };
             else
-                res = new double[7] { p1.Item1, p1.Item2, 0, p2.Item1, p2.Item2, 0, -1 };
-            if (res[3] != 999)
+                posRes = new double[7] { p1.Item1, p1.Item2, 0, p2.Item1, p2.Item2, 0, -1 };
+            if (posRes[3] != 999)
             {
-                var dis1 = PhysicsHelper.DistanceArcGeo((res[3], res[4]), (sRes.CdbTxLon.Value, sRes.CdbTxLat.Value));
-                var dis2 = PhysicsHelper.DistanceArcGeo((res[0], res[1]), (sRes.CdbTxLon.Value, sRes.CdbTxLat.Value));
+                var dis1 = PhysicsHelper.DistanceArcGeo((posRes[3], posRes[4]), (sRes.CdbTxLon.Value, sRes.CdbTxLat.Value));
+                var dis2 = PhysicsHelper.DistanceArcGeo((posRes[0], posRes[1]), (sRes.CdbTxLon.Value, sRes.CdbTxLat.Value));
                 if (dis1 < dis2)
                 {
-                    var tmp1 = res[3];
-                    var tmp2 = res[4];
-                    res[3] = res[0];
-                    res[4] = res[1];
-                    res[0] = tmp1;
-                    res[1] = tmp2;
+                    var tmp1 = posRes[3];
+                    var tmp2 = posRes[4];
+                    posRes[3] = posRes[0];
+                    posRes[4] = posRes[1];
+                    posRes[0] = tmp1;
+                    posRes[1] = tmp2;
                 }
             }
-            return res;
+            if (CalcConfidence && IsGeoPoint2(posRes))
+            {
+                double[] satStation = new double[3] { sRes.SatTxLon, sRes.SatTxLat, 0 };
+                double[] cdbStation = new double[3] { sRes.CdbTxLon.Value, sRes.CdbTxLat.Value, 0 };
+                double dto1 = cgRes.Dto1.Value / 1e6;
+                double dtoCdb = cgRes.DtoCdb.Value / 1e6;
+                double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
+                int succeedCount = 0;
+                for (int i = 0; i < confidenceCount; i++)
+                {
+                    var mainSatNew = new double[3]
+                    {
+                        cgRes.MainX.Value+RandomHelper.Normal(0,200),
+                        cgRes.MainY.Value+RandomHelper.Normal(0,200),
+                        cgRes.MainZ.Value+RandomHelper.Normal(0,200)
+
+                    };
+                    var adjaSatNew = new double[3]
+                    {
+                        cgRes.Adja1X.Value+RandomHelper.Normal(0,200),
+                        cgRes.Adja1Y.Value+RandomHelper.Normal(0,200),
+                        cgRes.Adja1Z.Value+RandomHelper.Normal(0,200)
+                    };
+                    var dto1New = (dto1 * 1e6 + RandomHelper.Normal(0, 1)) / 1e6;
+                    var dtoCdbNew = (dtoCdb * 1e6 + RandomHelper.Normal(0, 1)) / 1e6;
+                    double[] res = new double[6];
+                    X2D1_PosNoRef20240305_Core(mainSatNew, adjaSatNew, cdbStation, satStation, satStation, satStation, zone, dto1New, dtoCdbNew, res);
+                    var posResNew = ConvertToGeoPoint(res);
+                    if (IsGeoPoint2(posResNew))
+                    {
+                        var distance = PhysicsHelper.DistanceGeo((posRes[0], posRes[1], 0), (posResNew[0], posResNew[1], 0));
+                        if (distance <= confidenceDistance)
+                        {
+                            succeedCount++;
+                        }
+                    }
+                }
+                posRes[6] = (int)(succeedCount / (double)confidenceCount * 100);
+            }
+            return posRes;
         }
 
         /// <summary>

+ 32 - 30
XdCxRhDW.App/App.config

@@ -1,33 +1,35 @@
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
-  <configSections>
-    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
-  </configSections>
-  <connectionStrings>
-    <add name="DbCon" connectionString="Data Source=Database.db" providerName="System.Data.SQLite.EF6" />
-    <add name="LogDbCon" connectionString="Data Source=Log.db" providerName="System.Data.SQLite.EF6" />
-  </connectionStrings>
-  <appSettings>
-    <!--程序标题-->
-    <add key="SystemName" value="多模式融合定位平台" />
-    <!--公司名称(没有则不会显示版权)-->
-    <add key="Company" value="" />
-    <!--本机IP,没有则由程序自动获取-->
-    <add key="LocalIP" value="" />
-    <!--自采集地图源URL-->
-    <add key="ZCJ_URL" value="http://192.168.1.7:12338/static/source/assets/textures" />
-    <!--数据中心地图源URL-->
-    <add key="SJZX_URL" value="http://192.168.1.7:5889/MapServer" />
-    <!--取参考时间 单位:分钟-->
-    <add key="TakeRefTime" value="10" />
-    <!--是否启用地图定位点聚合 启用=1,禁用=0-->
-    <add key="UseMapCluster" value="0" />
-    <!--是否启用平台设备状态收集功能 启用=1,禁用=0-->
-    <add key="UseGatherDevState" value="0" />
-    <!--参估绘图外部程序的路径(可设置为绝对路径,也可设置为平台目录的相对路径)-->
-    <add key="CgDrawExe" value="Draw\Everything.exe" />
-  </appSettings>
-  <startup>
-    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
-  </startup>
+	<configSections>
+		<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+	</configSections>
+	<connectionStrings>
+		<add name="DbCon" connectionString="Data Source=Database.db" providerName="System.Data.SQLite.EF6" />
+		<add name="LogDbCon" connectionString="Data Source=Log.db" providerName="System.Data.SQLite.EF6" />
+	</connectionStrings>
+	<appSettings>
+		<!--程序标题-->
+		<add key="SystemName" value="多模式融合定位平台" />
+		<!--公司名称(没有则不会显示版权)-->
+		<add key="Company" value="" />
+		<!--本机IP,没有则由程序自动获取-->
+		<add key="LocalIP" value="" />
+		<!--自采集地图源URL-->
+		<add key="ZCJ_URL" value="http://192.168.1.7:12338/static/source/assets/textures" />
+		<!--数据中心地图源URL-->
+		<add key="SJZX_URL" value="http://192.168.1.7:5889/MapServer" />
+		<!--取参考时间 单位:分钟-->
+		<add key="TakeRefTime" value="10" />
+		<!--是否启用地图定位点聚合 启用=1,禁用=0-->
+		<add key="UseMapCluster" value="0" />
+		<!--是否启用平台设备状态收集功能 启用=1,禁用=0-->
+		<add key="UseGatherDevState" value="0" />
+		<!--参估绘图外部程序的路径(可设置为绝对路径,也可设置为平台目录的相对路径)-->
+		<add key="CgDrawExe" value="Draw\Everything.exe" />
+		<!--星地任务是否使用仿真时频差等进行流程测试-->
+		<add key="ForTest" value="true"/>
+	</appSettings>
+	<startup>
+		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+	</startup>
 </configuration>

+ 148 - 11
XdCxRhDW.App/Controllers/PosController.cs

@@ -52,7 +52,7 @@ namespace XdCxRhDW.App.Controllers
                 {
                     runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == dto.TaskID);
                     if (runTask == null)
-                    {   
+                    {
                         XdCxRhDW.Framework.LogHelper.Warning($"找不到任务,ID={dto.TaskID}");
                         return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                     }
@@ -267,6 +267,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -288,6 +289,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime, true))
                 {
@@ -364,6 +378,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     if (dto.CalcConfidence)
                     {
 
@@ -394,6 +412,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -415,6 +434,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
                 if (xl1 == null)
@@ -465,6 +497,8 @@ namespace XdCxRhDW.App.Controllers
 
                 //dto.MainYbDto = Math.Round(refdt1 * 1e6, 3);
                 //dto.AdjaYbDto = Math.Round(refdt2 * 1e6, 3);
+
+
                 using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime, true))
                 {
                     var StationRes = db.StationRes.Add(new StationRes()
@@ -562,6 +596,10 @@ namespace XdCxRhDW.App.Controllers
                     */
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
@@ -589,6 +627,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -610,6 +649,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime, true))
                 {
@@ -681,6 +733,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
@@ -697,7 +753,7 @@ namespace XdCxRhDW.App.Controllers
             }
         }
 
-       
+
         /// <summary>
         /// 两星一地无参定位(无星历)
         /// </summary>
@@ -708,6 +764,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -729,6 +786,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
                 if (xl1 == null)
@@ -743,15 +813,7 @@ namespace XdCxRhDW.App.Controllers
                     XdCxRhDW.Framework.LogHelper.Error($"系统缺少编号{dto.AdjaCode}卫星的星历!");
                     return Error<PosResDto>($"系统缺少编号{dto.AdjaCode}卫星的星历!");
                 }
-
-
-
                 XdCxRhDW.Framework.LogHelper.Info($"卫星{dto.AdjaCode}使用发布时刻为{xl2.TimeUTC:yyyyMMddHHmmss}的星历进行推算");
-                //dto.SigTime = new DateTime(2023, 12, 24, 18, 0, 0);
-                //dto.CdbTxLon = 45;
-                //dto.CdbTxLat = 20;
-                //dto.SatTxLon = 45;
-                //dto.SatTxLat = 20;
                 var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, SigTime = dto.SigTime };
                 var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
                 if (ephMain.code != 200)
@@ -815,7 +877,6 @@ namespace XdCxRhDW.App.Controllers
                         DfoCdb = Math.Round(dto.XdDfo, 10),
                         SnrCdb = Math.Round(dto.XdSnr, 1),
                         StationResID = StationRes.ID,
-                        FixedStationID = dto.FixedStationId,
                         MainCode = dto.MainCode,
                         Adja1Code = dto.AdjaCode,
                         MainXlTime = ephMain.data.TleTime,
@@ -854,6 +915,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
@@ -1150,6 +1215,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -1171,6 +1237,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime, true))
                 {
@@ -1253,6 +1332,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
@@ -1279,6 +1362,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -1300,6 +1384,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
                 if (xl1 == null)
@@ -1427,6 +1524,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
@@ -1454,6 +1555,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -1475,6 +1577,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime, true))
                 {
@@ -1551,6 +1666,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
@@ -1577,6 +1696,7 @@ namespace XdCxRhDW.App.Controllers
             try
             {
                 TaskInfo runTask;
+                TargetInfo target = null;
                 using (RHDWContext db = new RHDWContext())
                 {
                     if (dto.TaskID == null)
@@ -1598,6 +1718,19 @@ namespace XdCxRhDW.App.Controllers
                             return Error<PosResDto>($"找不到ID={dto.TaskID}的任务");
                         }
                     }
+                    if (!string.IsNullOrWhiteSpace(dto.Target))
+                    {
+                        target = await db.TargetInfos.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
+                        if (target == null)
+                        {
+                            target = db.TargetInfos.Add(new TargetInfo()
+                            {
+                                TargetName = dto.Target.Trim(),
+                                TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
+                            });
+                            await db.SaveChangesAsync();
+                        }
+                    }
                 }
                 var xl1 = await XlRepository.GetLatestAsync(dto.MainCode, dto.SigTime);
                 if (xl1 == null)
@@ -1720,6 +1853,10 @@ namespace XdCxRhDW.App.Controllers
                     };
                     if (dto.TheoryDfoCalc && posRes.PosLon != 999)
                         posRes.TargetState = TheoryDtoDfoApi.TheoryDfo(cgRes, StationRes, posRes, SysConfig.Config.YDPZThreshold);
+                    if (target != null)
+                    {
+                        posRes.TargetInfoID = target.ID;
+                    }
                     posRes = db.PosRes.Add(posRes);
                     await db.SaveChangesAsync();
                     Messenger.Defalut.Pub("新增定位点", MapModel(posRes));

+ 174 - 17
XdCxRhDW.App/FindRef/PosWithRefFind.cs

@@ -6,6 +6,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using XdCxRhDW.Dto;
 using XdCxRhDW.Entity;
+using XdCxRhDW.Framework;
 using XdCxRhDW.Repostory;
 
 namespace XdCxRhDW.App
@@ -23,7 +24,6 @@ namespace XdCxRhDW.App
             this._taskId = taskId;
             Task.Run(async () =>
             {
-
                 while (!token.IsCancellationRequested)
                 {
                     try
@@ -31,15 +31,15 @@ namespace XdCxRhDW.App
                         var taskTars = TaskTarCache.Instance.GetTaskTar(_taskId);
                         if (taskTars.Count == 0)
                         {
-                            await Task.Delay(5000);
-                            LogHelper.Info($"等待任务[{_taskId}]添加目标信号缓存").Wait(5000);
+                            await Task.Delay(5000, token);
+                            //LogHelper.Info($"等待任务[{_taskId}]添加目标信号缓存").Wait(5000);
                             continue;
                         }
                         var taritem = taskTars[0];
                         var refcgDto = GetRefCg(taritem, out bool needWait);
                         if (needWait)
                         {
-                            await Task.Delay(10 * 1000);
+                            await Task.Delay(10 * 1000, token);
                             continue;
                         }
 
@@ -71,18 +71,19 @@ namespace XdCxRhDW.App
                                 SxDfo = taritem.SxDfo,
                                 SxSnr = taritem.SxSnr,
                                 CalcConfidence = true,
-                                TheoryDfoCalc = true,
+                                TheoryDfoCalc = false,
                                 TaskID = taritem.TaskID,
                                 CheckRes = taritem.CheckRes,
                             };
                             await SendX2D1RefAsync(X2D1NoXlPosDto);
                         }
                         TaskTarCache.Instance.Remove(_taskId, taritem);
-                        TaskRefCache.Instance.ClearExpireRef(_taskId);
+                    }
+                    catch (TaskCanceledException)
+                    {
                     }
                     catch (Exception ex)
                     {
-
                         await LogHelper.Error($"【启动任务[{this._taskId}]目标取参考信号缓存异常{ex.Message}", ex);
                     }
 
@@ -90,6 +91,21 @@ namespace XdCxRhDW.App
                 await ClearCacheAsync(_taskId);
 
             });
+            _ = ClearExpireRef(_taskId, token);
+        }
+
+        public async Task ClearExpireRef(int taskId, CancellationToken token)
+        {
+            while (!token.IsCancellationRequested)
+            {
+                try
+                {
+                    TaskRefCache.Instance.ClearExpireRef(_taskId);
+                    await Task.Delay(60000, token);
+                }
+                catch
+                { }
+            }
         }
         /// <summary>
         /// 获取参考参估
@@ -141,7 +157,7 @@ namespace XdCxRhDW.App
             needWait = false;
             return cgdto;
         }
-
+        Random r = new Random();
         /// <summary>
         /// 发送两星一地无参定位
         /// </summary>
@@ -150,16 +166,86 @@ namespace XdCxRhDW.App
         {
             try
             {
-                var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoXlNoParAsync"), dto);
-                if (result.code != 200)
+                if (AppConfigHelper.Get("ForTest", false))
                 {
-                    await LogHelper.Error($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位失败{result.msg}");
+                    X2D1NoParPosDto dto22 = new X2D1NoParPosDto()
+                    {
+                        AdjaCode = dto.AdjaCode,
+                        SxDto = dto.SxDto,
+                        SatTxLat = dto.SatTxLat,
+                        AdjaVX = 0,
+                        AdjaVY = 0,
+                        AdjaVZ = 0,
+                        MainVX = 0,
+                        MainVY = 0,
+                        MainVZ = 0,
+                        MainX = 10401572.0412,
+                        MainY = 40762347.5788,
+                        MainZ = 2311671.1075,
+                        AdjaX = 25526808.8297,
+                        AdjaY = 33541855.6479,
+                        AdjaZ = 65652.2217,
+                        CalcConfidence = dto.CalcConfidence,
+                        CdbTxLat = dto.CdbTxLat,
+                        CdbTxLon = dto.CdbTxLon,
+                        CheckRes = dto.CheckRes,
+                        FreqDown = dto.FreqDown,
+                        FreqUp = dto.FreqUp,
+                        MainCode = dto.MainCode,
+                        SatTxLon = dto.SatTxLon,
+                        SigTime = dto.SigTime,
+                        SxDfo = dto.SxDfo,
+                        SxSnr = dto.SxSnr,
+                        TaskID = dto.TaskID,
+                        TheoryDfoCalc = dto.TheoryDfoCalc,
+                        XdDfo = dto.XdDfo,
+                        XdDto = dto.XdDto,
+                        XdSnr = dto.XdSnr,
+
+                    };
+                    dto22.SatTxLon = 43;
+                    dto22.SatTxLat = 11.57;
+                    dto22.CdbTxLon = 43;
+                    dto22.CdbTxLat = 11.57;
+                    var mainEcef = (dto22.MainX, dto22.MainY, dto22.MainZ);
+                    var adjaEcef = (dto22.AdjaX, dto22.AdjaY, dto22.AdjaZ);
+                    var lon = 42.5;
+                    var lat = 11.5;
+                    var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
+                    var recEcef = PhysicsHelper.GeoToEcef((dto22.SatTxLon, dto22.SatTxLat, 0));
+                    var d1 = PhysicsHelper.Dto(tarEcef, mainEcef, recEcef);
+                    var d2 = PhysicsHelper.Dto(tarEcef, adjaEcef, recEcef);
+                    var d3 = PhysicsHelper.Dto(tarEcef, recEcef);
+                    var dto1 = (d1 - d2) * 1e6 + r.Next(-50, 51);
+                    var dto2 = (d1 - d3) * 1e6 + r.Next(-50, 51);
+                    dto22.SxDto = Math.Round(dto1, 3);
+                    dto22.XdDto = Math.Round(dto2, 3);
+                    var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoParAsync"), dto22);
+                    if (result.code != 200)
+                    {
+                        await LogHelper.Error($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位失败{result.msg}");
+
+                    }
+                    else
+                    {
+                        //await LogHelper.Info($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位完成{result.msg}");
+                    }
 
                 }
                 else
                 {
-                    await LogHelper.Info($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位完成{result.msg}");
+                    var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoXlNoParAsync"), dto);
+                    if (result.code != 200)
+                    {
+                        await LogHelper.Error($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位失败{result.msg}");
+
+                    }
+                    else
+                    {
+                        //await LogHelper.Info($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地无参定位完成{result.msg}");
+                    }
                 }
+
             }
             catch (Exception ex)
             {
@@ -169,7 +255,7 @@ namespace XdCxRhDW.App
         }
 
         /// <summary>
-        /// 发送两星一地参定位
+        /// 发送两星一地参定位
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
@@ -177,14 +263,85 @@ namespace XdCxRhDW.App
         {
             try
             {
-                var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoXlAsync"), dto);
-                if (result.code != 200)
+                if (AppConfigHelper.Get("ForTest", false))
                 {
-                    await LogHelper.Error($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地定位失败{result.msg}");
+                    X2D1PosDto dto22 = new X2D1PosDto()
+                    {
+                        AdjaCode = dto.AdjaCode,
+                        SxDto = dto.SxDto,
+                        SatTxLat = dto.SatTxLat,
+                        AdjaVX = 0,
+                        AdjaVY = 0,
+                        AdjaVZ = 0,
+                        MainVX = 0,
+                        MainVY = 0,
+                        MainVZ = 0,
+                        MainX = 10401572.0412,
+                        MainY = 40762347.5788,
+                        MainZ = 2311671.1075,
+                        AdjaX = 25526808.8297,
+                        AdjaY = 33541855.6479,
+                        AdjaZ = 65652.2217,
+                        CalcConfidence = dto.CalcConfidence,
+                        CdbTxLat = dto.CdbTxLat,
+                        CdbTxLon = dto.CdbTxLon,
+                        CheckRes = dto.CheckRes,
+                        FreqDown = dto.FreqDown,
+                        FreqUp = dto.FreqUp,
+                        MainCode = dto.MainCode,
+                        SatTxLon = dto.SatTxLon,
+                        SigTime = dto.SigTime,
+                        SxDfo = dto.SxDfo,
+                        SxSnr = dto.SxSnr,
+                        TaskID = dto.TaskID,
+                        TheoryDfoCalc = dto.TheoryDfoCalc,
+                        XdDfo = dto.XdDfo,
+                        XdDto = dto.XdDto,
+                        XdSnr = dto.XdSnr,
+                        MainYbDto = dto.MainYbDto,
+                        AdjaYbDto = dto.AdjaYbDto,
+                        RefLon = dto.RefLon,
+                        RefLat = dto.RefLat,
+
+                    };
+                    dto22.SatTxLon = 43;
+                    dto22.SatTxLat = 11.57;
+                    dto22.CdbTxLon = 43;
+                    dto22.CdbTxLat = 11.57;
+                    var mainEcef = (dto22.MainX, dto22.MainY, dto22.MainZ);
+                    var adjaEcef = (dto22.AdjaX, dto22.AdjaY, dto22.AdjaZ);
+                    var lon = 42.5;
+                    var lat = 11.5;
+                    var tarEcef = PhysicsHelper.GeoToEcef((lon, lat, 0));
+                    var recEcef = PhysicsHelper.GeoToEcef((dto22.SatTxLon, dto22.SatTxLat, 0));
+                    var d1 = PhysicsHelper.Dto(tarEcef, mainEcef, recEcef);
+                    var d2 = PhysicsHelper.Dto(tarEcef, adjaEcef, recEcef);
+                    var d3 = PhysicsHelper.Dto(tarEcef, recEcef);
+                    var dto1 = (d1 - d2) * 1e6 + r.Next(-50, 51);
+                    var dto2 = (d1 - d3) * 1e6 + r.Next(-50, 51);
+                    dto22.SxDto = Math.Round(dto1, 3);
+                    dto22.XdDto = Math.Round(dto2, 3);
+                    var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1Async"), dto22);
+                    if (result.code != 200)
+                    {
+                        await LogHelper.Error($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地定位失败{result.msg}");
+                    }
+                    else
+                    {
+                        //await LogHelper.Info($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地定位完成{result.msg}");
+                    }
                 }
                 else
                 {
-                    await LogHelper.Info($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地定位完成{result.msg}");
+                    var result = await HttpHelper.PostRequestAsync<PosResDto>(SysConfig.GetUrl("Pos/PosX2D1NoXlAsync"), dto);
+                    if (result.code != 200)
+                    {
+                        await LogHelper.Error($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地定位失败{result.msg}");
+                    }
+                    else
+                    {
+                        //await LogHelper.Info($"找参考任务{dto.TaskID}-{dto.SigTime:yyyy-MM-dd HH:mm:ss}两星一地定位完成{result.msg}");
+                    }
                 }
             }
             catch (Exception ex)

+ 4 - 2
XdCxRhDW.App/UserControl/CtrlCgRes.cs

@@ -21,6 +21,7 @@ using System.Threading.Tasks;
 using System.Windows.Controls;
 using System.Windows.Documents;
 using System.Windows.Forms;
+using XdCxRhDW.App.Model;
 using XdCxRhDW.Entity;
 using XdCxRhDW.Framework;
 using XdCxRhDW.Repostory;
@@ -49,6 +50,7 @@ namespace XdCxRhDW.App.UserControl
                     tskList = await db.TaskInfos.OrderByDescending(p => p.UpdateTime).ToListAsync();
                 }
                 this.txtTask.UseDefault().SetData(tskList, nameof(TaskInfo.TaskName)).UseDoubleClickToSelectAll();
+
             }
             catch (Exception ex)
             {
@@ -58,7 +60,6 @@ namespace XdCxRhDW.App.UserControl
             }
         }
 
-
         private async Task<bool> DelCg(List<CgRes> selectedRes)
         {
             try
@@ -239,7 +240,8 @@ namespace XdCxRhDW.App.UserControl
                 }
                 FileInfo f = new FileInfo(exeFile);
                 var dir = Path.GetDirectoryName(f.FullName);
-                var file = list.ToCsvFile($"{dir}\\CgDraw{DateTime.Now:yyyyMMddHHmmss}.csv");
+                List<CgRes> data = gridView1.DataController.GetAllFilteredAndSortedRows().OfType<CgRes>().ToList();
+                var file = data.ToCsvFile($"{dir}\\CgDraw{DateTime.Now:yyyyMMddHHmmss}.csv");
                 Process.Start(new ProcessStartInfo()
                 {
                     FileName = f.FullName,

+ 6 - 0
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -227,6 +227,11 @@ namespace XdCxRhDW.App.UserControl
         {
             try
             {
+                //表格处于筛选状态,不刷新数据
+                if (!string.IsNullOrWhiteSpace(gridView2.FindFilterText) || !string.IsNullOrWhiteSpace(gridView2.FilterPanelText))
+                {
+                    return;
+                }
                 var currentTask = gridView1.GetFocusedRow() as TaskInfo;
                 if (currentTask.ID == posRes.TaskInfoID)
                 {
@@ -660,6 +665,7 @@ namespace XdCxRhDW.App.UserControl
                                 CdbLat = cdb.Lat,
                                 DateDirFormat = tsk.CapDirFormat,
                                 Sigs = tskSigsDto,
+                                ForTest = AppConfigHelper.Get("ForTest", false)
                             };
                             var fixedStation = fixedStations.FirstOrDefault(p => dto.Sigs.Any(t => t.FreqUp == p.FreqUpHz));
                             if (fixedStation != null)

+ 1 - 1
XdCxRhDw.Dto/PosDto/RHNoParPosDto.cs

@@ -125,7 +125,7 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度

+ 1 - 1
XdCxRhDw.Dto/PosDto/RHNoXlNoParPosDto.cs

@@ -100,7 +100,7 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度

+ 1 - 1
XdCxRhDw.Dto/PosDto/RHNoXlPosDto.cs

@@ -149,7 +149,7 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度

+ 1 - 1
XdCxRhDw.Dto/PosDto/RHPosDto.cs

@@ -179,7 +179,7 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度

+ 12 - 2
XdCxRhDw.Dto/PosDto/X2D1NoParPosDto.cs

@@ -13,6 +13,12 @@ namespace XdCxRhDW.Dto
     /// </summary>
     public class X2D1NoParPosDto
     {
+        /// <summary>
+        /// 
+        /// </summary>
+        public X2D1NoParPosDto()
+        { 
+        }
         /// <summary>
         /// 任务ID(可空)
         /// </summary>
@@ -170,13 +176,17 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
-        [Obsolete]
         public bool CalcConfidence { get; set; } = false;
+
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 
 }

+ 10 - 5
XdCxRhDw.Dto/PosDto/X2D1NoXlNoParlPosDto.cs

@@ -13,6 +13,12 @@ namespace XdCxRhDW.Dto
     /// </summary>
     public class X2D1NoXlNoParlPosDto
     {
+        /// <summary>
+        /// 
+        /// </summary>
+        public X2D1NoXlNoParlPosDto()
+        { 
+        }
         /// <summary>
         /// 任务ID(可空)
         /// </summary>
@@ -110,19 +116,18 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
-        [Obsolete]
         public bool CalcConfidence { get; set; } = false;
 
+
         /// <summary>
-        /// 固定站ID
+        /// 目标名称(可选)
         /// </summary>
-        [Obsolete]
-        public int? FixedStationId { get; set; }
+        public string Target { get; set; }
     }
 
 }

+ 12 - 1
XdCxRhDw.Dto/PosDto/X2D1NoXlPosDto.cs

@@ -13,6 +13,12 @@ namespace XdCxRhDW.Dto
     /// </summary>
     public class X2D1NoXlPosDto
     {
+        /// <summary>
+        /// 
+        /// </summary>
+        public X2D1NoXlPosDto()
+        { 
+        }
         /// <summary>
         /// 任务ID(可空)
         /// </summary>
@@ -134,11 +140,16 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
         public bool CalcConfidence { get; set; } = false;
+
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 }

+ 12 - 1
XdCxRhDw.Dto/PosDto/X2D1PosDto.cs

@@ -13,6 +13,12 @@ namespace XdCxRhDW.Dto
     /// </summary>
     public class X2D1PosDto
     {
+        /// <summary>
+        /// 
+        /// </summary>
+        public X2D1PosDto()
+        { 
+        }
         /// <summary>
         /// 任务ID(可空)
         /// </summary>
@@ -192,12 +198,17 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
         public bool CalcConfidence { get; set; } = false;
+
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 
 }

+ 7 - 2
XdCxRhDw.Dto/PosDto/X3TwoDtoNoParPosDto.cs

@@ -194,13 +194,18 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
-        [Obsolete]
         public bool CalcConfidence { get; set; } = false;
+
+
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 
 }

+ 6 - 2
XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlNoParPosDto.cs

@@ -104,13 +104,17 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
-        [Obsolete]
         public bool CalcConfidence { get; set; } = false;
+
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 
 }

+ 5 - 1
XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlPosDto.cs

@@ -131,13 +131,17 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
         public bool CalcConfidence { get; set; } = false;
 
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 
 }

+ 6 - 1
XdCxRhDw.Dto/PosDto/X3TwoDtoPosDto.cs

@@ -221,12 +221,17 @@ namespace XdCxRhDW.Dto
         /// 是否计算理论频差
         /// </summary>
         [Obsolete]
-        public bool TheoryDfoCalc { get; set; } = true;
+        public bool TheoryDfoCalc { get; set; } = false;
 
         /// <summary>
         /// 是否计算置信度
         /// </summary>
         public bool CalcConfidence { get; set; } = false;
+
+        /// <summary>
+        /// 目标名称(可选)
+        /// </summary>
+        public string Target { get; set; }
     }
 
 }

+ 6 - 0
XdCxRhDw.Dto/TaskHandleDto/X2D1TaskHandleDto.cs

@@ -87,6 +87,12 @@ namespace XdCxRhDW.Dto
         /// </summary>
         public double CdbLat { get; set; }
 
+        /// <summary>
+        /// 星地任务是否使用仿真时频差等进行流程测试
+        /// </summary>
+        [Obsolete]
+        public bool ForTest { get; set; }
+
     }
     /// <summary>
     /// 两星一地固定站信息