Parcourir la source

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

wyq il y a 1 an
Parent
commit
99895bf55d

+ 4 - 1
XdCxRhDW.App/Api/PosApi.cs

@@ -291,7 +291,6 @@ namespace XdCxRhDW.App.Api
         }
 
         private static double[] ConvertToGeoPoint(double[] res)
-
         {
             if (res == null || res.Length == 0)
             {
@@ -324,6 +323,10 @@ namespace XdCxRhDW.App.Api
             {
                 list[3] = list[4] = 999;
             }
+            else if (double.IsNaN(list[3]) || double.IsNaN(list[4]))
+            {
+                list[3] = list[4] = 999;
+            }
             return list;
         }
 

+ 641 - 13
XdCxRhDW.App/WebAPI/Controllers/PosController.cs

@@ -97,10 +97,10 @@ namespace XdCxRhDW.App.WebAPI
                     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),
+                    PosLon = res[0],
+                    PosLat = res[1],
+                    MirrLon =res[3],
+                    MirrLat =res[4],
                 };
                 posRes = db.PosRes.Add(posRes);
                 await db.SaveChangesAsync();
@@ -460,7 +460,7 @@ namespace XdCxRhDW.App.WebAPI
                 var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
-                    Serilog.Log.Warning($"接收到两星一地参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
+                    Serilog.Log.Warning($"接收到两星一地参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
@@ -767,7 +767,7 @@ namespace XdCxRhDW.App.WebAPI
                 if (runTask == null)
                 {
                     Serilog.Log.Warning($"接收到三星双时差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
-                    return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
+                    return Error<PosRes>($"多模式融合定位平台没有启动三星双时差定位任务");
                 }
 
                 var StationRes = db.StationRes.Add(new StationRes()
@@ -806,7 +806,7 @@ namespace XdCxRhDW.App.WebAPI
                     Adja2Z = dto.Adja2Z,
                 });
 
-                var res = PosApi.X2D1_Pos(cgRes, StationRes);
+                var res = PosApi.X3_Pos(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
@@ -836,11 +836,11 @@ namespace XdCxRhDW.App.WebAPI
         {
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
                 if (runTask == null)
                 {
-                    Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
-                    return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
+                    Serilog.Log.Warning($"接收到三星双时差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动三星双时差定位任务");
                 }
                 var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
                 var parameter2 = new SQLiteParameter("@satcode", dto.MainSatID);
@@ -939,7 +939,208 @@ namespace XdCxRhDW.App.WebAPI
                     Adja2Z = ephAdja2.Z,
                 });
 
-                var res = PosApi.X2D1_Pos(cgRes, StationRes);
+                var res = PosApi.X3_Pos(cgRes, StationRes);
+
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = dto.SigTime,
+                    TaskInfoID = 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],
+                };
+                posRes = db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                PosObServer.Instance.Pub(posRes);
+                return Success(posRes);
+            }
+        }
+
+        /// <summary>
+        /// 三星双时差无参定位(含星历)
+        /// </summary>
+        /// <param name="dto">定位参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX3TwoDtoNoParAsync(X3TwoDtoNoParPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
+                if (runTask == null)
+                {
+                    Serilog.Log.Warning($"接收到三星双时差无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动三星双时差定位任务");
+                }
+
+                var StationRes = db.StationRes.Add(new StationRes()
+                {
+                    SatTxLon = dto.StationResInfo.SatTxLon,
+                    SatTxLat = dto.StationResInfo.SatTxLat,
+                    CdbTxLon = dto.StationResInfo.CdbTxLon,
+                    CdbTxLat = dto.StationResInfo.CdbTxLat,
+                    CxLon = dto.StationResInfo.CxLon,
+                    CxLat = dto.StationResInfo.CxLat,
+                    RefLon = dto.StationResInfo.RefLon,
+                    RefLat = dto.StationResInfo.RefLat,
+                });
+
+                var cgRes = db.CgRes.Add(new CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    Dto1 = dto.Dto1,
+                    Dfo1 = dto.Dfo1,
+                    Snr1 = dto.Snr1,
+                    Dto2 = dto.Dto2,
+                    Dfo2 = dto.Dfo2,
+                    Snr2 = dto.Snr2,
+                    StationResID = StationRes.ID,
+                    MainX = dto.MainX,
+                    MainY = dto.MainY,
+                    MainZ = dto.MainZ,
+                    Adja1X = dto.Adja1X,
+                    Adja1Y = dto.Adja1Y,
+                    Adja1Z = dto.Adja1Z,
+                    Adja2X = dto.Adja2X,
+                    Adja2Y = dto.Adja2Y,
+                    Adja2Z = dto.Adja2Z,
+                });
+
+                var res = PosApi.X3_PosNoRef(cgRes, StationRes);
+
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = cgRes.SigTime,
+                    TaskInfoID = 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],
+                };
+                posRes = db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                PosObServer.Instance.Pub(posRes);
+                return Success(posRes);
+            }
+        }
+
+        /// <summary>
+        /// 三星双时差无参定位(无星历)
+        /// </summary>
+        /// <returns>返回定位结果ID</returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX3TwoDtoNoXlNoParAsync(X3TwoDtoNoXlNoParPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).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.Adja1SatID);
+                var parameter4 = new SQLiteParameter("@satcode", dto.Adja2SatID);
+                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.Adja1SatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.Adja1SatID}]的双行根数星历");
+                }
+
+                var xlInfo3 = 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, parameter4).FirstOrDefaultAsync();
+                if (xlInfo3 == null)
+                {
+                    Serilog.Log.Error($"未找到卫星[{dto.Adja2SatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.Adja2SatID}]的双行根数星历");
+                }
+                Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
+                Serilog.Log.Information($"卫星{dto.Adja1SatID}使用{xlInfo2.TwoLine}进行星历推算");
+                Serilog.Log.Information($"卫星{dto.Adja2SatID}使用{xlInfo3.TwoLine}进行星历推算");
+                var settings = await db.SysSetings.FirstOrDefaultAsync();
+                var client = new HttpClient();
+
+                string url = string.Format("http://{0}:{1}/Api/", IpHelper.GetLocalIp(), 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.Adja1SatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.Adja1SatID}]星厉推算失败");
+                }
+                var content2 = await response2.Content.ReadAsStringAsync();
+                var ephAdja1 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
+
+                var url3 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo3.TwoLine, dto.SigTime);
+                var response3 = await client.GetAsync(url3);
+                if (!response3.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.Adja2SatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.Adja2SatID}]星厉推算失败");
+                }
+                var content3 = await response2.Content.ReadAsStringAsync();
+                var ephAdja2 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content3).data;
+
+                var StationRes = db.StationRes.Add(new StationRes()
+                {
+                    SatTxLon = dto.StationResInfo.SatTxLon,
+                    SatTxLat = dto.StationResInfo.SatTxLat,
+                    CdbTxLon = dto.StationResInfo.CdbTxLon,
+                    CdbTxLat = dto.StationResInfo.CdbTxLat,
+                    CxLon = dto.StationResInfo.CxLon,
+                    CxLat = dto.StationResInfo.CxLat,
+                    RefLon = dto.StationResInfo.RefLon,
+                    RefLat = dto.StationResInfo.RefLat,
+                });
+
+                var cgRes = db.CgRes.Add(new Model.CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    Dto1 = dto.Dto1,
+                    Dfo1 = dto.Dfo1,
+                    Snr1 = dto.Snr1,
+                    Dto2 = dto.Dto2,
+                    Dfo2 = dto.Dfo2,
+                    Snr2 = dto.Snr2,
+                    StationResID = StationRes.ID,
+                    MainX = ephMain.X,
+                    MainY = ephMain.Y,
+                    MainZ = ephMain.Z,
+                    Adja1X = ephAdja1.X,
+                    Adja1Y = ephAdja1.Y,
+                    Adja1Z = ephAdja1.Z,
+                    Adja2X = ephAdja2.X,
+                    Adja2Y = ephAdja2.Y,
+                    Adja2Z = ephAdja2.Z,
+                });
+
+                var res = PosApi.X3_PosNoRef(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
@@ -962,11 +1163,438 @@ namespace XdCxRhDW.App.WebAPI
         #endregion
 
         #region 三星双频差定位
+        /// <summary>
+        /// 三星双频差带参定位(含星历)
+        /// </summary>
+        /// <param name="dto">定位参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX3TwoDfoAsync(X3TwoDfoPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDfo && p.TaskState == EnumTaskState.Running);
+                if (runTask == null)
+                {
+                    Serilog.Log.Warning($"接收到三星双频差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动三星双频差定位任务");
+                }
 
-        #endregion
+                var StationRes = db.StationRes.Add(new StationRes()
+                {
+                    SatTxLon = dto.StationResInfo.SatTxLon,
+                    SatTxLat = dto.StationResInfo.SatTxLat,
+                    CdbTxLon = dto.StationResInfo.CdbTxLon,
+                    CdbTxLat = dto.StationResInfo.CdbTxLat,
+                    CxLon = dto.StationResInfo.CxLon,
+                    CxLat = dto.StationResInfo.CxLat,
+                    RefLon = dto.StationResInfo.RefLon,
+                    RefLat = dto.StationResInfo.RefLat,
+                });
 
-        #region 双星时频差定位
+                var cgRes = db.CgRes.Add(new CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    Dto1 = dto.Dto1,
+                    Dfo1 = dto.Dfo1,
+                    Snr1 = dto.Snr1,
+                    Dto2 = dto.Dto2,
+                    Dfo2 = dto.Dfo2,
+                    Snr2 = dto.Snr2,
+                    YbMainDfo = dto.YbMainDfo,
+                    YbAdja1Dfo = dto.YbAdja1Dfo,
+                    YbAdja2Dfo = dto.YbAdja2Dfo,
+                    TarFreqUp= dto.TarFreqUp,
+                    TarFreqDown=dto.TarFreqDown,
+                    RefFreqUp=dto.RefFreqUp,
+                    RefFreqDown=dto.RefFreqDown,
+                    StationResID = StationRes.ID,
+                    MainX = dto.MainX,
+                    MainY = dto.MainY,
+                    MainZ = dto.MainZ,
+                    MainVx = dto.MainVx,
+                    MainVy = dto.MainVy,
+                    MainVz = dto.MainVz,
+                    Adja1X = dto.Adja1X,
+                    Adja1Y = dto.Adja1Y,
+                    Adja1Z = dto.Adja1Z,
+                    Adja1Vx = dto.Adja1Vx,
+                    Adja1Vy = dto.Adja1Vy,
+                    Adja1Vz = dto.Adja1Vz,
+                    Adja2X = dto.Adja2X,
+                    Adja2Y = dto.Adja2Y,
+                    Adja2Z = dto.Adja2Z,
+                    Adja2Vx = dto.Adja2Vx,
+                    Adja2Vy = dto.Adja2Vy,
+                    Adja2Vz = dto.Adja2Vz,
+                });
+
+                var res = PosApi.X3_PosTwoDfo(cgRes, StationRes);
 
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = cgRes.SigTime,
+                    TaskInfoID = 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],
+                };
+                posRes = db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                PosObServer.Instance.Pub(posRes);
+                return Success(posRes);
+            }
+        }
+
+        /// <summary>
+        /// 三星双频差带参定位(无星历)
+        /// </summary>
+        /// <returns>返回定位结果ID</returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX3TwoDfoNoXlAsync(X3TwoDfoNoXlPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).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.Adja1SatID);
+                var parameter4 = new SQLiteParameter("@satcode", dto.Adja2SatID);
+                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.Adja1SatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.Adja1SatID}]的双行根数星历");
+                }
+
+                var xlInfo3 = 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, parameter4).FirstOrDefaultAsync();
+                if (xlInfo3 == null)
+                {
+                    Serilog.Log.Error($"未找到卫星[{dto.Adja2SatID}]的双行根数星历");
+                    return Error<PosRes>($"未找到卫星[{dto.Adja2SatID}]的双行根数星历");
+                }
+                Serilog.Log.Information($"卫星{dto.MainSatID}使用{xlInfo1.TwoLine}进行星历推算");
+                Serilog.Log.Information($"卫星{dto.Adja1SatID}使用{xlInfo2.TwoLine}进行星历推算");
+                Serilog.Log.Information($"卫星{dto.Adja2SatID}使用{xlInfo3.TwoLine}进行星历推算");
+                var settings = await db.SysSetings.FirstOrDefaultAsync();
+                var client = new HttpClient();
+
+                string url = string.Format("http://{0}:{1}/Api/", IpHelper.GetLocalIp(), 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.Adja1SatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.Adja1SatID}]星厉推算失败");
+                }
+                var content2 = await response2.Content.ReadAsStringAsync();
+                var ephAdja1 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
+
+                var url3 = string.Format(url + "Xl/Calc?tleStr={0}&dt={1}", xlInfo3.TwoLine, dto.SigTime);
+                var response3 = await client.GetAsync(url3);
+                if (!response3.IsSuccessStatusCode) // 处理响应失败
+                {
+                    Serilog.Log.Error($"[{dto.Adja2SatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.Adja2SatID}]星厉推算失败");
+                }
+                var content3 = await response2.Content.ReadAsStringAsync();
+                var ephAdja2 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content3).data;
+
+                var StationRes = db.StationRes.Add(new StationRes()
+                {
+                    SatTxLon = dto.StationResInfo.SatTxLon,
+                    SatTxLat = dto.StationResInfo.SatTxLat,
+                    CdbTxLon = dto.StationResInfo.CdbTxLon,
+                    CdbTxLat = dto.StationResInfo.CdbTxLat,
+                    CxLon = dto.StationResInfo.CxLon,
+                    CxLat = dto.StationResInfo.CxLat,
+                    RefLon = dto.StationResInfo.RefLon,
+                    RefLat = dto.StationResInfo.RefLat,
+                });
+
+                var cgRes = db.CgRes.Add(new Model.CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    Dto1 = dto.Dto1,
+                    Dfo1 = dto.Dfo1,
+                    Snr1 = dto.Snr1,
+                    Dto2 = dto.Dto2,
+                    Dfo2 = dto.Dfo2,
+                    Snr2 = dto.Snr2,
+                    YbMainDfo = dto.YbMainDfo,
+                    YbAdja1Dfo = dto.YbAdja1Dfo,
+                    YbAdja2Dfo = dto.YbAdja2Dfo,
+                    TarFreqUp = dto.TarFreqUp,
+                    TarFreqDown = dto.TarFreqDown,
+                    RefFreqUp = dto.RefFreqUp,
+                    RefFreqDown = dto.RefFreqDown,
+                    StationResID = StationRes.ID,
+                    MainX = ephMain.X,
+                    MainY = ephMain.Y,
+                    MainZ = ephMain.Z,
+                    MainVx = ephMain.VX,
+                    MainVy = ephMain.VY,
+                    MainVz = ephMain.VZ,
+                    Adja1X = ephAdja1.X,
+                    Adja1Y = ephAdja1.Y,
+                    Adja1Z = ephAdja1.Z,
+                    Adja1Vx = ephAdja1.VX,
+                    Adja1Vy = ephAdja1.VY,
+                    Adja1Vz = ephAdja1.VZ,
+                    Adja2X = ephAdja2.X,
+                    Adja2Y = ephAdja2.Y,
+                    Adja2Z = ephAdja2.Z,
+                    Adja2Vx = ephAdja2.VX,
+                    Adja2Vy = ephAdja2.VY,
+                    Adja2Vz = ephAdja2.VZ,
+                });
+
+                var res = PosApi.X3_PosTwoDfo(cgRes, StationRes);
+
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = dto.SigTime,
+                    TaskInfoID = 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],
+                };
+                posRes = db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                PosObServer.Instance.Pub(posRes);
+                return Success(posRes);
+            }
+        }
+        #endregion
+
+        #region 双星时频差定位
+        /// <summary>
+        /// 双星时频差带参定位(含星历)
+        /// </summary>
+        /// <param name="dto">定位参数</param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX2DtoDfoAsync(X2DtoDfoPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2Dfo && p.TaskState == EnumTaskState.Running);
+                if (runTask == null)
+                {
+                    Serilog.Log.Warning($"接收到双星时频差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动双星时频差定位任务");
+                }
+
+                var StationRes = db.StationRes.Add(new StationRes()
+                {
+                    SatTxLon = dto.StationResInfo.SatTxLon,
+                    SatTxLat = dto.StationResInfo.SatTxLat,
+                    CdbTxLon = dto.StationResInfo.CdbTxLon,
+                    CdbTxLat = dto.StationResInfo.CdbTxLat,
+                    CxLon = dto.StationResInfo.CxLon,
+                    CxLat = dto.StationResInfo.CxLat,
+                    RefLon = dto.StationResInfo.RefLon,
+                    RefLat = dto.StationResInfo.RefLat,
+                });
+
+                var cgRes = db.CgRes.Add(new CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    Dto1 = dto.Dto,
+                    Dfo1 = dto.Dfo,
+                    Snr1 = dto.Snr,
+                    YbMainDto = dto.YbMainDto,
+                    YbAdja1Dto = dto.YbAdjaDto,
+                    YbMainDfo = dto.YbMainDfo,
+                    YbAdja1Dfo = dto.YbAdjaDfo,
+                    TarFreqUp = dto.TarFreqUp,
+                    TarFreqDown = dto.TarFreqDown,
+                    RefFreqUp = dto.RefFreqUp,
+                    RefFreqDown = dto.RefFreqDown,
+                    StationResID = StationRes.ID,
+                    MainX = dto.MainX,
+                    MainY = dto.MainY,
+                    MainZ = dto.MainZ,
+                    MainVx = dto.MainVx,
+                    MainVy = dto.MainVy,
+                    MainVz = dto.MainVz,
+                    Adja1X = dto.AdjaX,
+                    Adja1Y = dto.AdjaY,
+                    Adja1Z = dto.AdjaZ,
+                    Adja1Vx = dto.AdjaVx,
+                    Adja1Vy = dto.AdjaVy,
+                    Adja1Vz = dto.AdjaVz,
+                });
+
+                var res = PosApi.X2_PosDtoDfo(cgRes, StationRes);
+
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = cgRes.SigTime,
+                    TaskInfoID = 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],
+                };
+                posRes = db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                PosObServer.Instance.Pub(posRes);
+                return Success(posRes);
+            }
+        }
+
+        /// <summary>
+        /// 双星时频差带参定位(无星历)
+        /// </summary>
+        /// <returns>返回定位结果ID</returns>
+        [HttpPost]
+        public async Task<AjaxResult<PosRes>> PosX2DtoDfoNoXlAsync(X2DtoDfoNoXlPosDto dto)
+        {
+            using (RHDWContext db = new RHDWContext())
+            {
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2Dfo).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/", IpHelper.GetLocalIp(), 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 ephAdja1 = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
+
+                var StationRes = db.StationRes.Add(new StationRes()
+                {
+                    SatTxLon = dto.StationResInfo.SatTxLon,
+                    SatTxLat = dto.StationResInfo.SatTxLat,
+                    CdbTxLon = dto.StationResInfo.CdbTxLon,
+                    CdbTxLat = dto.StationResInfo.CdbTxLat,
+                    CxLon = dto.StationResInfo.CxLon,
+                    CxLat = dto.StationResInfo.CxLat,
+                    RefLon = dto.StationResInfo.RefLon,
+                    RefLat = dto.StationResInfo.RefLat,
+                });
+
+                var cgRes = db.CgRes.Add(new Model.CgRes()
+                {
+                    SigTime = dto.SigTime,
+                    Dto1 = dto.Dto,
+                    Dfo1 = dto.Dfo,
+                    Snr1 = dto.Snr,
+                    YbMainDto = dto.YbMainDto,
+                    YbAdja1Dto = dto.YbAdjaDto,
+                    YbMainDfo = dto.YbMainDfo,
+                    YbAdja1Dfo = dto.YbAdjaDfo,
+                    TarFreqUp = dto.TarFreqUp,
+                    TarFreqDown = dto.TarFreqDown,
+                    RefFreqUp = dto.RefFreqUp,
+                    RefFreqDown = dto.RefFreqDown,
+                    StationResID = StationRes.ID,
+                    MainX = ephMain.X,
+                    MainY = ephMain.Y,
+                    MainZ = ephMain.Z,
+                    MainVx = ephMain.VX,
+                    MainVy = ephMain.VY,
+                    MainVz = ephMain.VZ,
+                    Adja1X = ephAdja1.X,
+                    Adja1Y = ephAdja1.Y,
+                    Adja1Z = ephAdja1.Z,
+                    Adja1Vx = ephAdja1.VX,
+                    Adja1Vy = ephAdja1.VY,
+                    Adja1Vz = ephAdja1.VZ,
+                });
+
+                var res = PosApi.X2_PosDtoDfo(cgRes, StationRes);
+
+                PosRes posRes = new PosRes()
+                {
+                    SigTime = dto.SigTime,
+                    TaskInfoID = 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],
+                };
+                posRes = db.PosRes.Add(posRes);
+                await db.SaveChangesAsync();
+                PosObServer.Instance.Pub(posRes);
+                return Success(posRes);
+            }
+        }
         #endregion
 
         /// <summary>

