gongqiuhong 1 rok temu
rodzic
commit
c4b67f373d

+ 330 - 44
XdCxRhDW.App/WebAPI/Controllers/PosController.cs

@@ -4,12 +4,14 @@ using System.Data.Entity;
 using System.Data.SqlClient;
 using System.Data.SQLite;
 using System.Linq;
+using System.Net.Http;
 using System.Security.Cryptography.Xml;
 using System.Text;
 using System.Threading.Tasks;
 using System.Web.Http;
 using System.Windows.Documents;
 using DevExpress.Mvvm.Native;
+using DevExpress.XtraCharts;
 using DevExpress.XtraPrinting;
 using Newtonsoft.Json;
 using PosResAnalysis;
@@ -17,6 +19,7 @@ using Serilog;
 using Swashbuckle.Swagger;
 using XdCxRhDw.Dto;
 using XdCxRhDW.App.Api;
+using XdCxRhDW.App.App.Properties;
 using XdCxRhDW.App.EFContext;
 using XdCxRhDW.App.Model;
 using XdCxRhDW.App.WebAPI.DTO;
@@ -32,13 +35,104 @@ namespace XdCxRhDW.App.WebAPI
     /// </summary>
     public class PosController : BaseController
     {
+        /// <summary>
+        /// 一星一地带参定位(无星历)
+        /// </summary>
+        /// <returns>返回定位结果ID</returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX1D1NoXlAsync(X1D1NoXlPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X1D1CX).FirstOrDefaultAsync();
+                if (runTask == null)
+                {
+                    Serilog.Log.Warning($"接收到一星一地定位参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动一星一地定位任务");
+                }
+                var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
+                var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
+                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();
+                if (xlInfo1 == null)
+                {
+                    Serilog.Log.Error($"未找到卫星[{dto.MainSatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.MainSatID}]的双行根数星历");
+                }
+                Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
+                var settings = await db.SysSetings.FirstOrDefaultAsync();
+                var client = new HttpClient();
+                string url = string.Format("http://{0}:{1}/Api/", settings.ServerIp, settings.HttpPort);
+                url += string.Format("Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
+                var response = await client.GetAsync(url);
+                if (!response.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.MainSatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.MainSatID}]星厉推算失败");
+                }
+                var content = await response.Content.ReadAsStringAsync();
+                var ephMain = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content).data;
+                //var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
+                var listTx = new List<TxInfo>();
+                var cgRes = new CgRes();
+                var cxRes = new CxRes();
+                cgRes = db.CgRes.Add(new CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    DtoSx = dto.SxDto * 1e6,
+                    DfoSx = dto.SxDfo * 1e6,
+                    SnrSx = dto.SxSnr,
+                    DtoCdb = dto.XdDto * 1e6,
+                    DfoCdb = dto.XdDfo * 1e6,
+                    SnrCdb = dto.XdSnr,
+                    YbMain = dto.MainYbDto * 1e6,
+                    YbAdja = dto.AdjaYbDto * 1e6,
+                    MainX = ephMain.X,
+                    MainY = ephMain.Y,
+                    MainZ = ephMain.Z,
+                });
+                listTx = await db.TxInfos.ToListAsync();
+                cxRes = db.CxRes.Add(new CxRes()
+                {
+                    SigTime = dto.SigTime,
+                    Fx = dto.CxRes,
+                });
+                double[] res = new double[6];
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
+                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
+                var cxTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
+                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
+                double[] mainSat = new double[3] { cgRes.MainX, cgRes.MainY, cgRes.MainZ };
+                double[] satStation = new double[3] { satTx.Lon, satTx.Lat, 0 };
+                double[] cdbStation = new double[3] { cdbTx.Lon, cdbTx.Lat, 0 };
+                double[] cxStation = new double[3] { cxTx.Lon, cxTx.Lat, 0 };
+                double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
+                double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
+                double theta = cxRes.Fx;//单位°
+                PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, res);
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = dto.SigTime,
+                    TaskID = runTask.ID,
+                    CgResID = cgRes.ID,
+                    TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
+                    TsName = dto.TsName,
+                    PosLon = res[0],
+                    PosLat = res[1],
+                    MirrLon = res[3],
+                    MirrLat = res[4],
+                };
+                db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                return Success(posRes);
+            }
+        }
 
         /// <summary>
         /// 两星一地带参定位(无星历)
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1NoXlPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
         {
             using (RHDWContext db = new RHDWContext())
             {
@@ -48,7 +142,6 @@ namespace XdCxRhDW.App.WebAPI
                     Serilog.Log.Warning($"接收到两星一地定位参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
-                var listTx = await db.TxInfos.ToListAsync();
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
                 var parameter3 = new SQLiteParameter("@satcode", dto.AdjaSatID);
@@ -67,19 +160,41 @@ namespace XdCxRhDW.App.WebAPI
                 }
                 Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
                 Serilog.Log.Information($"卫星{dto.AdjaSatID}使用{xlInfo2.TwoLine}进行星历推算");
-                var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
-                var ephAdja = EphHelper.Calc(xlInfo2.TwoLine, dto.SigTime);
+                var settings = await db.SysSetings.FirstOrDefaultAsync();
+                var client = new HttpClient();
+                string url = string.Format("http://{0}:{1}/Api/", settings.ServerIp, settings.HttpPort);
+                var url1 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
+                var response = await client.GetAsync(url1);
+                if (!response.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.MainSatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.MainSatID}]星厉推算失败");
+                }
+                var content = await response.Content.ReadAsStringAsync();
+                var ephMain = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content).data;
+
+                var url2 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo2.TwoLine, dto.SigTime);
+                var response2 = await client.GetAsync(url2);
+                if (!response2.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.AdjaSatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.AdjaSatID}]星厉推算失败");
+                }
+                var content2 = await response2.Content.ReadAsStringAsync();
+                var ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
+                //var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
+                //var ephAdja = EphHelper.Calc(xlInfo2.TwoLine, dto.SigTime);
                 var cgRes = db.CgRes.Add(new Model.CgRes()
                 {
                     SigTime = dto.SigTime,
-                    DtoSx = dto.SxDto,
-                    DfoSx = dto.SxDfo,
+                    DtoSx = dto.SxDto * 1e6,
+                    DfoSx = dto.SxDfo * 1e6,
                     SnrSx = dto.SxSnr,
-                    DtoCdb = dto.XdDto,
-                    DfoCdb = dto.XdDfo,
+                    DtoCdb = dto.XdDto * 1e6,
+                    DfoCdb = dto.XdDfo * 1e6,
                     SnrCdb = dto.XdSnr,
-                    YbMain = dto.MainYbDto,
-                    YbAdja = dto.AdjaYbDto,
+                    YbMain = dto.MainYbDto * 1e6,
+                    YbAdja = dto.AdjaYbDto * 1e6,
                     MainX = ephMain.X,
                     MainY = ephMain.Y,
                     MainZ = ephMain.Z,
@@ -87,6 +202,7 @@ namespace XdCxRhDW.App.WebAPI
                     AdjaY = ephAdja.Y,
                     AdjaZ = ephAdja.Z,
                 });
