zoulei 1 anno fa
parent
commit
baac81ab61
45 ha cambiato i file con 599 aggiunte e 934 eliminazioni
  1. 37 20
      XdCxRhDW.App/Controllers/DetectCgController.cs
  2. 63 66
      XdCxRhDW.App/EditForms/TaskHistoryTimeEditor.Designer.cs
  3. 25 6
      XdCxRhDW.App/EditForms/TaskHistoryTimeEditor.cs
  4. 37 28
      XdCxRhDW.App/UserControl/CtrlHome.cs
  5. 7 6
      XdCxRhDW.Framework/HttpHelper.cs
  6. 7 28
      XdCxRhDW.X2D1TaskServer/Controllers/HistoryTaskProcessingController.cs
  7. 16 4
      XdCxRhDW.X2D1TaskServer/HistoryFile.cs
  8. 293 3
      XdCxRhDW.X2D1TaskServer/Service/HistoryTaskService.cs
  9. 0 23
      XdCxRhDW.X2D1TaskServer/Tasks/ExtractRes.cs
  10. 0 307
      XdCxRhDW.X2D1TaskServer/Tasks/HistoryTaskI.cs
  11. 0 41
      XdCxRhDW.X2D1TaskServer/Tasks/TxInfo.cs
  12. 0 10
      XdCxRhDW.X2D1TaskServer/Tasks/X1D1CXTask.cs
  13. 0 289
      XdCxRhDW.X2D1TaskServer/Tasks/X2D1Task.cs
  14. 0 12
      XdCxRhDW.X2D1TaskServer/Tasks/X2DfoTask.cs
  15. 0 12
      XdCxRhDW.X2D1TaskServer/Tasks/X3TwoDfoTask.cs
  16. 0 12
      XdCxRhDW.X2D1TaskServer/Tasks/X3TwoDtoTask.cs
  17. 1 9
      XdCxRhDW.X2D1TaskServer/XdCxRhDW.X2D1TaskServer.csproj
  18. 3 3
      XdCxRhDW.X2D1TaskServer54/Controllers/HistoryTaskProcessingController.cs
  19. 13 11
      XdCxRhDW.X2D1TaskServer54/Service/HistoryTaskService.cs
  20. 2 2
      XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj
  21. 23 0
      XdCxRhDw.Dto/CpuCgMultiDto.cs
  22. 1 0
      XdCxRhDw.Dto/CpuCgResDto.cs
  23. 12 2
      XdCxRhDw.Dto/DetectDto.cs
  24. 2 0
      XdCxRhDw.Dto/PosDto/RHNoParPosDto.cs
  25. 2 0
      XdCxRhDw.Dto/PosDto/RHNoXlNoParPosDto.cs
  26. 2 2
      XdCxRhDw.Dto/PosDto/RHNoXlPosDto.cs
  27. 2 2
      XdCxRhDw.Dto/PosDto/RHPosDto.cs
  28. 1 0
      XdCxRhDw.Dto/PosDto/X1D1NoParPosDto.cs
  29. 1 0
      XdCxRhDw.Dto/PosDto/X1D1NoXlNoParPosDto.cs
  30. 1 1
      XdCxRhDw.Dto/PosDto/X1D1NoXlPosDto.cs
  31. 1 1
      XdCxRhDw.Dto/PosDto/X1D1PosDto.cs
  32. 2 2
      XdCxRhDw.Dto/PosDto/X2D1NoParPosDto.cs
  33. 2 2
      XdCxRhDw.Dto/PosDto/X2D1NoXlNoParlPosDto.cs
  34. 2 2
      XdCxRhDw.Dto/PosDto/X2D1NoXlPosDto.cs
  35. 2 2
      XdCxRhDw.Dto/PosDto/X2D1PosDto.cs
  36. 2 2
      XdCxRhDw.Dto/PosDto/X2DtoDfoNoXlPosDto.cs
  37. 2 2
      XdCxRhDw.Dto/PosDto/X2DtoDfoPosDto.cs
  38. 3 3
      XdCxRhDw.Dto/PosDto/X3TwoDfoNoXlPosDto.cs
  39. 3 3
      XdCxRhDw.Dto/PosDto/X3TwoDfoPosDto.cs
  40. 3 3
      XdCxRhDw.Dto/PosDto/X3TwoDtoNoParPosDto.cs
  41. 3 3
      XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlNoParPosDto.cs
  42. 3 3
      XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlPosDto.cs
  43. 3 3
      XdCxRhDw.Dto/PosDto/X3TwoDtoPosDto.cs
  44. 4 1
      XdCxRhDw.Dto/TaskHandleDto/TaskStopHandleDto.cs
  45. 13 3
      XdCxRhDw.Dto/TaskHandleDto/X2D1HistoryTaskHandleDto.cs

+ 37 - 20
XdCxRhDW.App/Controllers/DetectCgController.cs

@@ -89,10 +89,10 @@ namespace XdCxRhDW.App.Controllers
 
 
         /// <summary>
-        /// CPU参估多样点位置计算(需要先上传文件)
+        /// CPU参估多个时隙的参估计算(需要先上传文件)
         /// </summary>
-        /// <param name="dto">CPU参估多样点位置参数</param>
-        /// <returns></returns>
+        /// <param name="dto">CPU多时隙参估参数模型</param>
+        /// <returns>返回结果个数始终和传入的时隙个数相同</returns>
         [HttpPost]
         public async Task<AjaxResult<List<CpuCgResDto>>> CpuCgMultiCalc(CpuCgMultiDto dto)
         {
@@ -110,41 +110,58 @@ namespace XdCxRhDW.App.Controllers
             List<CpuCgResDto> resDtos = new List<CpuCgResDto>();
             foreach (var smpItem in dto.smpPositions)
             {
+                XcorrUtils xcorr = new XcorrUtils();
+                xItem.smpStart = smpItem.smpStart;
+                xItem.smpCount = smpItem.smpCount;
+                CpuCgResDto resDto = new CpuCgResDto();
+                resDto.Smpstart = xItem.smpStart;
+                resDto.Smplen = (long)xItem.smpCount;
                 try
                 {
-                    XcorrUtils xcorr = new XcorrUtils();
-                    xItem.smpStart = smpItem.smpStart;
-                    xItem.smpCount = smpItem.smpCount;
                     var result = await xcorr.Calc(xItem);
                     //开始计算
                     if (result.flag == -2)
                     {
+                        resDto.Dt = 0;
+                        resDto.Df = 0;
+                        resDto.Snr = 0;
+                        resDtos.Add(resDto);
                         Serilog.Log.Error("参估计算内部错误!");
-                        continue;
                     }
                     else if (result.flag == -1)
                     {
+                        resDto.Dt = 0;
+                        resDto.Df = 0;
+                        resDto.Snr = 0;
+                        resDtos.Add(resDto);
                         Serilog.Log.Error("参估计算所需数据超出文件范围!");
-                        continue;
                     }
-                    CpuCgResDto resDto = new CpuCgResDto();
-                    resDto.TimeMs = result.tm;
-                    resDto.Smpstart = result.smpstart;
-                    resDto.Smplen = result.smplen;
-                    if (result.flag == 1)
+                    else
                     {
-                        resDto.Dt = result.dt.Value;
-                        resDto.Df = result.df.Value;
-                        resDto.Snr = result.snr.Value;
-                        resDtos.Add(resDto);
+                        resDto.TimeMs = result.tm;
+                        if (result.flag == 1)
+                        {
+                            resDto.Dt = result.dt.Value;
+                            resDto.Df = result.df.Value;
+                            resDto.Snr = result.snr.Value;
+                            resDtos.Add(resDto);
+                        }
+                        else
+                        {
+                            resDto.Dt = 0;
+                            resDto.Df = 0;
+                            resDto.Snr = 0;
+                            resDtos.Add(resDto);
+                        }
                     }
-
-
                 }
                 catch (Exception ex)
                 {
+                    resDto.Dt = 0;
+                    resDto.Df = 0;
+                    resDto.Snr = 0;
+                    resDtos.Add(resDto);
                     Serilog.Log.Error(ex, "执行CPU参估异常");
-                    continue;
                 }
             }
             return Success(resDtos);

+ 63 - 66
XdCxRhDW.App/EditForms/TaskHistoryTimeEditor.Designer.cs

@@ -31,25 +31,23 @@
             this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
             this.btnOk = new DevExpress.XtraEditors.SimpleButton();
             this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
+            this.txtStartTime = new DevExpress.XtraEditors.DateEdit();
+            this.txtEndTime = new DevExpress.XtraEditors.DateEdit();
             this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
-            this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
             this.layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
             this.layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.txtStartTime = new DevExpress.XtraEditors.DateEdit();
             this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
-            this.txtEndTime = new DevExpress.XtraEditors.DateEdit();
             this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
             this.layoutControl1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtStartTime.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtStartTime.Properties.CalendarTimeProperties)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtEndTime.Properties)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtEndTime.Properties.CalendarTimeProperties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
             this.SuspendLayout();
             // 
@@ -64,15 +62,15 @@
             this.layoutControl1.Name = "layoutControl1";
             this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(831, 101, 650, 400);
             this.layoutControl1.Root = this.Root;
-            this.layoutControl1.Size = new System.Drawing.Size(258, 160);
+            this.layoutControl1.Size = new System.Drawing.Size(271, 171);
             this.layoutControl1.TabIndex = 0;
             this.layoutControl1.Text = "layoutControl1";
             // 
             // btnOk
             // 
-            this.btnOk.Location = new System.Drawing.Point(131, 104);
+            this.btnOk.Location = new System.Drawing.Point(145, 118);
             this.btnOk.Name = "btnOk";
-            this.btnOk.Size = new System.Drawing.Size(105, 22);
+            this.btnOk.Size = new System.Drawing.Size(114, 22);
             this.btnOk.StyleController = this.layoutControl1;
             this.btnOk.TabIndex = 8;
             this.btnOk.Text = "确定";
@@ -80,98 +78,99 @@
             // 
             // btnCancel
             // 