+ 1 - 1
XdCxRhDW.App/WebAPI/Controllers/XlController.cs

@@ -21,7 +21,7 @@ using static XdCxRhDw.CpuCgTools.FormCpuCg;
 namespace XdCxRhDW.App.WebAPI
 {
     /// <summary>
-    /// 定位功能相关接口
+    /// 星历推算功能相关接口
     /// </summary>
     public class XlController : BaseController
     {

+ 112 - 6
XdCxRhDW.App/WebAPI/Startup.cs

@@ -1,13 +1,16 @@
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.IO;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Reflection;
 using System.Runtime.Remoting.Contexts;
 using System.Text;
+using System.Threading;
 using System.Web.Http;
 using System.Web.Http.Description;
 using System.Web.Http.Filters;
@@ -16,6 +19,7 @@ using System.Web.Http.Routing;
 using System.Web.Http.Validation;
 using System.Web.Http.Validation.Providers;
 using System.Xml;
+using System.Xml.Linq;
 using Microsoft.Owin;
 using Microsoft.Owin.Cors;
 using Newtonsoft.Json;
@@ -47,12 +51,16 @@ namespace XdCxRhDW.App.WebAPI
                 //日期类型默认格式化处理
                 DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
                 DateFormatString = "yyyy-MM-dd HH:mm:ss",
+
                 //驼峰样式
-                ContractResolver = new CamelCasePropertyNamesContractResolver(),
+                //ContractResolver = new CamelCasePropertyNamesContractResolver(),
+
                 //空值处理
                 //NullValueHandling = NullValueHandling.Ignore,
+
                 //设置序列化的最大层数
                 MaxDepth = 10,
+
                 //解决json序列化时的循环引用问题
                 ReferenceLoopHandling = ReferenceLoopHandling.Ignore
             };
@@ -69,8 +77,6 @@ namespace XdCxRhDW.App.WebAPI
             //添加路由路径
             config.MapHttpAttributeRoutes();
             app.UseCors(CorsOptions.AllowAll);
-
-            //app.Use<LoggingMiddleware>();
             app.UseWebApi(config);
         }
         private static void ConfigureSwagger(HttpConfiguration config)
