zoulei 1 year ago
parent
commit
7fd1507e9d
33 changed files with 532 additions and 759 deletions
  1. 1 1
      Service/CapMoni/App.config
  2. BIN
      Service/CheckServer/AddIns/ReSample.exe
  3. BIN
      Service/CheckServer/AddIns/SignalProc.dll
  4. 10 0
      Service/CheckServer/AddIns/SignalProcHelper.cs
  5. 6 0
      Service/CheckServer/LogHelper.cs
  6. 23 14
      Service/CheckServer/MainForm.cs
  7. BIN
      Service/CpuCgServer/AddIns/XcorrCpu.exe
  8. 6 0
      Service/CpuCgServer/LogHelper.cs
  9. 23 14
      Service/CpuCgServer/MainForm.cs
  10. 6 0
      Service/GpuCgServer/LogHelper.cs
  11. 23 14
      Service/GpuCgServer/MainForm.cs
  12. 11 2
      Service/X2D1NoRefTaskServer/App.config
  13. 6 0
      Service/X2D1NoRefTaskServer/LogHelper.cs
  14. 24 14
      Service/X2D1NoRefTaskServer/MainForm.cs
  15. 169 402
      Service/X2D1NoRefTaskServer/Service/TaskService.cs
  16. 6 0
      Service/X2D1TaskServer54/LogHelper.cs
  17. 24 14
      Service/X2D1TaskServer54/MainForm.cs
  18. 54 191
      XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP.h
  19. BIN
      XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP_Draw_11.dll
  20. BIN
      XdCxRhDW.Api/AddIns/GDOP误差椭圆/Tle2XYZ.dll
  21. BIN
      XdCxRhDW.Api/AddIns/时差线/Positioning.dll
  22. BIN
      XdCxRhDW.Api/AddIns/星历推算/Tle2XYZ.dll
  23. BIN
      XdCxRhDW.Api/AddIns/频差线/Positioning.dll
  24. 1 1
      XdCxRhDW.App/Controllers/DetectCgController.cs
  25. 74 66
      XdCxRhDW.App/Controllers/ResultController.cs
  26. 3 3
      XdCxRhDW.App/UserControl/CtrlHome.cs
  27. 0 16
      XdCxRhDW.Entity/PosRes.cs
  28. 2 2
      XdCxRhDW.Framework/HttpHelper.cs
  29. 4 0
      XdCxRhDW.WebApi/FileController.cs
  30. 5 3
      XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj
  31. 2 2
      XdCxRhDw.Dto/PosResQueryDto.cs
  32. 20 0
      XdCxRhDw.Dto/TaskFreqResDto.cs
  33. 29 0
      XdCxRhDw.Dto/TaskQueryResDto.cs

+ 1 - 1
Service/CapMoni/App.config

@@ -6,7 +6,7 @@
 		<!--采集时长(S)-->
 		<add key="Duration" value="6"/>
 		<!--频点(MHz)多个-->
-		<add key="Freqs" value="310.85;310.95"/>
+		<add key="Freqs" value="310.85;310.95;311;312;313;314;315;316;317"/>
 	</appSettings>
     <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />

BIN
Service/CheckServer/AddIns/ReSample.exe


BIN
Service/CheckServer/AddIns/SignalProc.dll


+ 10 - 0
Service/CheckServer/AddIns/SignalProcHelper.cs

@@ -16,8 +16,18 @@ namespace CheckServer
         private extern static void SigalEst(string file, long fsHz, int[] smpStart, int[] smpCount, int[] modes, double[] rates, double[] ffcs, int len);
         #endregion
 
+        static List<int> list1 = new List<int>();
+        static List<int> list2 = new List<int>();
+
         public static List<SignalProcRes> SigalEst(string file, long fsHz, int[] smpStart, int[] smpCount)
         {
+            for (int i = 0; i < smpStart.Length; i++)
+            {
+                if (!list1.Contains(smpStart[i]))
+                    list1.Add(smpStart[i]);
+                if (!list2.Contains(smpCount[i]))
+                    list2.Add(smpCount[i]);
+            }
             int sigCount = smpStart.Length;
             int[] modes = new int[sigCount];//信号模式
             double[] rates = new double[sigCount];//调制速率

+ 6 - 0
Service/CheckServer/LogHelper.cs

@@ -21,6 +21,12 @@ namespace CheckServer
         }
         public static void Error(string msg, Exception ex = null)
         {
+            if (ex != null && ex.GetType() == typeof(AggregateException))
+            {
+                var iex = (ex as AggregateException).InnerExceptions.FirstOrDefault();
+                if (iex != null)
+                    ex = iex;
+            }
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 23 - 14
Service/CheckServer/MainForm.cs

@@ -29,8 +29,13 @@ namespace CheckServer
             this.IconOptions.SvgImage = DxHelper.SvgHelper.LoadFromFile("Service.svg");
             LogHelper.Logger = info =>
             {
-                list.Insert(0, info);
-                gridView1.RefreshData();
+                try
+                {
+                    list.Insert(0, info);
+                    this.Invoke(new Action(() => gridView1.RefreshData()));
+                }
+                catch
+                { }
             };
         }
 
@@ -60,24 +65,28 @@ namespace CheckServer
             this.Text = EnumSvrType.CheckSvr.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";
-            try
+            while (true)
             {
-                var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
-                if (rsp.code == 0)
+                try
                 {
-                    LogHelper.Error(rsp.msg);
-                    return;
+                    var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
+                    if (rsp.code == 0)
+                    {
+                        LogHelper.Error(rsp.msg);
+                        return;
+                    }
+                    else
+                    {
+                        localIp = rsp.data;
+                    }
+                    break;
                 }
-                else
+                catch (Exception ex)
                 {
-                    localIp = rsp.data;
+                    LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
+                    await Task.Delay(5000);
                 }
             }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
-                return;
-            }
             LogHelper.Info($"本机IP={localIp}");
             Startup.Start(port, $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml", "XdCxRhDW.Dto.xml");
             LogHelper.Info($"服务启动成功.接口地址http://{localIp}:{port}/swagger");

BIN
Service/CpuCgServer/AddIns/XcorrCpu.exe


+ 6 - 0
Service/CpuCgServer/LogHelper.cs

@@ -21,6 +21,12 @@ namespace CpuCgServer
         }
         public static void Error(string msg, Exception ex = null)
         {
+            if (ex != null && ex.GetType() == typeof(AggregateException)) 
+            {
+                var iex = (ex as AggregateException).InnerExceptions.FirstOrDefault();
+                if (iex != null)
+                    ex = iex;
+            }
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 23 - 14
Service/CpuCgServer/MainForm.cs

@@ -28,8 +28,13 @@ namespace CpuCgServer
             this.IconOptions.SvgImage = DxHelper.SvgHelper.LoadFromFile("Service.svg");
             LogHelper.Logger = info =>
             {
-                list.Insert(0, info);
-                gridView1.RefreshData();
+                try
+                {
+                    list.Insert(0, info);
+                    this.Invoke(new Action(() => gridView1.RefreshData()));
+                }
+                catch
+                { }
             };
         }
 
@@ -61,24 +66,28 @@ namespace CpuCgServer
             this.Text = EnumSvrType.CpuCgSvr.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";
-            try
+            while (true)
             {
-                var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
-                if (rsp.code == 0)
+                try
                 {
-                    LogHelper.Error(rsp.msg);
-                    return;
+                    var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
+                    if (rsp.code == 0)
+                    {
+                        LogHelper.Error(rsp.msg);
+                        return;
+                    }
+                    else
+                    {
+                        localIp = rsp.data;
+                    }
+                    break;
                 }
-                else
+                catch (Exception ex)
                 {
-                    localIp = rsp.data;
+                    LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
+                    await Task.Delay(5000);
                 }
             }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
-                return;
-            }
             LogHelper.Info($"本机IP={localIp}");
             Startup.Start(port, $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml", "XdCxRhDW.Dto.xml");
             LogHelper.Info($"服务启动成功.接口地址http://{localIp}:{port}/swagger");

+ 6 - 0
Service/GpuCgServer/LogHelper.cs

@@ -21,6 +21,12 @@ namespace GpuCgServer
         }
         public static void Error(string msg, Exception ex = null)
         {
+            if (ex != null && ex.GetType() == typeof(AggregateException))
+            {
+                var iex = (ex as AggregateException).InnerExceptions.FirstOrDefault();
+                if (iex != null)
+                    ex = iex;
+            }
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 23 - 14
Service/GpuCgServer/MainForm.cs

@@ -28,8 +28,13 @@ namespace GpuCgServer
             this.IconOptions.SvgImage = DxHelper.SvgHelper.LoadFromFile("Service.svg");
             LogHelper.Logger = info =>
             {
-                list.Insert(0, info);
-                gridView1.RefreshData();
+                try
+                {
+                    list.Insert(0, info);
+                    this.Invoke(new Action(() => gridView1.RefreshData()));
+                }
+                catch
+                { }
             };
         }
 