-            this.btnCancel.Location = new System.Drawing.Point(22, 104);
+            this.btnCancel.Location = new System.Drawing.Point(12, 118);
             this.btnCancel.Name = "btnCancel";
-            this.btnCancel.Size = new System.Drawing.Size(105, 22);
+            this.btnCancel.Size = new System.Drawing.Size(113, 22);
             this.btnCancel.StyleController = this.layoutControl1;
             this.btnCancel.TabIndex = 7;
             this.btnCancel.Text = "取消";
             this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
             // 
+            // txtStartTime
+            // 
+            this.txtStartTime.EditValue = null;
+            this.txtStartTime.Location = new System.Drawing.Point(12, 29);
+            this.txtStartTime.Name = "txtStartTime";
+            this.txtStartTime.Properties.AutoHeight = false;
+            this.txtStartTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtStartTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtStartTime.Size = new System.Drawing.Size(247, 22);
+            this.txtStartTime.StyleController = this.layoutControl1;
+            this.txtStartTime.TabIndex = 9;
+            // 
+            // txtEndTime
+            // 
+            this.txtEndTime.EditValue = null;
+            this.txtEndTime.Location = new System.Drawing.Point(12, 82);
+            this.txtEndTime.Name = "txtEndTime";
+            this.txtEndTime.Properties.AutoHeight = false;
+            this.txtEndTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtEndTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.txtEndTime.Size = new System.Drawing.Size(247, 22);
+            this.txtEndTime.StyleController = this.layoutControl1;
+            this.txtEndTime.TabIndex = 10;
+            // 
             // Root
             // 
             this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
             this.Root.GroupBordersVisible = false;
             this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
-            this.emptySpaceItem1,
             this.layoutControlItem4,
             this.layoutControlItem5,
             this.layoutControlItem2,
             this.layoutControlItem1});
             this.Root.Name = "Root";
-            this.Root.Padding = new DevExpress.XtraLayout.Utils.Padding(20, 20, 20, 20);
-            this.Root.Size = new System.Drawing.Size(258, 160);
+            this.Root.Size = new System.Drawing.Size(271, 171);
             this.Root.TextVisible = false;
             // 
-            // emptySpaceItem1
-            // 
-            this.emptySpaceItem1.AllowHotTrack = false;
-            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 108);
-            this.emptySpaceItem1.Name = "emptySpaceItem1";
-            this.emptySpaceItem1.Size = new System.Drawing.Size(218, 12);
-            this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
-            // 
             // layoutControlItem4
             // 
             this.layoutControlItem4.Control = this.btnCancel;
-            this.layoutControlItem4.Location = new System.Drawing.Point(0, 82);
+            this.layoutControlItem4.Location = new System.Drawing.Point(0, 96);
             this.layoutControlItem4.Name = "layoutControlItem4";
-            this.layoutControlItem4.Size = new System.Drawing.Size(109, 26);
+            this.layoutControlItem4.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 10, 12, 2);
+            this.layoutControlItem4.Size = new System.Drawing.Size(125, 55);
             this.layoutControlItem4.TextSize = new System.Drawing.Size(0, 0);
             this.layoutControlItem4.TextVisible = false;
             // 
             // layoutControlItem5
             // 
             this.layoutControlItem5.Control = this.btnOk;
-            this.layoutControlItem5.Location = new System.Drawing.Point(109, 82);
+            this.layoutControlItem5.Location = new System.Drawing.Point(125, 96);
             this.layoutControlItem5.Name = "layoutControlItem5";
-            this.layoutControlItem5.Size = new System.Drawing.Size(109, 26);
+            this.layoutControlItem5.Padding = new DevExpress.XtraLayout.Utils.Padding(10, 2, 12, 2);
+            this.layoutControlItem5.Size = new System.Drawing.Size(126, 55);
             this.layoutControlItem5.TextSize = new System.Drawing.Size(0, 0);
             this.layoutControlItem5.TextVisible = false;
             // 
-            // txtStartTime
-            // 
-            this.txtStartTime.EditValue = null;
-            this.txtStartTime.Location = new System.Drawing.Point(22, 39);
-            this.txtStartTime.Name = "txtStartTime";
-            this.txtStartTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.txtStartTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.txtStartTime.Size = new System.Drawing.Size(214, 20);
-            this.txtStartTime.StyleController = this.layoutControl1;
-            this.txtStartTime.TabIndex = 9;
-            // 
             // layoutControlItem2
             // 
             this.layoutControlItem2.Control = this.txtStartTime;
             this.layoutControlItem2.Location = new System.Drawing.Point(0, 0);
+            this.layoutControlItem2.MaxSize = new System.Drawing.Size(0, 43);
+            this.layoutControlItem2.MinSize = new System.Drawing.Size(54, 43);
             this.layoutControlItem2.Name = "layoutControlItem2";
-            this.layoutControlItem2.Size = new System.Drawing.Size(218, 41);
+            this.layoutControlItem2.Size = new System.Drawing.Size(251, 43);
+            this.layoutControlItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             this.layoutControlItem2.Text = "开始时间";
             this.layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top;
             this.layoutControlItem2.TextSize = new System.Drawing.Size(48, 14);
             // 
-            // txtEndTime
-            // 
-            this.txtEndTime.EditValue = null;
-            this.txtEndTime.Location = new System.Drawing.Point(22, 80);
-            this.txtEndTime.Name = "txtEndTime";
-            this.txtEndTime.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.txtEndTime.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
-            this.txtEndTime.Size = new System.Drawing.Size(214, 20);
-            this.txtEndTime.StyleController = this.layoutControl1;
-            this.txtEndTime.TabIndex = 10;
-            // 
             // layoutControlItem1
             // 
             this.layoutControlItem1.Control = this.txtEndTime;
-            this.layoutControlItem1.Location = new System.Drawing.Point(0, 41);
+            this.layoutControlItem1.Location = new System.Drawing.Point(0, 43);
+            this.layoutControlItem1.MaxSize = new System.Drawing.Size(0, 53);
+            this.layoutControlItem1.MinSize = new System.Drawing.Size(54, 53);
             this.layoutControlItem1.Name = "layoutControlItem1";
-            this.layoutControlItem1.Size = new System.Drawing.Size(218, 41);
-            this.layoutControlItem1.Text = "结束";
+            this.layoutControlItem1.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 12, 2);
+            this.layoutControlItem1.Size = new System.Drawing.Size(251, 53);
+            this.layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            this.layoutControlItem1.Text = "结束时间";
             this.layoutControlItem1.TextLocation = DevExpress.Utils.Locations.Top;
             this.layoutControlItem1.TextSize = new System.Drawing.Size(48, 14);
             // 
@@ -179,23 +178,22 @@
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(258, 160);
+            this.ClientSize = new System.Drawing.Size(271, 171);
             this.Controls.Add(this.layoutControl1);
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
             this.Name = "TaskHistoryTimeEditor";
-            this.Text = "历史任务时间段选择";
+            this.Text = "任务执行参数";
             this.Load += new System.EventHandler(this.SatEditor_Load);
             ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
             this.layoutControl1.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtStartTime.Properties.CalendarTimeProperties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtStartTime.Properties)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtEndTime.Properties.CalendarTimeProperties)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.txtEndTime.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem5)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
             this.ResumeLayout(false);
 
@@ -205,7 +203,6 @@
 
         private DevExpress.XtraLayout.LayoutControl layoutControl1;
         private DevExpress.XtraLayout.LayoutControlGroup Root;
-        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
         private DevExpress.XtraEditors.SimpleButton btnOk;
         private DevExpress.XtraEditors.SimpleButton btnCancel;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;

+ 25 - 6
XdCxRhDW.App/EditForms/TaskHistoryTimeEditor.cs