+                var listTx = await db.TxInfos.ToListAsync();
                 var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
                 var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
                 var cxTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
@@ -111,7 +227,168 @@ namespace XdCxRhDW.App.WebAPI
                     MirrLon = res[3],
                     MirrLat = res[4],
                 };
-                var tmp = db.PosRes.Add(posRes);
+                db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                return Success(posRes);
+            }
+        }
+
+        /// <summary>
+        /// 融合带参定位(无星历)
+        /// </summary>
+        /// <returns>返回定位结果ID</returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosRhNoXlAsync(RHNoXlPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
+                if (runTask == null)
+                {
+                    Serilog.Log.Warning($"接收到融合定位参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动融合定位任务");
+                }
+                var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
+                var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
+                var parameter3 = new SQLiteParameter("@satcode", dto.AdjaSatID);
+                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();
+                if (xlInfo1 == null)
+                {
+                    Serilog.Log.Error($"未找到卫星[{dto.MainSatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.MainSatID}]的双行根数星历");
+                }
+
+                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)
+                {
+                    Serilog.Log.Error($"未找到卫星[{dto.AdjaSatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.AdjaSatID}]的双行根数星历");
+                }
+                Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
+                Serilog.Log.Information($"卫星{dto.AdjaSatID}使用{xlInfo2.TwoLine}进行星历推算");
+                var settings = await db.SysSetings.FirstOrDefaultAsync();
+                var client = new HttpClient();
+                string url = string.Format("http://{0}:{1}/Api/", settings.ServerIp, settings.HttpPort);
+                var url1 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
+                var response = await client.GetAsync(url1);
+                if (!response.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.MainSatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.MainSatID}]星厉推算失败");
+                }
+                var content = await response.Content.ReadAsStringAsync();
+                var ephMain = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content).data;
+
+                var url2 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo2.TwoLine, dto.SigTime);
+                var response2 = await client.GetAsync(url2);
+                if (!response2.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.AdjaSatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.AdjaSatID}]星厉推算失败");
+                }
+                var content2 = await response2.Content.ReadAsStringAsync();
+                var ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
+                //var ephMain = EphHelper.Calc(xlInfo1.TwoLine, dto.SigTime);
+                //var ephAdja = EphHelper.Calc(xlInfo2.TwoLine, dto.SigTime);
+                var listTx = new List<TxInfo>();
+                var cgRes = new CgRes();
+                var cxRes = new CxRes();
+                cgRes = db.CgRes.Add(new CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    DtoSx = dto.SxDto * 1e6,
+                    DfoSx = dto.SxDfo * 1e6,
+                    SnrSx = dto.SxSnr,
+                    DtoCdb = dto.XdDto * 1e6,
+                    DfoCdb = dto.XdDfo * 1e6,
+                    SnrCdb = dto.XdSnr,
+                    YbMain = dto.MainYbDto * 1e6,
+                    YbAdja = dto.AdjaYbDto * 1e6,
+                    MainX = ephMain.X,
+                    MainY = ephMain.Y,
+                    MainZ = ephMain.Z,
+                    AdjaX = ephAdja.X,
+                    AdjaY = ephAdja.Y,
+                    AdjaZ = ephAdja.Z,
+                });
+                listTx = await db.TxInfos.ToListAsync();
+                cxRes = db.CxRes.Add(new CxRes()
+                {
+                    SigTime = dto.SigTime,
+                    Fx = dto.CxRes,
+                });
+
+                double[] resX1D1 = new double[6];
+                double[] resX2D1 = new double[6];
+                var satTx = listTx.Find(p => p.TxType == EnumTxType.MainSat);
+                var cdbTx = listTx.Find(p => p.TxType == EnumTxType.Cdb);
+                var cxTx = listTx.Find(p => p.TxType == EnumTxType.Cx);
+                var refTx = listTx.Find(p => p.TxType == EnumTxType.Ref);
+                double[] mainSat = new double[3] { cgRes.MainX, cgRes.MainY, cgRes.MainZ };
+                double[] adjaSat = new double[3] { cgRes.AdjaX, cgRes.AdjaY, cgRes.AdjaZ };
+                double[] satStation = new double[3] { satTx.Lon, satTx.Lat, 0 };
+                double[] cdbStation = new double[3] { cdbTx.Lon, cdbTx.Lat, 0 };
+                double[] cxStation = new double[3] { cxTx.Lon, cxTx.Lat, 0 };
+                double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
+                double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
+                double theta = cxRes.Fx;//单位°
+
+                PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, resX1D1);
+
+                PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, cgRes.DtoSx / 1e6, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, cgRes.YbAdja / 1e6, resX2D1);
+
+                double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
+                if (PosApi.IsGeoPoint(resX1D1) && PosApi.IsGeoPoint(resX2D1))
+                {
+                    res = new double[6] {
+                    (resX1D1[0] + resX2D1[0]) / 2 + 0.003,
+                    (resX1D1[1] + resX2D1[1]) / 2 - 0.002,
+                    (resX1D1[2] + resX2D1[2]) / 2,
+                    (resX1D1[3] + resX2D1[3]) / 2 + 0.003,
+                    (resX1D1[4] + resX2D1[4]) / 2 - 0.002,
+                    (resX1D1[5] + resX2D1[5]) / 2,
+                };
+                }
+                else if (PosApi.IsGeoPoint(resX1D1))
+                {
+                    res = new double[6]
+                    {
+                    resX1D1[0] + 0.003,
+                    resX1D1[1] - 0.002,
+                    resX1D1[2],
+                    resX1D1[3] + 0.003,
+                    resX1D1[4] - 0.002,
+                    resX1D1[5],
+
+                    };
+                }
+                else if (PosApi.IsGeoPoint(resX2D1))
+                {
+                    res = new double[6]
+                   {
+                    resX2D1[0] + 0.003,
+                    resX2D1[1] - 0.002,
+                    resX2D1[2],
+                    resX2D1[3] + 0.003,
+                    resX2D1[4] - 0.002,
+                    resX2D1[5],
+
+                   };
+                }
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = cgRes.SigTime,
+                    TaskID = runTask.ID,
+                    CxResID = cxRes.ID,
+                    CgResID = cgRes.ID,
+                    TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
+                    TsName = dto.TsName,
+                    PosLon = Math.Round(res[0], 4),
+                    PosLat = Math.Round(res[1], 4),
+                    MirrLon = Math.Round(res[3], 4),
+                    MirrLat = Math.Round(res[4], 4),
+                };
+                db.PosRes.Add(posRes);
                 await db.SaveChangesAsync();
                 return Success(posRes);
             }
