wyq пре 1 година
родитељ
комит
392d7cc8e6
36 измењених фајлова са 514 додато и 602 уклоњено
  1. 1 1
      Service/CapMoni/App.config
  2. 5 0
      Service/CapMoni/Program.cs
  3. BIN
      Service/CheckServer/AddIns/ReSample.exe
  4. BIN
      Service/CheckServer/AddIns/SignalProc.dll
  5. 10 0
      Service/CheckServer/AddIns/SignalProcHelper.cs
  6. 6 0
      Service/CheckServer/LogHelper.cs
  7. 23 14
      Service/CheckServer/MainForm.cs
  8. BIN
      Service/CpuCgServer/AddIns/XcorrCpu.exe
  9. 6 0
      Service/CpuCgServer/LogHelper.cs
  10. 23 14
      Service/CpuCgServer/MainForm.cs
  11. 6 0
      Service/GpuCgServer/LogHelper.cs
  12. 23 14
      Service/GpuCgServer/MainForm.cs
  13. 11 2
      Service/X2D1NoRefTaskServer/App.config
  14. 6 0
      Service/X2D1NoRefTaskServer/LogHelper.cs
  15. 24 14
      Service/X2D1NoRefTaskServer/MainForm.cs
  16. 156 402
      Service/X2D1NoRefTaskServer/Service/TaskService.cs
  17. 6 0
      Service/X2D1TaskServer54/LogHelper.cs
  18. 24 14
      Service/X2D1TaskServer54/MainForm.cs
  19. BIN
      XdCxRhDW.Api/AddIns/GDOP误差椭圆/Tle2XYZ.dll
  20. BIN
      XdCxRhDW.Api/AddIns/时差线/Positioning.dll
  21. BIN
      XdCxRhDW.Api/AddIns/星历推算/Tle2XYZ.dll
  22. BIN
      XdCxRhDW.Api/AddIns/频差线/Positioning.dll
  23. 1 1
      XdCxRhDW.App/App.config
  24. 1 1
      XdCxRhDW.App/Controllers/DetectCgController.cs
  25. 8 6
      XdCxRhDW.App/Controllers/PosController.cs
  26. 74 66
      XdCxRhDW.App/Controllers/ResultController.cs
  27. 5 3
      XdCxRhDW.App/ExtensionsDev/MapControlEx.cs
  28. 22 16
      XdCxRhDW.App/UserControl/CtrlHome.cs
  29. 0 16
      XdCxRhDW.Entity/PosRes.cs
  30. 5 5
      XdCxRhDW.Framework/HttpHelper.cs
  31. 4 0
      XdCxRhDW.WebApi/FileController.cs
  32. 5 3
      XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj
  33. 8 8
      XdCxRhDw.Dto/Attribute/RangeAttribute.cs
  34. 2 2
      XdCxRhDw.Dto/PosResQueryDto.cs
  35. 20 0
      XdCxRhDw.Dto/TaskFreqResDto.cs
  36. 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" />

+ 5 - 0
Service/CapMoni/Program.cs

@@ -33,6 +33,11 @@ namespace CapMoni
                     Directory.CreateDirectory(fileDir);
                 var fileDate = dateNow.ToString("yyyy_MM_dd_HH");
                 var fileDirDate = Path.Combine(fileDir, fileDate);
+                var oldDir = Path.Combine(fileDir, dateNow.AddHours(-2).ToString("yyyy_MM_dd_HH"));
+                if (Directory.Exists(oldDir))
+                {
+                    Directory.Delete(oldDir, true);
+                }
                 if (!Directory.Exists(fileDirDate))
                     Directory.CreateDirectory(fileDirDate);
                 var freqList = freqs.Split(new string[] { ";" }, System.StringSplitOptions.RemoveEmptyEntries);

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");

+ 156 - 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
             {
-                capSeconds = 60;
+                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)
+            {
+                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;
@@ -659,8 +549,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 +570,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 +606,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 +628,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;
@@ -764,16 +683,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 +721,6 @@ namespace X2D1NoRefTaskServer.Service
                                         }
                                     }
                                     LogHelper.Info($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},{capTime:yyyyMMddHHmmss}时刻定位完成");
-                                    LogHelper.Info($"-----------------------------------------------------------------");
-
                                 }
                                 catch (TaskCanceledException)
                                 {
@@ -799,184 +731,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");

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/App.config

@@ -25,7 +25,7 @@
 		<!--地图定位点聚合-->
 		<add key="UseMapCluster" value="1" />
 
-		<!--两星一地无参定位算法使用最新的版本-->
+		<!--两星一地无参定位算法使用新算法-->
 		<add key="UseNewPosX2D1NoRef" value="1" />
 
 

+ 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);