@@ -18,19 +18,35 @@ namespace XdCxRhDW.App.EditForms
 {
     public partial class TaskHistoryTimeEditor : DevExpress.XtraEditors.XtraForm
     {
-       public DateTime start = DateTime.MinValue;
-        public DateTime end = DateTime.MinValue;
+        Dictionary<int, (DateTime, DateTime)> cache = new Dictionary<int, (DateTime, DateTime)>();
+        public DateTime start;
+        public DateTime end;
+        TaskInfo tsk;
         public TaskHistoryTimeEditor()
         {
             InitializeComponent();
             this.layoutControl1.UseDefault();
-            this.txtStartTime.UseDefault();
-            this.txtEndTime.UseDefault();
+            this.txtStartTime.UseDefault().UseDoubleClickToSelectAll();
+            this.txtEndTime.UseDefault().UseDoubleClickToSelectAll();
             this.StartPosition = FormStartPosition.CenterParent;
         }
-        private  void SatEditor_Load(object sender, EventArgs e)
+        public TaskHistoryTimeEditor(TaskInfo tsk)
+            : this()
         {
-           txtStartTime.DateTime= DateTime.Now;
+            this.tsk = tsk;
+        }
+        private void SatEditor_Load(object sender, EventArgs e)
+        {
+            if (cache.ContainsKey(tsk.ID))
+            {
+                txtStartTime.DateTime = cache[tsk.ID].Item1;
+                txtEndTime.DateTime = cache[tsk.ID].Item2;
+            }
+            else
+            {
+                txtStartTime.DateTime = DateTime.Now;
+                txtEndTime.DateTime = DateTime.Today.AddDays(7);
+            }
         }
 
         private void btnCancel_Click(object sender, EventArgs e)
@@ -41,6 +57,9 @@ namespace XdCxRhDW.App.EditForms
         {
             start = txtStartTime.DateTime;
             end = txtEndTime.DateTime;
+            if (cache.Count >= 50)
+                cache.Remove(cache.First().Key);
+            cache.Add(tsk.ID, (start, end));
             this.DialogResult = DialogResult.OK;
         }
     }

+ 37 - 28
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -479,36 +479,45 @@ namespace XdCxRhDW.App.UserControl
                 {
                     if (tsk.TaskType == EnumTaskType.History)
                     {
-                        //下发任务
-                        var svtItem = ServerContext.Instance.GetOne(EnumSvrType.X2D1HistoryTask);
-                        if (svtItem == null)
+                        if (tsk.PosType == EnumPosType.X2D1)
                         {
-                            DxHelper.MsgBoxHelper.ShowWarning($"未找到注册的处理服务");
-                            return;
+                            //下发任务
+                            var svtItem = ServerContext.Instance.GetOne(EnumSvrType.X2D1HistoryTask);
+                            if (svtItem == null)
+                            {
+                                DxHelper.MsgBoxHelper.ShowWarning($"未找到注册的处理服务");
+                                return;
+                            }
+                            TaskHistoryTimeEditor frm = new TaskHistoryTimeEditor(tsk);
+                            if (frm.ShowDialog() != DialogResult.OK) return;
+                            var startTime = frm.start;
+                            var endTime = frm.end;
+                            X2D1HistoryTaskHandleDto dto = new X2D1HistoryTaskHandleDto();
+                            dto.MainSatCode = tsk.MainSat;
+                            dto.AdjaSatCode = tsk.Adja1Sat.Value;
+                            dto.ID = tsk.ID;
+                            dto.StartTime = startTime;
+                            dto.EndTime = endTime;
+                            dto.TaskName = tsk.TaskName;
+                            dto.PosType = (EnumPosTypeDto)(int)tsk.PosType;
+                            dto.SigType = (EnumSigTypeDto)(int)tsk.SigType;
+                            dto.TaskCheckType = tsk.DetectionWay.HasValue ? (EnumTaskCheckTypeDto)(int)tsk.DetectionWay.Value : EnumTaskCheckTypeDto.DAMA;
+                            dto.CapDir = tsk.CapDir;
+                            dto.DateDirFormat = tsk.CapDirFormat;
+                            var strs = tsk.HistoryFrequpMHz.Split(',');
+                            var freqs = strs.Select(f => ((long)(Convert.ToDouble(f) * 1e6)));
+                            dto.FreqsHz = freqs.ToList();
+                            var res = await HttpHelper.PostRequestAsync<AjaxResult>(svtItem.BaseHttpAddr + "/api/HistoryTaskProcessing/Run", dto);
+                            if (res.code != 200)
+                            {
+                                Serilog.Log.Error(res.msg);
+                                DxHelper.MsgBoxHelper.ShowError($"{res.msg}");
+                                return;
+                            }
                         }
-                        TaskHistoryTimeEditor frm = new TaskHistoryTimeEditor();
-                        if (frm.ShowDialog() != DialogResult.OK) return;
-                        var startTime = frm.start;
-                        var endTime = frm.end;
-                        HistoryTaskProcessingDto dto = new HistoryTaskProcessingDto();
-                        dto.ID = tsk.ID;
-                        dto.StartTime = startTime;
-                        dto.EndTime = endTime;
-                        dto.TaskName = tsk.TaskName;
-                        dto.PosType = (EnumPosTypeDto)(int)tsk.PosType;
-                        dto.SigType = (EnumSigTypeDto)(int)tsk.SigType;
-                        dto.TaskCheckType = tsk.DetectionWay.HasValue ? (EnumTaskCheckTypeDto)(int)tsk.DetectionWay.Value : EnumTaskCheckTypeDto.DAMA;
-                        dto.CapDir = tsk.CapDir;
-                        dto.DateDirFormat = tsk.CapDirFormat;
-                        var strs = tsk.HistoryFrequpMHz.Split(',');
-                        var freqs = strs.Select(f => ((long)(Convert.ToDouble(f) * 1e6)));
-                        dto.FreqsHz = freqs.ToList();
-                        var res = await HttpHelper.PostRequestAsync<AjaxResult>(svtItem.BaseHttpAddr + "/api/HistoryTaskProcessing/Run", dto);
-                        if (res.code != 200)
+                        else
                         {
-                            Serilog.Log.Error(res.msg);
-                            DxHelper.MsgBoxHelper.ShowError($"{res.msg}");
-                            return;
+                            DxHelper.MsgBoxHelper.ShowError($"暂不支持{tsk.PosType.GetEnumDisplayName()}类型的历史任务");
                         }
                     }
                     using (RHDWContext db = new RHDWContext())
@@ -545,7 +554,7 @@ namespace XdCxRhDW.App.UserControl
                             DxHelper.MsgBoxHelper.ShowWarning($"未找到注册的处理服务");
                             return;
                         }
-                        HistoryTaskStopDto dto = new HistoryTaskStopDto();
+                        TaskStopHandleDto dto = new TaskStopHandleDto();
                         dto.ID = tsk.ID;
                         var res = await HttpHelper.PostRequestAsync<AjaxResult>(svtItem.BaseHttpAddr + "/api/HistoryTaskProcessing/Stop", dto);
                         if (res.code != 200)

+ 7 - 6
XdCxRhDW.Framework/HttpHelper.cs

@@ -21,8 +21,9 @@ public class HttpHelper
     /// <param name="url"></param>
     /// <param name="dto"></param>
     /// <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)
+    public static async Task<AjaxResult<T>> PostRequestAsync<T>(string url, object dto, int timeoutSeconds = 30, CancellationToken token = default)
     {
         var content = new StringContent(JsonConvert.SerializeObject(dto), System.Text.Encoding.UTF8, "application/json");
         var handler = new HttpClientHandler() { UseCookies = false };
@@ -31,7 +32,7 @@ public class HttpHelper
         var message = new HttpRequestMessage(HttpMethod.Post, url);
         message.Content = content;
 
-        var response = await client.SendAsync(message);
+        var response = await client.SendAsync(message, token);
         response.EnsureSuccessStatusCode();
         var result = await response.Content.ReadAsStringAsync();
         var AjaxResult = JsonConvert.DeserializeObject<AjaxResult<T>>(result);
@@ -62,8 +63,8 @@ public class HttpHelper
         var AjaxResult = JsonConvert.DeserializeObject<AjaxResult<T>>(result);
         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 = 30)
     {
         var handler = new HttpClientHandler() { UseCookies = false };
         HttpClient client = new HttpClient(handler);
@@ -114,7 +115,7 @@ public class HttpHelper
     /// <param name="timeoutSeconds"></param>
     /// <returns></returns>
     /// <exception cref="Exception"></exception>
-    public static async Task<string> UploadFileAsync(string localFile, string uploadUrl, int timeoutSeconds = 30)
+    public static async Task<string> UploadFileAsync(string localFile, string uploadUrl, int timeoutSeconds = 30,CancellationToken token=default)
     {
         try
         {
@@ -136,7 +137,7 @@ public class HttpHelper
             var message = new HttpRequestMessage(HttpMethod.Post, uploadUrl);
             message.Content = content;
 
-            var response = await client.SendAsync(message);
+            var response = await client.SendAsync(message,token);
             response.EnsureSuccessStatusCode();
             var result = await response.Content.ReadAsStringAsync();
             var AjaxResult = JsonConvert.DeserializeObject<AjaxResult<string>>(result);

+ 7 - 28
XdCxRhDW.X2D1TaskServer/Controllers/HistoryTaskProcessingController.cs

@@ -8,7 +8,6 @@ using System.Web.Http;
 using XdCxRhDW.Dto;
 using XdCxRhDW.WebApi;
 using XdCxRhDW.X2D1TaskServer.Service;
-using XdCxRhDW.X2D1TaskServer.Tasks;
 
 namespace XdCxRhDW.X2D1TaskServer.Controllers
 {
@@ -30,34 +29,21 @@ namespace XdCxRhDW.X2D1TaskServer.Controllers
 
 
         /// <summary>
-        /// 执行离线任务
+        /// 开始执行两星一地离线任务
         /// </summary>
         /// <param name="dto">离线任务信息</param>
         /// <returns></returns>
         [HttpPost]
-        public AjaxResult Run(HistoryTaskProcessingDto dto)
+        public AjaxResult Run(X2D1HistoryTaskHandleDto dto)
         {
             try
             {
-
-                _service.allTask.RemoveAll(a => a.IsRuning == false);
-                LogHelper.Info($"接收到开始执行任务[{dto.TaskName}],ID={dto.ID}");
                 if (!Directory.Exists(dto.CapDir))
                 {
                     LogHelper.Error($"文件路径[{dto.CapDir}]不存在");
                     return Error($"文件路径[{dto.CapDir}]不存在");
                 }
-
-                if (dto.PosType == EnumPosTypeDto.X2D1)
-                {
-                    X2D1Task x2D1 = new X2D1Task();
-                    x2D1.Start(dto);
-                    _service.allTask.Add(x2D1);
-                }
-                else
-                {
-                    return Error($"【任务{dto.ID}】执行异常,暂不支持{dto.PosType.GetEnumDisplayName()}");
-                }
+                _service.StartAsync(dto);
                 return Success();
             }
             catch (Exception ex)
@@ -69,24 +55,17 @@ namespace XdCxRhDW.X2D1TaskServer.Controllers
 
 
         /// <summary>
-        /// 历史任务停止
+        /// 停止执行两星一地离线任务
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPost]
-        public AjaxResult Stop(HistoryTaskStopDto dto)
+        public AjaxResult Stop(TaskStopHandleDto dto)
         {
             try
             {
-
-                LogHelper.Info($"接收到停止执行任务,ID={dto.ID}");
-                var historys = _service.allTask.Where(t => t.TaskDto.ID == dto.ID);
-                foreach (var item in historys)
-                {
-                    item.Stop();
-
-                }
-                _service.allTask.Remove(t => t.TaskDto.ID == dto.ID);
+                LogHelper.Warning($"用户停止了任务,ID={dto.ID}");
+                _service.Stop();
                 return Success();
             }
             catch (Exception ex)

+ 16 - 4
XdCxRhDW.X2D1TaskServer/Tasks/HistoryFile.cs → XdCxRhDW.X2D1TaskServer/HistoryFile.cs

@@ -4,21 +4,22 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace XdCxRhDW.X2D1TaskServer.Tasks
+namespace XdCxRhDW.X2D1TaskServer
 {
     public class HistoryFile
     {
         /// <summary>
-        /// 文件路径
+        /// 文件名称(不含路径)
         /// </summary>
         public string FilePath { get; set; }
+
         /// <summary>
         /// 采集时间
         /// </summary>
         public DateTime CapTime { get; set; }
 
         /// <summary>
-        /// 通道1是上行频点,其余是下行频点
+        /// 通道1(超短信号)是上行频点Hz,其余是下行频点Hz
         /// </summary>
         public double FreqHz { get; set; }
 
@@ -28,12 +29,23 @@ namespace XdCxRhDW.X2D1TaskServer.Tasks
         public double FsHz { get; set; }
 
         /// <summary>
-        /// 通道
+        /// 通道
         /// </summary>
         public int Ch { get; set; }
+
         /// <summary>
         /// 卫星编号
         /// </summary>
         public int SatId { get; set; }
+
+        /// <summary>
+        /// 采集站经度
+        /// </summary>
+        public double CapLon { get; set; }
+
+        /// <summary>
+        /// 采集站纬度
+        /// </summary>
+        public double CapLat { get; set; }
     }
 }

+ 293 - 3
XdCxRhDW.X2D1TaskServer/Service/HistoryTaskService.cs

@@ -1,15 +1,305 @@
-using System;
+using DevExpress.Utils.Extensions;
+using MySqlX.XDevAPI.Common;
+using System;
 using System.Collections.Generic;
+using System.Configuration;
+using System.Globalization;
+using System.IO;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
-using XdCxRhDW.X2D1TaskServer.Tasks;
+using XdCxRhDW.Dto;
 
 namespace XdCxRhDW.X2D1TaskServer.Service
 {
     public class HistoryTaskService
     {
+        private readonly string baseUrl;
+        CancellationTokenSource cts;
+        public HistoryTaskService()
+        {
+            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/";
+        }
+        public void StartAsync(X2D1HistoryTaskHandleDto dto)
+        {
+            cts = new CancellationTokenSource();
+            LogHelper.Info($"接收到开始执行任务[{dto.TaskName}],ID={dto.ID}");
+            //点击定位平台右上角查看接口可以在浏览器中查看平台提供的所有接口详细信息
+            Task.Run(async () =>
+            {
+                DateTime preTime = dto.StartTime;
+                int formatFlag;
+                if (string.IsNullOrWhiteSpace(dto.DateDirFormat))
+                {
+                    //没有日期目录,处理完目录中的数据后停止任务
+                    formatFlag = 0;
+                }
+                else if (dto.DateDirFormat.ToLower().EndsWith("dd"))
+                {
+                    //处理完一个目录后跳转到第二天的目录
+                    formatFlag = 1;
+                }
+                else if (dto.DateDirFormat.ToUpper().EndsWith("HH"))
+                {
+                    //处理完一个目录后跳转到下一个小时的目录
+                    formatFlag = 2;
+                }
+                else
+                {
+                    LogHelper.Error($"【任务{dto.ID}】执行异常,不支持的日期目录格式");
+                    return;
+                }
+                while (!cts.IsCancellationRequested && preTime <= dto.EndTime)
+                {
+                    string filesDir = null;
+                    try
+                    {
+                        filesDir = Path.Combine(dto.CapDir, $"{preTime.ToString(dto.DateDirFormat)}");//yyyyMMdd
+                        LogHelper.Info($"【任务{dto.ID}】正在处理[{filesDir}]目录中的数据...");
+                        IEnumerable<string> files;
+                        if (!Directory.Exists(filesDir))
+                        {
+                            LogHelper.Info($"【任务{dto.ID}】目录[{filesDir}]不存在,跳过此目录");
+                            ResetTime(formatFlag, ref preTime);
+                            continue;
+                        }
+                        files = Directory.EnumerateFiles(filesDir, "*.dat");
+                        if (!files.Any())
+                        {
+                            LogHelper.Info($"【任务{dto.ID}】目录[{filesDir}]中没有文件,跳过此目录");
+                            ResetTime(formatFlag, ref preTime);
+                            continue;
+                        }
 
-        public List<HistoryTaskI> allTask = new List<HistoryTaskI>();
+                        IOrderedEnumerable<IGrouping<DateTime, HistoryFile>> groups = null;
+                        groups = files.Select(f => FileToHistoryFile(dto, f)).GroupBy(m => m.CapTime).OrderBy(m => m.Key);
+                        foreach (var item in groups)
+                        {
+                            if (cts.IsCancellationRequested) break;
+                            var finfos = item.ToList();
+                            var capTime = finfos.First().CapTime;
+                            if (capTime < dto.StartTime) continue;
+                            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 minfo = finfos.FirstOrDefault(m => m.Ch == 2);
+                            if (minfo == null)
+                            {
+                                LogHelper.Warning($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到主星信号ch2文件,跳过此组数据");
+                                continue;
+                            }
+                            //邻1
+                            var ninfo = finfos.FirstOrDefault(m => m.Ch == 3);
+                            if (ninfo == null)
+                            {
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻未找到邻星信号ch3文件,跳过此组数据");
+                                continue;
+                            }
+                            try
+                            {
+                                string mainFile = await HttpHelper.UploadFileAsync(minfo.FilePath, baseUrl + "File/UploadFileAsync", token: cts.Token);//主星文件
+                                string adjaFile = await HttpHelper.UploadFileAsync(ninfo.FilePath, baseUrl + "File/UploadFileAsync", token: cts.Token);//邻星文件
+                                string cdbFile = await HttpHelper.UploadFileAsync(dinfo.FilePath, baseUrl + "File/UploadFileAsync", token: cts.Token);//超短文件
+
+                                DetectDto detectDto = new DetectDto()
+                                {
+                                    file1 = cdbFile,//11局使用上行泄露信号进行检测
+                                    dmcType = DmcType.Ky5758,//上行信号目前算法只能使用基于能量的Ky或IBS检测
+                                    fsHz = minfo.FsHz,
+                                };
+                                var deteResp = await HttpHelper.PostRequestAsync<List<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", detectDto, token: cts.Token);
+                                if (deteResp.code != 200)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻信号检测出错.{deteResp.msg}");
+                                    continue;
+                                }
+                                LogHelper.Info($"【任务{dto.ID}】{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 = 60000,
+                                    file1 = mainFile,
+                                    file2 = cdbFile,
+                                    samplingRate = minfo.FsHz,
+                                    smpPositions = smps,
+                                    snrThreshold = 15,
+                                };
+                                var result1 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                if (result1.code != 200)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星超短CPU参估出错.{deteResp.msg}");
+                                    continue;
+                                }
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻主星超短CPU参估完成.");
+                                cgDto = new CpuCgMultiDto()
+                                {
+                                    dtCenter = 260000,
+                                    dtRange = 60000,
+                                    file1 = adjaFile,
+                                    file2 = cdbFile,
+                                    samplingRate = minfo.FsHz,
+                                    smpPositions = smps,
+                                    snrThreshold = 15,
+                                };
+                                var result2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", cgDto, token: cts.Token);
+                                if (result2.code != 200)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估出错.{deteResp.msg}");
+                                    continue;
+                                }
+                                LogHelper.Info($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻邻星超短CPU参估完成");
+                                var data1 = result1.data;
+                                var data2 = result2.data;
+                                if (data1.Count != data2.Count || data1.Count != deteResp.data.Count)
+                                {
+                                    LogHelper.Error($"【任务{dto.ID}】{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,
+                                            SxDto = data1[i].Dt,
+                                            SxDfo = data1[i].Df,
+                                            SxSnr = data1[i].Snr,
+                                            XdDto = data2[i].Dt,
+                                            XdDfo = data2[i].Df,
+                                            XdSnr = data2[i].Snr,
+                                            SatTxLon = minfo.CapLon,
+                                            SatTxLat = minfo.CapLat,
+                                            CdbTxLon = minfo.CapLon,
+                                            CdbTxLat = minfo.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>(),
+                                            }
+                                        };
+                                        var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlNoParAsync", x2D1);
+                                        if (result.code != 200)
+                                        {
+                                            LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常.{result.msg}");
+                                        }
+                                    }
+                                    catch (Exception ex)
+                                    {
+                                        LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻时隙位置{data1[i].Smpstart}定位异常", ex);
+                                    }
+                                }
+                            }
+                            catch (Exception ex)
+                            {
+                                LogHelper.Error($"【任务{dto.ID}】{capTime:yyyyMMddHHmmss}时刻文件处理异常", ex);
+                                continue;
+                            }
+
+                        }
+                        ResetTime(formatFlag, ref preTime);
+                        LogHelper.Info($"【任务{dto.ID}】目录[{filesDir}]中的数据处理完成");
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.Error($"【任务{dto.ID}】目录[{filesDir}]中的数据处理出错,跳过此目录", ex);
+                        ResetTime(formatFlag, ref preTime);
+                    }
+                }
+                LogHelper.Info($"【任务{dto.ID}】数据处理完成,任务结束");
+            });
+        }
+        private void ResetTime(int formatFlag, ref DateTime time)
+        {
+            if (formatFlag == 0)
+            {
+                time = DateTime.MaxValue;
+            }
+            else if (formatFlag == 1)
+            {
+                time = time.AddHours(24);
+            }
+            else
+            {
+                time = time.AddHours(1);
+            }
+        }
+        private HistoryFile FileToHistoryFile(X2D1HistoryTaskHandleDto dto, string filePath)
+        {  //读取采集文件
+           //2024_01_31_10_01_51_000000000_ch11_-1__Nxx.xxxxxx_Exx.xxxxxx_xxxxx.xxxHz_xxx.xxxMHz_ch1_xd1.dat
+            HistoryFile historyFile = new HistoryFile();
+            historyFile.FilePath = filePath;
+            var fileName = Path.GetFileNameWithoutExtension(filePath);
+            var strs = fileName.Split(new string[] { "_", "MHz", "Hz", "ch" }, StringSplitOptions.RemoveEmptyEntries);
+
+            //采集时间
+            var datestr = string.Join("_", strs.Take(6));
+            DateTime dateTime;
+            bool istime = DateTime.TryParseExact(datestr, "yyyy_MM_dd_HH_mm_ss", null, DateTimeStyles.None, out dateTime);
+            if (!istime) return historyFile;
+            historyFile.CapTime = dateTime;
+
+
+            //采集通道
+            var chstr = strs.Skip(strs.Length - 2).Take(1).First();
+            int ch;
+            int.TryParse(chstr, out ch);
+
+            //采集频点
+            var freqstr = strs.Skip(strs.Length - 3).Take(1).First();
+            double freqMHz;
+            double.TryParse(freqstr, out freqMHz);
+
+            //采样率
+            var fsstr = strs.Skip(strs.Length - 4).Take(1).First();
+            double fsHz;
+            double.TryParse(fsstr, out fsHz);
+
+            historyFile.FreqHz = freqMHz * 1e6;
+            historyFile.Ch = ch;
+            historyFile.FsHz = fsHz;
+            if (ch == 2)
+            {
+                historyFile.SatId = dto.MainSatCode;
+            }
+            else if (ch == 3)
+            {
+                historyFile.SatId = dto.AdjaSatCode;
+            }
+            return historyFile;
+        }
+
+
+        public void Stop()
+        {
+            cts.Cancel();
+        }
     }
 }

+ 0 - 23
XdCxRhDW.X2D1TaskServer/Tasks/ExtractRes.cs

@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using XdCxRhDW.Dto;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class ExtractRes
-    {
-        /// <summary>
-        /// 提取检测文件
-        /// </summary>
-        public string file { get; set; }
-        
-
-        /// <summary>
-        /// 提取时隙位置
-        /// </summary>
-        public List<SmpPosition>  positions { get; set; }
-    }
-}

+ 0 - 307
XdCxRhDW.X2D1TaskServer/Tasks/HistoryTaskI.cs

@@ -1,307 +0,0 @@
-using DevExpress.Utils.Extensions;
-using System;
-using System.Collections.Generic;
-using System.Configuration;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using XdCxRhDW;
-using XdCxRhDW.Dto;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class HistoryTaskI
-    {
-
-        protected internal virtual string baseUrl => $"{ConfigurationManager.AppSettings["PosPlatformAddr"].Trim()}/api/";
-
-        protected internal virtual bool IsRuning { get; set; } = false;
-
-        //变采样
-        protected internal virtual int OutFsHz { get; set; } = 96000;
-
-        protected internal virtual HistoryTaskProcessingDto TaskDto { get; set; }
-
-        public virtual void Start(HistoryTaskProcessingDto dto)
-        {
-        }
-        /// <summary>
-        /// 根据下行频点获取卫星Id
-        /// </summary>
-        /// <param name="freqdown"></param>
-        /// <returns></returns>
-        public int GetSatId(double freqdown)
-        {
-            int satId = 0;
-            try
-            {
-                // (洋区固定大写字母aì,不是数字1,查不到结果给出日志方便排查
-                string sql = $"select 卫星ID from freguencysatid where 下行 = '{freqdown}'and 洋区 = 'I' LIMIT 1";
-                var res = MySqlTools.ExecuteScalar(System.Data.CommandType.Text, sql);
-
-                bool isInt = int.TryParse($"{res}", out satId);
-                if (!isInt)
-                {
-                    LogHelper.Error($"下行频点{freqdown * 1e-6}未找到卫星编号");
-                }
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"下行频点{freqdown}找卫星编号异常:{ex.Message}");
-            }
-
-            return satId;
-        }
-        public virtual void Stop()
-        {
-            IsRuning = false;
-        }
-
-        //检测
-        public async Task<IEnumerable<DetectResDto>> DAMAAsync(EnumTaskCheckTypeDto dmc, double fsHz, string mFile)
-        {
-            try
-            {
-                //主星变采样
-                var resampleRes = await ToResampleAsync((int)fsHz, mFile);
-
-                DetectDto dto = new DetectDto();
-                dto.dmcType = (DmcType)dmc;
-                dto.fsHz = resampleRes.OutFsHz;
-                dto.file1 = await UploadFileAsync("DAMA检测", resampleRes.File);
-                var dmcResult = await HttpHelper.PostRequestAsync<IEnumerable<DetectResDto>>(baseUrl + "DetectCg/DetectCalc", dto);
-                if (dmcResult.code != 200)
-                {
-                    throw new Exception($"执行DAMA检测异常:{dmcResult.msg}");
-                }
-                else
-                {
-                    dmcResult.data.ForEach(m => m.File1 = resampleRes.File);
-                    return dmcResult.data;
-
-                }
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"信号检测出错:{ex.Message}");
-            }
-        }
-        public async Task<ResampleResponseDto> ToResampleAsync(int fsHz, string file)
-        {
-            ResampleResponseDto dtores = new ResampleResponseDto();
-            dtores.File = file;
-            dtores.OutFsHz = fsHz;
-            string step = "变采样";
-            //不需要变采样
-            if (fsHz == OutFsHz)
-            {
-                return dtores;
-            }
-            string file1 = await UploadFileAsync(step, file);
-            ResampleRequestDto dto = new ResampleRequestDto()
-            {
-                File = file1,
-                FsHz = fsHz,
-            };
-            var response = await HttpHelper.PostRequestAsync<ResampleResponseDto>(baseUrl + "/DetectCg/Resample", dto, dto.TimeoutSeconds);
-            if (response.code == 200)
-            {
-                string downloadFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "download");
-                string outFile = Path.Combine(downloadFolder, Path.GetFileNameWithoutExtension(file1) + $"_Resample{response.data.OutFsHz}K.dat");
-                await DownloadFileAsync(step, response.data.File, outFile);
-
-                dtores.OutFsHz = response.data.OutFsHz;
-                dtores.File = outFile;
-                return dtores;
-            }
-            else
-            {
-                throw new Exception($"采样率:{fsHz}变采样{file}异常:{response.msg}");
-            }
-
-        }
-        public async Task<string> UploadFileAsync(string step, string file)
-        {
-            try
-            {
-                string file1 = await HttpHelper.UploadFileAsync(file, baseUrl + "File/UploadFileAsync");
-                return file1;
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"执行{step}上传文件异常:{ex.Message}");
-            }
-        }
-        public async Task<bool> DownloadFileAsync(string step, string Infile, string outFile)
-        {
-            try
-            {
-                return await HttpHelper.DownloadFileAsync(baseUrl, Infile, outFile);
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"执行{step}下载文件{Infile}异常:{ex.Message}");
-            }
-        }
-        //CPU计算
-        public async Task<CpuCgResDto> CPUCalcAsync(string file1, string file2, double fsHz, DetectResDto detect, double dtCenter, double dtRange)
-        {
-            string step = "CPU计算";
-            CpuCgDto dto = new CpuCgDto();
-            dto.file1 = await UploadFileAsync(step, file1);
-            dto.file2 = await UploadFileAsync(step, file2);
-            dto.smpCount = detect.Length;
-            dto.samplingRate = fsHz;
-            dto.dtCenter = dtCenter;
-            dto.dtRange = dtRange;
-            dto.smpStart = detect.Start;
-            dto.snrThreshold = 14;
-            try
-            {
-                var result = await HttpHelper.PostRequestAsync<CpuCgResDto>(baseUrl + "DetectCg/CpuCgCalc", dto);
-                if (result.code != 200)
-                {
-                    throw new Exception($"CPU文件参估出错,{result.msg}");
-
-                }
-                return result.data;
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"CPU文件参估出错,{ex.Message}");
-            }
-        }
-
-        //CPU多检测计算
-        public async Task<List<CpuCgResDto>> CPUCalcAsync(string file1, string file2, double fsHz, List<SmpPosition> smps, double dtCenter, double dtRange)
-        {
-            string step = "CPU计算";
-            CpuCgMultiDto dto = new CpuCgMultiDto();
-            dto.file1 = await UploadFileAsync(step, file1);
-            dto.file2 = await UploadFileAsync(step, file2);
-            dto.smpPositions = smps;
-            dto.samplingRate = fsHz;
-            dto.dtCenter = dtCenter;
-            dto.dtRange = dtRange;
-            dto.snrThreshold = 14;
-            try
-            {
-                var result = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(baseUrl + "DetectCg/CpuCgMultiCalc", dto);
-                if (result.code != 200)
-                {
-                    throw new Exception($"CPU文件参估出错,{result.msg}");
-
-                }
-                return result.data;
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"CPU文件参估出错,{ex.Message}");
-            }
-        }
-        //GPU计算
-        public async Task<GpuCgResponseDto> GPUCalcAsync(string file1, string file2, double fsHz, double dtCenter, double dtRange)
-        {
-            string step = "GPU计算";
-            GpuCgRequestDto dto = new GpuCgRequestDto();
-            dto.file1 = await UploadFileAsync(step, file1);
-            dto.file2 = await UploadFileAsync(step, file2);
-            dto.samplingRate = fsHz;
-            dto.dtCenter = dtCenter;
-            dto.dtRange = dtRange;
-            dto.snrThreshold = 14;
-            try
-            {
-                var result = await HttpHelper.PostRequestAsync<List<GpuCgResponseDto>>(baseUrl + "DetectCg/GpuCgCalc", dto, dto.TimeoutSeconds);
-                if (result.code != 200)
-                {
-                    throw new Exception($"GPU文件参估出错,{result.msg}");
-                }
-
-                return result.data.Count > 0 ? result.data.First() : new GpuCgResponseDto();
-            }
-            catch (TaskCanceledException)
-            {
-                throw new Exception("GPU文件参估Http接口调用超时");
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"GPU文件参估出错{ex.Message}");
-            }
-        }
-        /// <summary>
-        /// 提取检测时隙数据
-        /// </summary>
-        /// <param name="file"></param>
-        /// <param name="fsHz"></param>
-        /// <param name="smps"></param>
-        /// <param name="dtCenter"></param>
-        /// <param name="dtRange"></param>
-        /// <param name="Ch"></param>
-        /// <returns></returns>
-        public async Task<ExtractRes> ExtractMergeAsync(string file, double fsHz, List<SmpPosition> smps, double dtCenter, double dtRange, int Ch)
-        {
-            long offset = 0;
-            long zero = 0;
-            if (Ch == 2)//主星
-            {
-                zero = 0;
-            }
-            else if (Ch != 2 && dtCenter == 0)//三星信号文件
-            {
-                zero = Convert.ToInt64(dtRange * 1e-6 * fsHz) / 2;
-            }
-            else//地信号文件
-            {
-                zero = Convert.ToInt64(dtRange * 1e-6 * fsHz) / 2;
-                offset = Convert.ToInt64(0.26 * fsHz);
-            }
-
-            string detectFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MultiDetect");
-            Directory.CreateDirectory(detectFolder);
-
-            string outfile = Path.Combine(detectFolder, Path.GetFileNameWithoutExtension(file) + "_de" + Path.GetExtension(file));
-
-
-            ExtractRes res = new ExtractRes();
-            res.file = outfile;
-
-            List<SmpPosition> smpp = new List<SmpPosition>();
-            // 从指定位置开始读取数据
-            using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
-            {
-                byte[] bytes = new byte[fileStream.Length];
-
-                foreach (var smp in smps)
-                {
-                  
-                        long start = (smp.smpStart - zero - offset) * 4;
-                        int length = Convert.ToInt32(smp.smpCount + zero * 2 - offset) * 4;
-
-                        if (start < 0 || length < 0 || length > fileStream.Length)
-                        {
-                            continue;
-                        }
-                        // 移动到文件的指定位置
-                        fileStream.Seek(start, SeekOrigin.Begin);
-
-                        byte[] buffer = new byte[length];
-                        // 读取指定长度的数据
-                        int bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length);
-
-                        Array.ConstrainedCopy(buffer, 0, bytes, (int)start, bytesRead);
-                        smpp.Add(smp);
-                   
-                }
-                using (FileStream wrStream = new FileStream(outfile, FileMode.Create, FileAccess.ReadWrite))
-                {
-                    await wrStream.WriteAsync(bytes, 0, bytes.Length);
-                }
-
-            }
-            res.positions = smpp;
-            return res;
-
-        }
-    }
-}

