zoulei 1 год назад
Родитель
Сommit
2babb074e7

+ 55 - 10
Service/CheckServer/Controllers/CheckController.cs

@@ -28,7 +28,10 @@ namespace CheckServer.Controllers
             {
                 dto.file1 = GetLocalFile(dto.file1);
                 List<DetectResDto> list = new List<DetectResDto>();
+                List<DmcResult> listRes = new List<DmcResult>();
                 List<DmcResult> dmcResults = new List<DmcResult>();
+                List<DmcResult> ibsResults = new List<DmcResult>();
+                List<DmcResult> kyResults = new List<DmcResult>();
                 if (dto.dmcType.HasFlag(EnumSigCheckTypeDto.DAMA))
                 {
                     var dmcResult = await CheckHelper.DmcCheckAsync(dto.file1, dto.fsHz, EnumSigCheckTypeDto.DAMA, dto.band);
@@ -37,22 +40,54 @@ namespace CheckServer.Controllers
                 if (dto.dmcType.HasFlag(EnumSigCheckTypeDto.IBS))
                 {
                     var dmcResult = await CheckHelper.DmcCheckAsync(dto.file1, dto.fsHz, EnumSigCheckTypeDto.IBS, dto.band);
-                    dmcResults.AddRange(dmcResult);
+                    ibsResults.AddRange(dmcResult);
                 }
                 if (dto.dmcType.HasFlag(EnumSigCheckTypeDto.Ky5758))
                 {
                     var dmcResult = await CheckHelper.DmcCheckAsync(dto.file1, dto.fsHz, EnumSigCheckTypeDto.Ky5758, dto.band);
-                    dmcResults.AddRange(dmcResult);
+                    kyResults.AddRange(dmcResult);
                 }
-
-                foreach (var dmcItem in dmcResults)
+                if (dto.mergeRes)
+                {
+                    listRes.AddRange(dmcResults);
+                    var ibsCopy = ibsResults.Skip(0).ToList();
+                    foreach (var item in ibsResults)
+                    {
+                        if (listRes.Any(p => CalcIntersecLen(p, item) > 500))
+                            ibsCopy.Remove(item);//IBS结果在DAMA中重叠超过500长度,忽略
+                    }
+                    listRes.AddRange(ibsCopy);
+                    var kyCopy = kyResults.Skip(0).ToList();
+                    foreach (var item in kyResults)
+                    {
+                        if (listRes.Any(p => CalcIntersecLen(p, item) > 500))
+                            kyCopy.Remove(item);//KY结果在DAMA或IBS中重叠超过500长度,忽略
+                    }
+                    listRes.AddRange(kyCopy);
+                    foreach (var dmcItem in listRes)
+                    {
+                        DetectResDto detectRes = new DetectResDto(dmcItem.Start, dmcItem.Length, dmcItem.UserName);
+                        detectRes.ModType = dmcItem.ModType;
+                        detectRes.DmcType = dmcItem.DmcType;
+                        detectRes.File1 = dto.file1;
+                        detectRes.TimeMs = dmcItem.Times;
+                        list.Add(detectRes);
+                    }
+                }
+                else
                 {
-                    DetectResDto detectRes = new DetectResDto(dmcItem.Start, dmcItem.Length, dmcItem.UserName);
-                    detectRes.ModType = dmcItem.ModType;
-                    detectRes.DmcType = dmcItem.DmcType;
-                    detectRes.File1 = dto.file1;
-                    detectRes.TimeMs = dmcItem.Times;
-                    list.Add(detectRes);
+                    listRes.AddRange(dmcResults);
+                    listRes.AddRange(ibsResults);
+                    listRes.AddRange(kyResults);
+                    foreach (var dmcItem in listRes)
+                    {
+                        DetectResDto detectRes = new DetectResDto(dmcItem.Start, dmcItem.Length, dmcItem.UserName);
+                        detectRes.ModType = dmcItem.ModType;
+                        detectRes.DmcType = dmcItem.DmcType;
+                        detectRes.File1 = dto.file1;
+                        detectRes.TimeMs = dmcItem.Times;
+                        list.Add(detectRes);
+                    }
                 }
                 return Success(list);
             }
@@ -152,5 +187,15 @@ namespace CheckServer.Controllers
             }
             return M;
         }
+
+        //计算两个时隙交集的长度,无交集返回0
+        private int CalcIntersecLen(DmcResult dto1, DmcResult dto2)
+        {
+            if (dto2.Start >= dto1.Start + dto1.Length) return 0;
+            if (dto1.Start >= dto2.Start + dto2.Length) return 0;
+            int maxStart = Math.Max(dto1.Start, dto2.Start);
+            int minEnd = Math.Min(dto1.Start + dto1.Length, dto2.Start + dto2.Length);
+            return minEnd - maxStart + 1;
+        }
     }
 }