@@ -78,22 +84,27 @@ namespace XdCxRhDW.App.WebAPI
             var thisAssembly = typeof(Startup).Assembly;
             config.EnableSwagger(c =>
              {
+                 c.IgnoreObsoleteActions();//忽略过时的方法
+                 c.IgnoreObsoleteProperties();//忽略过时的属性
+                 c.PrettyPrint();//漂亮缩进
                  c.SingleApiVersion("v1", "多模式融合定位平台Http接口");
+                 c.ApiKey("123456");
 
                  //设置接口描述xml路径地址
                  var webApiXmlPath1 = $"{AppDomain.CurrentDomain.BaseDirectory}{Path.GetFileNameWithoutExtension(System.AppDomain.CurrentDomain.FriendlyName)}.xml";
                  c.IncludeXmlComments(webApiXmlPath1);
                  var webApiXmlPath2 = $"{AppDomain.CurrentDomain.BaseDirectory}XdCxRhDw.Dto.xml";
                  c.IncludeXmlComments(webApiXmlPath2);
-                 c.UseFullTypeNameInSchemaIds();
+                 //c.UseFullTypeNameInSchemaIds();//使用完整类型名称
                  //加入控制器描述
                  c.CustomProvider((defaultProvider) => new SwaggerControllerDescProvider(defaultProvider, webApiXmlPath1));
                  c.OperationFilter<FileUploadOperation>();
+                 c.SchemaFilter<SwaggerEnumFilter>();
              })
              .EnableSwaggerUi(c =>
              {
                  c.InjectJavaScript(thisAssembly, "XdCxRhDW.App.WebAPI.Swagger.js");
-                 c.DocumentTitle("");
+                 c.DocumentTitle("多模式融合定位平台Http接口");
              });
         }
         /// <summary>