+ 0 - 41
XdCxRhDW.X2D1TaskServer/Tasks/TxInfo.cs

@@ -1,41 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class TxInfo 
-    {
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 天线类型
-        /// </summary>
-        public EnumTxType TxType { get; set; }
-
-        public double Lon { get; set; }
-        public double Lat { get; set; }
-
-        /// <summary>
-        /// 卫星编号
-        /// </summary>
-        public int? SatInfoID { get; set; }
-    }
-
-    public enum EnumTxType
-    {
-        [Display(Name = "接收站天线")]
-        Rec,
-        [Display(Name = "超短波天线")]
-        Cdb,
-
-        [Display(Name = "测向站地址")]
-        Cx,
-
-        [Display(Name = "参考站地址")]
-        Ref,
-    }
-}

+ 0 - 10
XdCxRhDW.X2D1TaskServer/Tasks/X1D1CXTask.cs

@@ -1,10 +0,0 @@
-using System;
-using System.IO;
-using XdCxRhDW.Dto;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class X1D1CXTask
-    {
-    }
-}

+ 0 - 289
XdCxRhDW.X2D1TaskServer/Tasks/X2D1Task.cs

@@ -1,289 +0,0 @@
-using MySqlX.XDevAPI.Common;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using XdCxRhDW.Dto;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class X2D1Task : HistoryTaskI
-    {
-        public override void Start(HistoryTaskProcessingDto dto)
-        {
-            IsRuning = true;
-            TaskDto = dto;
-            System.Threading.Tasks.Task.Run(async () =>
-            {
-
-                DateTime preTime = dto.StartTime;
-
-                while (IsRuning || dto.EndTime.HasValue && dto.EndTime <= DateTime.Now)
-                {
-                    string capfile = Path.Combine(dto.CapDir, $"{preTime.ToString(dto.DateDirFormat)}");
-                    IEnumerable<string> files;
-                    try
-                    {
-                        if (!Directory.Exists(capfile))
-                        {
-                            LogHelper.Error($"【任务{dto.ID}】执行异常,路径[{capfile}]不存在!");
-                            await Task.Delay(5000);
-                            continue;
-                        }
-                        files = Directory.EnumerateFiles(capfile, "*.dat");
-                    }
-                    catch (Exception ex)
-                    {
-                        LogHelper.Error($"【任务{dto.ID}】执行异常.{ex.Message}", ex);
-                        await Task.Delay(5000);
-                        continue;
-                    }
-                    IOrderedEnumerable<IGrouping<DateTime, HistoryFile>> groups = null;
-                    try
-                    {
-                        groups = files.Select(f => FileToHistoryFile(f)).GroupBy(m => m.CapTime).OrderBy(m => m.Key);
-                    }
-                    catch (Exception ex)
-                    {
-                        LogHelper.Error($"【任务{dto.ID}】执行异常", ex);
-                    }
-                    foreach (var item in groups)
-                    {
-                        if (!IsRuning)
-                        {
-                            break;
-                        }
-                        var finfos = item.ToList();
-                        if (finfos.Count < 3)
-                        {
-                            LogHelper.Warning($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻文件数量只有{finfos.Count}个,跳过此组数据");
-                            continue;
-                        }
-                        //超短波信号
-                        var dinfo = finfos.FirstOrDefault(m => m.Ch == 1);
-                        if (dinfo == null)
-                        {
-                            LogHelper.Warning($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻未找到超短波信号ch1文件,跳过此组数据");
-                            continue;
-                        }
-                        //主星
-                        var minfo = finfos.FirstOrDefault(m => m.Ch == 2);
-                        if (minfo == null)
-                        {
-                            LogHelper.Warning($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻未找到主星信号ch2文件,跳过此组数据");
-                            continue;
-                        }
-                        //邻1
-                        var ninfo = finfos.FirstOrDefault(m => m.Ch == 3);
-                        if (ninfo == null)
-                        {
-                            LogHelper.Info($"【任务{dto.ID}】{finfos.First().CapTime:yyyyMMddHHmmss}时刻未找到邻星信号ch3文件,跳过此组数据");
-                            continue;
-                        }
-                        try
-                        {
-                            var txInfos = await GetTxInfoAsync(dto);
-                            var satTx = txInfos.First(t => t.TxType == EnumTxType.Rec);
-                            var cdbTx = txInfos.First(t => t.TxType == EnumTxType.Cdb);
-                            var refTx = txInfos.First(t => t.TxType == EnumTxType.Ref);
-                            //根据信号类型执行检测或参数估计 
-                            if (dto.SigType == EnumSigTypeDto.Normal)
-                            {
-                                var xd = await GPUCalcAsync(minfo.FilePath, dinfo.FilePath, minfo.FsHz, 260000, 40000);
-                                var sx = await GPUCalcAsync(minfo.FilePath, ninfo.FilePath, minfo.FsHz, 0, 40000);
-                                X2D1NoXlPosDto x2D1 = new X2D1NoXlPosDto()
-                                {
-                                    SigTime = minfo.CapTime,
-                                    MainCode = minfo.SatId,
-                                    AdjaCode = ninfo.SatId,
-                                    SxDto = sx.Dt,
-                                    XdDto = xd.Dt,
-                                    SatTxLon = satTx.Lon,
-                                    SatTxLat = satTx.Lat,
-                                    CdbTxLon = cdbTx.Lon,
-                                    CdbTxLat = cdbTx.Lat,
-                                    RefLon = refTx.Lon,
-                                    RefLat = refTx.Lat,
-                                    FreqDown = minfo.FreqHz * 1e-6,
-                                    FreqUp = dinfo.FreqHz * 1e-6,
-                                    XdDfo = xd.Df,
-                                    XdSnr = xd.Snr,
-                                    SxDfo = sx.Df,
-                                    SxSnr = sx.Snr,
-                                };
-
-                                await X2D1NoXlAsync(x2D1);
-                            }
-                            else
-                            {
-                                var mDetect = await DAMAAsync(dto.TaskCheckType, minfo.FsHz, minfo.FilePath);
-                                var dfile = await ToResampleAsync((int)dinfo.FsHz, dinfo.FilePath);
-                                var nfile = await ToResampleAsync((int)ninfo.FsHz, ninfo.FilePath);
-
-                                if (mDetect.Count() <= 0)
-                                {
-                                    LogHelper.Warning($"【任务{dto.ID}】文件[{minfo.FilePath}]无检测结果");
-                                    continue;
-                                }
-                                //主星文件
-                                string mfile = mDetect.First().File1;
-
-                                //时隙数
-                                var smps = mDetect.Select(m => new SmpPosition() { smpStart = m.Start, smpCount = m.Length }).ToList();
-
-                                int dtRange = 40000;
-                                var xds = await CPUCalcAsync(mfile, dfile.File, dfile.OutFsHz, smps, -260000, dtRange);
-                                var sxs = await CPUCalcAsync(mfile, nfile.File, nfile.OutFsHz, smps, 0, dtRange);
-
-                                foreach (var sxitem in sxs)
-                                {
-                                    var xd = xds.FirstOrDefault(x => x.Smpstart == sxitem.Smpstart && x.Smplen == sxitem.Smplen);
-                                    var deitem = mDetect.FirstOrDefault(x => x.Start == sxitem.Smpstart && x.Length == sxitem.Smplen);
-                                    if (!IsRuning)
-                                    {
-                                        break;
-                                    }
-
-                                    X2D1NoXlPosDto x2D1 = new X2D1NoXlPosDto()
-                                    {
-                                        TaskID = dto.ID,
-                                        SigTime = minfo.CapTime.AddSeconds(sxitem.Smpstart / nfile.OutFsHz),
-                                        MainCode = minfo.SatId,
-                                        AdjaCode = ninfo.SatId,
-                                        SxDto = sxitem.Dt,
-                                        XdDto = xd == null ? 0 : xd.Dt,
-                                        SatTxLon = satTx.Lon,
-                                        SatTxLat = satTx.Lat,
-                                        CdbTxLon = cdbTx.Lon,
-                                        CdbTxLat = cdbTx.Lat,
-                                        RefLon = refTx.Lon,
-                                        RefLat = refTx.Lat,
-                                        FreqDown = minfo.FreqHz * 1e-6,
-                                        FreqUp = dinfo.FreqHz * 1e-6,
-                                        XdDfo = xd == null ? 0 : xd.Df,
-                                        XdSnr = xd == null ? 0 : xd.Snr,
-                                        SxDfo = sxitem.Df,
-                                        SxSnr = sxitem.Snr,
-                                        CheckRes = new CheckResDto()
-                                        {
-                                            FileName = deitem.File1,
-                                            ModRate = deitem.ModRate,
-                                            ModType = deitem.ModType,
-                                            SmpCount = deitem.Length,
-                                            SmpStart = deitem.Start,
-                                            UserName = deitem.UserName,
-                                            PosCheckType = deitem.DmcType.GetEnumByDisplayName<EnumPosCheckTypeDto>(),
-                                        }
-                                    };
-                                    await X2D1NoXlAsync(x2D1);
-                                }
-
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            LogHelper.Info($"【任务{dto.ID}】执行异常:{ex.Message}");
-                            continue;
-                        }
-
-                    }
-                    preTime = preTime.AddHours(1);
-                }
-
-            });
-        }
-
-
-        private async Task X2D1NoXlAsync(X2D1NoXlPosDto x2D1)
-        {
-            try
-            {
-                var result = await HttpHelper.PostRequestAsync<PosResDto>(baseUrl + "Pos/PosX2D1NoXlAsync", x2D1);
-                if (result.code != 200)
-                {
-                    LogHelper.Error($"【任务{x2D1.TaskID}】定位异常.{result.msg}");
-                }
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"【任务{x2D1.TaskID}】定位异常.", ex);
-            }
-        }
-
-        private async Task<List<TxInfo>> GetTxInfoAsync(HistoryTaskProcessingDto dto)
-        {
-            List<TxInfo> infos = new List<TxInfo>();
-            try
-            {
-                var result = await HttpHelper.GetRequestAsync<(TxInfo recTx, TxInfo cdbTx, TxInfo cxTx, TxInfo refLoc)>(baseUrl + "Tx/GetTxInfoAsync");
-                if (result.code != 200)
-                {
-                    LogHelper.Error($"【任务{dto.ID}】获取天线信息异常.{result.msg}");
-                    return infos;
-                }
-                infos.Add(result.data.recTx == null ? new TxInfo() { TxType = EnumTxType.Rec } : result.data.recTx);
-                infos.Add(result.data.cdbTx == null ? new TxInfo() { TxType = EnumTxType.Cdb } : result.data.cdbTx);
-                infos.Add(result.data.cxTx == null ? new TxInfo() { TxType = EnumTxType.Cx } : result.data.cxTx);
-                infos.Add(result.data.refLoc == null ? new TxInfo() { TxType = EnumTxType.Ref } : result.data.refLoc);
-                return infos;
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Error($"【任务{dto.ID}】获取天线信息异常.", ex);
-                return infos;
-            }
-        }
-
-        /// <summary>
-        /// 获取采集文件信息
-        /// </summary>
-        /// <param name="filePath"></param>
-        /// <returns></returns>
-        private HistoryFile FileToHistoryFile(string filePath)
-        {  //读取采集文件
-           //2024_01_31_10_01_51_000000000_ch11_-1__Nxx.xxxxxx_Exx.xxxxxx_xxxxx.xxxHz_xxx.xxxMHz_ch1_xd1.dat
-            HistoryFile historyFile = new HistoryFile();
-            historyFile.FilePath = filePath;
-            var fileName = Path.GetFileNameWithoutExtension(filePath);
-            var strs = fileName.Split(new string[] { "_", "MHz", "Hz", "ch" }, StringSplitOptions.RemoveEmptyEntries);
-
-            //采集时间
-            var datestr = string.Join("_", strs.Take(6));
-            DateTime dateTime;
-            bool istime = DateTime.TryParseExact(datestr, "yyyy_MM_dd_HH_mm_ss", null, DateTimeStyles.None, out dateTime);
-            if (!istime) return historyFile;
-            historyFile.CapTime = dateTime;
-
-
-            //采集通道
-            var chstr = strs.Skip(strs.Length - 2).Take(1).First();
-            int ch;
-            int.TryParse(chstr, out ch);
-
-            //采集频点
-            var freqstr = strs.Skip(strs.Length - 3).Take(1).First();
-            double freqMHz;
-            double.TryParse(freqstr, out freqMHz);
-
-            //采样率
-            var fsstr = strs.Skip(strs.Length - 4).Take(1).First();
-            double fsHz;
-            double.TryParse(fsstr, out fsHz);
-
-            historyFile.FreqHz = freqMHz * 1e6;
-            historyFile.Ch = ch;
-            historyFile.FsHz = fsHz;
-            if (ch > 1)
-            {
-                historyFile.SatId = GetSatId(historyFile.FreqHz);
-
-            }
-            return historyFile;
-
-        }
-
-    }
-}

+ 0 - 12
XdCxRhDW.X2D1TaskServer/Tasks/X2DfoTask.cs

@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class X2DfoTask
-    {
-    }
-}

+ 0 - 12
XdCxRhDW.X2D1TaskServer/Tasks/X3TwoDfoTask.cs

@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class X3TwoDfoTask
-    {
-    }
-}