+ 5 - 3
Service/X2D1NoRefTaskServer/Service/TaskService.cs

@@ -363,7 +363,9 @@ namespace X2D1NoRefTaskServer.Service
                                 doNextHour = true;
                                 break;
                             }
+                            if (cts.IsCancellationRequested) break;
                         }
+                        if (cts.IsCancellationRequested) return;
                         if (doNextHour)
                         {
                             continue;
@@ -442,7 +444,7 @@ namespace X2D1NoRefTaskServer.Service
                                     detectDto.dmcType = detectDto.dmcType & ~EnumSigCheckTypeDto.DAMA;//DAMA不支持上行信号检测,在这里移除掉
                                     if (detectDto.dmcType == EnumSigCheckTypeDto.DAMA)
                                     {
-                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持DAMA检测,请使用能量检测");
+                                        LogHelper.Warning($"【任务{dto.ID}】信号{taskSig.FreqUp / 1e6:f3},上行信号不支持DAMA检测");
                                         continue;
                                     }
                                     var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
@@ -662,7 +664,7 @@ namespace X2D1NoRefTaskServer.Service
                 var res = MySqlTools.ExecuteScalar(System.Data.CommandType.Text, sql);
                 if (res == null || res == DBNull.Value)
                 {
-                    LogHelper.Error($"下行频点{freqdownMHz}未能从MySql中找到对应的卫星编号.SQL={sql}");
+                    LogHelper.Warning($"下行频点{freqdownMHz}未能从MySql中找到对应的卫星编号.SQL={sql}");
                 }
                 else
                 {
@@ -675,7 +677,7 @@ namespace X2D1NoRefTaskServer.Service
             }
             catch (Exception ex)
             {
-                LogHelper.Error($"下行频点{freqdownMHz}MySql查询卫星编号异常.ConnectionString={System.Configuration.ConfigurationManager.ConnectionStrings["MySql"].ConnectionString}", ex);
+                LogHelper.Warning($"下行频点{freqdownMHz}MySql查询卫星编号异常.ConnectionString={System.Configuration.ConfigurationManager.ConnectionStrings["MySql"].ConnectionString}", ex);
             }
             return satId;
         }

+ 8 - 0
XdCxRhDW.App/CorTools/DetectToolForm.cs

@@ -224,7 +224,15 @@ namespace XdCxRhDW.App.CorTools
             {
                 dmcType = dmcType & ~EnumSigCheckTypeDto.DAMA;
             }
+            int v1 = (int)dmcType;
+            int v2 = (int)dmcType - 1;
+            bool mergeRes = false;
+            if ((v1 & v2) != 0) //多选
+            {
+                mergeRes = MsgBoxHelper.ShowConfirm("是否合并多个检测结果");
+            }
             DetectDto dto = new DetectDto();
+            dto.mergeRes = mergeRes;
             dto.dmcType = dmcType;
             layoutControl1.Enabled = false;
             gridSource.Clear();

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

@@ -461,7 +461,7 @@ namespace XdCxRhDW.App.UserControl
                 }
             }
         }
-      
+
         private async void btn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             var tsk = gridView1.GetFocusedRow() as TaskInfo;
@@ -469,7 +469,7 @@ namespace XdCxRhDW.App.UserControl
             {
                 try
                 {
-                   if (tsk.TaskType != EnumTaskType.Group)
+                    if (tsk.TaskType != EnumTaskType.Group)
                     {
                         TxInfo tx;
                         List<TaskSigDto> tskSigsDto = new List<TaskSigDto>();
@@ -520,6 +520,7 @@ namespace XdCxRhDW.App.UserControl
                             X2D1NoRefTaskHandleDto dto = new X2D1NoRefTaskHandleDto()
                             {
                                 MainSatCode = tsk.MainSat,
+                                TaskType = (EnumTaskTypeDto)((int)tsk.TaskType),
                                 AdjaSatCode = tsk.Adja1Sat.Value,
                                 ID = tsk.ID,
                                 StartTime = startTime,

+ 5 - 0
XdCxRhDw.Dto/DetectDto.cs

@@ -25,6 +25,11 @@ namespace XdCxRhDW.Dto
         /// </summary>
         public EnumSigCheckTypeDto dmcType { get; set; }
 
+        /// <summary>
+        /// 多个检测类型时是否合并检测结果(重叠的信号只算一个,重叠区域超过500样点则认为是同一个)
+        /// </summary>
+        public bool mergeRes { get; set; } = false;
+
         /// <summary>
         /// 采样率 Hz
         /// </summary>