浏览代码

Merge branch 'master' of http://139.155.15.221:3000/zoulei/DW5S

yg 5 月之前
父节点
当前提交
175df032c0

+ 3 - 0
DW5S.App/DW5S.App.csproj

@@ -33,6 +33,9 @@
     <Compile Update="EditForms\AdChannelEditor.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="EditForms\TaskTemplate.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="EditForms\StationEditor.cs">
       <SubType>Form</SubType>
     </Compile>

+ 6 - 6
DW5S.App/EditForms/TaskEditor.Designer.cs

@@ -93,7 +93,7 @@
             layoutControl1.Name = "layoutControl1";
             layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(784, 215, 650, 400);
             layoutControl1.Root = Root;
-            layoutControl1.Size = new System.Drawing.Size(514, 255);
+            layoutControl1.Size = new System.Drawing.Size(514, 254);
             layoutControl1.TabIndex = 0;
             layoutControl1.Text = "layoutControl1";
             // 
@@ -217,7 +217,7 @@
             Root.GroupBordersVisible = false;
             Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { emptySpaceItem1, layoutControlItem2, layoutControlItem3, layoutControlItem4, layoutControlItemAdja1, layoutControlItemAdja2, layoutControlGroup1, layoutControlItem7 });
             Root.Name = "Root";
-            Root.Size = new System.Drawing.Size(514, 255);
+            Root.Size = new System.Drawing.Size(514, 254);
             Root.TextVisible = false;
             // 
             // emptySpaceItem1
@@ -225,7 +225,7 @@
             emptySpaceItem1.AllowHotTrack = false;
             emptySpaceItem1.Location = new System.Drawing.Point(0, 197);
             emptySpaceItem1.Name = "emptySpaceItem1";
-            emptySpaceItem1.Size = new System.Drawing.Size(284, 38);
+            emptySpaceItem1.Size = new System.Drawing.Size(284, 37);
             emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
             // 
             // layoutControlItem2
@@ -249,7 +249,7 @@
             layoutControlItem3.MinSize = new System.Drawing.Size(100, 37);
             layoutControlItem3.Name = "layoutControlItem3";
             layoutControlItem3.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 2, 12, 2);
-            layoutControlItem3.Size = new System.Drawing.Size(100, 38);
+            layoutControlItem3.Size = new System.Drawing.Size(100, 37);
             layoutControlItem3.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
             layoutControlItem3.TextVisible = false;
@@ -331,7 +331,7 @@
             layoutControlItem7.MinSize = new System.Drawing.Size(110, 37);
             layoutControlItem7.Name = "layoutControlItem7";
             layoutControlItem7.Padding = new DevExpress.XtraLayout.Utils.Padding(2, 12, 12, 2);
-            layoutControlItem7.Size = new System.Drawing.Size(110, 38);
+            layoutControlItem7.Size = new System.Drawing.Size(110, 37);
             layoutControlItem7.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem7.TextSize = new System.Drawing.Size(0, 0);
             layoutControlItem7.TextVisible = false;
@@ -344,7 +344,7 @@
             // 
             AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
             AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            ClientSize = new System.Drawing.Size(514, 255);
+            ClientSize = new System.Drawing.Size(514, 254);
             Controls.Add(layoutControl1);
             FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
             Name = "TaskEditor";

+ 87 - 27
DW5S.App/EditForms/TaskEditor.cs

@@ -28,6 +28,8 @@ using Serilog;
 using DW5S.Service;
 using DW5S.ViewModel;
 using XdCxRhDW5S.ViewModel;
+using DevExpress.XtraCharts.Native;
+using DevExpress.Data.Mask.Internal;
 
 namespace DW5S.App.EditForms
 {
@@ -43,20 +45,22 @@ namespace DW5S.App.EditForms
             info = new TaskViewModel();
             this.StartPosition = FormStartPosition.CenterParent;
             //加载DW类型
-            var values = Enum.GetValues(typeof(EnumPosType));
-            foreach (var item in values)
-            {
-                this.txtPosType.Properties.Items.Add(new RadioGroupItem(Convert.ToInt32(item), ((EnumPosType)item).GetEnumDisplayName()));
-            }
+            //var values = Enum.GetValues(typeof(EnumPosType));
+            //foreach (var item in values)
+            //{
+            //    this.txtPosType.Properties.Items.Add(new RadioGroupItem(Convert.ToInt32(item), ((EnumPosType)item).GetEnumDisplayName()));
+            //}
 
-            values = Enum.GetValues(typeof(EnumTaskType));
-            foreach (var item in values)
-            {
-                this.txtTaskType.Properties.Items.Add(new RadioGroupItem(Convert.ToInt32(item), ((EnumTaskType)item).GetEnumDisplayName()));
-            }
+            //values = Enum.GetValues(typeof(EnumTaskType));
+            //foreach (var item in values)
+            //{
+            //    this.txtTaskType.Properties.Items.Add(new RadioGroupItem(Convert.ToInt32(item), ((EnumTaskType)item).GetEnumDisplayName()));
+            //}
+            this.txtTaskType.Properties.AddEnum<EnumTaskType>();
             this.txtTaskType.SelectedIndex = 0;
             this.txtTaskType_SelectedIndexChanged(this, EventArgs.Empty);
-            this.txtPosType.EditValue = EnumPosType.X1D1CX;
+           this.txtPosType.Properties.AddEnum<EnumPosType>();
+            this.txtPosType.SelectedIndex =0;
         }
 
         public TaskEditor(TaskViewModel info, List<SigViewModel> taskSigList)