@@ -125,24 +402,26 @@ namespace XdCxRhDW.App.WebAPI
         [HttpPost]
         public async Task<AjaxResult<PosRes>> PosX1D1Async(X1D1PosDto dto)
         {
-            PosRes posRes = new PosRes();
             using (RHDWContext db = new RHDWContext())
             {
-                var tsk1X1D = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
-                if (tsk1X1D == null)
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
+                if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到一星一地测向带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosRes>($"多模式融合定位平台没有启动一星一地测向定位任务");
                 }
-                var sigTime = DateTime.Now;
                 var listTx = new List<TxInfo>();
                 var cgRes = new CgRes();
                 var cxRes = new CxRes();
                 cgRes = db.CgRes.Add(new CgRes()
                 {
-                    SigTime = sigTime,
+                    SigTime = dto.SigTime,
                     DtoSx = dto.SxDto * 1e6,
+                    DfoSx = dto.SxDfo * 1e6,
+                    SnrSx = dto.SxSnr,
                     DtoCdb = dto.XdDto * 1e6,
+                    DfoCdb = dto.XdDfo * 1e6,
+                    SnrCdb = dto.XdSnr,
                     YbMain = dto.MainYbDto * 1e6,
                     YbAdja = dto.AdjaYbDto * 1e6,
                     MainX = dto.MainX,
@@ -152,7 +431,7 @@ namespace XdCxRhDW.App.WebAPI
                 listTx = await db.TxInfos.ToListAsync();
                 cxRes = db.CxRes.Add(new CxRes()
                 {
-                    SigTime = sigTime,
+                    SigTime = dto.SigTime,
                     Fx = dto.CxRes,
                 });
                 double[] res = new double[6];
@@ -168,22 +447,23 @@ namespace XdCxRhDW.App.WebAPI
                 double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
                 double theta = cxRes.Fx;//单位°
                 PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, res);
-                posRes = new PosRes()
+                PosRes posRes = new PosRes()
                 {
                     SigTime = cgRes.SigTime,
-                    TaskID = tsk1X1D.ID,
+                    TaskID = runTask.ID,
                     CxResID = cxRes.ID,
                     CgResID = cgRes.ID,
-                    TarName = "未知目标",
-                    TsName = "DAMA--56-115ms",
+                    TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
+                    TsName = dto.TsName,
                     PosLon = Math.Round(res[0], 4),
                     PosLat = Math.Round(res[1], 4),
                     MirrLon = Math.Round(res[3], 4),
                     MirrLat = Math.Round(res[4], 4),
                 };
                 db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                return Success(posRes);
             }
-            return Success(posRes);
         }
 
         /// <summary>
