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