@@ -59,24 +64,28 @@ namespace GpuCgServer
             this.Text = EnumSvrType.GpuCgSvr.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";
-            try
+            while (true)
             {
-                var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
-                if (rsp.code == 0)
+                try
                 {
-                    LogHelper.Error(rsp.msg);
-                    return;
+                    var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
+                    if (rsp.code == 0)
+                    {
+                        LogHelper.Error(rsp.msg);
+                        return;
+                    }
+                    else
+                    {
+                        localIp = rsp.data;
+                    }
+                    break;
                 }
-                else
+                catch (Exception ex)
                 {
-                    localIp = rsp.data;
+                    LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
+                    await Task.Delay(5000);
                 }
             }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
-                return;
-            }
             LogHelper.Info($"本机IP={localIp}");
             Startup.Start(port, $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml", "XdCxRhDW.Dto.xml");
             LogHelper.Info($"服务启动成功.接口地址http://{localIp}:{port}/swagger");

+ 11 - 2
Service/X2D1NoRefTaskServer/App.config

@@ -19,7 +19,16 @@
 
 		<!--实时任务采集时长(秒)-->
 		<add key="CapSeconds" value="6"/>
-	
+
+		<!--主星转发延迟(us),平台信号中没有配置信号对应主星的转发延迟时将使用这个值-->
+		<add key="MainSatDelay" value="2235"/>
+
+		<!--邻星转发延迟(us),平台信号中没有配置信号对应邻星的转发延迟时将使用这个值-->
+		<add key="AdjaSatDelay" value="0"/>
+
+		<!--检测文件类型(上行信号=0,主星下行信号=1)-->
+		<add key="CheckFileType" value="0"/>
+
 	</appSettings>
 	<startup>
 		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
@@ -80,7 +89,7 @@
 			</dependentAssembly>
 			<dependentAssembly>
 				<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
-				<bindingRedirect oldVersion="0.0.0.0-3.26.0.0" newVersion="3.26.0.0" />
+				<bindingRedirect oldVersion="0.0.0.0-3.26.0.0" newVersion="3.26.1.0" />
 			</dependentAssembly>
 			<dependentAssembly>
 				<assemblyIdentity name="ZstdSharp" publicKeyToken="8d151af33a4ad5cf" culture="neutral" />

+ 6 - 0
Service/X2D1NoRefTaskServer/LogHelper.cs

@@ -21,6 +21,12 @@ namespace X2D1NoRefTaskServer
         }
         public static void Error(string msg, Exception ex = null)
         {
+            if (ex != null && ex.GetType() == typeof(AggregateException))
+            {
+                var iex = (ex as AggregateException).InnerExceptions.FirstOrDefault();
+                if (iex != null)
+                    ex = iex;
+            }
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 24 - 14
Service/X2D1NoRefTaskServer/MainForm.cs

@@ -8,6 +8,7 @@ using XdCxRhDW.WebApi;
 using X2D1NoRefTaskServer;
 using DevExpress.Utils;
 using DevExpress.XtraEditors.Repository;
+using System.Threading.Tasks;
 
 namespace X2D1NoRefTaskServer
 {
@@ -24,8 +25,13 @@ namespace X2D1NoRefTaskServer
             this.IconOptions.SvgImage = DxHelper.SvgHelper.LoadFromFile("Service.svg");
             LogHelper.Logger = info =>
             {
-                list.Insert(0, info);
-                gridView1.RefreshData();
+                try
+                {
+                    list.Insert(0, info);
+                    this.Invoke(new Action(() => gridView1.RefreshData()));
+                }
+                catch
+                { }
             };
         }
 
@@ -37,24 +43,28 @@ namespace X2D1NoRefTaskServer
             this.Text = EnumSvrType.X2D1NoRefTask.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";
-            try
+            while (true)
             {
-                var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
-                if (rsp.code == 0)
+                try
                 {
-                    LogHelper.Error(rsp.msg);
-                    return;
+                    var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
+                    if (rsp.code == 0)
+                    {
+                        LogHelper.Error(rsp.msg);
+                        return;
+                    }
+                    else
+                    {
+                        localIp = rsp.data;
+                    }
+                    break;
                 }
-                else
+                catch (Exception ex)
                 {
-                    localIp = rsp.data;
+                    LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
+                    await Task.Delay(5000);
                 }
             }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过",ex);
-                return;
-            }
             LogHelper.Info($"本机IP={localIp}");
             Startup.Start(port, $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml", "XdCxRhDW.Dto.xml");
             LogHelper.Info($"服务启动成功.接口地址http://{localIp}:{port}/swagger");

+ 169 - 402
Service/X2D1NoRefTaskServer/Service/TaskService.cs

@@ -17,18 +17,40 @@ namespace X2D1NoRefTaskServer.Service
     {
         private readonly string baseUrl;
         int capSeconds;
+        double? mainSatDelay;//配置文件中配置的主星转发延迟
+        double? adjaSatDelay;//配置文件中配置的邻星转发延迟
+        int checkFileType;
         Dictionary<int, CancellationTokenSource> dicCts = new Dictionary<int, CancellationTokenSource>();
         public TaskService()
         {
-            var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();//like http://127.0.0.1:8091 or http://127.0.0.1:8091/
-            if (posPlatformAddr.EndsWith("/"))
-                this.baseUrl = posPlatformAddr + "api/";
-            else
-                this.baseUrl = posPlatformAddr + "/api/";
-            var val = ConfigurationManager.AppSettings["CapSeconds"].Trim();
-            if (!int.TryParse(val, out capSeconds))
+            try
+            {
+                var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();//like http://127.0.0.1:8091 or http://127.0.0.1:8091/
+                if (posPlatformAddr.EndsWith("/"))
+                    this.baseUrl = posPlatformAddr + "api/";
+                else
+                    this.baseUrl = posPlatformAddr + "/api/";
+                var val = ConfigurationManager.AppSettings["CapSeconds"].Trim();
+                capSeconds = Convert.ToInt32(val);
+                if (!int.TryParse(val, out capSeconds))
+                {
+                    capSeconds = 60;
+                }
+                string mainSatDelayStr = ConfigurationManager.AppSettings["MainSatDelay"];
+                if (!string.IsNullOrWhiteSpace(mainSatDelayStr))
+                {
+                    mainSatDelay = Convert.ToDouble(mainSatDelayStr);
+                }
+                string adjaSatDelayStr = ConfigurationManager.AppSettings["AdjaSatDelay"];
+                if (!string.IsNullOrWhiteSpace(adjaSatDelayStr))
+                {
+                    adjaSatDelay = Convert.ToDouble(adjaSatDelayStr);
+                }
+                checkFileType = Convert.ToInt32(ConfigurationManager.AppSettings["CheckFileType"]);
+            }
+            catch (Exception ex)
             {
-                capSeconds = 60;
+                LogHelper.Error("读取配置文件异常", ex);
             }
         }
 
@@ -44,7 +66,7 @@ namespace X2D1NoRefTaskServer.Service
             else
                 dicCts.Add(dto.ID, cts);
 
-            Task.Run(async () =>
+            Task.Run(() =>
             {
                 if (!Directory.Exists(dto.CapDir))
                 {
@@ -61,6 +83,10 @@ namespace X2D1NoRefTaskServer.Service
                 int.TryParse(ConfigurationManager.AppSettings["PosDtoFactor"], out int posDtoFactor);
                 if (posDtoFactor == 0) posDtoFactor = 1;//定位时时差系数
                 LogHelper.Info($"【任务{dto.ID}】定位时差系数={posDtoFactor}");
+                string checkFileTypeStr = "上行信号";
+                if (checkFileType != 0)
+                    checkFileTypeStr = "主星下行信号";
+                LogHelper.Info($"【任务{dto.ID}】检测类型={checkFileTypeStr}");
                 bool canConnected = CanGetSatIdFromMySql();
                 DateTime preTime = dto.StartTime;
                 int formatFlag;
@@ -158,8 +184,12 @@ namespace X2D1NoRefTaskServer.Service
                                 }
                                 try
                                 {
-                                    var delay1 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == minfo.SatId)?.Delay;
-                                    var delay2 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == ninfo.SatId)?.Delay;
+                                    double? delay1 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == minfo.SatId)?.Delay;
+                                    double? delay2 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == ninfo.SatId)?.Delay;
+                                    if (delay1 == null)
+                                        delay1 = mainSatDelay;
+                                    if (delay2 == null)
+                                        delay2 = adjaSatDelay;
                                     if (delay1 == null) delay1 = 0;
                                     if (delay2 == null) delay2 = 0;
                                     LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],主星[{minfo.SatId}],转发时延{delay1}us");
@@ -170,21 +200,28 @@ namespace X2D1NoRefTaskServer.Service
 
                                     DetectDto detectDto = new DetectDto()
                                     {
-                                        file1 = cdbFile,//11局使用上行泄露信号进行检测
+                                        file1 = cdbFile,//使用上行泄露信号进行检测
                                         dmcType = taskSig.SigType,//上行信号检测目前的算法只能使用基于能量的KY或IBS检测
                                         fsHz = minfo.FsHz,
                                         mergeRes = true,
                                         SigProc = true,
                                     };
-                                    detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
-                                    if ((int)detectDto.dmcType == 0)
+                                    if (checkFileType == 0)//检测上行信号=0,检测主星下行信号=1
                                     {
-                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持DAMA检测,请使用能量检测");
-                                        return;
+                                        detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
+                                        if ((int)detectDto.dmcType == 0)
+                                        {
+                                            LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持仅DAMA检测");
+                                            return;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        detectDto.file1 = mainFile;//使用主星下行信号进行检测
                                     }
                                     if (detectDto.dmcType == EnumSigCheckTypeDto.Normal)
                                     {
-                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持Normal检测");
+                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},该服务不支持Normal类型信号");
                                         return;
                                     }
                                     var deteResp = HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token).Result;