@@ -126,7 +137,7 @@ namespace XdCxRhDW.App.WebAPI
             /// </summary>
             public string Description { get; private set; }
         }
-       
+
         public class FileUploadOperation : IOperationFilter
         {
             public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
@@ -273,8 +284,103 @@ namespace XdCxRhDW.App.WebAPI
                 return controllerDescDict;
             }
         }
+
+        private sealed class ApiComparer : IComparer<string>
+        {
+            public int Compare(string x, string y)
+            {
+                return x.CompareTo(y);
+            }
+        }
     }
 
+    public class SwaggerEnumFilter : ISchemaFilter
+    {
+        public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
+        {
+            UpdateSchemaDescription(schema, type);
+        }
+        private void UpdateSchemaDescription(Schema schema, Type type)
+        {
+            if (type.IsEnum)//枚举直接应用在controller接口中
+            {
+                var items = GetEnumInfo(type);
+                if (items.Length > 0)
+                {
+                    var description = GetEnumInfo(type);
+                    schema.description = string.IsNullOrEmpty(schema.description) ? description : $"{schema.description}:{description}";
+                }
+            }
+            else if (type.IsClass && type != typeof(string))//枚举在类的属性中
+            {
+                if (schema.properties == null) return;
+                var props = type.GetProperties();
+                foreach (var prop in props)
+                {
+                    var propScheama = schema.properties[prop.Name];
+                    if (prop.PropertyType.IsClass && prop.PropertyType != typeof(string))
+                    {
+                        UpdateSchemaDescription(propScheama, prop.PropertyType);
+                    }
+                    else
+                    {
+                        if (prop.PropertyType.IsEnum)
+                        {
+                            var description = GetEnumInfo(prop.PropertyType);
+                            propScheama.description = string.IsNullOrWhiteSpace(propScheama.description) ? description : $"{propScheama.description}:{description}";
+                            propScheama.@enum = null;
+                        }
+                    }
+                }
+            }
+        }
+        /// <summary>
+        /// 获取枚举值+描述  
+        /// </summary>
+        /// <param name="enumType"></param>
+        /// <returns></returns>
+        private string GetEnumInfo(Type enumType)
+        {
+            var fields = enumType.GetFields();
+            List<string> list = new List<string>();
+            foreach (var field in fields)
+            {
+                if (!field.FieldType.IsEnum) continue;
+                string description = null;
+                if (description == null)//取DescriptionAttribute的值
+                {
+                    var descriptionAttr = field.GetCustomAttribute<DescriptionAttribute>();
+                    if (descriptionAttr != null && !string.IsNullOrWhiteSpace(descriptionAttr.Description))
+                    {
+                        description = descriptionAttr.Description;
+                    }
+                }
+                if (description == null)//取DisplayAttribute的值
+                {
+                    var dispalyAttr = field.GetCustomAttribute<DisplayAttribute>();
+                    if (dispalyAttr != null && !string.IsNullOrWhiteSpace(dispalyAttr.Name))
+                    {
+                        description = dispalyAttr.Name;
+                    }
+                }
+                if (description == null)//取DisplayNameAttribute的值
+                {
+                    var dispalyNameAttr = field.GetCustomAttribute<DisplayNameAttribute>();
+                    if (dispalyNameAttr != null && !string.IsNullOrWhiteSpace(dispalyNameAttr.DisplayName))
+                    {
+                        description = dispalyNameAttr.DisplayName;
+                    }
+                }
+                if (description == null)//取字段名
+                {
+                    description = field.Name;
+                }
+                var value = field.GetValue(null);
+                list.Add($"{description}={(int)value}");
+            }
+            return string.Join(",", list);
+        }
+    }
     public class CustomModelValidator : ModelValidator
     {
         public CustomModelValidator(IEnumerable<ModelValidatorProvider> modelValidatorProviders) : base(modelValidatorProviders)

+ 1 - 0
XdCxRhDW.App/WebAPI/Swagger.js

@@ -100,6 +100,7 @@ window.SwaggerTranslator.learn({
 
 
 $(function () {
+    $(".swagger-ui-wrap").css("max-width", "80%");
     window.SwaggerTranslator.translate();
     window.SwaggerTranslator.setControllerSummary();
     // document.title = "API描述文档";

+ 8 - 6
XdCxRhDw.Dto/DetectDto.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Text;
@@ -15,9 +16,10 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 调用Upload接口上传文件后返回的文件名
         /// </summary>
+        [DefaultValue("hello word!")]
         public string file1 { get; set; }
         /// <summary>
-        /// 检测类型(DAMA=1,IBS=2,能量检测=3) 
+        /// 检测类型
         /// </summary>
         public DmcType dmcType { get; set; }
 
@@ -34,19 +36,19 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// DAMA检测
         /// </summary>
-        [Display(Name ="DAMA")]
-        DAMA=1,
+        [Display(Name = "DAMA检测")]
+        DAMA = 1,
 
         /// <summary>
         /// IBS检测
         /// </summary>
-        [Display(Name = "IBS")]
-        IBS =2,
+        [Display(Name = "IBS检测")]
+        IBS = 2,
 
         /// <summary>
         /// 能量检测
         /// </summary>
         [Display(Name = "能量检测")]
-        Ky5758 =3
+        Ky5758 = 3
     }
 }

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

@@ -34,12 +34,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标双星频差(Hz)
         /// </summary>
-        public double SxDfo { get; set; }
+        public double? SxDfo { get; set; }
 
         /// <summary>
         /// 目标双星信噪比(dB)
         /// </summary>
-        public double SxSnr { get; set; }
+        public double? SxSnr { get; set; }
 
         /// <summary>
         /// 目标星地时差(us)
@@ -49,12 +49,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
         /// 参考样本主时差(us)

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

@@ -24,12 +24,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标双星频差(Hz)
         /// </summary>
-        public double SxDfo { get; set; }
+        public double? SxDfo { get; set; }
 
         /// <summary>
         /// 目标双星信噪比(dB)
         /// </summary>
-        public double SxSnr { get; set; }
+        public double? SxSnr { get; set; }
 
         /// <summary>
         /// 目标星地时差(us)
@@ -39,20 +39,20 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
-        /// 参考样本主时差(us)
+        /// 样本主时差(us)
         /// </summary>
         public double MainYbDto { get; set; }
 
         /// <summary>
-        /// 参考样本邻时差(us)
+        /// 样本邻时差(us)
         /// </summary>
         public double AdjaYbDto { get; set; }
 

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

@@ -29,15 +29,15 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
-        /// 参考样本主时差(us)
+        /// 样本主时差(us)
         /// </summary>
         public double MainYbDto { get; set; }
 

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

@@ -23,15 +23,15 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
-        /// 参考样本主时差(us)
+        /// 样本主时差(us)
         /// </summary>
         public double MainYbDto { get; set; }
 

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

@@ -24,12 +24,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标双星频差(Hz)
         /// </summary>
-        public double SxDfo { get; set; }
+        public double? SxDfo { get; set; }
 
         /// <summary>
         /// 目标双星信噪比(dB)
         /// </summary>
-        public double SxSnr { get; set; }
+        public double? SxSnr { get; set; }
 
         /// <summary>
         /// 目标星地时差(us)
@@ -39,12 +39,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
         /// 目标名称(可空)

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

@@ -34,12 +34,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标双星频差(Hz)
         /// </summary>
-        public double SxDfo { get; set; }
+        public double? SxDfo { get; set; }
 
         /// <summary>
         /// 目标双星信噪比(dB)
         /// </summary>
-        public double SxSnr { get; set; }
+        public double? SxSnr { get; set; }
 
         /// <summary>
         /// 目标星地时差(us)
@@ -49,12 +49,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
         /// 目标名称(可空)

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

@@ -35,12 +35,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标双星频差(Hz)
         /// </summary>
-        public double SxDfo { get; set; }
+        public double? SxDfo { get; set; }
 
         /// <summary>
         /// 目标双星信噪比(dB)
         /// </summary>
-        public double SxSnr { get; set; }
+        public double? SxSnr { get; set; }
 
         /// <summary>
         /// 目标星地时差(us)
@@ -51,21 +51,21 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
 
         /// <summary>
-        /// 参考样本主时差(us)
+        ///样本主时差(us)
         /// </summary>
         public double MainYbDto { get; set; }
 
         /// <summary>
-        /// 参考样本邻时差(us)
+        /// 样本邻时差(us)
         /// </summary>
         public double AdjaYbDto { get; set; }
 

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

@@ -24,12 +24,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标双星频差(Hz)
         /// </summary>
-        public double SxDfo { get; set; }
+        public double? SxDfo { get; set; }
 
         /// <summary>
         /// 目标双星信噪比(dB)
         /// </summary>
-        public double SxSnr { get; set; }
+        public double? SxSnr { get; set; }
 
         /// <summary>
         /// 目标星地时差(us)
@@ -39,20 +39,20 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 目标星地频差(Hz)
         /// </summary>
-        public double XdDfo { get; set; }
+        public double? XdDfo { get; set; }
 
         /// <summary>
         /// 目标星地信噪比(dB)
         /// </summary>
-        public double XdSnr { get; set; }
+        public double? XdSnr { get; set; }
 
         /// <summary>
-        /// 参考样本主时差(us)
+        /// 样本主时差(us)
         /// </summary>
         public double MainYbDto { get; set; }
 
         /// <summary>
-        /// 参考样本邻时差(us)
+        /// 样本邻时差(us)
         /// </summary>
         public double AdjaYbDto { get; set; }
 

+ 102 - 0
XdCxRhDw.Dto/PosDto/X2DtoDfoNoXlPosDto.cs

@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    /// 双星时频差带参定位参数DTO(无星历)
+    /// </summary>
+    public class X2DtoDfoNoXlPosDto
+    {
+        /// <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 Dto { get; set; }
+
+        /// <summary>
+        /// 主邻频差(Hz)
+        /// </summary>
+        public double Dfo { get; set; }
+
+        /// <summary>
+        /// 主邻信噪比(dB)
+        /// </summary>
+        public double? Snr { get; set; }
+
+        /// <summary>
+        /// 样本主星时差(us)
+        /// </summary>
+        public double YbMainDto { get; set; }
+
+        /// <summary>
+        /// 样本邻星时差(us)
+        /// </summary>
+        public double YbAdjaDto { get; set; }
+
+        /// <summary>
+        /// 样本主星频差(Hz)
+        /// </summary>
+        public double YbMainDfo { get; set; }
+
+        /// <summary>
+        /// 样本邻星频差(Hz)
+        /// </summary>
+        public double YbAdjaDfo { get; set; }
+
+        /// <summary>
+        /// 目标上行频点(Hz)
+        /// </summary>
+        public double TarFreqUp { get; set; }
+
+        /// <summary>
+        /// 目标下行频点(Hz)
+        /// </summary>
+        public double TarFreqDown { get; set; }
+
+        /// <summary>
+        /// 参考上行频点(Hz)
+        /// </summary>
+        public double RefFreqUp { get; set; }
+
+        /// <summary>
+        /// 参考下行频点(Hz)
+        /// </summary>
+        public double RefFreqDown { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

+ 152 - 0
XdCxRhDw.Dto/PosDto/X2DtoDfoPosDto.cs

@@ -0,0 +1,152 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    ///  双星时频差带参定位参数DTO(无星历)
+    /// </summary>
+    public class X2DtoDfoPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 主邻1时差(us)
+        /// </summary>
+        public double Dto { get; set; }
+
+        /// <summary>
+        /// 主邻1频差(Hz)
+        /// </summary>
+        public double Dfo { get; set; }
+
+        /// <summary>
+        /// 主邻1信噪比(dB)
+        /// </summary>
+        public double? Snr { get; set; }
+
+        /// <summary>
+        /// 样本主星时差(us)
+        /// </summary>
+        public double YbMainDto { get; set; }
+
+        /// <summary>
+        /// 样本邻星1时差(us)
+        /// </summary>
+        public double YbAdjaDto { get; set; }
+
+        /// <summary>
+        /// 样本主星频差(Hz)
+        /// </summary>
+        public double YbMainDfo { get; set; }
+
+        /// <summary>
+        /// 样本邻星频差(Hz)
+        /// </summary>
+        public double YbAdjaDfo { get; set; }
+
+        /// <summary>
+        /// 目标上行频点(Hz)
+        /// </summary>
+        public double TarFreqUp { get; set; }
+
+        /// <summary>
+        /// 目标下行频点(Hz)
+        /// </summary>
+        public double TarFreqDown { get; set; }
+
+        /// <summary>
+        /// 参考上行频点(Hz)
+        /// </summary>
+        public double RefFreqUp { get; set; }
+
+        /// <summary>
+        /// 参考下行频点(Hz)
+        /// </summary>
+        public double RefFreqDown { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        ///  主星X坐标
+        /// </summary>
+        public double MainX { get; set; }
+
+        /// <summary>
+        /// 主星Y坐标
+        /// </summary>
+        public double MainY { get; set; }
+
+        /// <summary>
+        /// 主星Z坐标
+        /// </summary>
+        public double MainZ { get; set; }
+
+        /// <summary>
+        /// 主星速度Vx(m/s)
+        /// </summary>
+        public double MainVx { get; set; }
+
+        /// <summary>
+        /// 主星速度Vy(m/s)
+        /// </summary>
+        public double MainVy { get; set; }
+
+        /// <summary>
+        /// 主星速度Vz(m/s)
+        /// </summary>
+        public double MainVz { get; set; }
+
+        /// <summary>
+        ///  邻星X坐标
+        /// </summary>
+        public double AdjaX { get; set; }
+
+        /// <summary>
+        ///  邻星Y坐标
+        /// </summary>
+        public double AdjaY { get; set; }
+
+        /// <summary>
+        ///  邻星Z坐标
+        /// </summary>
+        public double AdjaZ { get; set; }
+
+        /// <summary>
+        /// 邻星1速度Vx(m/s)
+        /// </summary>
+        public double AdjaVx { get; set; }
+
+        /// <summary>
+        /// 邻星1速度Vy(m/s)
+        /// </summary>
+        public double AdjaVy { get; set; }
+
+        /// <summary>
+        /// 邻星1速度Vz(m/s)
+        /// </summary>
+        public double AdjaVz { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

+ 117 - 0
XdCxRhDw.Dto/PosDto/X3TwoDfoNoXlPosDto.cs

@@ -0,0 +1,117 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    /// 三星双频差带参定位参数DTO(无星历)
+    /// </summary>
+    public class X3TwoDfoNoXlPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 主星编号
+        /// </summary>
+        public int MainSatID { get; set; }
+
+        /// <summary>
+        /// 邻星1编号
+        /// </summary>
+        public int Adja1SatID { get; set; }
+
+        /// <summary>
+        /// 邻星2编号
+        /// </summary>
+        public int Adja2SatID { get; set; }
+
+        /// <summary>
+        /// 主邻1时差(us)
+        /// </summary>
+        public double? Dto1 { get; set; }
+
+        /// <summary>
+        /// 主邻1频差(Hz)
+        /// </summary>
+        public double Dfo1 { get; set; }
+
+        /// <summary>
+        /// 主邻1信噪比(dB)
+        /// </summary>
+        public double? Snr1 { get; set; }
+
+        /// <summary>
+        /// 主邻2时差(us)
+        /// </summary>
+        public double? Dto2 { get; set; }
+
+        /// <summary>
+        /// 主邻2频差(Hz)
+        /// </summary>
+        public double Dfo2 { get; set; }
+
+        /// <summary>
+        /// 主邻2信噪比(dB)
+        /// </summary>
+        public double? Snr2 { get; set; }
+
+        /// <summary>
+        /// 样本主星频差(Hz)
+        /// </summary>
+        public double? YbMainDfo { get; set; }
+
+        /// <summary>
+        /// 样本邻星1频差(Hz)
+        /// </summary>
+        public double? YbAdja1Dfo { get; set; }
+
+        /// <summary>
+        /// 样本邻星1频差(Hz)
+        /// </summary>
+        public double? YbAdja2Dfo { get; set; }
+
+        /// <summary>
+        /// 目标上行频点(Hz)
+        /// </summary>
+        public double TarFreqUp { get; set; }
+
+        /// <summary>
+        /// 目标下行频点(Hz)
+        /// </summary>
+        public double TarFreqDown { get; set; }
+
+        /// <summary>
+        /// 参考上行频点(Hz)
+        /// </summary>
+        public double RefFreqUp { get; set; }
+
+        /// <summary>
+        /// 参考下行频点(Hz)
+        /// </summary>
+        public double RefFreqDown { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

+ 192 - 0
XdCxRhDw.Dto/PosDto/X3TwoDfoPosDto.cs

@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    ///  三星双频差带参定位参数DTO(含星历)
+    /// </summary>
+    public class X3TwoDfoPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 主邻1时差(us)
+        /// </summary>
+        public double? Dto1 { get; set; }
+
+        /// <summary>
+        /// 主邻1频差(Hz)
+        /// </summary>
+        public double Dfo1 { get; set; }
+
+        /// <summary>
+        /// 主邻1信噪比(dB)
+        /// </summary>
+        public double? Snr1 { get; set; }
+
+        /// <summary>
+        /// 主邻2时差(us)
+        /// </summary>
+        public double? Dto2 { get; set; }
+
+        /// <summary>
+        /// 主邻2频差(Hz)
+        /// </summary>
+        public double Dfo2 { get; set; }
+
+        /// <summary>
+        /// 主邻2信噪比(dB)
+        /// </summary>
+        public double? Snr2 { get; set; }
+
+        /// <summary>
+        /// 样本主星频差(Hz)
+        /// </summary>
+        public double? YbMainDfo { get; set; }
+
+        /// <summary>
+        /// 样本邻星1频差(Hz)
+        /// </summary>
+        public double? YbAdja1Dfo { get; set; }
+
+        /// <summary>
+        /// 样本邻星1频差(Hz)
+        /// </summary>
+        public double? YbAdja2Dfo { get; set; }
+
+        /// <summary>
+        /// 目标上行频点(Hz)
+        /// </summary>
+        public double TarFreqUp { get; set; }
+
+        /// <summary>
+        /// 目标下行频点(Hz)
+        /// </summary>
+        public double TarFreqDown { get; set; }
+
+        /// <summary>
+        /// 参考上行频点(Hz)
+        /// </summary>
+        public double RefFreqUp { get; set; }
+
+        /// <summary>
+        /// 参考下行频点(Hz)
+        /// </summary>
+        public double RefFreqDown { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        ///  主星X坐标
+        /// </summary>
+        public double MainX { get; set; }
+
+        /// <summary>
+        /// 主星Y坐标
+        /// </summary>
+        public double MainY { get; set; }
+
+        /// <summary>
+        /// 主星Z坐标
+        /// </summary>
+        public double MainZ { get; set; }
+
+        /// <summary>
+        /// 主星速度Vx(m/s)
+        /// </summary>
+        public double MainVx { get; set; }
+
+        /// <summary>
+        /// 主星速度Vy(m/s)
+        /// </summary>
+        public double MainVy { get; set; }
+
+        /// <summary>
+        /// 主星速度Vz(m/s)
+        /// </summary>
+        public double MainVz { get; set; }
+
+        /// <summary>
+        ///  邻星X坐标
+        /// </summary>
+        public double Adja1X { get; set; }
+
+        /// <summary>
+        ///  邻星Y坐标
+        /// </summary>
+        public double Adja1Y { get; set; }
+
+        /// <summary>
+        ///  邻星Z坐标
+        /// </summary>
+        public double Adja1Z { get; set; }
+
+        /// <summary>
+        /// 邻星1速度Vx(m/s)
+        /// </summary>
+        public double Adja1Vx { get; set; }
+
+        /// <summary>
+        /// 邻星1速度Vy(m/s)
+        /// </summary>
+        public double Adja1Vy { get; set; }
+
+        /// <summary>
+        /// 邻星1速度Vz(m/s)
+        /// </summary>
+        public double Adja1Vz { get; set; }
+
+        /// <summary>
+        ///  邻星X坐标
+        /// </summary>
+        public double Adja2X { get; set; }
+
+        /// <summary>
+        ///  邻星Y坐标
+        /// </summary>
+        public double Adja2Y { get; set; }
+
+        /// <summary>
+        ///  邻星Z坐标
+        /// </summary>
+        public double Adja2Z { get; set; }
+
+        /// <summary>
+        /// 邻星2速度Vx(m/s)
+        /// </summary>
+        public double Adja2Vx { get; set; }
+
+        /// <summary>
+        /// 邻星2速度Vy(m/s)
+        /// </summary>
+        public double Adja2Vy { get; set; }
+
+        /// <summary>
+        /// 邻星2速度Vz(m/s)
+        /// </summary>
+        public double Adja2Vz { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

+ 127 - 0
XdCxRhDw.Dto/PosDto/X3TwoDtoNoParPosDto.cs

@@ -0,0 +1,127 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    /// 三星双时差无参定位参数DTO(含星历)
+    /// </summary>
+    public class X3TwoDtoNoParPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 主星编号
+        /// </summary>
+        public int MainSatID { get; set; }
+
+        /// <summary>
+        /// 邻星1编号
+        /// </summary>
+        public int Adja1SatID { get; set; }
+
+        /// <summary>
+        /// 邻星2编号
+        /// </summary>
+        public int Adja2SatID { get; set; }
+
+        /// <summary>
+        /// 主邻1时差(us)
+        /// </summary>
+        public double Dto1 { get; set; }
+
+        /// <summary>
+        /// 主邻1频差(Hz)
+        /// </summary>
+        public double? Dfo1 { get; set; }
+
+        /// <summary>
+        /// 主邻1信噪比(dB)
+        /// </summary>
+        public double? Snr1 { get; set; }
+
+        /// <summary>
+        /// 主邻2时差(us)
+        /// </summary>
+        public double Dto2 { get; set; }
+
+        /// <summary>
+        /// 主邻2频差(Hz)
+        /// </summary>
+        public double? Dfo2 { get; set; }
+
+        /// <summary>
+        /// 主邻2信噪比(dB)
+        /// </summary>
+        public double? Snr2 { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        ///  主星X坐标
+        /// </summary>
+        public double MainX { get; set; }
+
+        /// <summary>
+        /// 主星Y坐标
+        /// </summary>
+        public double MainY { get; set; }
+
+        /// <summary>
+        /// 主星Z坐标
+        /// </summary>
+        public double MainZ { get; set; }
+
+        /// <summary>
+        ///  邻星X坐标
+        /// </summary>
+        public double Adja1X { get; set; }
+
+        /// <summary>
+        ///  邻星Y坐标
+        /// </summary>
+        public double Adja1Y { get; set; }
+
+        /// <summary>
+        ///  邻星Z坐标
+        /// </summary>
+        public double Adja1Z { get; set; }
+
+        /// <summary>
+        ///  邻星X坐标
+        /// </summary>
+        public double Adja2X { get; set; }
+
+        /// <summary>
+        ///  邻星Y坐标
+        /// </summary>
+        public double Adja2Y { get; set; }
+
+        /// <summary>
+        ///  邻星Z坐标
+        /// </summary>
+        public double Adja2Z { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

+ 82 - 0
XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlNoParPosDto.cs

@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDw.Dto
+{
+    /// <summary>
+    /// 三星双时差无参定位参数DTO(无星历)
+    /// </summary>
+    public class X3TwoDtoNoXlNoParPosDto
+    {
+        /// <summary>
+        /// 信号时刻(北京时间)
+        /// </summary>
+        public DateTime SigTime { get; set; }
+
+        /// <summary>
+        /// 主星编号
+        /// </summary>
+        public int MainSatID { get; set; }
+
+        /// <summary>
+        /// 邻星1编号
+        /// </summary>
+        public int Adja1SatID { get; set; }
+
+        /// <summary>
+        /// 邻星2编号
+        /// </summary>
+        public int Adja2SatID { get; set; }
+
+        /// <summary>
+        /// 主邻1时差(us)
+        /// </summary>
+        public double Dto1 { get; set; }
+
+        /// <summary>
+        /// 主邻1频差(Hz)
+        /// </summary>
+        public double? Dfo1 { get; set; }
+
+        /// <summary>
+        /// 主邻1信噪比(dB)
+        /// </summary>
+        public double? Snr1 { get; set; }
+
+        /// <summary>
+        /// 主邻2时差(us)
+        /// </summary>
+        public double Dto2 { get; set; }
+
+        /// <summary>
+        /// 主邻2频差(Hz)
+        /// </summary>
+        public double? Dfo2 { get; set; }
+
+        /// <summary>
+        /// 主邻2信噪比(dB)
+        /// </summary>
+        public double? Snr2 { get; set; }
+       
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

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

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
 namespace XdCxRhDw.Dto
 {
     /// <summary>
-    /// 三星带参定位参数DTO(无星历)
+    /// 三星双时差带参定位参数DTO(无星历)
     /// </summary>
     public class X3TwoDtoNoXlPosDto
     {
@@ -40,12 +40,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 主邻1频差(Hz)
         /// </summary>
-        public double Dfo1 { get; set; }
+        public double? Dfo1 { get; set; }
 
         /// <summary>
         /// 主邻1信噪比(dB)
         /// </summary>
-        public double Snr1 { get; set; }
+        public double? Snr1 { get; set; }
 
         /// <summary>
         /// 主邻2时差(us)
@@ -55,20 +55,20 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 主邻2频差(Hz)
         /// </summary>
-        public double Dfo2 { get; set; }
+        public double? Dfo2 { get; set; }
 
         /// <summary>
         /// 主邻2信噪比(dB)
         /// </summary>
-        public double Snr2 { get; set; }
+        public double? Snr2 { get; set; }
 
         /// <summary>
-        /// 参考样本主时差(us)
+        /// 样本主时差(us)
         /// </summary>
         public double YbMainDto { get; set; }
 
         /// <summary>
-        /// 参考样本邻时差(us)
+        /// 样本邻星1时差(us)
         /// </summary>
         public double YbAdja1Dto { get; set; }
 

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

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
 namespace XdCxRhDw.Dto
 {
     /// <summary>
-    /// 三星带参定位参数DTO(含星历)
+    /// 三星双时差带参定位参数DTO(含星历)
     /// </summary>
     public class X3TwoDtoPosDto
     {
@@ -25,12 +25,12 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 主邻1频差(Hz)
         /// </summary>
-        public double Dfo1 { get; set; }
+        public double? Dfo1 { get; set; }
 
         /// <summary>
         /// 主邻1信噪比(dB)
         /// </summary>
-        public double Snr1 { get; set; }
+        public double? Snr1 { get; set; }
 
         /// <summary>
         /// 主邻2时差(us)
@@ -40,20 +40,20 @@ namespace XdCxRhDw.Dto
         /// <summary>
         /// 主邻2频差(Hz)
         /// </summary>
-        public double Dfo2 { get; set; }
+        public double? Dfo2 { get; set; }
 
         /// <summary>
         /// 主邻2信噪比(dB)
         /// </summary>
-        public double Snr2 { get; set; }
+        public double? Snr2 { get; set; }
 
         /// <summary>
-        /// 参考样本主时差(us)
+        /// 样本主时差(us)
         /// </summary>
         public double YbMainDto { get; set; }
 
         /// <summary>
-        /// 参考样本邻时差(us)
+        /// 样本邻星1时差(us)
         /// </summary>
         public double YbAdja1Dto { get; set; }
 

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

@@ -60,7 +60,13 @@
     <Compile Include="PosDto\X1D1NoParPosDto.cs" />
     <Compile Include="PosDto\X2D1NoXlNoParlPosDto.cs" />
     <Compile Include="PosDto\X2D1NoParPosDto.cs" />
+    <Compile Include="PosDto\X2DtoDfoNoXlPosDto.cs" />
+    <Compile Include="PosDto\X2DtoDfoPosDto.cs" />
+    <Compile Include="PosDto\X3TwoDtoNoXlNoParPosDto.cs" />
+    <Compile Include="PosDto\X3TwoDtoNoParPosDto.cs" />
+    <Compile Include="PosDto\X3TwoDfoNoXlPosDto.cs" />
     <Compile Include="PosDto\X3TwoDtoNoXlPosDto.cs" />
+    <Compile Include="PosDto\X3TwoDfoPosDto.cs" />
     <Compile Include="PosDto\X3TwoDtoPosDto.cs" />
     <Compile Include="PosResQueryDto.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />