zoulei vor 1 Jahr
Ursprung
Commit
2634783b8f

+ 1 - 0
XdCxRhDW.App/App.config

@@ -67,6 +67,7 @@
 	</system.data>
 	<connectionStrings>
 		<add name="DbCon" connectionString="Data Source=|DataDirectory|\Database.db" providerName="System.Data.SQLite.EF6" />
+		<add name="DbConPart" connectionString="Data Source=|DataDirectory|\Database.db" providerName="System.Data.SQLite.EF6" />
 	</connectionStrings>
 	<appSettings>
 		<!--程序标题-->

+ 16 - 28
XdCxRhDW.App/CorTools/XlCalculateForm.cs

@@ -29,38 +29,26 @@ namespace XdCxRhDW.App.CorTools
     public partial class XlCalculateForm : DevExpress.XtraEditors.XtraForm
     {
         List<string> resXl = new List<string>();
-        List<SatEphDto> list = new List<SatEphDto>();
+        List<SatEphDto> listEph = new List<SatEphDto>();
+        IEnumerable<XlInfo> listXl;
         public XlCalculateForm()
         {
             InitializeComponent();
         }
-
-        private async void XlCalculateForm_Load(object sender, EventArgs e)
+        public XlCalculateForm(IEnumerable<XlInfo> listXl)
+            : this()
         {
-            gridControl.Init<SatEphDto>().UseSort().UseFilter().UseMultiSelect().UseRowNumber();
-            gridControl.DataSource = list;
-            await LoadData();
-            txtTle.UseDoubleClickToSelectAll();
-            txtTle.UseDefault().SetStringData(resXl);
+            this.listXl = listXl;
         }
-        public async Task LoadData()
+        private void XlCalculateForm_Load(object sender, EventArgs e)
         {
-            try
-            {
-                resXl.Clear();
-                using (RHDWContext db = new RHDWContext())
-                {
-                    var res = await db.XlInfos.OrderBy(p => p.SatName).OrderByDescending(p => p.TimeBJ).ToListAsync();
-                    resXl.AddRange(res.Select(s => $"{s.Line1};{s.Line2}"));
-                }
-            }
-            catch (Exception ex)
-            {
-                Serilog.Log.Error(ex, "加载星历信息异常");
-                DxHelper.MsgBoxHelper.ShowError("加载星历信息异常");
-            }
+            gridControl.Init<SatEphDto>().UseSort().UseFilter().UseMultiSelect().UseRowNumber();
+            gridControl.DataSource = listEph;
+            txtTle.UseDoubleClickToSelectAll();
+            txtTle.UseDefault().SetStringData(listXl.Select(p=>p.TwoLine));
         }
 
+      
         private async void btnCalculate_Click(object sender, EventArgs e)
         {
 
@@ -84,7 +72,7 @@ namespace XdCxRhDW.App.CorTools
                     return;
                 }
             }
-            list.Clear();
+            listEph.Clear();
             var settings = new SysSetings();
             using (RHDWContext db = new RHDWContext())
             {
@@ -98,10 +86,10 @@ namespace XdCxRhDW.App.CorTools
                     {
                         string url = string.Format("http://{0}:{1}/Api/Xl/CalcMult", IpHelper.GetLocalIp(), settings.HttpPort);
                         var XlCalcMultDto = new XlCalcMultDto() { tleStr = txtTle.Text, start = startTime, end = endTime, spanSeconds = (int)txtSpanSeconds.EditValue };
-                        var ephRes =await HttpHelper.PostRequestAsync<List<SatEphDto>>(url, XlCalcMultDto);
+                        var ephRes = await HttpHelper.PostRequestAsync<List<SatEphDto>>(url, XlCalcMultDto);
                         if (ephRes.code == 200)
                         {
-                            list.AddRange(ephRes.data);
+                            listEph.AddRange(ephRes.data);
                             gridView.RefreshData();
                         }
                     }
@@ -112,10 +100,10 @@ namespace XdCxRhDW.App.CorTools
                         var ephRes = await HttpHelper.PostRequestAsync<SatEphDto>(url, XlCalcDto);
                         if (ephRes.code == 200)
                         {
-                            list.Add(ephRes.data);
+                            listEph.Add(ephRes.data);
                             gridView.RefreshData();
                         }
-                      
+
                     }
                 }
                 catch (Exception ex)

+ 1 - 1
XdCxRhDW.App/EditForms/SatEditor.cs