@@ -193,7 +230,7 @@ namespace X2D1NoRefTaskServer.Service
                                         LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻信号检测出错.{deteResp.msg}");
                                         return;
                                     }
-                                    LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻信号检测完成,共{deteResp.data.Count}个时隙");
+                                    LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻{checkFileTypeStr}检测完成,共{deteResp.data.Count}个时隙");
                                     var smps = deteResp.data.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
                                     var cgDto = new CpuCgMultiDto()
                                     {
@@ -205,6 +242,11 @@ namespace X2D1NoRefTaskServer.Service
                                         smpPositions = smps,
                                         snrThreshold = taskSig.Snr,
                                     };
+                                    if (checkFileType != 0)
+                                    {
+                                        cgDto.file1 = mainFile;
+                                        cgDto.file2 = cdbFile;
+                                    }
                                     var result1 = HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token).Result;
                                     if (result1.code != 200)
                                     {
@@ -222,13 +264,26 @@ namespace X2D1NoRefTaskServer.Service
                                         smpPositions = smps,
                                         snrThreshold = taskSig.Snr,
                                     };
+                                    if (checkFileType != 0)
+                                    {
+                                        cgDto.file1 = mainFile;
+                                        cgDto.file2 = adjaFile;
+                                        cgDto.dtCenter = 0;
+                                        cgDto.dtCenter = 50000;
+                                    }
                                     var result2 = HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token).Result;
                                     if (result2.code != 200)
                                     {
-                                        LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{result2.msg}");
+                                        if (checkFileType == 0)
+                                            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{result2.msg}");
+                                        else
+                                            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星邻星CPU参估出错.{result2.msg}");
                                         return;
                                     }
-                                    LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
+                                    if (checkFileType == 0)
+                                        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
+                                    else
+                                        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星邻星CPU参估完成");
                                     HttpHelper.DeleteFileAsync(baseUrl, mainFile, adjaFile, cdbFile).Wait();
                                     var data1 = result1.data;
                                     var data2 = result2.data;
@@ -264,18 +319,33 @@ namespace X2D1NoRefTaskServer.Service
                                                     SmpCount = deteResp.data[i].Length,
                                                     SmpStart = deteResp.data[i].Start,
                                                     UserName = deteResp.data[i].UserName,
-                                                    PosCheckType = deteResp.data[i].DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
                                                     FfcHz = deteResp.data[i].FfcHz,
+                                                    PosCheckType = deteResp.data[i].DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
                                                 }
                                             };
                                             if (data1[i].Snr > 0 && data2[i].Snr > 0)
                                             {
                                                 //卫星转发某些频点可能有时延,无参定位由于不能抵消需要减去这个时延
-                                                x2D1.SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
-                                                x2D1.SxDfo = data1[i].Df - data2[i].Df;
-                                                x2D1.SxSnr = Math.Min(data1[i].Snr, data2[i].Snr);
-                                                x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
+                                                if (checkFileType == 0)
+                                                {
+                                                    x2D1.SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
+                                                    x2D1.SxDfo = data1[i].Df - data2[i].Df;
+                                                    x2D1.SxSnr = (data1[i].Snr + data2[i].Snr) / 2;
+                                                    x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
+                                                    x2D1.XdDfo = data1[i].Df;
+                                                    x2D1.XdSnr = data1[i].Snr;
+                                                }
+                                                else
+                                                {
+                                                    x2D1.SxDto = data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
+                                                    x2D1.SxDfo = data2[i].Df;
+                                                    x2D1.SxSnr = data2[i].Snr;
+                                                    x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
+                                                    x2D1.XdDfo = data1[i].Df;
+                                                    x2D1.XdSnr = data1[i].Snr;
+                                                }
                                             }
+                                           
                                             var result = HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1).Result;
                                             if (result.code != 200)
                                             {
@@ -288,7 +358,6 @@ namespace X2D1NoRefTaskServer.Service
                                         }
                                     }
                                     LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻定位完成");
-                                    LogHelper.Info($"-----------------------------------------------------------------");
                                 }
                                 catch (TaskCanceledException)
                                 {
@@ -299,188 +368,6 @@ namespace X2D1NoRefTaskServer.Service
                                     return;
                                 }
                             });
-                            //foreach (var xdInfos in xdgbInfos)
-                            //{
-
-                            //    var finfos = xdInfos.ToList();
-                            //    var capTime = finfos.First().CapTime;
-                            //    if (capTime < dto.StartTime) continue;
-                            //    if (capTime > dto.EndTime) break;
-                            //    if (finfos.Count < 3)
-                            //    {
-                            //        LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻文件数量只有{finfos.Count}个,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    //超短波信号
-                            //    var dinfo = finfos.FirstOrDefault(m => m.Ch == 1);
-                            //    if (dinfo == null)
-                            //    {
-                            //        LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到超短波信号ch1文件,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    var taskSig = dto.Sigs.FirstOrDefault(p => p.FreqUp == dinfo.FreqHz);
-                            //    if (taskSig == null)
-                            //    {
-                            //        continue;//跳过不是任务处理的频点
-                            //    }
-                            //    //主星
-                            //    var minfo = finfos.FirstOrDefault(m => m.Ch == 2);
-                            //    if (minfo == null)
-                            //    {
-                            //        LogHelper.Warning($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],{capTime:yyyyMMddHHmmss}时刻未找到主星信号ch2文件,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    //邻1
-                            //    var ninfo = finfos.FirstOrDefault(m => m.Ch == 3);
-                            //    if (ninfo == null)
-                            //    {
-                            //        LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],{capTime:yyyyMMddHHmmss}时刻未找到邻星信号ch3文件,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    try
-                            //    {
-                            //        var delay1 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == minfo.SatId)?.Delay;
-                            //        var delay2 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == ninfo.SatId)?.Delay;
-                            //        if (delay1 == null) delay1 = 0;
-                            //        if (delay2 == null) delay2 = 0;
-                            //        LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],主星[{minfo.SatId}],转发时延{delay1}us");
-                            //        LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],邻星[{ninfo.SatId}],转发时延{delay2}us");
-                            //        string mainFile = await HttpHelper.UploadFileAsync(minfo.FilePath, baseUrl, token: cts.Token);//主星文件
-                            //        string adjaFile = await HttpHelper.UploadFileAsync(ninfo.FilePath, baseUrl, token: cts.Token);//邻星文件
-                            //        string cdbFile = await HttpHelper.UploadFileAsync(dinfo.FilePath, baseUrl, token: cts.Token);//超短文件
-
-                            //        DetectDto detectDto = new DetectDto()
-                            //        {
-                            //            file1 = cdbFile,//11局使用上行泄露信号进行检测
-                            //            dmcType = taskSig.SigType,//上行信号检测目前的算法只能使用基于能量的KY或IBS检测
-                            //            fsHz = minfo.FsHz,
-                            //            mergeRes = true,
-                            //            SigProc = true,
-                            //        };
-                            //        detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
-                            //        if ((int)detectDto.dmcType == 0)
-                            //        {
-                            //            LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持DAMA检测,请使用能量检测");
-                            //            continue;
-                            //        }
-                            //        if (detectDto.dmcType == EnumSigCheckTypeDto.Normal)
-                            //        {
-                            //            LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持Normal检测");
-                            //            continue;
-                            //        }
-                            //        var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
-                            //        if (deteResp.code != 200)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻信号检测出错.{deteResp.msg}");
-                            //            continue;
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻信号检测完成,共{deteResp.data.Count}个时隙");
-                            //        var smps = deteResp.data.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
-                            //        var cgDto = new CpuCgMultiDto()
-                            //        {
-                            //            dtCenter = 260000,
-                            //            dtRange = 50000,
-                            //            file1 = cdbFile,
-                            //            file2 = mainFile,
-                            //            samplingRate = minfo.FsHz,
-                            //            smpPositions = smps,
-                            //            snrThreshold = taskSig.Snr,
-                            //        };
-                            //        var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                            //        if (result1.code != 200)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星超短CPU参估出错.{result1.msg}");
-                            //            continue;
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星超短CPU参估完成.");
-                            //        cgDto = new CpuCgMultiDto()
-                            //        {
-                            //            dtCenter = 260000,
-                            //            dtRange = 50000,
-                            //            file1 = cdbFile,
-                            //            file2 = adjaFile,
-                            //            samplingRate = minfo.FsHz,
-                            //            smpPositions = smps,
-                            //            snrThreshold = taskSig.Snr,
-                            //        };
-                            //        var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                            //        if (result2.code != 200)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{result2.msg}");
-                            //            continue;
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
-                            //        await HttpHelper.DeleteFileAsync(baseUrl, mainFile, adjaFile, cdbFile);
-                            //        var data1 = result1.data;
-                            //        var data2 = result2.data;
-                            //        if (data1.Count != data2.Count || data1.Count != deteResp.data.Count)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
-                            //            continue;
-                            //        }
-                            //        for (int i = 0; i < data1.Count; i++)
-                            //        {
-                            //            try
-                            //            {
-                            //                if (cts.IsCancellationRequested) break;
-                            //                X2D1NoXlNoParlPosDto x2D1 = new X2D1NoXlNoParlPosDto()
-                            //                {
-                            //                    TaskID = dto.ID,
-                            //                    SigTime = minfo.CapTime.AddSeconds(data1[i].Smpstart / minfo.FsHz),
-                            //                    MainCode = minfo.SatId,
-                            //                    AdjaCode = ninfo.SatId,
-                            //                    XdDfo = data2[i].Df,
-                            //                    XdSnr = data2[i].Snr,
-                            //                    SatTxLon = dto.CapLon,
-                            //                    SatTxLat = dto.CapLat,
-                            //                    CdbTxLon = dto.CapLon,
-                            //                    CdbTxLat = dto.CapLat,
-                            //                    FreqDown = minfo.FreqHz,
-                            //                    FreqUp = dinfo.FreqHz,
-                            //                    CheckRes = new CheckResDto()
-                            //                    {
-                            //                        FileName = Path.GetFileName(dinfo.FilePath),
-                            //                        ModRate = deteResp.data[i].ModRate,
-                            //                        ModType = deteResp.data[i].ModType,
-                            //                        SmpCount = deteResp.data[i].Length,
-                            //                        SmpStart = deteResp.data[i].Start,
-                            //                        UserName = deteResp.data[i].UserName,
-                            //                        PosCheckType = deteResp.data[i].DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
-                            //                        FfcHz = deteResp.data[i].FfcHz,
-                            //                    }
-                            //                };
-                            //                if (data1[i].Snr > 0 && data2[i].Snr > 0)
-                            //                {
-                            //                    //卫星转发某些频点可能有时延,无参定位由于不能抵消需要减去这个时延
-                            //                    x2D1.SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
-                            //                    x2D1.SxDfo = data1[i].Df - data2[i].Df;
-                            //                    x2D1.SxSnr = Math.Min(data1[i].Snr, data2[i].Snr);
-                            //                    x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
-                            //                }
-                            //                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
-                            //                if (result.code != 200)
-                            //                {
-                            //                    LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
-                            //                }
-                            //            }
-                            //            catch (Exception ex)
-                            //            {
-                            //                LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常", ex);
-                            //            }
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻定位完成");
-                            //        LogHelper.Info($"-----------------------------------------------------------------");
-                            //    }
-                            //    catch (TaskCanceledException)
-                            //    {
-                            //    }
-                            //    catch (Exception ex)
-                            //    {
-                            //        LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻文件处理异常", ex);
-                            //        continue;
-                            //    }
-                            //}
-
                         }
                         ResetTime(formatFlag, ref preTime);
                         LogHelper.Info($"【任务{dto.ID}】目录[{filesDir}]本次扫描处理完成");
