gongqiuhong 1 年之前
父節點
當前提交
bbdc191a53

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

@@ -196,7 +196,6 @@ namespace XdCxRhDW.App.Api
             return res;
         }
 
-
         /// <summary>
         /// 三星双时差带参,返回经度纬度高度及镜像点,数组长度为6
         /// </summary>

+ 8 - 1
XdCxRhDW.App/Model/ModelEnum.cs

@@ -21,13 +21,20 @@ namespace XdCxRhDW.App.Model
         [Display(Name = "一星一地测向定位")]
         X1D1CX,
 
-
         [Display(Name = "两星一地定位")]
         X2D1,
 
         [Display(Name = "融合定位")]
         RH,
 
+        [Display(Name = "三星双时差定位")]
+        X3TwoDto,
+
+        [Display(Name = "三星双频差定位")]
+        X3TwoDfo,
+
+        [Display(Name = "双星时频差定位")]
+        X2Dfo,
     }
 
     public enum EnumTxType

+ 0 - 2
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -237,8 +237,6 @@ namespace XdCxRhDW.App.UserControl
             WaitHelper.CloseForm();
         }
 
-
-
         private void GridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
         {
             if (e.Column.FieldName == "TaskName" && (EnumTaskState)gridView1.GetRowCellValue(e.RowHandle, "TaskState") == EnumTaskState.Running)

+ 226 - 358
XdCxRhDW.App/WebAPI/Controllers/PosController.cs

@@ -38,7 +38,7 @@ namespace XdCxRhDW.App.WebAPI
     /// </summary>
     public class PosController : BaseController
     {
-        #region 带参有星历
+        #region 一星一地测向定位
         /// <summary>
         /// 一星一地测向带参定位(含星历)
         /// </summary>
@@ -110,156 +110,7 @@ namespace XdCxRhDW.App.WebAPI
         }
 
         /// <summary>
-        /// 两星一地带参定位(含星历)
-        /// </summary>
-        /// <param name="dto">定位参数</param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1PosDto dto)
-        {
-            using (RHDWContext db = new RHDWContext())
-            {
-                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 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.SxDto,
-                    Dfo1 = dto.SxDfo,
-                    Snr1 = dto.SxSnr,
-                    DtoCdb = dto.XdDto,
-                    DfoCdb = dto.XdDfo,
-                    SnrCdb = dto.XdSnr,
-                    YbMainDto = dto.MainYbDto,
-                    YbAdja1Dto = dto.AdjaYbDto,
-                    StationResID = StationRes.ID,
-                    MainX = dto.MainX,
-                    MainY = dto.MainY,
-                    MainZ = dto.MainZ,
-                    Adja1X = dto.AdjaX,
-                    Adja1Y = dto.AdjaY,
-                    Adja1Z = dto.AdjaZ,
-                });
-
-                var res = PosApi.X2D1_Pos(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>
-        /// <param name="dto">定位参数</param>
-        /// <returns></returns>
-        [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosRhAsync(RHPosDto dto)
-        {
-            using (RHDWContext db = new RHDWContext())
-            {
-                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 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.SxDto,
-                    Dfo1 = dto.SxDfo,
-                    Snr1 = dto.SxSnr,
-                    DtoCdb = dto.XdDto,
-                    DfoCdb = dto.XdDfo,
-                    SnrCdb = dto.XdSnr,
-                    YbMainDto = dto.MainYbDto,
-                    YbAdja1Dto = dto.AdjaYbDto,
-                    StationResID = StationRes.ID,
-                    MainX = dto.MainX,
-                    MainY = dto.MainY,
-                    MainZ = dto.MainZ,
-                    Adja1X = dto.AdjaX,
-                    Adja1Y = dto.AdjaY,
-                    Adja1Z = dto.AdjaZ,
-                });
-
-                var cxRes = db.CxRes.Add(new CxRes()
-                {
-                    SigTime = dto.SigTime,
-                    Fx = dto.CxRes,
-                });
-
-                var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
-
-                PosRes posRes = new PosRes()
-                {
-                    SigTime = cgRes.SigTime,
-                    TaskInfoID = runTask.ID,
-                    CxResID = cxRes.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>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
@@ -346,62 +197,25 @@ namespace XdCxRhDW.App.WebAPI
                 return Success(posRes);
             }
         }
+        #endregion
 
+        #region  两星一地定位
         /// <summary>
-        /// 两星一地带参定位(星历)
+        /// 两星一地带参定位(星历)
         /// </summary>
-        /// <returns>返回定位结果ID</returns>
+        /// <param name="dto">定位参数</param>
+        /// <returns></returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX2D1Async(X2D1PosDto dto)
         {
             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.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
-                    Serilog.Log.Warning($"接收到两星一地带参定位(星历)参数,由于任务没有运行中忽略本次定位!");
+                    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 ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
 
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
@@ -415,7 +229,7 @@ namespace XdCxRhDW.App.WebAPI
                     RefLat = dto.StationResInfo.RefLat,
                 });
 
-                var cgRes = db.CgRes.Add(new Model.CgRes()
+                var cgRes = db.CgRes.Add(new CgRes()
                 {
                     SigTime = dto.SigTime,
                     Dto1 = dto.SxDto,
@@ -427,19 +241,19 @@ namespace XdCxRhDW.App.WebAPI
                     YbMainDto = dto.MainYbDto,
                     YbAdja1Dto = dto.AdjaYbDto,
                     StationResID = StationRes.ID,
-                    MainX = ephMain.X,
-                    MainY = ephMain.Y,
-                    MainZ = ephMain.Z,
-                    Adja1X = ephAdja.X,
-                    Adja1Y = ephAdja.Y,
-                    Adja1Z = ephAdja.Z,
+                    MainX = dto.MainX,
+                    MainY = dto.MainY,
+                    MainZ = dto.MainZ,
+                    Adja1X = dto.AdjaX,
+                    Adja1Y = dto.AdjaY,
+                    Adja1Z = dto.AdjaZ,
                 });
 
                 var res = PosApi.X2D1_Pos(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
-                    SigTime = dto.SigTime,
+                    SigTime = cgRes.SigTime,
                     TaskInfoID = runTask.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
@@ -457,19 +271,19 @@ namespace XdCxRhDW.App.WebAPI
         }
 
         /// <summary>
-        /// 融合带参定位(无星历)
+        /// 两星一地带参定位(无星历)
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosRhNoXlAsync(RHNoXlPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
         {
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).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);
@@ -524,7 +338,7 @@ namespace XdCxRhDW.App.WebAPI
                     RefLat = dto.StationResInfo.RefLat,
                 });
 