@@ -37,7 +37,7 @@ namespace XdCxRhDW.App.EditForms
         private async void SatEditor_Load(object sender, EventArgs e)
         {
             List<string> list = new List<string>();
-            using (RHDWContext db = new RHDWContext())
+            using (RHDWPartContext db = new RHDWPartContext(DateTime.MinValue))
             {
                 var res = await db.XlInfos.OrderBy(p => p.SatName).ToListAsync();
                 if (res != null)

+ 69 - 45
XdCxRhDW.App/MainForm.cs

@@ -20,8 +20,8 @@ using XdCxRhDW.Repostory.EFContext;
 using System.Data.Entity;
 using System.IO;
 using XdCxRhDW.Repostory.Model;
-using System.Windows.Shapes;
 using XdCxRhDW.Core;
+using System.Data.Entity.Migrations;
 
 namespace XdCxRhDW
 {
@@ -47,66 +47,89 @@ namespace XdCxRhDW
             ctrlTypes.Add("星历推算", typeof(XlCalculateForm));
             btn_ItemClick(null, null);
             XlScan();
+
         }
+
         private async void XlScan()
         {
             await Task.Run(async () =>
             {
+
                 while (true)
                 {
                     await Task.Delay(10000);
+                    SysSetings settings = null;
                     using (RHDWContext db = new RHDWContext())
                     {
-                        var settings = await db.SysSetings.FirstOrDefaultAsync();
-                        if (settings==null||settings.XLDirectory == null || !Directory.Exists(settings.XLDirectory))
+                        settings = await db.SysSetings.FirstOrDefaultAsync();
+                        if (settings == null || settings.XLDirectory == null || !Directory.Exists(settings.XLDirectory))
                             continue;
-                        string[] files = Directory.GetFiles(settings.XLDirectory, "*.txt");
-                        foreach (string file in files)
+                    }
+                    if (!Directory.Exists(settings.XLDirectory))
+                    {
+                        continue;
+                    }
+                    DirectoryInfo dir = new DirectoryInfo(settings.XLDirectory);
+                    var backUpDir = dir.Parent.FullName;
+                    var files = Directory.EnumerateFiles(settings.XLDirectory, "*", SearchOption.AllDirectories);
+                    foreach (string file in files)
+                    {
+                        var lines = File.ReadAllLines(file).ToList();
+                        lines.RemoveAll(p => string.IsNullOrWhiteSpace(p));
+                        List<XlInfo> tmp = new List<XlInfo>();
+                        for (int i = 0; i < lines.Count; i += 3)
                         {
-                            var lines = File.ReadAllLines(file).ToList();
-                            lines.RemoveAll(p => string.IsNullOrWhiteSpace(p));
-                            List<XlInfo> tmp = new List<XlInfo>();
-                            for (int i = 0; i < lines.Count; i += 3)
+                            var satName = lines[i].Trim();
+                            if (satName.StartsWith("0 "))
+                                satName = satName.Substring(2).Trim();
+                            if (satName.StartsWith("TBA"))//待发布的卫星 
+                                continue;
+                            XlInfo xl = new XlInfo()
                             {
-                                var satName = lines[i].Trim();
-                                if (satName.StartsWith("0 "))
-                                    satName = satName.Substring(2).Trim();
-                                if (satName.StartsWith("TBA"))//待发布的卫星 
-                                    continue;
-                                XlInfo xl = new XlInfo()
-                                {
-                                    SatName = satName,
-                                    Line1 = lines[i + 1],
-                                    Line2 = lines[i + 2],
-                                    SatCode = Convert.ToInt32(lines[i + 1].Substring(2, 5))
-                                };
-                                var timeStr = lines[i + 1].Substring(18, 14).Replace(" ", "");//https://www.space-track.org/documentation#tle星历接口中说这里面可以接受空格
-                                var yearStr = timeStr.Substring(0, 2);
-                                var dayStr = timeStr.Substring(2, timeStr.Length - 2);
-                                var day = Convert.ToDouble(dayStr);
-                                var year = 2000 + Convert.ToInt32(yearStr);
-                                DateTime dt = new DateTime(year, 1, 1, 0, 0, 0);
-                                dt = dt.AddDays(day);
-                                xl.TimeBJ = dt.AddHours(8);
-                                tmp.Add(xl);
-                            }
-                            foreach (var item in db.XlInfos)
+                                SatName = satName,
+                                Line1 = lines[i + 1],
+                                Line2 = lines[i + 2],
+                                SatCode = Convert.ToInt32(lines[i + 1].Substring(2, 5))
+                            };
+                            var timeStr = lines[i + 1].Substring(18, 14).Replace(" ", "");//https://www.space-track.org/documentation#tle星历接口中说这里面可以接受空格
+                            var yearStr = timeStr.Substring(0, 2);
+                            var dayStr = timeStr.Substring(2, timeStr.Length - 2);
+                            var day = Convert.ToDouble(dayStr);
+                            var year = 2000 + Convert.ToInt32(yearStr);
+                            DateTime dt = new DateTime(year, 1, 1, 0, 0, 0);
+                            dt = dt.AddDays(day);
+                            xl.TimeBJ = dt.AddHours(8);
+                            tmp.Add(xl);
+                        }
+                        var groupData = tmp.GroupBy(p => p.TimeBJ.ToString("yyyyMMdd"));
+                        foreach (var items in groupData)
+                        {
+                            using (RHDWPartContext db = new RHDWPartContext(items.First().TimeBJ))
                             {
-                                var findItem = tmp.Find(p => p.SatCode == item.SatCode && p.TimeBJ == item.TimeBJ);
-                                if (findItem != null)
+                                foreach (var item in items)
                                 {
-                                    item.Line1 = findItem.Line1;
-                                    item.Line2 = findItem.Line2;
-                                    item.UpdateTime = DateTime.Now;
+                                    var findItem = await db.XlInfos.FirstOrDefaultAsync(p => p.SatCode == item.SatCode && p.TimeBJ == item.TimeBJ);
+                                    if (findItem != null)
+                                    {
+                                        findItem.Line1 = item.Line1;
+                                        findItem.Line2 = item.Line2;
+                                        findItem.UpdateTime = item.UpdateTime;
+                                        db.XlInfos.AddOrUpdate(findItem);
+                                    }
+                                    else
+                                    {
+                                        db.XlInfos.Add(item);
+                                    }
                                 }
-                                tmp.Remove(findItem);
+                                await db.SaveChangesAsync();
                             }
-                            db.XlInfos.AddRange(tmp);
-                            await db.SaveChangesAsync();
-                            var baseDirectory = System.IO.Path.GetDirectoryName(file) + "\\XLBackUp";
-                            Directory.CreateDirectory(baseDirectory);
-                            File.Move(file, baseDirectory + "\\" + System.IO.Path.GetFileName(file));//修改名称
+
                         }
+
+                        //导入完成的文件放在备份目录
+                        var baseDirectory = Path.Combine(backUpDir, "TleBackUp");
+                        Directory.CreateDirectory(baseDirectory);
+                        File.Move(file, Path.Combine(baseDirectory, Path.GetFileName(file)));
                     }
                 }
             });
@@ -128,6 +151,7 @@ namespace XdCxRhDW
                     doc.Properties.AllowClose = DevExpress.Utils.DefaultBoolean.False;
                 else
                     doc.Properties.AllowClose = DevExpress.Utils.DefaultBoolean.True;
+
             }
             tabbedView1.ActivateDocument(doc.Control);
         }