@@ -194,23 +474,25 @@ namespace XdCxRhDW.App.WebAPI
         [HttpPost]
         public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1PosDto dto)
         {
-            PosRes posRes = new PosRes();
             using (RHDWContext db = new RHDWContext())
             {
-                var tsk2X1D = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
-                if (tsk2X1D == null)
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
+                if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到两星一地带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
-                var sigTime = DateTime.Now;
                 var listTx = new List<TxInfo>();
                 var cgRes = new CgRes();
                 cgRes = db.CgRes.Add(new CgRes()
                 {
-                    SigTime = sigTime,
+                    SigTime = dto.SigTime,
                     DtoSx = dto.SxDto * 1e6,
+                    DfoSx = dto.SxDfo * 1e6,
+                    SnrSx = dto.SxSnr,
                     DtoCdb = dto.XdDto * 1e6,
+                    DfoCdb = dto.XdDfo * 1e6,
+                    SnrCdb = dto.XdSnr,
                     YbMain = dto.MainYbDto * 1e6,
                     YbAdja = dto.AdjaYbDto * 1e6,
                     MainX = dto.MainX,
@@ -235,21 +517,22 @@ namespace XdCxRhDW.App.WebAPI
                 double[] refStation = new double[3] { refTx.Lon, refTx.Lat, 0 };
                 double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
                 PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, cgRes.DtoSx / 1e6, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, cgRes.YbAdja / 1e6, res);
-                posRes = new PosRes()
+                PosRes posRes = new PosRes()
                 {
                     SigTime = cgRes.SigTime,
-                    TaskID = tsk2X1D.ID,
+                    TaskID = runTask.ID,
                     CgResID = cgRes.ID,
-                    TarName = "未知目标",
-                    TsName = "DAMA-225-173ms",
+                    TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
+                    TsName = dto.TsName,
                     PosLon = Math.Round(res[0], 4),
                     PosLat = Math.Round(res[1], 4),
                     MirrLon = Math.Round(res[3], 4),
                     MirrLat = Math.Round(res[4], 4),
                 };
                 db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                return Success(posRes);
             }
-            return Success(posRes);
         }
 
         /// <summary>
@@ -260,24 +543,26 @@ namespace XdCxRhDW.App.WebAPI
         [HttpPost]
         public async Task<AjaxResult<PosRes>> PosRhAsync(RHPosDto dto)
         {
-            PosRes posRes = new PosRes();
             using (RHDWContext db = new RHDWContext())
             {
-                var tskRh = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
-                if (tskRh == null)
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
+                if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到融合带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
-                var sigTime = DateTime.Now;
                 var listTx = new List<TxInfo>();
                 var cgRes = new CgRes();
                 var cxRes = new CxRes();
                 cgRes = db.CgRes.Add(new CgRes()
                 {
-                    SigTime = sigTime,
+                    SigTime = dto.SigTime,
                     DtoSx = dto.SxDto * 1e6,
+                    DfoSx = dto.SxDfo * 1e6,
+                    SnrSx = dto.SxSnr,
                     DtoCdb = dto.XdDto * 1e6,
+                    DfoCdb = dto.XdDfo * 1e6,
+                    SnrCdb = dto.XdSnr,
                     YbMain = dto.MainYbDto * 1e6,
                     YbAdja = dto.AdjaYbDto * 1e6,
                     MainX = dto.MainX,
@@ -290,7 +575,7 @@ namespace XdCxRhDW.App.WebAPI
                 listTx = await db.TxInfos.ToListAsync();
                 cxRes = db.CxRes.Add(new CxRes()
                 {
-                    SigTime = sigTime,
+                    SigTime = dto.SigTime,
                     Fx = dto.CxRes,
                 });
 
@@ -310,7 +595,7 @@ namespace XdCxRhDW.App.WebAPI
                 double theta = cxRes.Fx;//单位°
 
                 PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, resX1D1);
-               
+
                 PosApi.X2D1_POS_Core(mainSat, adjaSat, cdbStation, satStation, satStation, satStation, satStation, satStation, refStation, zone, cgRes.DtoSx / 1e6, cgRes.DtoCdb / 1e6, cgRes.YbMain / 1e6, cgRes.YbAdja / 1e6, resX2D1);
 
                 double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
@@ -351,22 +636,23 @@ namespace XdCxRhDW.App.WebAPI
 
                    };
                 }
-                posRes = new PosRes()
+                PosRes posRes = new PosRes()
                 {
                     SigTime = cgRes.SigTime,
-                    TaskID = tskRh.ID,
+                    TaskID = runTask.ID,
                     CxResID = cxRes.ID,
                     CgResID = cgRes.ID,
-                    TarName = "未知目标",
-                    TsName = "DAMA-225-173ms",
+                    TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
+                    TsName = dto.TsName,
                     PosLon = Math.Round(res[0], 4),
                     PosLat = Math.Round(res[1], 4),
                     MirrLon = Math.Round(res[3], 4),
                     MirrLat = Math.Round(res[4], 4),
                 };
                 db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                return Success(posRes);
             }
-            return Success(posRes);
         }
 
         /// <summary>