-                var cgRes = db.CgRes.Add(new CgRes()
+                var cgRes = db.CgRes.Add(new Model.CgRes()
                 {
                     SigTime = dto.SigTime,
                     Dto1 = dto.SxDto,
@@ -544,19 +358,12 @@ namespace XdCxRhDW.App.WebAPI
                     Adja1Z = ephAdja.Z,
                 });
 
-                var cxRes = db.CxRes.Add(new CxRes()
-                {
-                    SigTime = dto.SigTime,
-                    Fx = dto.CxRes,
-                });
-
-                var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
+                var res = PosApi.X2D1_Pos(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
-                    SigTime = cgRes.SigTime,
+                    SigTime = dto.SigTime,
                     TaskInfoID = runTask.ID,
-                    CxResID = cxRes.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
                     TsName = dto.TsName,
@@ -571,24 +378,22 @@ namespace XdCxRhDW.App.WebAPI
                 return Success(posRes);
             }
         }
-        #endregion
 
-        #region 无参有星历
         /// <summary>
-        /// 一星一地测向无参定位(含星历)(无算法)
+        /// 两星一地无参定位(含星历)
         /// </summary>
         /// <param name="dto">定位参数</param>
         /// <returns></returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX1D1NoParAsync(X1D1NoParPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
         {
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
+                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
-                    Serilog.Log.Warning($"接收到一星一地测向无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
-                    return Error<PosRes>($"多模式融合定位平台没有启动一星一地测向定位任务");
+                    Serilog.Log.Warning($"接收到两星一地无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
+                    return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
 
                 var StationRes = db.StationRes.Add(new StationRes()
@@ -606,28 +411,27 @@ namespace XdCxRhDW.App.WebAPI
                 var cgRes = db.CgRes.Add(new CgRes()
                 {
                     SigTime = dto.SigTime,
+                    Dto1 = dto.SxDto,
+                    Dfo1 = dto.SxDfo,
+                    Snr1 = dto.SxSnr,
                     DtoCdb = dto.XdDto,
                     DfoCdb = dto.XdDfo,
-                    StationResID = StationRes.ID,
                     SnrCdb = dto.XdSnr,
+                    StationResID = StationRes.ID,
                     MainX = dto.MainX,
                     MainY = dto.MainY,
                     MainZ = dto.MainZ,
+                    Adja1X = dto.AdjaX,
+                    Adja1Y = dto.AdjaY,
+                    Adja1Z = dto.AdjaZ,
                 });
 
-                var cxRes = db.CxRes.Add(new CxRes()
-                {
-                    SigTime = dto.SigTime,
-                    Fx = dto.CxRes,
-                });
+                var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
 
-                var res = new double[6];
-                //PosApi.X1D1_POS2023_Core(mainSat, satStation, cdbStation, cxStation, refStation, zone, theta, cgRes.DtoCdb.Value / 1e6, cgRes.YbMain.Value / 1e6, res);
                 PosRes posRes = new PosRes()
                 {
                     SigTime = cgRes.SigTime,
                     TaskInfoID = runTask.ID,
-                    CxResID = cxRes.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
                     TsName = dto.TsName,
@@ -636,6 +440,7 @@ namespace XdCxRhDW.App.WebAPI
                     MirrLon = res[3],
                     MirrLat = res[4],
                 };
+
                 posRes = db.PosRes.Add(posRes);
                 await db.SaveChangesAsync();
                 PosObServer.Instance.Pub(posRes);
@@ -644,21 +449,60 @@ namespace XdCxRhDW.App.WebAPI
         }
 
         /// <summary>
-        /// 两星一地无参定位(星历)
+        /// 两星一地无参定位(星历)
         /// </summary>
-        /// <param name="dto">定位参数</param>
-        /// <returns></returns>
+        /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
         {
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
+                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);
+                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 ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
 
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
@@ -672,7 +516,7 @@ namespace XdCxRhDW.App.WebAPI
                     RefLat = dto.StationResInfo.RefLat,
                 });
 
-                var cgRes = db.CgRes.Add(new CgRes()
+                var cgRes = db.CgRes.Add(new Model.CgRes()
                 {
                     SigTime = dto.SigTime,
                     Dto1 = dto.SxDto,
@@ -682,19 +526,19 @@ namespace XdCxRhDW.App.WebAPI
                     DfoCdb = dto.XdDfo,
                     SnrCdb = dto.XdSnr,
                     StationResID = StationRes.ID,
-                    MainX = dto.MainX,
-                    MainY = dto.MainY,
-                    MainZ = dto.MainZ,
-                    Adja1X = dto.AdjaX,
-                    Adja1Y = dto.AdjaY,
-                    Adja1Z = dto.AdjaZ,
+                    MainX = ephMain.X,
+                    MainY = ephMain.Y,
+                    MainZ = ephMain.Z,
+                    Adja1X = ephAdja.X,
+                    Adja1Y = ephAdja.Y,
+                    Adja1Z = ephAdja.Z,
                 });
 
                 var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
-                    SigTime = cgRes.SigTime,
+                    SigTime = dto.SigTime,
                     TaskInfoID = runTask.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
@@ -705,27 +549,29 @@ namespace XdCxRhDW.App.WebAPI
                     MirrLat = res[4],
                 };
 
-              posRes=  db.PosRes.Add(posRes);
+                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>> PosRhNoParAsync(RHNoParPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosRhAsync(RHPosDto dto)
         {
             using (RHDWContext db = new RHDWContext())
             {
                 var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
-                    Serilog.Log.Warning($"接收到融合参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
+                    Serilog.Log.Warning($"接收到融合参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
                     return Error<PosRes>($"多模式融合定位平台没有启动两星一地定位任务");
                 }
 
@@ -750,6 +596,8 @@ namespace XdCxRhDW.App.WebAPI
                     DtoCdb = dto.XdDto,
                     DfoCdb = dto.XdDfo,
                     SnrCdb = dto.XdSnr,
+                    YbMainDto = dto.MainYbDto,
+                    YbAdja1Dto = dto.AdjaYbDto,
                     StationResID = StationRes.ID,
                     MainX = dto.MainX,
                     MainY = dto.MainY,
@@ -765,7 +613,7 @@ namespace XdCxRhDW.App.WebAPI
                     Fx = dto.CxRes,
                 });
 
-                double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
+                var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
 
                 PosRes posRes = new PosRes()
                 {
@@ -780,45 +628,51 @@ namespace XdCxRhDW.App.WebAPI
                     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>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX1D1NoXlNoParAsync(X1D1NoXlNoParPosDto dto)
+        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.X1D1CX).FirstOrDefaultAsync();
+                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>($"多模式融合定位平台没有启动一星一地定位任务");
+                    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);
-                url += string.Format("Xl/Calc?tleStr={0}&dt={1}", xlInfo1.TwoLine, dto.SigTime);
-                var response = await client.GetAsync(url);
+                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}]星厉推算失败");
@@ -827,6 +681,16 @@ namespace XdCxRhDW.App.WebAPI
                 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 StationRes = db.StationRes.Add(new StationRes()
                 {
                     SatTxLon = dto.StationResInfo.SatTxLon,
@@ -842,13 +706,21 @@ namespace XdCxRhDW.App.WebAPI
                 var cgRes = db.CgRes.Add(new CgRes()
                 {
                     SigTime = dto.SigTime,
+                    Dto1 = dto.SxDto,
+                    Dfo1 = dto.SxDfo,
+                    Snr1 = dto.SxSnr,
                     DtoCdb = dto.XdDto,
                     DfoCdb = dto.XdDfo,
                     SnrCdb = dto.XdSnr,
+                    YbMainDto = dto.MainYbDto,
+                    YbAdja1Dto = dto.AdjaYbDto,
                     StationResID = StationRes.ID,
                     MainX = ephMain.X,
                     MainY = ephMain.Y,
                     MainZ = ephMain.Z,
+                    Adja1X = ephAdja.X,
+                    Adja1Y = ephAdja.Y,
+                    Adja1Z = ephAdja.Z,
                 });
 
                 var cxRes = db.CxRes.Add(new CxRes()
@@ -857,12 +729,13 @@ namespace XdCxRhDW.App.WebAPI
                     Fx = dto.CxRes,
                 });
 
-                var res = new double[6];
+                var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
 
                 PosRes posRes = new PosRes()
                 {
-                    SigTime = dto.SigTime,
+                    SigTime = cgRes.SigTime,
                     TaskInfoID = runTask.ID,
+                    CxResID = cxRes.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
                     TsName = dto.TsName,
@@ -877,62 +750,25 @@ namespace XdCxRhDW.App.WebAPI
                 return Success(posRes);
             }
         }