@@ -153,7 +177,7 @@ namespace XdCxRhDW
                 var settings = await db.SysSetings.FirstOrDefaultAsync();
                 if (settings == null)
                 {
-                    DxHelper.MsgBoxHelper.ShowWarning($"请在系统设置中配置IP地址和Http端口");
+                    DxHelper.MsgBoxHelper.ShowWarning($"请在系统设置中配置Http端口");
                     return;
                 }
                 if (settings.HttpPort < 1)
@@ -169,7 +193,7 @@ namespace XdCxRhDW
                 catch
                 {
                     db.Dispose();
-                    DxHelper.MsgBoxHelper.ShowError($"无法打开默认浏览器,请手动查看接口文档.地址{addr}");
+                    DxHelper.MsgBoxHelper.ShowError($"无法打开默认浏览器,请手动打开浏览器查看接口文档.地址{addr}");
                 }
             }
         }

+ 11 - 8
XdCxRhDW.App/Properties/licenses.licx

@@ -1,12 +1,15 @@
-DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.ImageComboBoxEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraMap.MapControl, DevExpress.XtraMap.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
 DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.SearchLookUpEdit, DevExpress.XtraGrid.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
 DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.SearchLookUpEdit, DevExpress.XtraGrid.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraMap.MapControl, DevExpress.XtraMap.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.Docking2010.DocumentManager, DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.ImageComboBoxEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.Docking.DockManager, DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
 DevExpress.XtraCharts.ChartControl, DevExpress.XtraCharts.v23.2.UI, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
 DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

+ 15 - 7
XdCxRhDW.App/UserControl/CtrlXl.cs

@@ -15,6 +15,7 @@ using System.Threading.Tasks;
 using System.Windows.Forms;
 using System.Net.Http;
 using ExtensionsDev;