+ 6 - 1
XdCxRhDW.Sender/Form1.cs

@@ -38,7 +38,12 @@ namespace XdCxRhDW.Sender
                     var addrArr = txtAddr1.Text.Trim().Replace(":", ":").Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                     string ip = addrArr[0];
                     int port = Convert.ToInt32(addrArr[1]);
-                    string tskType = txtTskType.SelectedItem.ToString();
+                    if (txtTskType.EditValue == null)
+                    {
+                        Log($"请选择定位类型");
+                        return;
+                    }
+                    string tskType = txtTskType.EditValue.ToString();
                     //S:
                     using (var client = new HttpClient())
                     {

+ 84 - 0
XdCxRhDw.Dto/PosDto/RHNoXlPosDto.cs

@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    /// 一星一地带参定位参数DTO(含星历)
+    /// </summary>
+    public class RHNoXlPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 主星编号
+        /// </summary>
+        public int MainSatID { get; set; }
+
+        /// <summary>
+        /// 邻星编号
+        /// </summary>
+        public int AdjaSatID { get; set; }
+
+        /// <summary>
+        /// 目标双星时差(us)
+        /// </summary>
+        public double SxDto { get; set; }
+
+        /// <summary>
+        /// 目标双星频差(Hz)
+        /// </summary>
+        public double SxDfo { get; set; }
+
+        /// <summary>
+        /// 目标双星信噪比(dB)
+        /// </summary>
+        public double SxSnr { get; set; }
+
+        /// <summary>
+        /// 目标星地时差(us)
+        /// </summary>
+        public double XdDto { get; set; }
+
+        /// <summary>
+        /// 目标星地频差(Hz)
+        /// </summary>
+        public double XdDfo { get; set; }
+
+        /// <summary>
+        /// 目标星地信噪比(dB)
+        /// </summary>
+        public double XdSnr { get; set; }
+
+        /// <summary>
+        /// 参考样本主时差(us)
+        /// </summary>
+        public double MainYbDto { get; set; }
+
+        /// <summary>
+        /// 参考样本邻时差(us)
+        /// </summary>
+        public double AdjaYbDto { get; set; }
+
+        /// <summary>
+        /// 测向结果
+        /// </summary>
+        public double CxRes { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+    }
+}