+ 0 - 12
XdCxRhDW.X2D1TaskServer/Tasks/X3TwoDtoTask.cs

@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace XdCxRhDW.X2D1TaskServer.Tasks
-{
-    public class X3TwoDtoTask
-    {
-    }
-}

+ 1 - 9
XdCxRhDW.X2D1TaskServer/XdCxRhDW.X2D1TaskServer.csproj

@@ -162,15 +162,7 @@
       <DependentUpon>MainForm.cs</DependentUpon>
     </Compile>
     <Compile Include="Service\HistoryTaskService.cs" />
-    <Compile Include="Tasks\ExtractRes.cs" />
-    <Compile Include="Tasks\HistoryFile.cs" />
-    <Compile Include="Tasks\HistoryTaskI.cs" />
-    <Compile Include="Tasks\TxInfo.cs" />
-    <Compile Include="Tasks\X1D1CXTask.cs" />
-    <Compile Include="Tasks\X2D1Task.cs" />
-    <Compile Include="Tasks\X2DfoTask.cs" />
-    <Compile Include="Tasks\X3TwoDfoTask.cs" />
-    <Compile Include="Tasks\X3TwoDtoTask.cs" />
+    <Compile Include="HistoryFile.cs" />
     <None Include="packages.config" />
     <None Include="Properties\licenses.licx" />
     <EmbeddedResource Include="Properties\Resources.resx">