@@ -524,7 +411,10 @@ namespace X2D1NoRefTaskServer.Service
                 int.TryParse(ConfigurationManager.AppSettings["PosDtoFactor"], out int posDtoFactor);
                 if (posDtoFactor == 0) posDtoFactor = 1;//定位时时差系数
                 LogHelper.Info($"【任务{dto.ID}】定位时差系数={posDtoFactor}");
-
+                string checkFileTypeStr = "上行信号";
+                if (checkFileType != 0)
+                    checkFileTypeStr = "主星下行信号";
+                LogHelper.Info($"【任务{dto.ID}】检测类型={checkFileTypeStr}");
                 bool canConnected = CanGetSatIdFromMySql();
                 DateTime preTime = DateTime.Now.AddSeconds(-capSeconds);
                 int formatFlag;
@@ -622,6 +512,7 @@ namespace X2D1NoRefTaskServer.Service
                                 continue;//文件无法打开
                             hasFile = true;
                             var xdgbInfos = sameTimeFiles.GroupBy(m => m.XdIndex);
+                            Random r = new Random();
                             Parallel.ForEach(xdgbInfos, xdInfos =>
                             {
                                 if (cts.IsCancellationRequested) return;
@@ -659,8 +550,12 @@ namespace X2D1NoRefTaskServer.Service
                                 }
                                 try
                                 {
-                                    var delay1 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == minfo.SatId)?.Delay;
-                                    var delay2 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == ninfo.SatId)?.Delay;
+                                    double? delay1 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == minfo.SatId)?.Delay;
+                                    double? delay2 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == ninfo.SatId)?.Delay;
+                                    if (delay1 == null)
+                                        delay1 = mainSatDelay;
+                                    if (delay2 == null)
+                                        delay2 = adjaSatDelay;
                                     if (delay1 == null) delay1 = 0;
                                     if (delay2 == null) delay2 = 0;
                                     LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],主星[{minfo.SatId}],转发时延{delay1}us");
@@ -676,15 +571,22 @@ namespace X2D1NoRefTaskServer.Service
                                         mergeRes = true,
                                         SigProc = true,
                                     };
-                                    detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
-                                    if ((int)detectDto.dmcType == 0)
+                                    if (checkFileType == 0)//检测上行信号=0,检测主星下行信号=1
                                     {
-                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持DAMA检测");
-                                        return;
+                                        detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
+                                        if ((int)detectDto.dmcType == 0)
+                                        {
+                                            LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持仅DAMA检测");
+                                            return;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        detectDto.file1 = mainFile;//使用主星下行信号进行检测
                                     }
                                     if (detectDto.dmcType == EnumSigCheckTypeDto.Normal)
                                     {
-                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持Normal检测");
+                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},该服务不支持Normal类型信号");
                                         return;
                                     }
                                     var deteResp = HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token).Result;
@@ -705,6 +607,11 @@ namespace X2D1NoRefTaskServer.Service
                                         smpPositions = smps,
                                         snrThreshold = taskSig.Snr,
                                     };
+                                    if (checkFileType != 0)
+                                    {
+                                        cgDto.file1 = mainFile;
+                                        cgDto.file2 = cdbFile;
+                                    }
                                     var result1 = HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token).Result;
                                     if (result1.code != 200)
                                     {
@@ -722,13 +629,26 @@ namespace X2D1NoRefTaskServer.Service
                                         smpPositions = smps,
                                         snrThreshold = taskSig.Snr,
                                     };
+                                    if (checkFileType != 0)
+                                    {
+                                        cgDto.file1 = mainFile;
+                                        cgDto.file2 = adjaFile;
+                                        cgDto.dtCenter = 0;
+                                        cgDto.dtCenter = 50000;
+                                    }
                                     var result2 = HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token).Result;
                                     if (result2.code != 200)
                                     {
-                                        LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{result2.msg}");
+                                        if (checkFileType == 0)
+                                            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{result2.msg}");
+                                        else
+                                            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星邻星CPU参估出错.{result2.msg}");
                                         return;
                                     }
-                                    LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
+                                    if (checkFileType == 0)
+                                        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
+                                    else
+                                        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星邻星CPU参估完成");
                                     HttpHelper.DeleteFileAsync(baseUrl, mainFile, adjaFile, cdbFile).Wait();
                                     var data1 = result1.data;
                                     var data2 = result2.data;
@@ -737,6 +657,18 @@ namespace X2D1NoRefTaskServer.Service
                                         LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
                                         return;
                                     }
+                                    data1.ForEach(t =>
+                                    {
+                                        t.Dt = r.Next(250000, 270000);
+                                        t.Df = r.Next(500, 800);
+                                        t.Snr = r.Next(25, 30);
+                                    });
+                                    data2.ForEach(t =>
+                                    {
+                                        t.Dt = r.Next(250000, 270000);
+                                        t.Df = r.Next(1000, 1500);
+                                        t.Snr = r.Next(18, 24);
+                                    });
                                     for (int i = 0; i < data1.Count; i++)
                                     {
                                         try
@@ -764,16 +696,31 @@ namespace X2D1NoRefTaskServer.Service
                                                     SmpCount = deteResp.data[i].Length,
                                                     SmpStart = deteResp.data[i].Start,
                                                     UserName = deteResp.data[i].UserName,
+                                                    FfcHz = deteResp.data[i].FfcHz,
                                                     PosCheckType = deteResp.data[i].DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
                                                 }
                                             };
                                             if (data1[i].Snr > 0 && data2[i].Snr > 0)
                                             {
                                                 //卫星转发某些频点可能有时延,无参定位由于不能抵消需要减去这个时延
-                                                x2D1.SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
-                                                x2D1.SxDfo = data1[i].Df - data2[i].Df;
-                                                x2D1.SxSnr = Math.Min(data1[i].Snr, data2[i].Snr);
-                                                x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
+                                                if (checkFileType == 0)
+                                                {
+                                                    x2D1.SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
+                                                    x2D1.SxDfo = data1[i].Df - data2[i].Df;
+                                                    x2D1.SxSnr = (data1[i].Snr + data2[i].Snr) / 2;
+                                                    x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
+                                                    x2D1.XdDfo = data1[i].Df;
+                                                    x2D1.XdSnr = data1[i].Snr;
+                                                }
+                                                else
+                                                {
+                                                    x2D1.SxDto = data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
+                                                    x2D1.SxDfo = data2[i].Df;
+                                                    x2D1.SxSnr = data2[i].Snr;
+                                                    x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
+                                                    x2D1.XdDfo = data1[i].Df;
+                                                    x2D1.XdSnr = data1[i].Snr;
+                                                }
                                             }
                                             var result = HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1).Result;
                                             if (result.code != 200)
@@ -787,8 +734,6 @@ namespace X2D1NoRefTaskServer.Service
                                         }
                                     }
                                     LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻定位完成");
-                                    LogHelper.Info($"-----------------------------------------------------------------");
-
                                 }
                                 catch (TaskCanceledException)
                                 {
@@ -799,184 +744,6 @@ namespace X2D1NoRefTaskServer.Service
                                     return;
                                 }
                             });
-                            //foreach (var xdInfos in xdgbInfos)
-                            //{
-                            //    if (cts.IsCancellationRequested) return;
-                            //    var finfos = xdInfos.ToList();
-                            //    if (finfos.Count < 3)
-                            //    {
-                            //        LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻文件数量只有{finfos.Count}个,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    //超短波信号
-                            //    var dinfo = finfos.FirstOrDefault(m => m.Ch == 1);
-                            //    if (dinfo == null)
-                            //    {
-                            //        LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到超短波信号ch1文件,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    var taskSig = dto.Sigs.FirstOrDefault(p => p.FreqUp == dinfo.FreqHz);
-                            //    if (taskSig == null)
-                            //    {
-                            //        continue;//跳过不是任务处理的频点
-                            //    }
-                            //    //主星
-                            //    var minfo = finfos.FirstOrDefault(m => m.Ch == 2);
-                            //    if (minfo == null)
-                            //    {
-                            //        LogHelper.Warning($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],{capTime:yyyyMMddHHmmss}时刻未找到主星信号ch2文件,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    //邻1
-                            //    var ninfo = finfos.FirstOrDefault(m => m.Ch == 3);
-                            //    if (ninfo == null)
-                            //    {
-                            //        LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],{capTime:yyyyMMddHHmmss}时刻未找到邻星信号ch3文件,跳过此组数据");
-                            //        continue;
-                            //    }
-                            //    try
-                            //    {
-                            //        var delay1 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == minfo.SatId)?.Delay;
-                            //        var delay2 = taskSig.SigDelay.FirstOrDefault(p => p.SatInfoSatCode == ninfo.SatId)?.Delay;
-                            //        if (delay1 == null) delay1 = 0;
-                            //        if (delay2 == null) delay2 = 0;
-                            //        LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],主星[{minfo.SatId}],转发时延{delay1}us");
-                            //        LogHelper.Info($"【任务{dto.ID}】信号[{taskSig.FreqUp / 1e6}],邻星[{ninfo.SatId}],转发时延{delay2}us");
-                            //        string mainFile = await HttpHelper.UploadFileAsync(minfo.FilePath, baseUrl, token: cts.Token);//主星文件
-                            //        string adjaFile = await HttpHelper.UploadFileAsync(ninfo.FilePath, baseUrl, token: cts.Token);//邻星文件
-                            //        string cdbFile = await HttpHelper.UploadFileAsync(dinfo.FilePath, baseUrl, token: cts.Token);//超短文件
-                            //        DetectDto detectDto = new DetectDto()
-                            //        {
-                            //            file1 = cdbFile,//11局使用上行泄露信号进行检测
-                            //            dmcType = taskSig.SigType,//上行信号检测目前的算法只能使用基于能量的KY或IBS检测
-                            //            fsHz = minfo.FsHz,
-                            //            mergeRes = true,
-                            //            SigProc = true,
-                            //        };
-                            //        detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
-                            //        if ((int)detectDto.dmcType == 0)
-                            //        {
-                            //            LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持DAMA检测");
-                            //            continue;
-                            //        }
-                            //        if (detectDto.dmcType == EnumSigCheckTypeDto.Normal)
-                            //        {
-                            //            LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持Normal检测");
-                            //            continue;
-                            //        }
-                            //        var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
-                            //        if (deteResp.code != 200)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻信号检测出错.{deteResp.msg}");
-                            //            continue;
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻信号检测完成,共{deteResp.data.Count}个时隙");
-                            //        var smps = deteResp.data.Select(m => new SmpPosition(m.Start, m.Length)).ToList();//怎么补0?
-                            //        var cgDto = new CpuCgMultiDto()
-                            //        {
-                            //            dtCenter = 260000,
-                            //            dtRange = 50000,
-                            //            file1 = cdbFile,
-                            //            file2 = mainFile,
-                            //            samplingRate = minfo.FsHz,
-                            //            smpPositions = smps,
-                            //            snrThreshold = taskSig.Snr,
-                            //        };
-                            //        var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                            //        if (result1.code != 200)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星超短CPU参估出错.{result1.msg}");
-                            //            continue;
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻主星超短CPU参估完成.");
-                            //        cgDto = new CpuCgMultiDto()
-                            //        {
-                            //            dtCenter = 260000,
-                            //            dtRange = 50000,
-                            //            file1 = cdbFile,
-                            //            file2 = adjaFile,
-                            //            samplingRate = minfo.FsHz,
-                            //            smpPositions = smps,
-                            //            snrThreshold = taskSig.Snr,
-                            //        };
-                            //        var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
-                            //        if (result2.code != 200)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{result2.msg}");
-                            //            continue;
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
-                            //        await HttpHelper.DeleteFileAsync(baseUrl, mainFile, adjaFile, cdbFile);
-                            //        var data1 = result1.data;
-                            //        var data2 = result2.data;
-                            //        if (data1.Count != data2.Count || data1.Count != deteResp.data.Count)
-                            //        {
-                            //            LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻参估结果个数和检测结果个数不匹配");
-                            //            continue;
-                            //        }
-                            //        for (int i = 0; i < data1.Count; i++)
-                            //        {
-                            //            try
-                            //            {
-                            //                if (cts.IsCancellationRequested) return;
-                            //                X2D1NoXlNoParlPosDto x2D1 = new X2D1NoXlNoParlPosDto()
-                            //                {
-                            //                    TaskID = dto.ID,
-                            //                    SigTime = minfo.CapTime.AddSeconds(data1[i].Smpstart / minfo.FsHz),
-                            //                    MainCode = minfo.SatId,
-                            //                    AdjaCode = ninfo.SatId,
-                            //                    XdDfo = data2[i].Df,
-                            //                    XdSnr = data2[i].Snr,
-                            //                    SatTxLon = dto.CapLon,
-                            //                    SatTxLat = dto.CapLat,
-                            //                    CdbTxLon = dto.CapLon,
-                            //                    CdbTxLat = dto.CapLat,
-                            //                    FreqDown = minfo.FreqHz,
-                            //                    FreqUp = dinfo.FreqHz,
-                            //                    CheckRes = new CheckResDto()
-                            //                    {
-                            //                        FileName = Path.GetFileName(dinfo.FilePath),
-                            //                        ModRate = deteResp.data[i].ModRate,
-                            //                        ModType = deteResp.data[i].ModType,
-                            //                        SmpCount = deteResp.data[i].Length,
-                            //                        SmpStart = deteResp.data[i].Start,
-                            //                        UserName = deteResp.data[i].UserName,
-                            //                        PosCheckType = deteResp.data[i].DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
-                            //                    }
-                            //                };
-                            //                if (data1[i].Snr > 0 && data2[i].Snr > 0)
-                            //                {
-                            //                    //卫星转发某些频点可能有时延,无参定位由于不能抵消需要减去这个时延
-                            //                    x2D1.SxDto = data1[i].Dt * posDtoFactor - data2[i].Dt * posDtoFactor - delay1.Value + delay2.Value;
-                            //                    x2D1.SxDfo = data1[i].Df - data2[i].Df;
-                            //                    x2D1.SxSnr = Math.Min(data1[i].Snr, data2[i].Snr);
-                            //                    x2D1.XdDto = data1[i].Dt * posDtoFactor - delay1.Value;
-                            //                }
-                            //                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
-                            //                if (result.code != 200)
-                            //                {
-                            //                    LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
-                            //                }
-                            //            }
-                            //            catch (Exception ex)
-                            //            {
-                            //                LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常", ex);
-                            //            }
-                            //        }
-                            //        LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻定位完成");
-                            //        LogHelper.Info($"-----------------------------------------------------------------");
-
-                            //    }
-                            //    catch (TaskCanceledException)
-                            //    {
-                            //    }
-                            //    catch (Exception ex)
-                            //    {
-                            //        LogHelper.Error($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻文件处理异常", ex);
-                            //        continue;
-                            //    }
-
-                            //}
                             ResetTime(formatFlag, ref preTime);
                             preTime = capTime;
 