+ 35 - 0
XdCxRhDw.Dto/PosDto/RHPosDto.cs

@@ -11,16 +11,41 @@ namespace XdCxRhDw.Dto
     /// </summary>
     public class RHPosDto
     {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
         /// <summary>
         /// 目标双星时差(us)
         /// </summary>
         public double SxDto { get; set; }
 
+        /// <summary>
+        /// 目标双星频差(Hz)
+        /// </summary>
+        public double SxDfo { get; set; }
+
+        /// <summary>
+        /// 目标双星信噪比(dB)
+        /// </summary>
+        public double SxSnr { get; set; }
+
         /// <summary>
         /// 目标星地时差(us)
         /// </summary>
         public double XdDto { get; set; }
 
+        /// <summary>
+        /// 目标星地频差(Hz)
+        /// </summary>
+        public double XdDfo { get; set; }
+
+        /// <summary>
+        /// 目标星地信噪比(dB)
+        /// </summary>
+        public double XdSnr { get; set; }
+
         /// <summary>
         /// 参考样本主时差(us)
         /// </summary>
@@ -36,6 +61,16 @@ namespace XdCxRhDw.Dto
         /// </summary>
         public double CxRes { get; set; }
 
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
         /// <summary>
         ///  主星X坐标
         /// </summary>

+ 79 - 0
XdCxRhDw.Dto/PosDto/X1D1NoXlPosDto.cs

@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    /// 两星一地定位参数DTO
+    /// </summary>
+    public class X1D1NoXlPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 卫星编号
+        /// </summary>
+        public int MainSatID { get; set; }
+
+        /// <summary>
+        /// 目标双星时差(us)
+        /// </summary>
+        public double SxDto { get; set; }
+
+        /// <summary>
+        /// 目标双星频差(Hz)
+        /// </summary>
+        public double SxDfo { get; set; }
+
+        /// <summary>
+        /// 目标双星信噪比(dB)
+        /// </summary>
+        public double SxSnr { get; set; }
+
+        /// <summary>
+        /// 目标星地时差(us)
+        /// </summary>
+        public double XdDto { get; set; }
+
+        /// <summary>
+        /// 目标星地频差(Hz)
+        /// </summary>
+        public double XdDfo { get; set; }
+
+        /// <summary>
+        /// 目标星地信噪比(dB)
+        /// </summary>
+        public double XdSnr { get; set; }
+
+        /// <summary>
+        /// 参考样本主时差(us)
+        /// </summary>
+        public double MainYbDto { get; set; }
+
+        /// <summary>
+        /// 参考样本邻时差(us)
+        /// </summary>
+        public double AdjaYbDto { get; set; }
+
+        /// <summary>
+        /// 测向结果
+        /// </summary>
+        public double CxRes { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+    }
+}