+ 3 - 3
XdCxRhDW.X2D1TaskServer54/Controllers/HistoryTaskProcessingController.cs

@@ -33,7 +33,7 @@ namespace XdCxRhDW.X2D1TaskServer54.Controllers
         /// <param name="dto">离线任务信息</param>
         /// <returns></returns>
         [HttpPost]
-        public AjaxResult Run(HistoryTaskProcessingDto dto)
+        public AjaxResult Run(X2D1HistoryTaskHandleDto dto)
         {
             try
             {
@@ -55,12 +55,12 @@ namespace XdCxRhDW.X2D1TaskServer54.Controllers
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPost]
-        public AjaxResult Stop(HistoryTaskStopDto dto)
+        public AjaxResult Stop(TaskStopHandleDto dto)
         {
             try
             {
 
-                LogHelper.Info($"接收停止历史任务编号:{dto.ID}");
+                LogHelper.Warning($"接收停止历史任务编号:{dto.ID}");
                 _service.Stop();
                 return Success();
             }

+ 13 - 11
XdCxRhDW.X2D1TaskServer54/Service/HistoryTaskService.cs

@@ -5,6 +5,7 @@ using System.Collections.Generic;
 using System.Configuration;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using XdCxRhDW.Dto;
 
@@ -13,8 +14,8 @@ namespace XdCxRhDW.X2D1TaskServer54.Service
     //业务逻辑处理类
     public class HistoryTaskService
     {
-        public readonly string baseUrl;
-        private bool stopping = false;
+        private readonly string baseUrl;
+        CancellationTokenSource cts;
         public HistoryTaskService()
         {
             var posPlatformAddr = ConfigurationManager.AppSettings["PosPlatformAddr"].Trim();//like http://127.0.0.1:8091 or http://127.0.0.1:8091/
@@ -23,19 +24,20 @@ namespace XdCxRhDW.X2D1TaskServer54.Service
             else
                 this.baseUrl = posPlatformAddr + "/api/";
         }
-        public void StartAsync(HistoryTaskProcessingDto taskInfo)
+        public void StartAsync(X2D1HistoryTaskHandleDto taskInfo)
         {
+            cts = new CancellationTokenSource();
             Task.Run(async () =>
             {
                 //点击定位平台右上角查看接口可以在浏览器中查看平台提供的所有接口详细信息
-                while (!stopping)
+                while (!cts.IsCancellationRequested)
                 {
                     try
                     {
                         #region 第1步,上传检测参估需要的数据文件执行检测
-                        string mainFile = await HttpHelper.UploadFileAsync("E:\\1.dat", baseUrl + "File/UploadFileAsync");//主星文件
-                        string adjaFile = await HttpHelper.UploadFileAsync("E:\\2.dat", baseUrl + "File/UploadFileAsync");//邻星文件
-                        string cdbFile = await HttpHelper.UploadFileAsync("E:\\2.dat", baseUrl + "File/UploadFileAsync");//超短文件
+                        string mainFile = await HttpHelper.UploadFileAsync("E:\\1.dat", baseUrl + "File/UploadFileAsync", token: cts.Token);//主星文件
+                        string adjaFile = await HttpHelper.UploadFileAsync("E:\\2.dat", baseUrl + "File/UploadFileAsync", token: cts.Token);//邻星文件
+                        string cdbFile = await HttpHelper.UploadFileAsync("E:\\2.dat", baseUrl + "File/UploadFileAsync", token: cts.Token);//超短文件
                         string url = baseUrl + "POST/Api/DetectCg/DetectCalc";//信号检测
                         var httpResp1 = await HttpHelper.PostRequestAsync<List<DetectResDto>>(url, new DetectDto()
                         {
@@ -52,19 +54,19 @@ namespace XdCxRhDW.X2D1TaskServer54.Service
 
                         #region 第2步,多时隙参估
                         url = baseUrl + "POST/Api/DetectCg/CpuCgMultiCalc";//CPU参估(多个时隙)
-                        var httpResp2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(url, new CpuCgMultiDto());
+                        var httpResp2 = await HttpHelper.PostRequestAsync<List<CpuCgResDto>>(url, new CpuCgMultiDto(), token: cts.Token);
                         if (httpResp2.code == 0)
                         {
                             LogHelper.Error(httpResp2.msg);
                         }
-                        //httpResp2.data
                         #endregion
 
                         #region 第3步,每个时隙调用定位算法
                         url = baseUrl + "Pos/PosX2D1NoXlNoParAsync";//两星一地无参无星历定位
                         foreach (var slot in slots)
                         {
-                            var httpResp3 = await HttpHelper.PostRequestAsync<PosResDto>(url, new X2D1NoXlNoParlPosDto());
+                            if (cts.IsCancellationRequested) break;
+                            var httpResp3 = await HttpHelper.PostRequestAsync<PosResDto>(url, new X2D1NoXlNoParlPosDto(), token: cts.Token);
                             if (httpResp3.code == 0)
                             {
                                 LogHelper.Error(httpResp3.msg);
@@ -81,7 +83,7 @@ namespace XdCxRhDW.X2D1TaskServer54.Service
         }
         public void Stop()
         {
-            stopping = true;
+            cts.Cancel();
         }
     }
 }

+ 2 - 2
XdCxRhDw.Dto/02.XdCxRhDW.Dto.csproj

@@ -62,7 +62,7 @@
     <Compile Include="DetectResDto.cs" />
     <Compile Include="CpuCgResDto.cs" />
     <Compile Include="FileUploadResDto.cs" />
-    <Compile Include="HistoryTaskStopDto.cs" />
+    <Compile Include="TaskHandleDto\TaskStopHandleDto.cs" />
     <Compile Include="PosDto\CheckResDto.cs" />
     <Compile Include="PosDto\RHNoXlPosDto.cs" />
     <Compile Include="PosDto\RHNoXlNoParPosDto.cs" />
@@ -94,7 +94,7 @@
     <Compile Include="PosDto\X1D1PosDto.cs" />
     <Compile Include="PosDto\X2D1NoXlPosDto.cs" />
     <Compile Include="SvrStateDto.cs" />
-    <Compile Include="HistoryTaskProcessingDto.cs" />
+    <Compile Include="TaskHandleDto\X2D1HistoryTaskHandleDto.cs" />
     <Compile Include="XlCalcDto\XlImportDto.cs" />
     <Compile Include="XlCalcDto\XlCalcMultDto.cs" />
     <Compile Include="XlCalcDto\XlCalcDto.cs" />

+ 23 - 0
XdCxRhDw.Dto/CpuCgMultiDto.cs

@@ -8,6 +8,9 @@ using XdCxRhDW.Dto.Attribute;
 
 namespace XdCxRhDW.Dto
 {
+    /// <summary>
+    /// 多个时隙的CPU参估参数模型
+    /// </summary>
     public class CpuCgMultiDto
     {
         /// <summary>
@@ -69,8 +72,28 @@ namespace XdCxRhDW.Dto
         }
     }
 
+    /// <summary>
+    /// 时隙样点信息
+    /// </summary>
+
     public class SmpPosition
     {
+        /// <summary>
+        /// 
+        /// </summary>
+        public SmpPosition() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="smpStart"></param>
+        /// <param name="smpCount"></param>
+        public SmpPosition(long smpStart, long smpCount)
+        {
+            this.smpStart = smpStart;
+            this.smpCount = smpCount;
+        }
+
         /// <summary>
         /// 开始样点
         /// </summary>

+ 1 - 0
XdCxRhDw.Dto/CpuCgResDto.cs

@@ -41,4 +41,5 @@ namespace XdCxRhDW.Dto
         /// </summary>
         public int TimeMs { get; set; }
     }
+
 }

+ 12 - 2
XdCxRhDw.Dto/DetectDto.cs

@@ -28,7 +28,7 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 采样率 Hz
         /// </summary>
-        [RangeDouble(0, 100e6)]
+        [RangeDouble(0, 100e6, IncludeMin = true)]
         public double fsHz { get; set; }
 
         /// <summary>
@@ -53,7 +53,17 @@ namespace XdCxRhDW.Dto
             if (hasError)
                 yield return new ValidationResult("检测类型错误", new[] { nameof(this.dmcType) });
             else
-                yield return null;
+            {
+                if (dmcType == DmcType.DAMA && fsHz != 96000)
+                {
+                    yield return new ValidationResult("DAMA检测采样率只支持96K", new[] { nameof(this.fsHz) });
+                }
+                if (dmcType == DmcType.IBS && band != 5 && band != 25)
+                {
+                    yield return new ValidationResult("IBS检测信号带宽只支持5K、25K两种", new[] { nameof(this.band) });
+                }
+            }
+            yield return null;
         }
     }
     /// <summary>

+ 2 - 0
XdCxRhDw.Dto/PosDto/RHNoParPosDto.cs

@@ -25,11 +25,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 2 - 0
XdCxRhDw.Dto/PosDto/RHNoXlNoParPosDto.cs

@@ -25,11 +25,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

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

@@ -26,13 +26,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

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

@@ -26,13 +26,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 1 - 0
XdCxRhDw.Dto/PosDto/X1D1NoParPosDto.cs

@@ -25,6 +25,7 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>

+ 1 - 0
XdCxRhDw.Dto/PosDto/X1D1NoXlNoParPosDto.cs

@@ -25,6 +25,7 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>

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

@@ -26,7 +26,7 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>

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

@@ -25,7 +25,7 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>

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

@@ -26,13 +26,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 2 - 2
XdCxRhDw.Dto/PosDto/X2D1NoXlNoParlPosDto.cs

@@ -26,13 +26,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0,100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 2 - 2
XdCxRhDw.Dto/PosDto/X2D1NoXlPosDto.cs

@@ -27,13 +27,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 2 - 2
XdCxRhDw.Dto/PosDto/X2D1PosDto.cs

@@ -26,13 +26,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 2 - 2
XdCxRhDw.Dto/PosDto/X2DtoDfoNoXlPosDto.cs

@@ -27,13 +27,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 2 - 2
XdCxRhDw.Dto/PosDto/X2DtoDfoPosDto.cs

@@ -27,13 +27,13 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int AdjaCode { get; set; }
 
         /// <summary>

+ 3 - 3
XdCxRhDw.Dto/PosDto/X3TwoDfoNoXlPosDto.cs

@@ -27,19 +27,19 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星1编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja1Code { get; set; }
 
         /// <summary>
         /// 邻星2编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja2Code { get; set; }
 
         /// <summary>

+ 3 - 3
XdCxRhDw.Dto/PosDto/X3TwoDfoPosDto.cs

@@ -27,19 +27,19 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星1编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja1Code { get; set; }
 
         /// <summary>
         /// 邻星2编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja2Code { get; set; }
 
         /// <summary>

+ 3 - 3
XdCxRhDw.Dto/PosDto/X3TwoDtoNoParPosDto.cs

@@ -26,19 +26,19 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星1编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja1Code { get; set; }
 
         /// <summary>
         /// 邻星2编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja2Code { get; set; }
 
         /// <summary>

+ 3 - 3
XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlNoParPosDto.cs

@@ -26,19 +26,19 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星1编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja1Code { get; set; }
 
         /// <summary>
         /// 邻星2编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja2Code { get; set; }
 
         /// <summary>

+ 3 - 3
XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlPosDto.cs

@@ -26,19 +26,19 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星1编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja1Code { get; set; }
 
         /// <summary>
         /// 邻星2编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja2Code { get; set; }
 
         /// <summary>

+ 3 - 3
XdCxRhDw.Dto/PosDto/X3TwoDtoPosDto.cs

@@ -26,19 +26,19 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 主星编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int MainCode { get; set; }
 
         /// <summary>
         /// 邻星1编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja1Code { get; set; }
 
         /// <summary>
         /// 邻星2编号
         /// </summary>
-        [RangeInt(10000, IncludeMin = true)]
+        [RangeInt(0, 100000)]
         public int Adja2Code { get; set; }
 
         /// <summary>

+ 4 - 1
XdCxRhDw.Dto/HistoryTaskStopDto.cs → XdCxRhDw.Dto/TaskHandleDto/TaskStopHandleDto.cs

@@ -6,7 +6,10 @@ using System.Threading.Tasks;
 
 namespace XdCxRhDW.Dto
 {
-    public class HistoryTaskStopDto
+    /// <summary>
+    /// 停止任务处理模型DTO
+    /// </summary>
+    public class TaskStopHandleDto
     {
         /// <summary>
         /// 任务ID

+ 13 - 3
XdCxRhDw.Dto/HistoryTaskProcessingDto.cs → XdCxRhDw.Dto/TaskHandleDto/X2D1HistoryTaskHandleDto.cs

@@ -8,9 +8,9 @@ using System.Threading.Tasks;
 namespace XdCxRhDW.Dto
 {
     /// <summary>
-    /// 历史任务处理模型参数
+    /// 两星一地历史任务处理模型
     /// </summary>
-    public class HistoryTaskProcessingDto
+    public class X2D1HistoryTaskHandleDto
     {
         /// <summary>
         /// 任务ID
@@ -35,7 +35,17 @@ namespace XdCxRhDW.Dto
         /// <summary>
         /// 结束时间
         /// </summary>
-        public DateTime? EndTime { get; set; }
+        public DateTime EndTime { get; set; }
+
+        /// <summary>
+        /// 主星编号(在MySql中找不到卫星时使用此编号)
+        /// </summary>
+        public int MainSatCode { get; set; }
+
+        /// <summary>
+        /// 邻星编号(在MySql中找不到卫星时使用此编号)
+        /// </summary>
+        public int AdjaSatCode { get; set; }
 
         /// <summary>
         /// 日期目录格式(yyyy-MM-dd等格式)