+using System.Windows.Documents;
 
 namespace XdCxRhDW.App.UserControl
 {
@@ -137,18 +138,25 @@ namespace XdCxRhDW.App.UserControl
                 await Task.Run(async () =>
                 {
                     var ids = gridView1.GetSelectedRows();
-                    List<int> listID = new List<int>();
+                    List<XlInfo> list = new List<XlInfo>();
                     foreach (var idx in ids)
                     {
-                        var id = (gridView1.GetRow(idx) as XlInfo).ID;
-                        listID.Add(id);
+                        var item = gridView1.GetRow(idx) as XlInfo;
+                        list.Add(item);
                     }
-                    using (RHDWContext db = new RHDWContext())
+                    var groupData=list.GroupBy(p => p.TimeBJ.ToString("yyyyMMdd"));
+                    foreach (var item in groupData)
                     {
-                        var delItems = await db.XlInfos.Where(p => listID.Contains(p.ID)).ToListAsync();
-                        db.XlInfos.RemoveRange(delItems);
-                        await db.SaveChangesAsync();
+                        var dayIds = item.Select(p=>p.ID).ToList();
+                        using (RHDWPartContext db = new RHDWPartContext(item.First().TimeBJ))
+                        {
+                            var delItems = await db.XlInfos.Where(p => dayIds.Contains(p.ID)).ToListAsync();
+                            db.XlInfos.RemoveRange(delItems);
+                            await db.SaveChangesAsync();
+                        }
+
                     }
+                   
                 });
                 gridView1.DeleteSelectedRows();
 

+ 8 - 5
XdCxRhDW.App/UserControl/X2D1GDOPParam.cs

@@ -39,7 +39,7 @@ namespace XdCxRhDW.App.UserControl
             this.txtCapTime.DateTime = item.SigTime;
             this.txtDtousErr1.EditValue = 1;
             this.txtSatLocErr1.EditValue = 10000;
-            List<string> xlall = new List<string>();
+            //List<string> xlall = new List<string>();
             string mainTle = string.Empty;
             string adjaTle = string.Empty;
 
@@ -48,9 +48,13 @@ namespace XdCxRhDW.App.UserControl
             {
                 layoutControlItem14.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
             }
+            List<SatInfo> sats = null;
             using (RHDWContext db = new RHDWContext())
             {
-                var sats = db.SatInfos.ToList();
+                 sats = db.SatInfos.ToList();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(item.SigTime))
+            {
 
                 var cg = db.CgRes.Where(m => m.ID == item.CgResID).FirstOrDefault();
                 var station = db.StationRes.Where(m => m.ID == item.StationResID).FirstOrDefault();
@@ -59,9 +63,8 @@ namespace XdCxRhDW.App.UserControl
                     this.txtStationLocation1.Text = $"{station.CdbTxLon},{station.CdbTxLat}";
                     this.txtRefLocation1.Text = $"{station.RefLon},{station.RefLat}";
                 }
-
-                var xlList = db.XlInfos.OrderBy(p => p.SatName).OrderByDescending(p => p.TimeBJ).ToList();
-                xlall.AddRange(xlList.Select(m => m.TwoLine));
+                 
+                var xlall = XlCache.GetAll().Select(p => p.TwoLine).ToList();
                 if (xlall.Count() == 0) return;
                 if (cg.MainCode.HasValue && xlList.Any(m => m.SatCode == cg.MainCode.Value))
                 {

+ 1 - 0
XdCxRhDW.App/XdCxRhDW.App.csproj

@@ -413,6 +413,7 @@
     <Compile Include="UserControl\X2D1GDOPParam.Designer.cs">
       <DependentUpon>X2D1GDOPParam.cs</DependentUpon>
     </Compile>
+    <Compile Include="XlCache.cs" />
     <EmbeddedResource Include="CorTools\CgImageForm.resx">
       <DependentUpon>CgImageForm.cs</DependentUpon>
     </EmbeddedResource>

+ 39 - 0
XdCxRhDW.App/XlCache.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XdCxRhDW.Repostory.EFContext;
+using XdCxRhDW.Repostory.Model;
+
+namespace XdCxRhDW.App
+{
+    public static class XlCache
+    {
+        public static IEnumerable<XlInfo> GetAll()
+        {
+            try
+            {
+                DateTime now = DateTime.Now;
+                IEnumerable<XlInfo> xlInfos = null;
+                for (int i = 0; i < 30; i++)
+                {
+                    using (RHDWPartContext db = new RHDWPartContext(now.AddDays(-i)))
+                    {
+                        if (xlInfos == null)
+                            xlInfos = db.XlInfos.OrderBy(p => p.SatName).OrderByDescending(p => p.TimeBJ);
+                        else
+                            xlInfos = xlInfos.Concat(db.XlInfos.OrderBy(p => p.SatName).OrderByDescending(p => p.TimeBJ));
+                    }
+                }
+                return xlInfos;
+
+            }
+            catch (Exception ex)
+            {
+                Serilog.Log.Error(ex, "加载星历信息异常");
+                return null;
+            }
+        }
+    }
+}

+ 169 - 0
XdCxRhDW.Core/Api/EphHelper2.cs

@@ -0,0 +1,169 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.Core.Api
+{
+    /// <summary>
+    /// 星历推算帮助类.该类调用了Tle2XYZ.exe进程
+    /// </summary>
+    public static class EphHelper2
+    {
+        private static readonly DateTime dtZero = new DateTime(1970, 1, 1, 0, 0, 0, 0);
+        private const string dll = @"AddIns\Tle2XYZ.dll";//此dll已加密
+
+        #region cpp dll Interop 
+        [DllImport(dll, EntryPoint = "GenerateXYZByPeriod", CallingConvention = CallingConvention.Cdecl)]
+        private extern static void GenerateXYZByPeriod();
+
+        [DllImport(dll, EntryPoint = "GenerateXYZByPeriodWithOrbit", CallingConvention = CallingConvention.Cdecl)]
+        private extern static void GenerateXYZByPeriodWithOrbit();
+
+        [DllImport(dll, EntryPoint = "GenerateXYZByTimes", CallingConvention = CallingConvention.Cdecl)]
+        private extern static void GenerateXYZByTimes();
+        #endregion
+
+        /// <summary>
+        /// 推算双行星历
+        /// </summary>
+        /// <param name="tleStr">双行根数</param>
+        /// <param name="dt">指定时刻(北京时间)</param>
+        /// <returns></returns>
+        public static SatEphDto2 Calc(string tleStr, DateTime dt)
+        {
+            if (string.IsNullOrWhiteSpace(dll))
+                throw new Exception($"找不到{dll}");
+            return null;
+
+        }
+
+        /// <summary>
+        /// 批量推算双行星历
+        /// </summary>
+        /// <param name="tleStr">双行根数</param>
+        /// <param name="start">起始时刻(北京)</param>
+        /// <param name="end">结束(北京)</param>
+        /// <param name="spanSeconds">推算间隔(秒)</param>
+        /// <returns></returns>
+        public static List<SatEphDto2> CalcMult(string tleStr, DateTime start, DateTime end, int spanSeconds)
+        {
+            if (string.IsNullOrWhiteSpace(dll))
+                throw new Exception($"找不到{dll}");
+            return null;
+        }
+        static List<SatEphDto2> ParseResult(string result)
+        {
+            if (string.IsNullOrWhiteSpace(result))
+            {
+                throw new Exception("星历推算出现未知错误!");
+            }
+            var array = result.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+            List<SatEphDto2> list = new List<SatEphDto2>();
+            foreach (var item in array)
+            {
+                var arrayItem = item.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+                for (int i = 0; i < arrayItem.Length; i++)
+                {
+                    var dto = new SatEphDto2
+                    {
+                        SatId = Convert.ToInt32(arrayItem[i++]),
+                        TleTime = dtZero.AddSeconds(Convert.ToInt64(arrayItem[i++])).AddHours(16),//内部有BUG需要多加8h
+                        SatTime = dtZero.AddSeconds(Convert.ToInt64(arrayItem[i++])).AddHours(8),//utc to beijing
+                        X = Math.Round(Convert.ToDouble(arrayItem[i++]), 3),
+                        Y = Math.Round(Convert.ToDouble(arrayItem[i++]), 3),
+                        Z = Math.Round(Convert.ToDouble(arrayItem[i++]), 3),
+                        VX = Math.Round(Convert.ToDouble(arrayItem[i++]), 3),
+                        VY = Math.Round(Convert.ToDouble(arrayItem[i++]), 3),
+                        VZ = Math.Round(Convert.ToDouble(arrayItem[i]), 3)
+                    };
+                    list.Add(dto);
+                }
+            }
+            return list;
+
+        }
+        static SatEphDto2 ParseOneResult(string result)
+        {
+            if (string.IsNullOrWhiteSpace(result))
+            {
+                throw new Exception("星历推算出现未知错误!");
+            }
+            result = result.Replace(";", "");
+            var array = result.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+            int i = 0;
+            var dto = new SatEphDto2
+            {
+                SatId = Convert.ToInt32(array[i++]),
+                TleTime = dtZero.AddSeconds(Convert.ToInt64(array[i++])).AddHours(16),//内部有BUG需要多加8h
+                SatTime = dtZero.AddSeconds(Convert.ToInt64(array[i++])).AddHours(8),//utc to beijing
+                X = Math.Round(Convert.ToDouble(array[i++]), 3),
+                Y = Math.Round(Convert.ToDouble(array[i++]), 3),
+                Z = Math.Round(Convert.ToDouble(array[i++]), 3),
+                VX = Math.Round(Convert.ToDouble(array[i++]), 3),
+                VY = Math.Round(Convert.ToDouble(array[i++]), 3),
+                VZ = Math.Round(Convert.ToDouble(array[i++]), 3)
+            };
+            return dto;
+
+        }
+    }
+    public class SatEphDto2
+    {
+        /// <summary>
+        /// 卫星编号
+        /// </summary>
+        [Display(Name = "卫星编号")]
+        public int SatId { get; set; }
+        /// <summary>
+        /// 卫星时刻(北京时间)
+        /// </summary>
+        [Display(Name = "卫星时刻")]
+        public DateTime SatTime { get; set; }
+        /// <summary>
+        /// 星历时刻(北京时间)
+        /// </summary>
+        [Display(Name = "星历时刻")]
+        public DateTime TleTime { get; set; }
+        /// <summary>
+        /// X坐标
+        /// </summary>
+        [Display(Name = "X")]
+        public double X { get; set; }
+        /// <summary>
+        /// Y坐标
+        /// </summary>
+        [Display(Name = "Y")]
+        public double Y { get; set; }
+        /// <summary>
+        /// Z坐标
+        /// </summary>
+        [Display(Name = "Z")]
+        public double Z { get; set; }
+        /// <summary>
+        /// X方向速率
+        /// </summary>
+        [Display(Name = "VX")]
+        public double VX { get; set; }
+        /// <summary>
+        /// Y方向速率
+        /// </summary>
+        [Display(Name = "VY")]
+        public double VY { get; set; }
+        /// <summary>
+        /// Z方向速率
+        /// </summary>
+        [Display(Name = "VZ")]
+        public double VZ { get; set; }
+        public override string ToString()
+        {
+            return $"{X},{Y},{Z},{VX},{VY},{VZ}";
+        }
+
+    }
+}

+ 0 - 0
XdCxRhDW.Core/Api/Cpu参估/CafResult.cs → XdCxRhDW.Core/Api/检测Cpu参估/CafResult.cs


+ 0 - 0
XdCxRhDW.Core/Api/Cpu参估/CorResult.cs → XdCxRhDW.Core/Api/检测Cpu参估/CorResult.cs


+ 2 - 0
XdCxRhDW.Core/Api/Cpu参估/DmcResult.cs → XdCxRhDW.Core/Api/检测Cpu参估/DmcResult.cs

@@ -27,6 +27,8 @@ namespace XdCxRhDW.Core.Api
 
         public string UserName { get; set; }
 
+        public string SigType { get; set; }//信号类型,BPSK等
+
         public int Times { get; set; }//ms
     }
 }