+ 8 - 6
XdCxRhDW.App/Controllers/PosController.cs

@@ -592,9 +592,9 @@ namespace XdCxRhDW.App.Controllers
                     TarFreqDown = dto.FreqDown,
                 });
                 double[] res;
-                if (ConfigurationManager.AppSettings["UseNewPosX2D1"] != null
-             && ConfigurationManager.AppSettings["UseNewPosX2D1"].ToLower() != "false"
-             && ConfigurationManager.AppSettings["UseNewPosX2D1"].ToLower() != "0")
+                if (ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"] != null
+             && ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"].ToLower() != "false"
+             && ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"].ToLower() != "0")
                 {
                     res = PosApi.X2D1_PosNoRef_ZL(cgRes, StationRes);
                 }
@@ -737,9 +737,9 @@ namespace XdCxRhDW.App.Controllers
                     TarFreqDown = dto.FreqDown,
                 });
                 double[] res;
-                if (ConfigurationManager.AppSettings["UseNewPosX2D1"] != null
-             && ConfigurationManager.AppSettings["UseNewPosX2D1"].ToLower() != "false"
-             && ConfigurationManager.AppSettings["UseNewPosX2D1"].ToLower() != "0")
+                if (ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"] != null
+             && ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"].ToLower() != "false"
+             && ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"].ToLower() != "0")
                 {
                     res = PosApi.X2D1_PosNoRef_ZL(cgRes, StationRes);
                 }
@@ -2127,6 +2127,8 @@ namespace XdCxRhDW.App.Controllers
         }
         #endregion
 
+
+
         private PosResDto MapDto(PosRes res)
         {
             return new PosResDto()

+ 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 }).OrderBy(o => o.FreqUpHz).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)

+ 5 - 3
XdCxRhDW.App/ExtensionsDev/MapControlEx.cs

@@ -1701,9 +1701,10 @@ public static class MapControlEx
         var polyLine = new MapPolyline()
         {
             EnableSelection = DefaultBoolean.False,
-            EnableHighlighting = DefaultBoolean.False,
+            EnableHighlighting = DefaultBoolean.True,
             Stroke = ColorHelper.GetColor(title),
-            StrokeWidth = 4,
+            StrokeWidth = 2,
+            HighlightedStrokeWidth=4,
             IsGeodesic = true,
             CanResize = false,
             CanEdit = false,
@@ -1755,7 +1756,8 @@ public static class MapControlEx
                     Stroke = ColorHelper.GetColor(identify),
                     EnableHighlighting = DefaultBoolean.False,
                     EnableSelection = DefaultBoolean.False,
-                    StrokeWidth = 4,
+                    StrokeWidth = 2,
+                    HighlightedStrokeWidth=4,
                     IsGeodesic = true,
                     CanResize = false,
                     CanEdit = false,

+ 22 - 16
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -120,7 +120,7 @@ namespace XdCxRhDW.App.UserControl
                 return;
             }
             OnSysSetingsChanged(SysConfig.Config);
-           
+
             try
             {
                 List<TxInfo> txList = new List<TxInfo>();
@@ -212,18 +212,24 @@ namespace XdCxRhDW.App.UserControl
 
 
                 var txtFrequpItemFreq = new List<long>();
-                for (int i = 0; i < this.txtFrequpMHz.Properties.Items.Count; i++)
+                txtFrequpItemFreq.AddRange(txtFrequpMHz.Properties.Items.Select(t => Convert.ToInt64(t.Value)));
+                if (!txtFrequpItemFreq.Contains(posRes.FreqUpHz))
                 {
-                    txtFrequpItemFreq.Add(Convert.ToInt64(this.txtFrequpMHz.Properties.Items[i].Value));
+                    txtFrequpItemFreq.Add(posRes.FreqUpHz);
+
                 }
-                if (!txtFrequpItemFreq.Contains(posRes.FreqUpHz))
+                else
                 {
-                    this.Invoke(new Action(() =>
-                    {
-                        this.txtFrequpMHz.Properties.Items.Add(new ImageComboBoxItem((posRes.FreqUpHz / 1e6).ToString("f3"), posRes.FreqUpHz));
-                    }));
+                    return;
                 }
-                
+                txtFrequpItemFreq.Sort();
+                var itemsNew = txtFrequpItemFreq.Select(t => new ImageComboBoxItem((posRes.FreqUpHz / 1e6).ToString("f3"), posRes.FreqUpHz)).ToArray();
+                this.Invoke(new Action(() =>
+                {
+                    this.txtFrequpMHz.Properties.Items.Clear();
+                    this.txtFrequpMHz.Properties.Items.AddRange(itemsNew);
+                }));
+
             }
         }
         private async void GridView1_FocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e)
@@ -257,12 +263,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
+                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)
@@ -1134,9 +1140,9 @@ namespace XdCxRhDW.App.UserControl
                             }
                             else
                             {
-                                if (ConfigurationManager.AppSettings["UseNewPosX2D1"] != null
-           && ConfigurationManager.AppSettings["UseNewPosX2D1"].ToLower() != "false"
-           && ConfigurationManager.AppSettings["UseNewPosX2D1"].ToLower() != "0")
+                                if (ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"] != null
+           && ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"].ToLower() != "false"
+           && ConfigurationManager.AppSettings["UseNewPosX2D1NoRef"].ToLower() != "0")
                                 {
                                     res = PosApi.X2D1_PosNoRef_ZL(CgRes, StationRes);
                                 }

+ 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;
-        }
-    }
 }

+ 5 - 5
XdCxRhDW.Framework/HttpHelper.cs

@@ -33,7 +33,7 @@ public class HttpHelper
     /// <param name="timeoutSeconds"></param>
     /// <param name="token"></param>
     /// <returns></returns>
-    public static async Task<AjaxResult<T>> PostRequestAsync<T>(string url, object dto, int timeoutSeconds = 30, CancellationToken token = default)
+    public static async Task<AjaxResult<T>> PostRequestAsync<T>(string url, object dto, int timeoutSeconds = 60, CancellationToken token = default)
     {
         var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json");
         var handler = new HttpClientHandler() { UseCookies = false };
@@ -57,7 +57,7 @@ public class HttpHelper
     /// <param name="token"></param>
     /// <param name="timeoutSeconds"></param>
     /// <returns></returns>
-    public static async Task<AjaxResult> PostRequestAsync(string url, object dto, int timeoutSeconds = 30, CancellationToken token = default)
+    public static async Task<AjaxResult> PostRequestAsync(string url, object dto, int timeoutSeconds = 60, CancellationToken token = default)
     {
         var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json");
         var handler = new HttpClientHandler() { UseCookies = false };
@@ -73,7 +73,7 @@ public class HttpHelper
         return AjaxResult;
     }
 
-    public static async Task<AjaxResult<T>> GetRequestAsync<T>(string url, int timeoutSeconds = 30)
+    public static async Task<AjaxResult<T>> GetRequestAsync<T>(string url, int timeoutSeconds = 60)
     {
         var handler = new HttpClientHandler() { UseCookies = false };
         HttpClient client = new HttpClient(handler);
@@ -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" />

+ 8 - 8
XdCxRhDw.Dto/Attribute/RangeAttribute.cs

@@ -76,22 +76,22 @@ namespace XdCxRhDW.Dto
 
                 if (IncludeMin && IncludeMax)
                 {
-                    ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}]";
+                    ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}],当前值{val}";
                     return val >= Min && val <= Max;
                 }
                 else if (IncludeMin && !IncludeMax)
                 {
-                    ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max})";
+                    ErrorMessage = "字段 {0} 范围" + $"[{Min},{Max}),当前值{val}";
                     return val >= Min && val < Max;
                 }
                 else if (!IncludeMin && IncludeMax)
                 {
-                    ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}]";
+                    ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}],当前值{val}";
                     return val > Min && val <= Max;
                 }
                 else
                 {
-                    ErrorMessage = "字段 {0} 范围" + $"({Min},{Max})";
+                    ErrorMessage = "字段 {0} 范围" + $"({Min},{Max}),当前值{val}";
                     return val > Min && val < Max;
                 }
 
@@ -100,12 +100,12 @@ namespace XdCxRhDW.Dto
             {
                 if (IncludeMin)
                 {
-                    ErrorMessage = "字段 {0} 必须大于等于" + $"{Min}";
+                    ErrorMessage = "字段 {0} 必须大于等于" + $"{Min},当前值{val}";
                     return val >= Min;
                 }
                 else
                 {
-                    ErrorMessage = "字段 {0} 必须大于" + $"{Min}";
+                    ErrorMessage = "字段 {0} 必须大于" + $"{Min},当前值{val}";
                     return val > Min;
                 }
             }
@@ -113,12 +113,12 @@ namespace XdCxRhDW.Dto
             {
                 if (IncludeMax)
                 {
-                    ErrorMessage = "字段 {0} 必须小于等于" + $"{Max}";
+                    ErrorMessage = "字段 {0} 必须小于等于" + $"{Max},当前值{val}";
                     return val <= Max;
                 }
                 else
                 {
-                    ErrorMessage = "字段 {0} 必须小于" + $"{Max}";
+                    ErrorMessage = "字段 {0} 必须小于" + $"{Max},当前值{val}";
                     return val < Max;
                 }
             }

+ 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; }
+    }
+}