+ 6 - 0
Service/X2D1TaskServer54/LogHelper.cs

@@ -21,6 +21,12 @@ namespace X3TaskServer54
         }
         public static void Error(string msg, Exception ex = null)
         {
+            if (ex != null && ex.GetType() == typeof(AggregateException))
+            {
+                var iex = (ex as AggregateException).InnerExceptions.FirstOrDefault();
+                if (iex != null)
+                    ex = iex;
+            }
             Serilog.Log.Error(ex, msg);
             Logger?.Invoke(new LogInfo() { LogType = EnumLogType.Error, Msg = msg });
         }

+ 24 - 14
Service/X2D1TaskServer54/MainForm.cs

@@ -3,6 +3,7 @@ using DxHelper;
 using System;
 using System.Collections.Generic;
 using System.Configuration;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 using XdCxRhDW.Dto;
 using XdCxRhDW.WebApi;
@@ -22,8 +23,13 @@ namespace X3TaskServer54
             this.IconOptions.SvgImage = DxHelper.SvgHelper.LoadFromFile("Service.svg");
             LogHelper.Logger = info =>
             {
-                list.Insert(0, info);
-                gridView1.RefreshData();
+                try
+                {
+                    list.Insert(0, info);
+                    this.Invoke(new Action(() => gridView1.RefreshData()));
+                }
+                catch
+                { }
             };
         }
 
@@ -35,24 +41,28 @@ namespace X3TaskServer54
             this.Text = EnumSvrType.X3NoRefHistoryTask.GetEnumDisplayName() + "-" + svrID;
             string localIp;
             string getIpUrl = $"{posPlatformAddr}/api/task/getclientip";
-            try
+            while (true)
             {
-                var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
-                if (rsp.code == 0)
+                try
                 {
-                    LogHelper.Error(rsp.msg);
-                    return;
+                    var rsp = await HttpHelper.GetRequestAsync<string>(getIpUrl, 10);
+                    if (rsp.code == 0)
+                    {
+                        LogHelper.Error(rsp.msg);
+                        return;
+                    }
+                    else
+                    {
+                        localIp = rsp.data;
+                    }
+                    break;
                 }
-                else
+                catch (Exception ex)
                 {
-                    localIp = rsp.data;
+                    LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
+                    await Task.Delay(5000);
                 }
             }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"无法连接到平台{getIpUrl},请检测地址是否正确并确保平台防火墙允许端口通过", ex);