@@ -69,26 +73,55 @@ namespace DW5S.App.EditForms
 
         private async void TaskEditor_Load(object sender, EventArgs e)
         {
-            var unitOfWork = IocContainer.UnitOfWork;
-            var sats = await unitOfWork.Of<SatInfo>().GetAllAsync();
-            var satList = sats.To<List<SatViewModel>>();
-            this.txtMainSat.UseDefault().SetData(satList, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
-            this.txtAdja1Sat.UseDefault().SetData(satList, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
-            this.txtAdja2Sat.UseDefault().SetData(satList, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+            var normalsats = await GetSatAsync();
+            var cdbsats = await GetSatAsync(EnumSatType.CdbSat);
+            if (info.PosType == EnumPosType.X1D1CX)
+            {
+                this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                this.txtAdja1Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+            }
+            else if (info.PosType == EnumPosType.X2D1 || info.PosType == EnumPosType.X2D1NoRef)
+            {
+                this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                this.txtAdja1Sat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                this.txtAdja2Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+            }
+
             if (this.Text.StartsWith("编辑任务") && info != null)
             {
-                var satMain = satList.FirstOrDefault(w => w.SatCode == info.MainSat);
-                var satAdja1 = satList.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
-                var satAdja2 = satList.FirstOrDefault(w => w.SatCode == info.Adja2Sat);
+                if (info.PosType == EnumPosType.X1D1CX)
+                {
+                    var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
+                    this.txtMainSat.EditValue = satMain;
+                    var satAdja1 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
+                    this.txtAdja1Sat.EditValue = satAdja1;
+                }
+                else if (info.PosType == EnumPosType.X2D1 || info.PosType == EnumPosType.X2D1NoRef)
+                {
+                    var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
+                    this.txtMainSat.EditValue = satMain;
+                    var satAdja1 = normalsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
+                    this.txtAdja1Sat.EditValue = satAdja1;
+                    var satAdja2 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja2Sat);
+                    this.txtAdja2Sat.EditValue = satAdja2;
+                }
+
                 this.txtTaskName.Text = info.TaskName;
                 this.txtPosType.SelectedIndex = (int)info.PosType;
                 this.txtTaskType.SelectedIndex = (int)info.TaskType;
-                this.txtMainSat.EditValue = satMain;
-                this.txtAdja1Sat.EditValue = satAdja1;
-                this.txtAdja2Sat.EditValue = satAdja2;
+
+
             }
         }
 
+        public async Task<List<SatViewModel>> GetSatAsync(EnumSatType enumSat = EnumSatType.NormalSat)
+        {
+            var unitOfWork = IocContainer.UnitOfWork;
+            var sats = await unitOfWork.Of<SatInfo>().FindAsync(f => f.EnumSatType == enumSat);
+            var satList = sats.To<List<SatViewModel>>();
+            return satList;
+        }
+
         private async void btnSave_ClickAsync(object sender, EventArgs e)
         {
             try
@@ -133,6 +166,11 @@ namespace DW5S.App.EditForms
                         dxErrorProvider.SetError(txtMainSat, "请选择卫星");
                         return;
                     }
+                    if (txtAdja1Sat.EditValue == null)
+                    {
+                        dxErrorProvider.SetError(txtAdja1Sat, "请选择地面站卫星");
+                        return;
+                    }
                 }
                 else if (posType == EnumPosType.X2D1 || posType == EnumPosType.X2D1NoRef)
                 {
@@ -151,6 +189,11 @@ namespace DW5S.App.EditForms
                         dxErrorProvider.SetError(txtAdja1Sat, "邻星不能和主星一致");
                         return;
                     }
+                    if (txtAdja2Sat.EditValue == null)
+                    {
+                        dxErrorProvider.SetError(txtAdja2Sat, "请选择地面站卫星");
+                        return;
+                    }
                 }
                 info.TaskState = EnumTaskState.Stopped;
                 info.TaskName = txtTaskName.Text;
@@ -172,25 +215,42 @@ namespace DW5S.App.EditForms
             }
         }
 
-        private void txtPosType_EditValueChanged(object sender, EventArgs e)
+        private async void txtPosType_EditValueChanged(object sender, EventArgs e)
         {
             RadioGroup posTypeRadioGroup = sender as RadioGroup;
             var posType = (EnumPosType)posTypeRadioGroup.Properties.Items[posTypeRadioGroup.SelectedIndex].Value;
+            var normalsats = await GetSatAsync();
+            var cdbsats = await GetSatAsync(EnumSatType.CdbSat);
             if (posType == EnumPosType.X1D1CX)
             {
                 layoutControlItemAdja1.Text = "地面站星";
                 layoutControlItemAdja1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
                 layoutControlItemAdja2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+
+                this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                this.txtAdja1Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
+                this.txtMainSat.EditValue = satMain;
+                var satAdja1 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
+                this.txtAdja1Sat.EditValue = satAdja1;
             }
             else if (posType == EnumPosType.X2D1 || posType == EnumPosType.X2D1NoRef)
             {
                 layoutControlItemAdja1.Text = "邻星";
                 layoutControlItemAdja1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
-                layoutControlItemAdja1.Text = "地面站星";
+                layoutControlItemAdja2.Text = "地面站星";
                 layoutControlItemAdja2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
-               
-            }
+                this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                this.txtAdja1Sat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                this.txtAdja2Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
+                var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
+                this.txtMainSat.EditValue = satMain;
+                var satAdja1 = normalsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
+                this.txtAdja1Sat.EditValue = satAdja1;
+                var satAdja2 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja2Sat);
+                this.txtAdja2Sat.EditValue = satAdja2;
 
+            }
             this.layoutControl1.BestFit();
         }
 

+ 158 - 0
DW5S.App/EditForms/TaskTemplate.Designer.cs