+ 35 - 3
XdCxRhDw.Dto/PosDto/X1D1PosDto.cs

@@ -11,16 +11,41 @@ namespace XdCxRhDw.Dto
     /// </summary>
     public class X1D1PosDto
     {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
         /// <summary>
         /// 目标双星时差(us)
         /// </summary>
         public double SxDto { get; set; }
 
+        /// <summary>
+        /// 目标双星频差(Hz)
+        /// </summary>
+        public double SxDfo { get; set; }
+
+        /// <summary>
+        /// 目标双星信噪比(dB)
+        /// </summary>
+        public double SxSnr { get; set; }
+
         /// <summary>
         /// 目标星地时差(us)
         /// </summary>
         public double XdDto { get; set; }
 
+        /// <summary>
+        /// 目标星地频差(Hz)
+        /// </summary>
+        public double XdDfo { get; set; }
+
+        /// <summary>
+        /// 目标星地信噪比(dB)
+        /// </summary>
+        public double XdSnr { get; set; }
+
         /// <summary>
         /// 参考样本主时差(us)
         /// </summary>
@@ -36,6 +61,16 @@ namespace XdCxRhDw.Dto
         /// </summary>
         public double CxRes { get; set; }
 
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
         /// <summary>
         ///  卫星X坐标
         /// </summary>
@@ -50,9 +85,6 @@ namespace XdCxRhDw.Dto
         /// 卫星Z坐标
         /// </summary>
         public double MainZ { get; set; }
-
-
-
     }
         
 }

+ 6 - 5
XdCxRhDw.Dto/PosDto/X2D1NoXlPosDto.cs

@@ -11,6 +11,12 @@ namespace XdCxRhDw.Dto
     /// </summary>
     public class X2D1NoXlPosDto
     {
+        
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
         /// <summary>
         /// 主星编号
         /// </summary>
@@ -21,11 +27,6 @@ namespace XdCxRhDw.Dto
         /// </summary>
         public int AdjaSatID { get; set; }
 
-        /// <summary>
-        /// 信号时刻(北京时间)
-        /// </summary>
-        public DateTime SigTime { get; set; }
-
         /// <summary>
         /// 目标双星时差(us)
         /// </summary>

+ 35 - 0
XdCxRhDw.Dto/PosDto/X2D1PosDto.cs

@@ -11,16 +11,41 @@ namespace XdCxRhDw.Dto
     /// </summary>
     public class X2D1PosDto
     {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
         /// <summary>
         /// 目标双星时差(us)
         /// </summary>
         public double SxDto { get; set; }
 
+        /// <summary>
+        /// 目标双星频差(Hz)
+        /// </summary>
+        public double SxDfo { get; set; }
+
+        /// <summary>
+        /// 目标双星信噪比(dB)
+        /// </summary>
+        public double SxSnr { get; set; }
+
         /// <summary>
         /// 目标星地时差(us)
         /// </summary>
         public double XdDto { get; set; }
 
+        /// <summary>
+        /// 目标星地频差(Hz)
+        /// </summary>
+        public double XdDfo { get; set; }
+
+        /// <summary>
+        /// 目标星地信噪比(dB)
+        /// </summary>
+        public double XdSnr { get; set; }
+
         /// <summary>
         /// 参考样本主时差(us)
         /// </summary>
@@ -31,6 +56,16 @@ namespace XdCxRhDw.Dto
         /// </summary>
         public double AdjaYbDto { get; set; }
 
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
         /// <summary>
         ///  主星X坐标
         /// </summary>

+ 2 - 0
XdCxRhDw.Dto/XdCxRhDw.Dto.csproj

@@ -51,6 +51,8 @@
     <Compile Include="DetectResDto.cs" />
     <Compile Include="EstimationResDto.cs" />
     <Compile Include="FileDto.cs" />
+    <Compile Include="PosDto\RHNoXlPosDto.cs" />
+    <Compile Include="PosDto\X1D1NoXlPosDto.cs" />
     <Compile Include="PosResQueryDto.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="SendDto.cs" />