-                return;
-            }
             LogHelper.Info($"本机IP={localIp}");
             Startup.Start(port, $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml", "XdCxRhDW.Dto.xml");
             LogHelper.Info($"服务启动成功.接口地址http://{localIp}:{port}/swagger");

+ 54 - 191
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP.h

@@ -12,26 +12,6 @@
 
 extern "C"
 {
-	///
-	/// 获取三星双时差GDOP  带参考
-	/// mainLines :主星历双行
-	/// adaj1Lines :邻星历双行 
-	/// adaj2Lines :邻星历双行 
-	/// captime:信号时间
-	/// refPos: 参考经度,纬度
-	/// dtousErr: 时差误差
-	/// ephLocErr: 星历位置误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int Gdop3SatRef(char* mainLines, char* adaj1Lines, char* adaj2Lines, long long captime, double* refPos
-		, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
 	///
 	/// 获取三星双时差GDOP  带参考
 	/// mainxyz :xyz vx vy vz
@@ -47,28 +27,12 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatRefByXyz(double* mainxyz, double* adaj1xyz, double* adaj2xyz, double* refPos
+	GDOP_EXPORT int Gdop3SatRefByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
 		, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-	///
-	/// 获取三星双时差GDOP  无参考
-	/// mainLines :主星历双行
-	/// adaj1Lines :邻星历双行 
-	/// adaj2Lines :邻星历双行 
-	/// captime:信号时间
-	/// dtousErr: 时差误差
-	/// ephLocErr: 星历位置误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int Gdop3SatNoRef(char* mainLines, char* adaj1Lines, char* adaj2Lines, long long captime
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop3SatRefByXyz_new(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
 		, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取三星双时差GDOP  无参考
@@ -84,32 +48,12 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatNoRefByXyz(double* mainxyz, double* adaj1xyz, double* adaj2xyz
+	GDOP_EXPORT int Gdop3SatNoRefByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz
 		, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-	///
-	/// 获取双星GDOP
-	/// mainLines :主星历双行
-	/// adajLines :邻星历双行 
-	/// captime:信号时间
-	/// refPos: 参考经度,纬度
-	/// fuHz1: 主上行
-	/// fuHz2: 邻上行
-	/// dtousErr: 时差误差
-	/// dfoHzErr: 频差误差
-	/// ephLocErr: 星历位置误差
-	/// ephVLocErr: 星历速度误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int Gdop2SatDRef(char* mainLines, char* adajLines, long long captime, double* refPos
-		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop3SatNoRefByXyz_new(double *mainxyz, double *adaj1xyz, double *adaj2xyz
+		, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取双星GDOP
@@ -129,32 +73,12 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2SatDRefByXyz(double* mainxyz, double* adajxyz, double* refPos
+	GDOP_EXPORT int Gdop2SatDRefByXyz(double *mainxyz, double *adajxyz, double *refPos
 		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-	///
-	/// 获取三星双频差GDOP
-	/// mainLines :主星历双行
-	/// adaj1Lines :邻星历双行 
-	/// adaj2Lines :邻星历双行 
-	/// captime:信号时间
-	/// refPos: 参考经度,纬度
-	/// fuHz1: 主上行
-	/// fuHz2: 邻上行
-	/// dfo_err: 频差误差
-	/// eph_pos_err: 星历位置误差
-	/// eph_vel_err: 星历速度误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int Gdop3SatDF(char* mainLines, char* adaj1Lines, char* adaj2Lines, long long captime, double* refPos
-		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop2SatDRefByXyz_new(double *mainxyz, double *adajxyz, double *refPos
+		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取三星双频差GDOP
@@ -174,29 +98,12 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatDFByXyz(double* mainxyz, double* adaj1xyz, double* adaj2xyz, double* refPos
+	GDOP_EXPORT int Gdop3SatDFByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
 		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-	///
-	/// 获取2X1D GDOP
-	/// mainLines :主星历双行
-	/// adajLines :邻星历双行 
-	/// captime:信号时间
-	/// cdbPos: 地面站经度,纬度
-	/// refPos: 参考经度,纬度
-	/// dtousErr: 时差误差
-	/// ephLocErr: 星历位置误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置  长度6
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int Gdop2Sat1DRef(char* mainLines, char* adajLines, long long captime, double* cdbPos
-		, double* refPos, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop3SatDFByXyz_new(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
+		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取2X1D GDOP
@@ -213,29 +120,12 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2Sat1DRefByXyz(double* mainxyz, double* adajxyz, double* cdbPos
-		, double* refPos, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-
-	///
-	/// 获取2X1D no ref GDOP
-	/// mainLines :主星历双行
-	/// adajLines :邻星历双行 
-	/// captime:信号时间
-	/// cdbPos: 地面站经度,纬度
-	/// dtousErr: 时差误差
-	/// ephLocErr: 星历位置误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置  长度6
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int Gdop2Sat1DNoRef(char* mainLines, char* adajLines, long long captime, double* cdbPos
-		, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+	GDOP_EXPORT int Gdop2Sat1DRefByXyz(double *mainxyz, double *adajxyz, double *cdbPos
+		, double *refPos, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop2Sat1DRefByXyz_new(double *mainxyz, double *adajxyz, double *cdbPos
+		, double *refPos, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取2X1D no ref GDOP
@@ -251,30 +141,12 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2Sat1DNoRefByXyz(double* mainxyz, double* adajxyz, double* cdbPos
+	GDOP_EXPORT int Gdop2Sat1DNoRefByXyz(double *mainxyz, double *adajxyz, double *cdbPos
 		, double dtousErr, double ephLocErr
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-	///
-	/// 获取XD_CX ref GDOP
-	/// mainLines :主星历双行
-	/// captime:信号时间
-	/// cdbPos: 地面站经度,纬度
-	/// cxPos: 侧向站经度,纬度
-	/// refPos: 参考经度,纬度
-	/// dto_err: 时差误差
-	/// doa_err: 侧向误差
-	/// eph_err: 星历位置误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置  长度6
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int GdopXDCXRef(char* mainLines, long long captime, double* cdbPos, double* cxPos, double* refPos
-		, double dto_err, double doa_err, double eph_err
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop2Sat1DNoRefByXyz_new(double *mainxyz, double *adajxyz, double *cdbPos
+		, double dtousErr, double ephLocErr
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取XD_CX ref GDOP
@@ -292,30 +164,12 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int GdopXDCXRefByXyz(double* mainxyz, double* cdbPos, double* cxPos, double* refPos
+	GDOP_EXPORT int GdopXDCXRefByXyz(double *mainxyz, double *cdbPos, double *cxPos, double *refPos
 		, double dto_err, double doa_err, double eph_err
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
-
-	///
-	/// 获取XD_CX no ref GDOP
-	/// mainLines :主星历双行
-	/// captime:信号时间
-	/// cdbPos: 地面站经度,纬度
-	/// cxPos: 侧向站经度,纬度
-	/// refPos: 参考经度,纬度
-	/// dto_err: 时差误差
-	/// doa_err: 侧向误差
-	/// eph_err: 星历位置误差
-	/// level: gdop输出等级
-	/// levlen:level 长度
-	/// resCount:每一级的数据个数
-	/// res :数据
-	/// satllh :卫星位置  长度6
-	/// 返回值:0 成功
-	///
-	GDOP_EXPORT int GdopXDCXNoRef(char* mainLines, long long captime, double* cdbPos, double* cxPos
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int GdopXDCXRefByXyz_new(double *mainxyz, double *cdbPos, double *cxPos, double *refPos
 		, double dto_err, double doa_err, double eph_err
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取XD_CX no ref GDOP
@@ -333,9 +187,12 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int GdopXDCXNoRefByXyz(double* mainxyz, double* cdbPos, double* cxPos
+	GDOP_EXPORT int GdopXDCXNoRefByXyz(double *mainxyz, double *cdbPos, double *cxPos
+		, double dto_err, double doa_err, double eph_err
+		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int GdopXDCXNoRefByXyz_new(double *mainxyz, double *cdbPos, double *cxPos
 		, double dto_err, double doa_err, double eph_err
-		, double* level, int levlen, int* resCount, double** res, double* satllh);
+		, double *level, int levlen, int *resCount, int **lpoints, double **res, double *satllh);
 
 	///
 	/// 获取XD_CX no ref GDOP
@@ -350,9 +207,12 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2CX(double* cx1Pos, double* cx2Pos
+	GDOP_EXPORT int Gdop2CX(double *cx1Pos, double *cx2Pos
 		, double doa_err1, double doa_err2
-		, double* level, int levlen, int* resCount, double** res);
+		, double *level, int levlen, int *resCount, double **res);
+	GDOP_EXPORT int Gdop2CX_new(double *cx1Pos, double *cx2Pos
+		, double doa_err1, double doa_err2
+		, double *level, int levlen, int *resCount, int **lpoints, double **res);
 
 	//
 	// 计算理论频差
@@ -363,7 +223,7 @@ extern "C"
 	//fu  上行
 	//fd  下行
 	//
-	GDOP_EXPORT double theryDfo(double* tarpos, double* recpos, double* eph1, double* eph2, double fu, double fd);
+	GDOP_EXPORT double theryDfo(double *tarpos, double *recpos, double *eph1, double *eph2, double fu, double fd);
 
 	///
 	/// XD时差线
@@ -377,9 +237,10 @@ extern "C"
 	/// reslen 时差线个数
 	/// res 值
 	///
-	GDOP_EXPORT int SCX_XD(double* main_sat_pos, double* mbwx_rec_pos, double* ckwx_rec_pos, double* cdb_rec_pos,
-		double* ref_pos, double target_dto, double ref_dto, int* reslen, double** res);
-
+	GDOP_EXPORT int SCX_XD(double *main_sat_pos, double *mbwx_rec_pos, double *ckwx_rec_pos, double *cdb_rec_pos,
+		double *ref_pos, double target_dto, double ref_dto, int *reslen, double **res);
+	GDOP_EXPORT int SCX_XD_new(double *main_sat_pos, double *mbwx_rec_pos, double *ckwx_rec_pos, double *cdb_rec_pos,
+		double *ref_pos, double target_dto, double ref_dto, int *linecount, int **reslen, double **res);
 
 	///
 	/// XD时差线
@@ -393,11 +254,13 @@ extern "C"
 	/// reslen 时差线个数
 	/// res 值
 	///
-	GDOP_EXPORT int SCX_XD_NoRef(double* main_sat_pos, double* mbwx_rec_pos, double* cdb_rec_pos,
-		double target_dto, int* reslen, double** res);
+	GDOP_EXPORT int SCX_XD_NoRef(double *main_sat_pos, double *mbwx_rec_pos, double *cdb_rec_pos,
+		double target_dto, int *reslen, double **res);
+	GDOP_EXPORT int SCX_XD_NoRef_new(double *main_sat_pos, double *mbwx_rec_pos, double *cdb_rec_pos,
+		double target_dto, int *linecount, int **reslen, double **res);
 
 	///
 	/// 释放
 	///
-	GDOP_EXPORT void FreeGDOPBuf(double* val);
+	GDOP_EXPORT void FreeGDOPBuf(double *val);
 }

BIN
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP_Draw_11.dll


BIN
XdCxRhDW.Api/AddIns/GDOP误差椭圆/Tle2XYZ.dll


BIN
XdCxRhDW.Api/AddIns/时差线/Positioning.dll


BIN
XdCxRhDW.Api/AddIns/星历推算/Tle2XYZ.dll


BIN
XdCxRhDW.Api/AddIns/频差线/Positioning.dll


+ 1 - 1
XdCxRhDW.App/Controllers/DetectCgController.cs

@@ -92,7 +92,7 @@ namespace XdCxRhDW.App.Controllers
                 SignalProcDto procDto = new SignalProcDto()
                 {
                     File = dto.file1,
-                    Fs = (long)dto.fsHz, 
+                    Fs = (long)dto.fsHz,
                     Smps = res.data.Select(p => new SmpPosition() { smpStart = p.Start, smpCount = p.Length }).ToList(),
                 };
                 var procRes = await HttpHelper.PostRequestAsync<List<SignalProcResDto>>(svr.BaseHttpAddr + "Check/SignalProc", procDto);

+ 74 - 66
XdCxRhDW.App/Controllers/ResultController.cs

@@ -82,6 +82,80 @@ namespace XdCxRhDW.App.Controllers
             }
         }
 
+        /// <summary>
+        /// 获取指定任务的所有上行频点
+        /// </summary>
+        /// <param name="dto">任务频点查询模型</param>
+        /// <returns>任务所有频点信息</returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        public async Task<AjaxResult<List<TaskFreqResDto>>> GetTaskFreqs(TaskFreqQueryDto dto)
+        {
+            var posList = new List<long>();
+            try
+            {
+                var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
+                if (!Directory.Exists(dir)) return Success(new List<TaskFreqResDto>());
+                var yearDirs = Directory.EnumerateDirectories(dir).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列
+                DateTime max = DateTime.MinValue;
+                foreach (var yearDir in yearDirs)
+                {
+                    if (max != DateTime.MinValue) break;
+                    //每一天的db文件,倒序排列
+                    var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4)));
+                    foreach (var dayFile in dayFiles)
+                    {
+                        using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile))
+                        {
+                            if (db == null) continue;
+
+                            var listFrequp = await db.PosRes.Where(p => p.TaskInfoID == dto.TaskInfoID).Select(p => p.FreqUpHz).Distinct().ToListAsync();
+                            foreach (var item in listFrequp)
+                            {
+                                if (!posList.Contains(item))
+                                    posList.Add(item);
+                            }
+                        }
+                    }
+                }
+                var res = posList.Select(p => new TaskFreqResDto() { FreqUpHz = p }).ToList();
+                return Success(res);
+            }
+            catch (Exception ex)
+            {
+                string msg = $"定位结果查询异常-任务编号:{dto.TaskInfoID}";
+                Serilog.Log.Error(ex, msg);
+                return Error<List<TaskFreqResDto>>("定位结果查询异常");
+            }
+        }
+
+        /// <summary>
+        /// 获取所有执行中的任务
+        /// </summary>
+        [HttpPost]
+        public async Task<AjaxResult<List<TaskQueryResDto>>> GetRunningTasks()
+        {
+            try
+            {
+                using (RHDWContext db = new RHDWContext())
+                {
+                    var tasks = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running).ToListAsync();
+                    var res = tasks.Select(t => new TaskQueryResDto()
+                    {
+                        TaskID = t.ID,
+                        PosType = (EnumPosTypeDto)(int)t.PosType,
+                        TaskType = (EnumTaskTypeDto)(int)t.TaskType,
+                    });
+                    return Success(res.ToList());
+                }
+            }
+            catch (Exception ex)
+            {
+                string msg = $"查询执行中的任务异常";
+                Serilog.Log.Error(ex, msg);
+                return Error<List<TaskQueryResDto>>("查询执行中的任务异常");
+            }
+        }
 
         #region 定位结果查询接口
         /// <summary>
@@ -126,26 +200,6 @@ namespace XdCxRhDW.App.Controllers
             }
         }
 
-        /// <summary>
-        /// 根据定位结果加载查询条件频点
-        /// </summary>
-        /// <param name="dto">任务ID</param>
-        /// <returns></returns>
-        /// <exception cref="Exception"></exception>
-        [HttpPost]
-        public async Task<AjaxResult<List<PosFreq>>> GetFreqByTaskInfoID(PosFreqByTaskInfoIdDto dto)
-        {
-            var response = (await GetFreqByTaskIdObsolete(dto));
-            if (response.code == 200)
-            {
-                var listDto = response.data?.ToList();
-                return Success(listDto);
-            }
-            else
-            {
-                return Error<List<PosFreq>>(response.msg);
-            }
-        }
 
         /// <summary>
         /// 根据时间范围查询定位结果(此方法内部调用)
@@ -363,52 +417,6 @@ namespace XdCxRhDW.App.Controllers
                 return Error<List<PosRes>>("定位结果查询最新数据异常");
             }
         }
-        /// <summary>
-        /// 根据任务ID查询定位结果(此方法内部调用)
-        /// </summary>
-        /// <param name="dto">任务ID</param>
-        /// <returns></returns>
-        /// <exception cref="Exception"></exception>
-        [HttpPost]
-        [Obsolete]
-        public async Task<AjaxResult<List<PosFreq>>> GetFreqByTaskIdObsolete(PosFreqByTaskInfoIdDto dto)
-        {
-            var posList = new List<PosFreq>();
-            try
-            {
-                var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
-                if (!Directory.Exists(dir)) return Success(posList);
-                var yearDirs = Directory.EnumerateDirectories(dir).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列
-                DateTime max = DateTime.MinValue;
-                foreach (var yearDir in yearDirs)
-                {
-                    if (max != DateTime.MinValue) break;
-                    //每一天的db文件,倒序排列
-                    var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4)));
-                    foreach (var dayFile in dayFiles)
-                    {
-                        using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile))
-                        {
-                            if (db == null) continue;
-                       
-                            var query= await db.PosRes.Where(p => p.TaskInfoID == dto.TaskInfoID).Select(s => new PosFreq() { FreqUpHz = s.FreqUpHz }).Distinct().ToListAsync();
-                            //var noRepesat = query.Intersect(posList);
-                            //var noRepeat= query.Except(posList);
-                            posList.AddRange(query);
-
-                        }
-                    }
-                }
-                var res =  posList.Distinct().ToList();
-                return Success(res);
-            }
-            catch (Exception ex)
-            {
-                string msg = $"定位结果查询异常-任务编号:{dto.TaskInfoID}";
-                Serilog.Log.Error(ex, msg);
-                return Error<List<PosFreq>>("定位结果查询异常");
-            }
-        }
         #endregion
 
         private PosResDto MapDto(PosRes res)

+ 3 - 3
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -257,12 +257,12 @@ namespace XdCxRhDW.App.UserControl
             // }
             this.txtFrequpMHz.Properties.Items.Clear();
             this.txtFrequpMHz.Properties.Items.Add(new ImageComboBoxItem("全部", null));
-            var sigs =new List<PosFreq>();
-            var dto = new PosFreqByTaskInfoIdDto()
+            var sigs =new List<TaskFreqResDto>();
+            var dto = new TaskFreqQueryDto()
             {
                 TaskInfoID=tsk.ID
             };
-            var res = await HttpHelper.PostRequestAsync<List<PosFreq>>(SysConfig.GetUrl("Result/GetFreqByTaskIdObsolete"), dto);
+            var res = await HttpHelper.PostRequestAsync<List<TaskFreqResDto>>(SysConfig.GetUrl("Result/GetTaskFreqs"), dto);
             if (res.code == 200)
                 sigs = res.data;
             foreach (var item in sigs)

+ 0 - 16
XdCxRhDW.Entity/PosRes.cs

@@ -94,20 +94,4 @@ namespace XdCxRhDW.Entity
 
 
     }
-
-    public class PosFreq
-    {
-        [Display(Name = "上行频点")]
-        public long FreqUpHz { get; set; }
-
-        public override bool Equals(object obj)
-        {
-            return this.FreqUpHz == ((PosFreq)obj).FreqUpHz;
-        }
-        public override int GetHashCode()
-        {
-            int FreqUpHzCode = this.FreqUpHz.GetHashCode();
-            return FreqUpHzCode;
-        }
-    }
 }

+ 2 - 2
XdCxRhDW.Framework/HttpHelper.cs

@@ -168,9 +168,9 @@ public class HttpHelper
         {
             throw new Exception($"上传文件{Path.GetFileName(localFile)}到{uploadUrl}超时!");
         }
-        catch
+        catch(Exception ex)
         {
-            throw new Exception($"上传文件{Path.GetFileName(localFile)}到{uploadUrl}失败!");
+            throw new Exception($"上传文件{Path.GetFileName(localFile)}到{uploadUrl}失败!",ex);
         }
     }
 

+ 4 - 0
XdCxRhDW.WebApi/FileController.cs

@@ -47,6 +47,10 @@ namespace XdCxRhDW.WebApi
             var fileData = await content.ReadAsByteArrayAsync();
             // 将文件保存到本地文件夹中
             var filePath = Path.Combine(uploadFolder, fileName);
+            if (File.Exists(filePath))
+            {
+                Serilog.Log.Warning($"文件[{filePath}]已存在!");
+            }
             using (var fileStream = new FileStream(filePath, FileMode.Create))
             {
                 await fileStream.WriteAsync(fileData, 0, fileData.Length);

+ 5 - 3
XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj

@@ -8,8 +8,8 @@
     <ProjectGuid>{994F5945-4D73-40B4-A1D9-3E23A9FCD350}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>XdCxRhDw.Dto</RootNamespace>
-    <AssemblyName>XdCxRhDw.Dto</AssemblyName>
+    <RootNamespace>XdCxRhDW.Dto</RootNamespace>
+    <AssemblyName>XdCxRhDW.Dto</AssemblyName>
     <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <Deterministic>true</Deterministic>
@@ -24,7 +24,7 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
-    <DocumentationFile>bin\Debug\XdCxRhDw.Dto.xml</DocumentationFile>
+    <DocumentationFile>bin\Debug\XdCxRhDW.Dto.xml</DocumentationFile>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
@@ -70,6 +70,7 @@
     <Compile Include="DetectResDto.cs" />
     <Compile Include="CpuCgResDto.cs" />
     <Compile Include="FileUploadResDto.cs" />
+    <Compile Include="TaskFreqResDto.cs" />
     <Compile Include="TaskHandleDto\TaskStopHandleDto.cs" />
     <Compile Include="PosDto\CheckResDto.cs" />
     <Compile Include="PosDto\RHNoXlPosDto.cs" />
@@ -103,6 +104,7 @@
     <Compile Include="PosDto\X2D1NoXlPosDto.cs" />
     <Compile Include="SvrStateDto.cs" />
     <Compile Include="TaskHandleDto\X2D1HistoryTaskHandleDto.cs" />
+    <Compile Include="TaskQueryResDto.cs" />
     <Compile Include="TaskSigDto.cs" />
     <Compile Include="XlCalcDto\XlImportDto.cs" />
     <Compile Include="XlCalcDto\XlCalcMultDto.cs" />

+ 2 - 2
XdCxRhDw.Dto/PosResQueryDto.cs

@@ -83,9 +83,9 @@ namespace XdCxRhDW.Dto
 
     }
     /// <summary>
-    /// 
+    /// 任务频点查询参数模型
     /// </summary>
-    public class PosFreqByTaskInfoIdDto
+    public class TaskFreqQueryDto
     {
         /// <summary>
         /// 任务编号

+ 20 - 0
XdCxRhDw.Dto/TaskFreqResDto.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 任务频点查询结果模型
+    /// </summary>
+    public class TaskFreqResDto
+    {
+        /// <summary>
+        /// 上行频点(Hz)
+        /// </summary>
+        public long FreqUpHz { get; set; }
+    }
+}

+ 29 - 0
XdCxRhDw.Dto/TaskQueryResDto.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Dto
+{
+    /// <summary>
+    /// 任务查询结果模型
+    /// </summary>
+    public class TaskQueryResDto
+    {
+        /// <summary>
+        /// 任务ID
+        /// </summary>
+        public int TaskID { get; set; }
+
+        /// <summary>
+        /// 任务类型
+        /// </summary>
+        public EnumTaskTypeDto TaskType { get; set; }
+
+        /// <summary>
+        /// 定位类型
+        /// </summary>
+        public EnumPosTypeDto PosType { get; set; }
+    }
+}