+ 0 - 0
XdCxRhDW.Core/Api/Cpu参估/ImageResult.cs → XdCxRhDW.Core/Api/检测Cpu参估/ImageResult.cs


+ 8 - 3
XdCxRhDW.Core/Api/Cpu参估/XcorrUtils.cs → XdCxRhDW.Core/Api/检测Cpu参估/XcorrUtils.cs

@@ -170,11 +170,11 @@ namespace XdCxRhDW.Core.Api
                  stopWatch.Stop();
                  TimeSpan ts = stopWatch.Elapsed;
                  var str = dmp.StandardOutput.ReadToEnd();
-                 return ConvertDmcResult(str, ts.TotalMilliseconds);
+                 return ConvertDmcResult(dmcType,str, ts.TotalMilliseconds);
              });
         }
 
-        private IEnumerable<DmcResult> ConvertDmcResult(string res, double tm)
+        private IEnumerable<DmcResult> ConvertDmcResult(DmcType type,string res, double tm)
         {
             var lines = res.Split(Environment.NewLine.ToArray(), StringSplitOptions.RemoveEmptyEntries);
             foreach (var line in lines)
@@ -186,7 +186,12 @@ namespace XdCxRhDW.Core.Api
                 string userName = "";
                 if (items.Length >= 3)
                     userName = items[2];
-                yield return new DmcResult(start, length, userName, (int)tm);
+                var item= new DmcResult(start, length, userName, (int)tm);
+                if (type == DmcType.DAMA)
+                    item.SigType = "BPSK";
+                else
+                    item.SigType = string.Empty;
+                yield return item;
             }
         }
 

BIN
XdCxRhDW.Core/Tle2XYZ.dll


+ 9 - 5
XdCxRhDW.Core/XdCxRhDW.Core.csproj

@@ -48,17 +48,18 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Api\Cpu参估\ImageResult.cs" />
-    <Compile Include="Api\Cpu参估\CafResult.cs" />
-    <Compile Include="Api\Cpu参估\CorResult.cs" />
-    <Compile Include="Api\Cpu参估\DmcResult.cs" />
+    <Compile Include="Api\检测Cpu参估\ImageResult.cs" />
+    <Compile Include="Api\检测Cpu参估\CafResult.cs" />
+    <Compile Include="Api\检测Cpu参估\CorResult.cs" />
+    <Compile Include="Api\检测Cpu参估\DmcResult.cs" />
+    <Compile Include="Api\EphHelper2.cs" />
     <Compile Include="Api\EphHelper.cs" />
     <Compile Include="Api\GDOP误差椭圆\GDOPAPi.cs" />
     <Compile Include="Api\GDOP误差椭圆\GdopConfig.cs" />
     <Compile Include="Api\GDOP误差椭圆\GdopHelper.cs" />
     <Compile Include="Api\GDOP误差椭圆\MapItem.cs" />
     <Compile Include="Api\PosApi.cs" />
-    <Compile Include="Api\Cpu参估\XcorrUtils.cs" />
+    <Compile Include="Api\检测Cpu参估\XcorrUtils.cs" />
     <Compile Include="Api\时差线\DrawDtoLineHelper.cs" />
     <Compile Include="Api\时差线\DtoLineModel.cs" />
     <Compile Include="Api\时差线\OutputHelper.cs" />
@@ -163,6 +164,9 @@
     <Content Include="Api\GDOP误差椭圆\GDOP\msvcr100.dll">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <None Include="Tle2XYZ.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>

+ 50 - 10
XdCxRhDW.Repostory/EFContext/RHDWContext.cs

@@ -13,14 +13,12 @@ namespace XdCxRhDW.Repostory.EFContext
 {
     public class RHDWContext: DbContext
     {
+        public RHDWContext() : base("DbCon") //配置使用的连接名
+        {
+        } 
+    
         protected override void OnModelCreating(DbModelBuilder modelBuilder)
         {
-            //modelBuilder.Entity<TaskInfo>().Map(m =>
-            //{
-            //    m.MapInheritedProperties();
-            //    m.ToTable("TaskInfo");
-
-            //});
             this.Database.Log = msg =>
             {
             };
@@ -33,8 +31,6 @@ namespace XdCxRhDW.Repostory.EFContext
             DbInterception.Add(new SqliteInterceptor());//拦截器
             base.OnModelCreating(modelBuilder);
         }
-        public RHDWContext() : base("DbCon") { } //配置使用的连接名
-        public DbSet<XlInfo> XlInfos { set; get; }
 
         public DbSet<TaskInfo> TaskInfos { set; get; }
 
@@ -44,12 +40,56 @@ namespace XdCxRhDW.Repostory.EFContext
 
         public DbSet<TargetInfo> TargetInfos { get; set; }
 
+        //public DbSet<StationRes> StationRes { get; set; }
+        //public DbSet<CxRes> CxRes { get; set; }
+        //public DbSet<CgRes> CgRes { get; set; }
+        //public DbSet<PosRes> PosRes { get; set; }
+
+
+        public DbSet<SysSetings> SysSetings { get; set; }
+
+
+    }
+
+    public class RHDWPartContext : DbContext
+    {
+        /// <summary>
+        /// 分区表构造函数
+        /// </summary>
+        /// <param name="dayString">日期字符,格式如20240305</param>
+        public RHDWPartContext(string dayString)
+        {
+            base.Database.Connection.ConnectionString= $"Data Source=|DataDirectory|\\Part{dayString}.db";
+        }
+
+        /// <summary>
+        /// 分区表构造函数
+        /// </summary>
+        /// <param name="sigTime">信号时刻</param>
+        public RHDWPartContext(DateTime sigTime)
+            :this(sigTime.ToString("yyyyMMdd"))
+        {
+        }
+
+        protected override void OnModelCreating(DbModelBuilder modelBuilder)
+        {
+            this.Database.Log = msg =>
+            {
+            };
+
+            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
+            modelBuilder.Configurations.AddFromAssembly(typeof(RHDWContext).Assembly);
+
+            var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<RHDWContext>(modelBuilder);
+            Database.SetInitializer(sqliteConnectionInitializer);
+            DbInterception.Add(new SqliteInterceptor());//拦截器
+            base.OnModelCreating(modelBuilder);
+        }
+        public DbSet<XlInfo> XlInfos { set; get; }
         public DbSet<StationRes> StationRes { get; set; }
         public DbSet<CxRes> CxRes { get; set; }
         public DbSet<CgRes> CgRes { get; set; }
         public DbSet<PosRes> PosRes { get; set; }
-        public DbSet<SysSetings> SysSetings { get; set; }
-
 
     }
 }

+ 2 - 2
XdCxRhDW.Repostory/Model/XlInfo.cs

@@ -9,7 +9,7 @@ using System.Threading.Tasks;
 namespace XdCxRhDW.Repostory.Model
 {
     [Table("XlInfo")]
-    public class XlInfo : BaseModel
+    public class XlInfo : BaseModel<long>
     {
         public int SatCode { get; set; }
 
@@ -18,7 +18,7 @@ namespace XdCxRhDW.Repostory.Model
         [Display(Name = "卫星")]
         public string Sat => $"{SatName}({SatCode})";
 
-        [Display(Name = "星历时间(北京)")]
+        [Display(Name = "发布时间(北京)")]
         public DateTime TimeBJ { get; set; }
 
         [Display(Name = "双行根数1")]

+ 1 - 2
XdCxRhDW.WebApi/Controllers/DetectCgController.cs

@@ -25,7 +25,6 @@ namespace XdCxRhDW.WebApi.Controllers
         /// <param name="dto">CPU参估参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(CpuCgDto), "Validate")]
         public async Task<AjaxResult<CpuCgResDto>> CpuCgCalc(CpuCgDto dto)
         {
             dto.file1 = GetLocalFile(dto.file1);
@@ -108,7 +107,6 @@ namespace XdCxRhDW.WebApi.Controllers
         /// <param name="dto">信号检测参数</param>
         /// <returns></returns>
         [HttpPost]
-       [CustomValidation(typeof(DetectDto), "Validate")]
         public async Task<AjaxResult<IEnumerable<DetectResDto>>> DetectCalc(DetectDto dto)
         {
             dto.file1 = GetLocalFile(dto.file1);
@@ -120,6 +118,7 @@ namespace XdCxRhDW.WebApi.Controllers
                 foreach (var dmcItem in dmcResult)
                 {
                     DetectResDto detectRes = new DetectResDto(dmcItem.Start, dmcItem.Length, dmcItem.UserName);
+                    detectRes.SigType = dmcItem.SigType;
                     detectRes.File1 = dto.file1;
                     detectRes.TimeMs = dmcItem.Times;
                     list.Add(detectRes);

+ 98 - 61
XdCxRhDW.WebApi/Controllers/PosController.cs

@@ -36,17 +36,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X1D1PosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX1D1Async(X1D1PosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到一星一地测向带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动一星一地测向定位任务");
                 }
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
 
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
@@ -108,17 +111,23 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X1D1NoXlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX1D1NoXlAsync(X1D1NoXlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X1D1CX).FirstOrDefaultAsync();
+                runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X1D1CX).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到一星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动一星一地定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
+
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var xlInfo1 = await db.XlInfos.SqlQuery("select * from XlInfo where ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))=(select min(ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))) from XlInfo where satcode=@satcode)", parameter1, parameter2).FirstOrDefaultAsync();
@@ -128,7 +137,6 @@ namespace XdCxRhDW.App.WebAPI
                     return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
                 }
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
                 var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
                 var ephMain = await HttpHelper.PostRequestAsync<SatEphDto>(url, XlCalcDto);
@@ -200,18 +208,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X2D1PosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX2D1Async(X2D1PosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到两星一地带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -271,17 +281,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X2D1NoXlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
+                runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
@@ -300,11 +315,10 @@ namespace XdCxRhDW.App.WebAPI
                 }
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
 
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
 
-                var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };               
+                var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
                 var ephMain = await HttpHelper.PostRequestAsync<SatEphDto>(url, XlCalcDto);
                 if (ephMain.code != 200)
                 {
@@ -380,18 +394,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X2D1NoParPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到两星一地无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -399,7 +415,6 @@ namespace XdCxRhDW.App.WebAPI
                     CdbTxLon = dto.CdbTxLon,
                     CdbTxLat = dto.CdbTxLat,
                 });
-
                 var cgRes = db.CgRes.Add(new CgRes()
                 {
                     SigTime = dto.SigTime,
@@ -419,9 +434,7 @@ namespace XdCxRhDW.App.WebAPI
                     Adja1Y = dto.AdjaY,
                     Adja1Z = dto.AdjaZ,
                 });
-
                 var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
-
                 PosRes posRes = new PosRes()
                 {
                     SigTime = cgRes.SigTime,
@@ -435,7 +448,6 @@ namespace XdCxRhDW.App.WebAPI
                     MirrLat = res[4],
                     PosResType = EnumPosResType.X2D1NoRef,
                 };
-
                 posRes = db.PosRes.Add(posRes);
                 await db.SaveChangesAsync();
                 PosObServer.Instance.Pub(posRes);
@@ -448,17 +460,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X2D1NoXlNoParlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
+                runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到两星一地无参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
@@ -477,7 +494,6 @@ namespace XdCxRhDW.App.WebAPI
                 }
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
 
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
 
@@ -557,18 +573,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(RHPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosRhAsync(RHPosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到融合带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动融合定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -637,17 +655,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(RHNoXlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosRhNoXlAsync(RHNoXlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
+                runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到融合带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动融合定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
@@ -657,7 +680,6 @@ namespace XdCxRhDW.App.WebAPI
                     Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
                     return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
                 }
-
                 var xlInfo2 = await db.XlInfos.SqlQuery("select * from XlInfo where ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))=(select min(ABS(JULIANDAY(TimeBJ)-JULIANDAY(@sigTime))) from XlInfo where satcode=@satcode)", parameter1, parameter3).FirstOrDefaultAsync();
                 if (xlInfo2 == null)
                 {
@@ -666,10 +688,7 @@ namespace XdCxRhDW.App.WebAPI
                 }
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
-
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
-
                 var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
                 var ephMain = await HttpHelper.PostRequestAsync<SatEphDto>(url, XlCalcDto);
                 if (ephMain.code != 200)
@@ -677,7 +696,6 @@ namespace XdCxRhDW.App.WebAPI
                     Serilog.Log.Error($"推算[{dto.MainCode}]的星历出错");
                     return Error<PosResDto>($"推算[{dto.MainCode}]的星历出错");
                 }
-
                 var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
                 var ephAdja = await HttpHelper.PostRequestAsync<SatEphDto>(url, XlCalcDto2);
                 if (ephAdja.code != 200)
@@ -685,7 +703,6 @@ namespace XdCxRhDW.App.WebAPI
                     Serilog.Log.Error($"推算[{dto.AdjaCode}]的星历出错");
                     return Error<PosResDto>($"推算[{dto.AdjaCode}]的星历出错");
                 }
-
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -697,7 +714,6 @@ namespace XdCxRhDW.App.WebAPI
                     RefLon = dto.RefLon,
                     RefLat = dto.RefLat,
                 });