+        #endregion
 
+        #region 三星双时差定位
         /// <summary>
-        /// 两星一地无参定位(无星历)
+        /// 三星双时差带参定位(含星历)
         /// </summary>
-        /// <returns>返回定位结果ID</returns>
+        /// <param name="dto">定位参数</param>
+        /// <returns></returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX3TwoDtoAsync(X3TwoDtoPosDto dto)
         {
             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.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
                 if (runTask == null)
                 {
-                    Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
+                    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 ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
 
                 var StationRes = db.StationRes.Add(new StationRes()
                 {
@@ -946,29 +782,35 @@ namespace XdCxRhDW.App.WebAPI
                     RefLat = dto.StationResInfo.RefLat,
                 });
 
-                var cgRes = db.CgRes.Add(new Model.CgRes()
+                var cgRes = db.CgRes.Add(new CgRes()
                 {
                     SigTime = dto.SigTime,
-                    Dto1 = dto.SxDto,
-                    Dfo1 = dto.SxDfo,
-                    Snr1 = dto.SxSnr,
-                    DtoCdb = dto.XdDto,
-                    DfoCdb = dto.XdDfo,
-                    SnrCdb = dto.XdSnr,
+                    Dto1 = dto.Dto1,
+                    Dfo1 = dto.Dfo1,
+                    Snr1 = dto.Snr1,
+                    Dto2 = dto.Dto2,
+                    Dfo2 = dto.Dfo2,
+                    Snr2 = dto.Snr2,
+                    YbMainDto = dto.YbMainDto,
+                    YbAdja1Dto = dto.YbAdja1Dto,
+                    YbAdja2Dto=dto.YbAdja2Dto,
                     StationResID = StationRes.ID,
-                    MainX = ephMain.X,
-                    MainY = ephMain.Y,
-                    MainZ = ephMain.Z,
-                    Adja1X = ephAdja.X,
-                    Adja1Y = ephAdja.Y,
-                    Adja1Z = ephAdja.Z,
+                    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.X2D1_PosNoRef(cgRes, StationRes);
+                var res = PosApi.X2D1_Pos(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
-                    SigTime = dto.SigTime,
+                    SigTime = cgRes.SigTime,
                     TaskInfoID = runTask.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
@@ -978,7 +820,6 @@ namespace XdCxRhDW.App.WebAPI
                     MirrLon = res[3],
                     MirrLat = res[4],
                 };
-
                 posRes = db.PosRes.Add(posRes);
                 await db.SaveChangesAsync();
                 PosObServer.Instance.Pub(posRes);
@@ -987,23 +828,24 @@ namespace XdCxRhDW.App.WebAPI
         }
 
         /// <summary>
-        /// 融合无参定位(无星历)(无算法)
+        /// 三星双时差带参定位(无星历)
         /// </summary>
         /// <returns>返回定位结果ID</returns>
         [HttpPost]
-        public async Task<AjaxResult<PosRes>> PosRhNoXlNoParAsync(RHNoXlNoParPosDto dto)
+        public async Task<AjaxResult<PosRes>> PosX3TwoDtoNoXlAsync(X3TwoDtoNoXlPosDto dto)
         {
             using (RHDWContext db = new RHDWContext())
             {
-                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
+                var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).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);
-                var parameter3 = new SQLiteParameter("@satcode", dto.AdjaSatID);
+                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)
                 {
@@ -1014,13 +856,22 @@ namespace XdCxRhDW.App.WebAPI
                 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.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.AdjaSatID}使用{xlInfo2.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);
@@ -1036,11 +887,21 @@ namespace XdCxRhDW.App.WebAPI
                 var response2 = await client.GetAsync(url2);
                 if (!response2.IsSuccessStatusCode) // 处理响应失败
                 {
-                    Serilog.Log.Error($"[{dto.AdjaSatID}]星厉推算失败");
-                    return Error<PosRes>($"[{dto.AdjaSatID}]星厉推算失败");
+                    Serilog.Log.Error($"[{dto.Adja1SatID}]星厉推算失败");
+                    return Error<PosRes>($"[{dto.Adja1SatID}]星厉推算失败");
                 }
                 var content2 = await response2.Content.ReadAsStringAsync();
-                var ephAdja = JsonConvert.DeserializeObject<AjaxResult<SatEphDto>>(content2).data;
+                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()
                 {
@@ -1054,37 +915,36 @@ namespace XdCxRhDW.App.WebAPI
                     RefLat = dto.StationResInfo.RefLat,
                 });
 
-                var cgRes = db.CgRes.Add(new CgRes()
+                var cgRes = db.CgRes.Add(new Model.CgRes()
                 {
                     SigTime = dto.SigTime,
-                    Dto1 = dto.SxDto,
-                    Dfo1 = dto.SxDfo,
-                    Snr1 = dto.SxSnr,
-                    DtoCdb = dto.XdDto,
-                    DfoCdb = dto.XdDfo,
-                    SnrCdb = dto.XdSnr,
+                    Dto1 = dto.Dto1,
+                    Dfo1 = dto.Dfo1,
+                    Snr1 = dto.Snr1,
+                    Dto2 = dto.Dto2,
+                    Dfo2 = dto.Dfo2,
+                    Snr2 = dto.Snr2,
+                    YbMainDto = dto.YbMainDto,
+                    YbAdja1Dto = dto.YbAdja1Dto,
+                    YbAdja2Dto = dto.YbAdja2Dto,
                     StationResID = StationRes.ID,
                     MainX = ephMain.X,
                     MainY = ephMain.Y,
                     MainZ = ephMain.Z,
-                    Adja1X = ephAdja.X,
-                    Adja1Y = ephAdja.Y,
-                    Adja1Z = ephAdja.Z,
+                    Adja1X = ephAdja1.X,
+                    Adja1Y = ephAdja1.Y,
+                    Adja1Z = ephAdja1.Z,
+                    Adja2X = ephAdja2.X,
+                    Adja2Y = ephAdja2.Y,
+                    Adja2Z = ephAdja2.Z,
                 });
 
-                var cxRes = db.CxRes.Add(new CxRes()
-                {
-                    SigTime = dto.SigTime,
-                    Fx = dto.CxRes,
-                });
-
-                double[] res = new double[] { 999, 999, 0, 999, 999, 0 };
+                var res = PosApi.X2D1_Pos(cgRes, StationRes);
 
                 PosRes posRes = new PosRes()
                 {
-                    SigTime = cgRes.SigTime,
+                    SigTime = dto.SigTime,
                     TaskInfoID = runTask.ID,
-                    CxResID = cxRes.ID,
                     CgResID = cgRes.ID,
                     TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
                     TsName = dto.TsName,
@@ -1101,6 +961,14 @@ namespace XdCxRhDW.App.WebAPI
         }
         #endregion
 
+        #region 三星双频差定位
+
+        #endregion
+
+        #region 双星时频差定位
+
+        #endregion
+
         /// <summary>
         /// 查询定位结果(暂未实现)
         /// </summary>

+ 97 - 0
XdCxRhDw.Dto/PosDto/X3TwoDtoNoXlPosDto.cs

@@ -0,0 +1,97 @@
+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 X3TwoDtoNoXlPosDto
+    {
+        /// <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>
+        /// 参考样本主时差(us)
+        /// </summary>
+        public double YbMainDto { get; set; }
+
+        /// <summary>
+        /// 参考样本邻时差(us)
+        /// </summary>
+        public double YbAdja1Dto { get; set; }
+
+        /// <summary>
+        /// 样本邻星2时差(us)
+        /// </summary>
+        public double YbAdja2Dto { get; set; }
+
+        /// <summary>
+        /// 目标名称(可空)
+        /// </summary>
+        public string TarName { get; set; }
+
+        /// <summary>
+        /// 时隙名称(可空)
+        /// </summary>
+        public string TsName { get; set; }
+
+        /// <summary>
+        /// 站点信息
+        /// </summary>
+        public StationResDto StationResInfo { get; set; }
+
+    }
+        
+}

+ 127 - 0
XdCxRhDw.Dto/PosDto/X3TwoDtoPosDto.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 X3TwoDtoPosDto
+    {
+        /// <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>
+        /// 参考样本主时差(us)
+        /// </summary>
+        public double YbMainDto { get; set; }
+
+        /// <summary>
+        /// 参考样本邻时差(us)
+        /// </summary>
+        public double YbAdja1Dto { get; set; }
+
+        /// <summary>
+        /// 样本邻星2时差(us)
+        /// </summary>
+        public double YbAdja2Dto { 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; }
+
+    }
+        
+}

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

@@ -60,6 +60,8 @@
     <Compile Include="PosDto\X1D1NoParPosDto.cs" />
     <Compile Include="PosDto\X2D1NoXlNoParlPosDto.cs" />
     <Compile Include="PosDto\X2D1NoParPosDto.cs" />
+    <Compile Include="PosDto\X3TwoDtoNoXlPosDto.cs" />
+    <Compile Include="PosDto\X3TwoDtoPosDto.cs" />
     <Compile Include="PosResQueryDto.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="SendDto.cs" />