@@ -0,0 +1,158 @@
+namespace DW5S.App.EditForms
+{
+    partial class TaskTemplate
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            btnOk = new DevExpress.XtraEditors.SimpleButton();
+            btnCancle = new DevExpress.XtraEditors.SimpleButton();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
+            radioGroup1 = new DevExpress.XtraEditors.RadioGroup();
+            layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)Root).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem6).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem7).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)radioGroup1.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem8).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(radioGroup1);
+            layoutControl1.Controls.Add(btnOk);
+            layoutControl1.Controls.Add(btnCancle);
+            layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            layoutControl1.Location = new System.Drawing.Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new System.Drawing.Size(244, 233);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // btnOk
+            // 
+            btnOk.Location = new System.Drawing.Point(123, 199);
+            btnOk.Name = "btnOk";
+            btnOk.Size = new System.Drawing.Size(109, 22);
+            btnOk.StyleController = layoutControl1;
+            btnOk.TabIndex = 7;
+            btnOk.Text = "确定";
+            btnOk.Click += btnOk_Click;
+            // 
+            // btnCancle
+            // 
+            btnCancle.Location = new System.Drawing.Point(12, 199);
+            btnCancle.Name = "btnCancle";
+            btnCancle.Size = new System.Drawing.Size(107, 22);
+            btnCancle.StyleController = layoutControl1;
+            btnCancle.TabIndex = 6;
+            btnCancle.Text = "取消";
+            btnCancle.Click += btnCancle_Click;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem6, layoutControlItem7, layoutControlItem8 });
+            Root.Name = "Root";
+            Root.Size = new System.Drawing.Size(244, 233);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.Control = btnCancle;
+            layoutControlItem6.Location = new System.Drawing.Point(0, 187);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Size = new System.Drawing.Size(111, 26);
+            layoutControlItem6.TextSize = new System.Drawing.Size(0, 0);
+            layoutControlItem6.TextVisible = false;
+            // 
+            // layoutControlItem7
+            // 
+            layoutControlItem7.Control = btnOk;
+            layoutControlItem7.Location = new System.Drawing.Point(111, 187);
+            layoutControlItem7.Name = "layoutControlItem7";
+            layoutControlItem7.Size = new System.Drawing.Size(113, 26);
+            layoutControlItem7.TextSize = new System.Drawing.Size(0, 0);
+            layoutControlItem7.TextVisible = false;
+            // 
+            // radioGroup1
+            // 
+            radioGroup1.Location = new System.Drawing.Point(12, 12);
+            radioGroup1.Name = "radioGroup1";
+            radioGroup1.Properties.Columns = 1;
+            radioGroup1.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.RadioGroupItem[] { new DevExpress.XtraEditors.Controls.RadioGroupItem(0, "无模板"), new DevExpress.XtraEditors.Controls.RadioGroupItem(1, "三星定位任务模板"), new DevExpress.XtraEditors.Controls.RadioGroupItem(2, "两星一地定位任务模板"), new DevExpress.XtraEditors.Controls.RadioGroupItem(3, "星地测向融合定位任务模板") });
+            radioGroup1.Size = new System.Drawing.Size(220, 183);
+            radioGroup1.StyleController = layoutControl1;
+            radioGroup1.TabIndex = 8;
+            // 
+            // layoutControlItem8
+            // 
+            layoutControlItem8.Control = radioGroup1;
+            layoutControlItem8.Location = new System.Drawing.Point(0, 0);
+            layoutControlItem8.Name = "layoutControlItem8";
+            layoutControlItem8.Size = new System.Drawing.Size(224, 187);
+            layoutControlItem8.TextSize = new System.Drawing.Size(0, 0);
+            layoutControlItem8.TextVisible = false;
+            // 
+            // TaskTemplate
+            // 
+            AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            ClientSize = new System.Drawing.Size(244, 233);
+            Controls.Add(layoutControl1);
+            FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            Name = "TaskTemplate";
+            Text = "RecEditor";
+            Load += CdbEditor_Load;
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)Root).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem6).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem7).EndInit();
+            ((System.ComponentModel.ISupportInitialize)radioGroup1.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem8).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraEditors.SimpleButton btnOk;
+        private DevExpress.XtraEditors.SimpleButton btnCancle;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
+        private DevExpress.XtraEditors.RadioGroup radioGroup1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+    }
+}

+ 46 - 0
DW5S.App/EditForms/TaskTemplate.cs

@@ -0,0 +1,46 @@
+using DevExpress.Utils.About;
+using DW5S.Entity;
+using DW5S.Repostory;
+using DW5S.Service;
+using DW5S.ViewModel;
+using ExtensionsDev;
+using Serilog;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace DW5S.App.EditForms
+{
+    public partial class TaskTemplate : DevExpress.XtraEditors.XtraForm
+    {
+        public int SelectedTemplate { get; set; }
+        public TaskTemplate()
+        {
+            InitializeComponent();
+            this.layoutControl1.UseDefault();
+            this.StartPosition = FormStartPosition.CenterParent;
+        }
+
+        private async void CdbEditor_Load(object sender, EventArgs e)
+        {
+
+        }
+
+        private void btnOk_Click(object sender, EventArgs e)
+        {
+            SelectedTemplate = this.radioGroup1.SelectedIndex;
+            this.DialogResult = DialogResult.OK;
+        }
+
+        private void btnCancle_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.Cancel;
+        }
+    }
+}

+ 120 - 0
DW5S.App/EditForms/TaskTemplate.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 15 - 16
DW5S.App/MainForm.Designer.cs

@@ -28,11 +28,10 @@
         /// </summary>
         private void InitializeComponent()
         {
-            components = new System.ComponentModel.Container();
             components = new System.ComponentModel.Container();
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
-            DevExpress.Utils.SuperToolTip superToolTip3 = new DevExpress.Utils.SuperToolTip();
-            DevExpress.Utils.ToolTipItem toolTipItem3 = new DevExpress.Utils.ToolTipItem();
+            DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip();
+            DevExpress.Utils.ToolTipItem toolTipItem1 = new DevExpress.Utils.ToolTipItem();
             ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
             skinPaletteDropDownButtonItem1 = new DevExpress.XtraBars.SkinPaletteDropDownButtonItem();
             btnOpenApi = new DevExpress.XtraBars.BarButtonItem();
@@ -63,6 +62,7 @@
             barTaskTemp = new DevExpress.XtraBars.BarButtonItem();
             btnStation = new DevExpress.XtraBars.BarButtonItem();
             btnADTask = new DevExpress.XtraBars.BarButtonItem();
+            btnCdbSat = new DevExpress.XtraBars.BarButtonItem();
             ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
             ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             ribbonPageGroup4 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
@@ -77,7 +77,6 @@
             tabbedView1 = new DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(components);
             dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components);
             barButtonItem2 = new DevExpress.XtraBars.BarButtonItem();
-            btnCdbSat = new DevExpress.XtraBars.BarButtonItem();
             ((System.ComponentModel.ISupportInitialize)ribbon).BeginInit();
             ((System.ComponentModel.ISupportInitialize)documentManager1).BeginInit();
             ((System.ComponentModel.ISupportInitialize)tabbedView1).BeginInit();
@@ -120,9 +119,9 @@
             btnOpenApi.Id = 21;
             btnOpenApi.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("btnOpenApi.ImageOptions.SvgImage");
             btnOpenApi.Name = "btnOpenApi";
-            toolTipItem3.Text = "查看接口文档";
-            superToolTip3.Items.Add(toolTipItem3);
-            btnOpenApi.SuperTip = superToolTip3;
+            toolTipItem1.Text = "查看接口文档";
+            superToolTip1.Items.Add(toolTipItem1);
+            btnOpenApi.SuperTip = superToolTip1;
             btnOpenApi.ItemClick += btnOpenApi_ItemClick;
             // 
             // btnTask
@@ -347,6 +346,15 @@
             btnADTask.Name = "btnADTask";
             btnADTask.ItemClick += btn_ItemClick;
             // 
+            // btnCdbSat
+            // 
+            btnCdbSat.Caption = "地面站卫星管理";
+            btnCdbSat.Id = 44;
+            btnCdbSat.ImageOptions.Image = (System.Drawing.Image)resources.GetObject("btnCdbSat.ImageOptions.Image");
+            btnCdbSat.ImageOptions.LargeImage = (System.Drawing.Image)resources.GetObject("btnCdbSat.ImageOptions.LargeImage");
+            btnCdbSat.Name = "btnCdbSat";
+            btnCdbSat.ItemClick += btn_ItemClick;
+            // 
             // ribbonPage1
             // 
             ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1, ribbonPageGroup4, ribbonPageGroup2 });
@@ -454,15 +462,6 @@
             barButtonItem2.ImageOptions.LargeImage = (System.Drawing.Image)resources.GetObject("barButtonItem2.ImageOptions.LargeImage");
             barButtonItem2.Name = "barButtonItem2";
             // 
-            // btnCdbSat
-            // 
-            btnCdbSat.Caption = "地卫星管理";
-            btnCdbSat.Id = 44;
-            btnCdbSat.ImageOptions.Image = (System.Drawing.Image)resources.GetObject("btnCdbSat.ImageOptions.Image");
-            btnCdbSat.ImageOptions.LargeImage = (System.Drawing.Image)resources.GetObject("btnCdbSat.ImageOptions.LargeImage");
-            btnCdbSat.Name = "btnCdbSat";
-            btnCdbSat.ItemClick += btn_ItemClick;
-            // 
             // MainForm
             // 
             AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);

+ 2 - 1
DW5S.App/MainForm.cs

@@ -54,6 +54,7 @@ namespace DW5S
             InitializeComponent();
             ribbon.UseDefault();
             tabbedView1.UseDefault();
+            barTaskTemp.Visibility = BarItemVisibility.Never;
             ctrlTypes.Add("任务模版", typeof(CtrlTaskTemplate));
             ctrlTypes.Add("任务管理", typeof(CtrlHome)); 
             ctrlTypes.Add("采集结果", typeof(CtrlAdRes));
@@ -64,7 +65,7 @@ namespace DW5S
             ctrlTypes.Add("绘图管理", typeof(CtrlDraw));
             ctrlTypes.Add("星历管理", typeof(CtrlXl));
             ctrlTypes.Add("卫星管理", typeof(CtrlSat));
-            ctrlTypes.Add("地卫星管理", typeof(CtrlCDBSat));
+            ctrlTypes.Add("地面站卫星管理", typeof(CtrlCDBSat));
             ctrlTypes.Add("接收站管理", typeof(CtrlRecTx));
             ctrlTypes.Add("参考站管理", typeof(CtrlRefTx));
             ctrlTypes.Add("地面站管理", typeof(CtrlCdbTx));

+ 39 - 40
DW5S.App/MainForm.resx

@@ -902,50 +902,49 @@
   </data>
   <data name="btnCdbSat.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAD3RFWHRUaXRsZQBTYXRlbGl0
-        ZTsVZOekAAACC0lEQVQ4T42RzWsTURTFC4Uu3Whd+xcIZqEI3RjFreBGEnBjOqEguBhNjYbW0WAaJ2lC
-        vk1MZhU0HyaBhIgKYgWTKJhFHQOhbgWRprgQ2kpDr+eOkyHtVOyF37x5791z3nv3ThDRf2m1WgfCe38/
-        +2JmrngevAJHeD4uqtfr7lwu9y2dTluTyaTZAKLLYFt++okwvuC1kbjRaNyr1WrDarVKiURiYDKAwAGG
-        z95+ZfFvYB2Ju93uiUqlslUqlSgajQ5jsdiNPQZIdoFd5Y0mHlqFx7OZTGYKp37AqdtLS775u547P0Oh
-        0EYkEpln0/0G0uzyCot3zwlPbtvt9vVisbjW6XSo1+tROBze8fkeeiA6OrrVQU+QgBvvmyoUCmvtdpsG
-        gwH1+33CLQiCDRaNYyoiO+fz+XcYDXGz2SRFUSgej78ul8t6pq4dN8CbT4mieBI32GIDVVU1MdpGwWBw
-        Fc+YxA2NFpsMUqmUhOqS0+nchIBQdcpmsxQIBD7bbLb1i9eWFyA0Wmwy4JDuS2Wv9wEJgrDp9/t/QdyQ
-        ZXnygiMqz8wVaLzFJoObt8Rj4Mvi4sJztItcLtdpLhSS97QYXOJ8TXvV+3IafNcNroDj/I+TJWDhfwiM
-        FgMHr3FoBtfDK2eAqq/9M9gEuPWpFpqBR/loEZPvCaMKfuh7hwqjBo9KqxZwFkzz/PDQxB/4/emPZI0s
-        KQAAAABJRU5ErkJggg==
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPdEVYdFRpdGxlAFNhdGVsaXRlOxVk56QAAAILSURB
+        VDhPjZHNaxNRFMULhS7daF37FwhmoQjdGMWt4EYScGM6oSC4GE2NhtbRYBonaUK+TUxmFTQfJoGEiApi
+        BZMomEUdA6FuBZGmuBDaSkOv546TIe1U7IXfvHnv3XPee/dOENF/abVaB8J7fz/7YmaueB68Akd4Pi6q
+        1+vuXC73LZ1OW5PJpNkAostgW376iTC+4LWRuNFo3KvVasNqtUqJRGJgMoDAAYbP3n5l8W9gHYm73e6J
+        SqWyVSqVKBqNDmOx2I09Bkh2gV3ljSYeWoXHs5lMZgqnfsCp20tLvvm7njs/Q6HQRiQSmWfT/QbS7PIK
+        i3fPCU9u2+329WKxuNbpdKjX61E4HN7x+R56IDo6utVBT5CAG++bKhQKa+12mwaDAfX7fcItCIINFo1j
+        KiI75/P5dxgNcbPZJEVRKB6Pvy6Xy3qmrh03wJtPiaJ4EjfYYgNVVTUx2kbBYHAVz5jEDY0WmwxSqZSE
+        6pLT6dyEgFB1ymazFAgEPttstvWL15YXIDRabDLgkO5LZa/3AQmCsOn3+39B3JBlefKCIyrPzBVovMUm
+        g5u3xGPgy+LiwnO0i1wu12kuFJL3tBhc4nxNe9X7chp81w2ugOP8j5MlYOF/CIwWAwevcWgG18MrZ4Cq
+        r/0z2AS49akWmoFH+WgRk+8Jowp+6HuHCqMGj0qrFnAWTPP88NDEH/j96Y9kjSwpAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="btnCdbSat.ImageOptions.LargeImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        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
-        XaQC/3+Q0z86rH56Z9hiUwAAAABJRU5ErkJggg==
+        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
+        2GJTAAAAAElFTkSuQmCC
 </value>
   </data>
   <data name="ribbonPage1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">

+ 1 - 0
DW5S.App/UserControl/CtrlADTask.cs

@@ -34,6 +34,7 @@ namespace DW5S.App.UserControl
                 var taskList = await Query();
                 list.AddRange(taskList);
                 gridView1.RefreshData();
+                gridView1.BestFitColumns();
             }
             catch (Exception ex)
             {

+ 1 - 6
DW5S.App/UserControl/CtrlHome.cs

@@ -463,11 +463,6 @@ namespace DW5S.App.UserControl
                     addItem = frm.info;
                     var addItemSignal = frm.selectedItem;
                     if (addItem.PosType == EnumPosType.X1D1CX)
-                    {
-                        addItem.Adja1Sat = null;
-                        addItem.Adja2Sat = null;
-                    }
-                    else if (addItem.PosType == EnumPosType.X2D1 || addItem.PosType == EnumPosType.X2D1NoRef)
                     {
                         addItem.Adja2Sat = null;
                     }
@@ -475,7 +470,7 @@ namespace DW5S.App.UserControl
                     var repsTask = unitOfWork.Of<TaskInfo>();
                     var taskInfo = await repsTask.AddOrUpdateAsync(addItem.To<TaskInfo>());
                     await unitOfWork.SaveAsync();
-
+                    addItem.Id = taskInfo.Id;
                     List<TaskSig> sigList = new List<TaskSig>();
                     foreach (var item in addItemSignal)
                     {

+ 445 - 0
DW5S.Controller/ResultController.cs

@@ -0,0 +1,445 @@
+using DW5S.DTO;
+using DW5S.Entity;
+using DW5S.Repostory;
+using DW5S.WebApi;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Serilog;
+
+namespace DW5S.Controllers
+{
+    /// <summary>
+    /// 结果查询相关接口
+    /// </summary>
+    public class ResultController : BaseController
+    {
+        ILogger logger { get; set; }
+
+        IUnitOfWork unitOfWork { get; set; }
+        /// <summary>
+        /// 根据时间范围查询参估结果
+        /// </summary>
+        /// <param name="dto"><see cref="CgResQueryDto"/>查询参数</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        public async Task<AjaxResult<List<CgResDto>>> GetCgResByTimeRange(CgResQueryDto dto)
+        {
+            List<CgResDto> cgList = new List<CgResDto>();
+            try
+            {
+                DateTime start = dto.BeginTime;
+                DateTime end = dto.EndTime;
+                var repsPosRes = unitOfWork.OfLong<PosRes>();
+                var query = repsPosRes.AsQueryable().Where(p => p.SigTime >= start && p.SigTime <= end && p.TaskID == dto.TaskInfoID);
+                if (!dto.IncludeInvalidate)
+                    query = query.Where(p => p.PosLon != 999);
+                if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0)
+                    query = query.Where(p => p.FrequpHz == dto.TarFrequpHz.Value);
+                var cgRes = await query.Include(p => p.CgRes).Select(t => t.CgRes).Include(t => t.StationRes).OrderByDescending(p => p.SigTime).ToListAsync();
+                var listDto = MapCgDto(cgRes);
+                cgList.AddRange(listDto);
+
+                return Success(cgList);
+            }
+            catch (TaskCanceledException)
+            {
+                string msg = $"参估结果时间范围查询超时.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}";
+                logger.Error(msg);
+                return Error<List<CgResDto>>("参估结果时间范围查询超时");
+            }
+            catch (Exception ex)
+            {
+                string msg = $"参估结果时间范围查询异常.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}";
+                logger.Error(msg, ex);
+                return Error<List<CgResDto>>("参估结果时间范围查询异常");
+            }
+        }
+
+        /// <summary>
+        /// 获取指定任务的所有上行频点
+        /// </summary>
+        /// <param name="dto">任务频点查询模型</param>
+        /// <returns>任务所有频点信息</returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        public async Task<AjaxResult<List<TaskFreqResDto>>> GetTaskFreqs(TaskFreqQueryDto dto)
+        {
+            var posList = new List<long>();
+            try
+            {
+                var repsPosRes = unitOfWork.OfLong<PosRes>();
+                var listFrequp = await repsPosRes.AsQueryable().Where(p => p.TaskID == dto.TaskInfoID).Select(p => p.FrequpHz).Distinct().ToListAsync();
+                foreach (var item in listFrequp)
+                {
+                    if (!posList.Contains(item))
+                        posList.Add(item);
+                }
+                var res = posList.Select(p => new TaskFreqResDto() { FreqUpHz = p }).OrderBy(o => o.FreqUpHz).ToList();
+                return Success(res);
+            }
+            catch (Exception ex)
+            {
+                string msg = $"定位结果查询异常-任务编号:{dto.TaskInfoID}";
+                logger.Error(msg, ex);
+                return Error<List<TaskFreqResDto>>("定位结果查询异常");
+            }
+        }
+
+        /// <summary>
+        /// 获取所有执行中的任务
+        /// </summary>
+        [HttpPost]
+        public async Task<AjaxResult<List<TaskQueryResDto>>> GetRunningTasks()
+        {
+            try
+            {
+                var repsTask = unitOfWork.Of<TaskInfo>();
+
+                var tasks = await repsTask.AsQueryable().Where(p => p.TaskState == EnumTaskState.Running).ToListAsync();
+                var res = tasks.Select(t => new TaskQueryResDto()
+                {
+                    TaskID = t.Id,
+                    PosType = (EnumPosTypeDto)(int)t.PosType,
+                    TaskType = (EnumTaskTypeDto)(int)t.TaskType,
+                });
+                return Success(res.ToList());
+
+            }
+            catch (Exception ex)
+            {
+                string msg = $"查询执行中的任务异常";
+                logger.Error(msg, ex);
+                return Error<List<TaskQueryResDto>>("查询执行中的任务异常");
+            }
+        }
+
+        #region 定位结果查询接口
+        /// <summary>
+        /// 根据时间范围查询定位结果
+        /// </summary>
+        /// <param name="dto"><see cref="PosRequestByTimeRangeDto"/>查询参数</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        public async Task<AjaxResult<List<PosResDto>>> GetPosResByTimeRange(PosRequestByTimeRangeDto dto)
+        {
+            var response = (await GetPosResByTimeRangeObsolete(dto));
+            if (response.code == 200)
+            {
+                var listDto = response.data?.Select(p => MapDto(p)).ToList();
+                return Success(listDto);
+            }
+            else
+            {
+                return Error<List<PosResDto>>(response.msg);
+            }
+        }
+
+        /// <summary>
+        /// 查询最后X小时的的定位结果
+        /// </summary>
+        /// <param name="dto"><see cref="PosRequestByLastRangeDto"/>查询参数</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        public async Task<AjaxResult<List<PosResDto>>> GetPosResByLastHours(PosRequestByLastRangeDto dto)
+        {
+            var response = (await GetPosResByLastHoursObsolete(dto));
+            if (response.code == 200)
+            {
+                var listDto = response.data?.Select(p => MapDto(p)).ToList();
+                return Success(listDto);
+            }
+            else
+            {
+                return Error<List<PosResDto>>(response.msg);
+            }
+        }
+
+
+        /// <summary>
+        /// 根据时间范围查询定位结果(此方法内部调用)
+        /// </summary>
+        /// <param name="dto"><see cref="PosRequestByTimeRangeDto"/>查询参数</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        [Obsolete]
+        public async Task<AjaxResult<List<PosRes>>> GetPosResByTimeRangeObsolete(PosRequestByTimeRangeDto dto)
+        {
+            List<PosRes> posList = new List<PosRes>();
+            try
+            {
+                DateTime start = dto.BeginTime;
+                DateTime end = dto.EndTime;
+
+                List<TargetInfo> targets;
+                var repsTarget = unitOfWork.Of<TargetInfo>();
+                targets = repsTarget.GetAllAsync().Result.ToList();
+
+
+                var repsPosRes = unitOfWork.OfLong<PosRes>();
+                var query = repsPosRes.AsQueryable().Where(p => p.SigTime >= start && p.SigTime <= end && p.TaskID == dto.TaskInfoID);
+                if (!dto.IncludeInvalidate)
+                    query = query.Where(p => p.PosLon != 999);
+                if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0)
+                    query = query.Where(p => p.FrequpHz == dto.TarFrequpHz.Value);
+                var posRes = await query.Include(p => p.CheckRes).OrderByDescending(p => p.SigTime).ToListAsync();
+
+                foreach (var itemPos in posRes)
+                {
+                    if (itemPos.TargetInfoID > 0)
+                    {
+                        itemPos.TargetInfo = targets.FirstOrDefault(p => p.Id == itemPos.TargetInfoID);
+                    }
+                }
+                posList.AddRange(posRes);
+
+                return Success(posList);
+            }
+            catch (Exception ex)
+            {
+                string msg = $"定位结果时间范围查询异常.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}";
+                logger.Error(msg, ex);
+                return Error<List<PosRes>>("定位结果时间范围查询异常");
+            }
+        }
+        /// <summary>
+        /// 根据时间范围查询定位结果(此方法内部调用)
+        /// </summary>
+        /// <param name="dto"><see cref="PosRequestByTimeRangeDto"/>查询参数</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        [Obsolete]
+        public async Task<AjaxResult<List<RePosResDto>>> GetPosCgResByTimeRangeObsolete(PosRequestByTimeRangeDto dto)
+        {
+            List<RePosResDto> posList = new List<RePosResDto>();
+            try
+            {
+                DateTime start = dto.BeginTime;
+                DateTime end = dto.EndTime;
+
+                List<TargetInfo> targets;
+                var repsTarget = unitOfWork.Of<TargetInfo>();
+                targets = repsTarget.GetAllAsync().Result.ToList();
+
+
+                var repsPosRes = unitOfWork.OfLong<PosRes>();
+
+                var query = repsPosRes.AsQueryable().Where(p => p.SigTime >= start && p.SigTime <= end && p.TaskID == dto.TaskInfoID);
+                if (!dto.IncludeInvalidate)
+                    query = query.Where(p => p.PosLon != 999);
+                if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0)
+                    query = query.Where(p => p.FrequpHz == dto.TarFrequpHz.Value);
+                var posRes = await query.OrderByDescending(p => p.SigTime).ToListAsync();
+
+                foreach (var itemPos in posRes)
+                {
+                    var repos = new RePosResDto();
+                    repos.Id = itemPos.Id;
+                    repos.SigTime = itemPos.SigTime;
+                    repos.PosLon = itemPos.PosLon;
+                    repos.PosLat = itemPos.PosLat;
+                    repos.MirrLon = itemPos.MirrLon;
+                    repos.MirrLat = itemPos.MirrLat;
+                    repos.TaskInfoID = itemPos.TaskID;
+                    repos.FreqUpHz = itemPos.FrequpHz;
+                    repos.StationResID = itemPos.StationResID;
+                    repos.CxResID = itemPos.CxResID;
+                    repos.CgResID = itemPos.CgResID;
+                    repos.CheckResID = itemPos.CheckResID;
+                    repos.PosResType = (EnumPosTypeDto)itemPos.PosResType;
+                    //repos.TargetState = itemPos.TargetState;
+                    var target = targets?.FirstOrDefault(p => p.Id == itemPos.TargetInfoID);
+                    if (target != null)
+                    {
+                        repos.TargetInfo = target.To<TargetInfoDto>();
+                    }
+                    if (itemPos.TargetInfo != null && !string.IsNullOrWhiteSpace(itemPos.TargetInfo.TargeColor))
+                    {
+                        repos.ColorKey = itemPos.TargetInfo.TargeColor;
+                    }
+                    repos.BaseTargetName = itemPos.TargetInfo?.TargetName;
+                    var repsCheckRes = unitOfWork.OfLong<CheckRes>();
+                    var checkRes = await repsCheckRes.FirstOrDefaultAsync(p => p.Id == itemPos.CheckResID);
+                    if (checkRes != null)
+                    {
+                        repos.CheckRes = checkRes.To<CheckResDto>();
+                    }
+                    repos.BaseCheckType = itemPos.CheckRes?.PosCheckType?.GetEnumDisplayName();
+
+                    var repsCgRes = unitOfWork.OfLong<CgRes>();
+                    var cgRes = await repsCgRes.FirstOrDefaultAsync(p => p.Id == itemPos.CgResID);
+                    if (cgRes != null)
+                    {
+                        repos.CgRes = cgRes.To<CgResDto>();
+                    }
+
+                    var repsCxRes = unitOfWork.OfLong<CxRes>();
+                    var cxRes = await repsCxRes.FirstOrDefaultAsync(p => p.Id == itemPos.CxResID);
+                    if (cxRes != null)
+                    {
+                        repos.CxRes = cxRes.To<CxResDto>();
+                    }
+
+                    var repsstationRes = unitOfWork.OfLong<StationRes>();
+                    var stationRes = await repsstationRes.FirstOrDefaultAsync(p => p.Id == itemPos.StationResID);
+                    if (stationRes != null)
+                    {
+                        repos.StationRes = cxRes.To<StationResDto>();
+                    }
+                    posList.Add(repos);
+                }
+                return Success(posList);
+            }
+            catch (Exception ex)
+            {
+                string msg = $"定位结果时间范围查询异常.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}";
+                logger.Error(msg, ex);
+                return Error<List<RePosResDto>>("定位结果时间范围查询异常");
+            }
+        }
+        /// <summary>
+        /// 查询最后X小时的的定位结果(此方法内部调用)
+        /// </summary>
+        /// <param name="dto"><see cref="PosRequestByLastRangeDto"/>查询参数</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        [HttpPost]
+        [Obsolete]
+        public async Task<AjaxResult<List<PosRes>>> GetPosResByLastHoursObsolete(PosRequestByLastRangeDto dto)
+        {
+            List<PosRes> posList = new List<PosRes>();
+            try
+            {
+
+                DateTime max = DateTime.MinValue;
+
+                var repsPosRes = unitOfWork.OfLong<PosRes>();
+
+              
+                    var query = repsPosRes.AsQueryable().Where(p => p.TaskID == dto.TaskInfoID);
+                    if (!dto.IncludeInvalidate)
+                    {
+                        query = query.Where(p => p.PosLon != 999);
+
+                    }
+                    if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0)
+                    {
+                        query = query.Where(p => p.FrequpHz == dto.TarFrequpHz);
+                    }
+                    bool any = await query.AnyAsync();
+                    if (any)
+                        max = await query.MaxAsync(p => p.SigTime);
+                if (max == DateTime.MinValue) return Success(posList);
+                DateTime min = max.AddHours(-dto.Hours);
+                var res = await GetPosResByTimeRangeObsolete(new PosRequestByTimeRangeDto()
+                {
+                    TaskInfoID = dto.TaskInfoID,
+                    BeginTime = min,
+                    EndTime = max,
+                    IncludeInvalidate = dto.IncludeInvalidate,
+                    TarFrequpHz = dto.TarFrequpHz,
+                });
+                return res;
+            }
+            catch (Exception ex)
+            {
+                string msg = $"定位结果查询最新数据异常-任务编号:{dto.TaskInfoID},Hours:{dto.Hours}";
+                logger.Error(msg, ex);
+                return Error<List<PosRes>>("定位结果查询最新数据异常");
+            }
+        }
+        #endregion
+
+        private PosResDto MapDto(PosRes res)
+        {
+            return new PosResDto()
+            {
+                ID = res.Id,
+                FreqUpHz = res.FrequpHz,
+                SigTime = res.SigTime,
+                TaskInfoID = res.TaskID,
+                TarName = res.TargetInfo?.TargetName,
+                PosLon = res.PosLon,
+                PosLat = res.PosLat,
+                MirrLon = res.MirrLon,
+                MirrLat = res.MirrLat,
+                CheckType = res.CheckRes?.PosCheckType == null ? "" : res.CheckRes?.PosCheckType?.GetEnumDisplayName(),
+                //TargetState = (EnumTargetStateDto)res.TargetState,
+                PosResType = (EnumPosResTypeDto)res.PosResType,
+                Confidence = res.Confidence,
+                CreateTime = res.CreateTime,
+            };
+        }
+
+        private List<CgResDto> MapCgDto(List<CgRes> listCg)
+        {
+            List<CgResDto> list = new List<CgResDto>();
+            foreach (CgRes cgRes in listCg)
+            {
+                var dto = new CgResDto()
+                {
+                    ID = cgRes.Id,
+                    TaskID = cgRes.TaskID,
+                    FreqUpHz = cgRes.FrequpHz,
+                    SigTime = cgRes.SigTime,
+                    Dto1 = cgRes.Dto1,
+                    Dfo1 = cgRes.Dfo1,
+                    Snr1 = cgRes.Snr1,
+                    Dto2 = cgRes.Dto2,
+                    Dfo2 = cgRes.Dfo2,
+                    //Snr2 = cgRes.Snr2,
+                    //DtoCdb = cgRes.DtoCdb,
+                    //DfoCdb = cgRes.DfoCdb,
+                    //SnrCdb = cgRes.SnrCdb,
+                    //YbMainDto = cgRes.YbMainDto,
+                    //YbMainDfo = cgRes.YbMainDfo,
+                    //YbMainSnr = cgRes.YbMainSnr,
+                    //YbAdja1Dto = cgRes.YbAdja1Dto,
+                    //YbAdja1Dfo = cgRes.YbAdja1Dfo,
+                    //YbAdja1Snr = cgRes.YbAdja1Snr,
+                    //YbAdja2Dfo = cgRes.YbAdja2Dfo,
+                    //YbAdja2Dto = cgRes.YbAdja2Dto,
+                    //YbAdja2Snr = cgRes.YbAdja2Snr,
+                    //TarFreqUp = cgRes.TarFreqUp,
+                    //TarFreqDown = cgRes.TarFreqDown,
+                    //RefFreqUp = cgRes.RefFreqUp,
+                    //RefFreqDown = cgRes.RefFreqDown,
+                    MainCode = cgRes.MainCode,
+                    Adja1Code = cgRes.Adja1Code,
+                    Adja2Code = cgRes.Adja2Code,
+                    MainXlTime = cgRes.MainXlTime,
+                    Adja1XlTime = cgRes.Adja1XlTime,
+                    //Adja2XlTime = cgRes.Adja2XlTime,
+                    MainX = cgRes.MainX,
+                    MainY = cgRes.MainY,
+                    MainZ = cgRes.MainZ,
+                    Adja1X = cgRes.Adja1X,
+                    Adja1Y = cgRes.Adja1Y,
+                    //Adja1Z = cgRes.Adja1Z,
+                    //Adja2X = cgRes.Adja2X,
+                    //Adja2Y = cgRes.Adja2Y,
+                    //Adja2Z = cgRes.Adja2Z,
+                    //Adja2Vx = cgRes.Adja2Vx,
+                    //Adja2Vy = cgRes.Adja2Vy,
+                    //Adja2Vz = cgRes.Adja2Vz,
+                    SatTxLon = cgRes.StationRes.SatTxLon,
+                    SatTxLat = cgRes.StationRes.SatTxLat,
+                    CdbTxLon = cgRes.StationRes.CdbTxLon,
+                    CdbTxLat = cgRes.StationRes.CdbTxLat,
+                    CxLon = cgRes.StationRes.CxLon,
+                    CxLat = cgRes.StationRes.CxLat,
+                    RefLon = cgRes.StationRes.RefLon,
+                    RefLat = cgRes.StationRes.RefLat,
+                    CreateTime = cgRes.CreateTime,
+                };
+                list.Add(dto);
+            }
+            return list;
+
+        }
+    }
+}