-
                 var cgRes = db.CgRes.Add(new CgRes()
                 {
                     SigTime = dto.SigTime,
@@ -719,15 +735,12 @@ namespace XdCxRhDW.App.WebAPI
                     Adja1Y = ephAdja.data.Y,
                     Adja1Z = ephAdja.data.Z,
                 });
-
                 var cxRes = db.CxRes.Add(new CxRes()
                 {
                     SigTime = dto.SigTime,
                     Fx = dto.CxRes,
                 });
-
                 var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
-
                 PosRes posRes = new PosRes()
                 {
                     SigTime = cgRes.SigTime,
@@ -757,18 +770,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X3TwoDtoPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX3TwoDtoAsync(X3TwoDtoPosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双时差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -831,17 +846,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X3TwoDtoNoXlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoXlAsync(X3TwoDtoNoXlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
+                runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双时差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.Adja1Code);
@@ -869,7 +889,6 @@ namespace XdCxRhDW.App.WebAPI
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.Adja1Code}使用{xlInfo2.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.Adja2Code}使用{xlInfo3.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
 
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
 
@@ -960,18 +979,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X3TwoDtoNoParPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoParAsync(X3TwoDtoNoParPosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双时差无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -1029,17 +1050,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X3TwoDtoNoXlNoParPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoXlNoParAsync(X3TwoDtoNoXlNoParPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
+                runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双时差无参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.Adja1Code);
@@ -1067,7 +1093,6 @@ namespace XdCxRhDW.App.WebAPI
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.Adja1Code}使用{xlInfo2.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.Adja2Code}使用{xlInfo3.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
 
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
 
@@ -1155,18 +1180,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X3TwoDfoPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX3TwoDfoAsync(X3TwoDfoPosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDfo && p.TaskState == EnumTaskState.Running);
+                runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDfo && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双频差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动三星双频差定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -1242,17 +1269,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X3TwoDfoNoXlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX3TwoDfoNoXlAsync(X3TwoDfoNoXlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDfo).FirstOrDefaultAsync();
+                 runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDfo).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双频差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动三星双频差定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.Adja1Code);
@@ -1280,7 +1312,6 @@ namespace XdCxRhDW.App.WebAPI
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.Adja1Code}使用{xlInfo2.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.Adja2Code}使用{xlInfo3.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
 
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
 
@@ -1386,18 +1417,20 @@ namespace XdCxRhDW.App.WebAPI
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(X2DtoDfoPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX2DtoDfoAsync(X2DtoDfoPosDto dto)
         {
+            TaskInfo runTask;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2Dfo && p.TaskState == EnumTaskState.Running);
+                 runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2Dfo && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到双星时频差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动双星时频差定位任务");
                 }
-
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.SatTxLon,
@@ -1464,17 +1497,22 @@ namespace XdCxRhDW.App.WebAPI
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        [CustomValidation(typeof(X2DtoDfoNoXlPosDto), "Validate")]
         public async Task<AjaxResult<PosResDto>> PosX2DtoDfoNoXlAsync(X2DtoDfoNoXlPosDto dto)
         {
+            TaskInfo runTask;
+            SysSetings settings;
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2Dfo).FirstOrDefaultAsync();
+                 runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2Dfo).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到双星时频差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosResDto>($"多模式融合定位平台没有启动双星时频差定位任务");
                 }
+                settings = await db.SysSetings.FirstOrDefaultAsync();
+            }
+            using (RHDWPartContext db = new RHDWPartContext(dto.SigTime))
+            {
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
                 var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
@@ -1493,7 +1531,6 @@ namespace XdCxRhDW.App.WebAPI
                 }
                 Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
-                var settings = await db.SysSetings.FirstOrDefaultAsync();
 
                 string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
 

+ 0 - 2
XdCxRhDW.WebApi/Controllers/XlController.cs

@@ -26,7 +26,6 @@ namespace XdCxRhDW.WebApi.Controllers
         /// <param name="dto">推算参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(XlCalcDto), "Validate")]
         public AjaxResult<SatEphDto> Calc(XlCalcDto dto)
         {
             try
@@ -57,7 +56,6 @@ namespace XdCxRhDW.WebApi.Controllers
         /// <param name="dto">推算参数</param>
         /// <returns></returns>
         [HttpPost]
-        [CustomValidation(typeof(XlCalcMultDto), "Validate")]
         public AjaxResult<List<EphResDto>> CalcMult(XlCalcMultDto dto)
         {
             try

+ 5 - 0
XdCxRhDw.Dto/DetectResDto.cs

@@ -48,6 +48,11 @@ namespace XdCxRhDw.Dto
         /// </summary>
         public string UserName { get; set; }
 
+        /// <summary>
+        /// 信号类型
+        /// </summary>
+        public string SigType { get; set; }
+
         /// <summary>
         /// 耗时(ms)
         /// </summary>