+ 15 - 0
DW5S.DTO/PosDto/CxResDto.cs

@@ -0,0 +1,15 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace DW5S.DTO
+{
+  
+    public class CxResDto
+    {
+        public long Id { get; set; }
+        [Display(Name = "信号时刻")]
+        public DateTime SigTime { get; set; }
+
+        [Display(Name = "测向方向值")]
+        public double Fx { get; set; }
+    }
+}

+ 162 - 0
DW5S.DTO/RePosResDto.cs

@@ -0,0 +1,162 @@
+using DW5S.Entity;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace DW5S.DTO
+{
+    public class RePosResDto 
+    {
+        /// <summary>
+        /// 信号时刻
+        /// </summary>
+        [Display(Name = "信号时刻")]
+        [DisplayFormat(DataFormatString = "yyyy-MM-dd HH:mm:ss.fff")]
+       
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 定位经度
+        /// </summary>
+        [Display(Name = "定位经度", AutoGenerateField = false)]
+       
+        public double PosLon { get; set; }
+
+        /// <summary>
+        /// 定位纬度
+        /// </summary>
+        [Display(Name = "定位纬度", AutoGenerateField = false)]
+       
+        public double PosLat { get; set; }
+
+
+        /// <summary>
+        /// 定位经度
+        /// </summary>
+        [Display(Name = "镜像经度", AutoGenerateField = false)]
+       
+        public double MirrLon { get; set; }
+
+        /// <summary>
+        /// 定位纬度
+        /// </summary>
+        [Display(Name = "镜像纬度", AutoGenerateField = false)]
+      
+        public double MirrLat { get; set; }
+
+        /// <summary>
+        /// 置信度
+        /// </summary>
+        [Display(Name = "置信度")]
+      
+        public int Confidence { get; set; }
+
+        /// <summary>
+        /// 当前点是否被选中(默认false)
+        /// </summary>
+        [Display(Name = "是否选中", AutoGenerateField = false)]
+        [NotMapped]
+        public bool Selected { get; set; }
+
+        /// <summary>
+        /// 当前点是否可见(默认true)
+        /// </summary>
+        [Display(Name = "是否可见", AutoGenerateField = false)]
+        [NotMapped]
+        public bool Visible { get; set; } = true;
+
+        /// <summary>
+        /// 用于生成颜色的一个key,相同的key具有相同的颜色,当ColorKey为html颜色时则使用此颜色(如#A1B2FF),默认红色#CC3333
+        /// </summary>、
+        [Display(Name = "颜色标记", AutoGenerateField = false)]
+        [NotMapped]
+        public string ColorKey { get; set; } = "#CC3333";
+
+        /// <summary>
+        /// 判断定位点是否在一个框选的矩形区域内
+        /// </summary>
+        /// <param name="startLon"></param>
+        /// <param name="startLat"></param>
+        /// <param name="endLon"></param>
+        /// <param name="endLat"></param>
+        /// <returns></returns>
+        public bool InRectangle(double startLon, double startLat, double endLon, double endLat)
+        {
+            return PosLon >= startLon && PosLon <= endLon && PosLat >= startLat && PosLat <= endLat;
+        }
+
+        /// <summary>
+        /// 内部调用的属性
+        /// </summary>
+        [Display(AutoGenerateField = false)]
+        [NotMapped]
+        public int ClusterCount { get; set; } = 1;
+
+        /// <summary>
+        /// 内部调用的属性
+        /// </summary>
+        [Display(AutoGenerateField = false)]
+        [NotMapped]
+        public int ClusterKey { get; set; } = int.MinValue;
+        [Display(Name = "任务编号")]
+        public int TaskInfoID { get; set; }
+
+        [Display(Name = "上行频点")]
+        public long FreqUpHz { get; set; }
+
+        [Display(Name = "站点ID")]
+        public long StationResID { get; set; }
+
+        [Display(AutoGenerateField = false)]
+       
+        public virtual StationResDto StationRes { get; set; }
+
+        [Display(Name = "测向编号")]
+        public long? CxResID { get; set; }
+
+        [Display(AutoGenerateField = false)]
+       
+        public virtual CxResDto CxRes { get; set; }
+
+        [NotMapped]
+        [Display(AutoGenerateField = false)]
+        public string BaseCheckType { get; set; }
+
+        [Display(Name = "参估编号")]
+        public long CgResID { get; set; }
+
+        [Display(AutoGenerateField = false)]
+     
+        public virtual CgResDto CgRes { get; set; }
+
+        [Display(AutoGenerateField = false)]
+        public int? TargetInfoID { get; set; }
+        public TargetInfoDto TargetInfo;
+
+        [NotMapped]
+        [Display(AutoGenerateField = false)]
+        public string BaseTargetName { get; set; }
+
+        [Display(Name = "检测编号")]
+        public long? CheckResID { get; set; }
+
+        [Display(AutoGenerateField = false)]
+       
+        public virtual CheckResDto CheckRes { get; set; }
+
+        [Display(Name = "定位类型")]
+        public EnumPosTypeDto PosResType { get; set; }
+
+       
+
+        [Display(Name = "编号")]
+        public long Id { get; set; }
+
+        [Display(Name = "创建时间")]
+        [DisplayFormat(DataFormatString = "yyyy-MM-dd HH:mm:ss")]
+        public DateTime CreateTime { get; set; }
+
+        [Display(Name = "更新时间")]
+        [DisplayFormat(DataFormatString = "yyyy-MM-dd HH:mm:ss")]
+        public DateTime UpdateTime { get; set; }
+    }
+}

+ 41 - 0
DW5S.DTO/TargetInfoDto.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Drawing;
+
+namespace DW5S.Entity
+{
+    /// <summary>
+    /// 目标信息
+    /// </summary>
+    public class TargetInfoDto 
+    {
+        public int Id { get; set; }
+
+       
+        /// <summary>
+        /// 目标名称
+        /// </summary>
+        [Display(Name = "目标名称")]
+        public string TargetName { get; set; }
+
+        /// <summary>
+        /// 目标颜色
+        /// </summary>
+        [Display(Name = "目标颜色")]
+        public string TargeColor { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime CreateTime { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public DateTime UpdateTime { get; set; }
+    }
+}