PosController.cs 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Entity;
  4. using System.Data.SqlClient;
  5. using System.Data.SQLite;
  6. using System.Linq;
  7. using System.Net.Http;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Web.Http;
  11. using Newtonsoft.Json;
  12. using Serilog;
  13. using Swashbuckle.Swagger;
  14. using XdCxRhDw.Dto;
  15. using XdCxRhDW.App.Api;
  16. using XdCxRhDW.Core.Api;
  17. using XdCxRhDW.Core.ObServer;
  18. using XdCxRhDW.Core;
  19. using XdCxRhDW.Dto;
  20. using XdCxRhDW.Repostory.EFContext;
  21. using XdCxRhDW.Repostory.Model;
  22. using XdCxRhDW.WebApi.Controllers;
  23. namespace XdCxRhDW.App.WebAPI
  24. {
  25. /// <summary>
  26. /// 定位功能相关接口
  27. /// </summary>
  28. public class PosController : BaseController
  29. {
  30. #region 一星一地测向定位
  31. /// <summary>
  32. /// 一星一地测向带参定位(含星历)
  33. /// </summary>
  34. /// <param name="dto">定位参数</param>
  35. /// <returns></returns>
  36. [HttpPost]
  37. public async Task<AjaxResult<PosResDto>> PosX1D1Async(X1D1PosDto dto)
  38. {
  39. using (RHDWContext db = new RHDWContext())
  40. {
  41. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
  42. if (runTask == null)
  43. {
  44. Serilog.Log.Warning($"接收到一星一地测向带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  45. return Error<PosResDto>($"多模式融合定位平台没有启动一星一地测向定位任务");
  46. }
  47. var StationRes = db.StationRes.Add(new StationRes()
  48. {
  49. SatTxLon = dto.SatTxLon,
  50. SatTxLat = dto.SatTxLat,
  51. CdbTxLon = dto.CdbTxLon,
  52. CdbTxLat = dto.CdbTxLat,
  53. CxLon = dto.CxLon,
  54. CxLat = dto.CxLat,
  55. RefLon = dto.RefLon,
  56. RefLat = dto.RefLat,
  57. });
  58. var cgRes = db.CgRes.Add(new CgRes()
  59. {
  60. SigTime = dto.SigTime,
  61. DtoCdb = dto.XdDto,
  62. DfoCdb = dto.XdDfo,
  63. SnrCdb = dto.XdSnr,
  64. YbMainDto = dto.MainYbDto,
  65. StationResID = StationRes.ID,
  66. MainCode = dto.MainCode,
  67. MainX = dto.MainX,
  68. MainY = dto.MainY,
  69. MainZ = dto.MainZ,
  70. });
  71. var cxRes = db.CxRes.Add(new CxRes()
  72. {
  73. SigTime = dto.SigTime,
  74. Fx = dto.CxRes,
  75. });
  76. var res = PosApi.X1D1_Pos(cgRes, StationRes, cxRes);
  77. PosRes posRes = new PosRes()
  78. {
  79. SigTime = cgRes.SigTime,
  80. TaskInfoID = runTask.ID,
  81. CxResID = cxRes.ID,
  82. CgResID = cgRes.ID,
  83. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  84. TsName = dto.TsName,
  85. PosLon = res[0],
  86. PosLat = res[1],
  87. MirrLon = res[3],
  88. MirrLat = res[4],
  89. PosResType = EnumPosResType.X1D1CX,
  90. };
  91. posRes = db.PosRes.Add(posRes);
  92. await db.SaveChangesAsync();
  93. PosObServer.Instance.Pub(posRes);
  94. return Success(Map(posRes));
  95. }
  96. }
  97. /// <summary>
  98. /// 一星一地测向带参定位(无星历)
  99. /// </summary>
  100. /// <returns>返回定位结果ID</returns>
  101. [HttpPost]
  102. public async Task<AjaxResult<PosResDto>> PosX1D1NoXlAsync(X1D1NoXlPosDto dto)
  103. {
  104. using (RHDWContext db = new RHDWContext())
  105. {
  106. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X1D1CX).FirstOrDefaultAsync();
  107. if (runTask == null)
  108. {
  109. Serilog.Log.Warning($"接收到一星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  110. return Error<PosResDto>($"多模式融合定位平台没有启动一星一地定位任务");
  111. }
  112. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  113. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  114. 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();
  115. if (xlInfo1 == null)
  116. {
  117. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  118. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  119. }
  120. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  121. var settings = await db.SysSetings.FirstOrDefaultAsync();
  122. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  123. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  124. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  125. var StationRes = db.StationRes.Add(new StationRes()
  126. {
  127. SatTxLon = dto.SatTxLon,
  128. SatTxLat = dto.SatTxLat,
  129. CdbTxLon = dto.CdbTxLon,
  130. CdbTxLat = dto.CdbTxLat,
  131. CxLon = dto.CxLon,
  132. CxLat = dto.CxLat,
  133. RefLon = dto.RefLon,
  134. RefLat = dto.RefLat,
  135. });
  136. var cgRes = db.CgRes.Add(new CgRes()
  137. {
  138. SigTime = dto.SigTime,
  139. DtoCdb = dto.XdDto,
  140. DfoCdb = dto.XdDfo,
  141. SnrCdb = dto.XdSnr,
  142. YbMainDto = dto.MainYbDto,
  143. StationResID = StationRes.ID,
  144. MainCode = dto.MainCode,
  145. MainX = ephMain.X,
  146. MainY = ephMain.Y,
  147. MainZ = ephMain.Z,
  148. });
  149. var cxRes = db.CxRes.Add(new CxRes()
  150. {
  151. SigTime = dto.SigTime,
  152. Fx = dto.CxRes,
  153. });
  154. var res = PosApi.X1D1_Pos(cgRes, StationRes, cxRes);
  155. PosRes posRes = new PosRes()
  156. {
  157. SigTime = dto.SigTime,
  158. TaskInfoID = runTask.ID,
  159. CgResID = cgRes.ID,
  160. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  161. TsName = dto.TsName,
  162. PosLon = res[0],
  163. PosLat = res[1],
  164. MirrLon = res[3],
  165. MirrLat = res[4],
  166. PosResType = EnumPosResType.X1D1CX,
  167. };
  168. posRes = db.PosRes.Add(posRes);
  169. await db.SaveChangesAsync();
  170. PosObServer.Instance.Pub(posRes);
  171. return Success(Map(posRes));
  172. }
  173. }
  174. #endregion
  175. #region 两星一地定位
  176. /// <summary>
  177. /// 两星一地带参定位(含星历)
  178. /// </summary>
  179. /// <param name="dto">定位参数</param>
  180. /// <returns></returns>
  181. [HttpPost]
  182. public async Task<AjaxResult<PosResDto>> PosX2D1Async(X2D1PosDto dto)
  183. {
  184. using (RHDWContext db = new RHDWContext())
  185. {
  186. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  187. if (runTask == null)
  188. {
  189. Serilog.Log.Warning($"接收到两星一地带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  190. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  191. }
  192. var StationRes = db.StationRes.Add(new StationRes()
  193. {
  194. SatTxLon = dto.SatTxLon,
  195. SatTxLat = dto.SatTxLat,
  196. CdbTxLon = dto.CdbTxLon,
  197. CdbTxLat = dto.CdbTxLat,
  198. RefLon = dto.RefLon,
  199. RefLat = dto.RefLat,
  200. });
  201. var cgRes = db.CgRes.Add(new CgRes()
  202. {
  203. SigTime = dto.SigTime,
  204. Dto1 = dto.SxDto,
  205. Dfo1 = dto.SxDfo,
  206. Snr1 = dto.SxSnr,
  207. DtoCdb = dto.XdDto,
  208. DfoCdb = dto.XdDfo,
  209. SnrCdb = dto.XdSnr,
  210. YbMainDto = dto.MainYbDto,
  211. YbAdja1Dto = dto.AdjaYbDto,
  212. StationResID = StationRes.ID,
  213. MainCode = dto.MainCode,
  214. Adja1Code = dto.AdjaCode,
  215. MainX = dto.MainX,
  216. MainY = dto.MainY,
  217. MainZ = dto.MainZ,
  218. Adja1X = dto.AdjaX,
  219. Adja1Y = dto.AdjaY,
  220. Adja1Z = dto.AdjaZ,
  221. });
  222. var res = PosApi.X2D1_Pos(cgRes, StationRes);
  223. PosRes posRes = new PosRes()
  224. {
  225. SigTime = cgRes.SigTime,
  226. TaskInfoID = runTask.ID,
  227. CgResID = cgRes.ID,
  228. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  229. TsName = dto.TsName,
  230. PosLon = res[0],
  231. PosLat = res[1],
  232. MirrLon = res[3],
  233. MirrLat = res[4],
  234. PosResType = EnumPosResType.X2D1,
  235. };
  236. posRes = db.PosRes.Add(posRes);
  237. await db.SaveChangesAsync();
  238. PosObServer.Instance.Pub(posRes);
  239. return Success(Map(posRes));
  240. }
  241. }
  242. /// <summary>
  243. /// 两星一地带参定位(无星历)
  244. /// </summary>
  245. /// <returns>返回定位结果ID</returns>
  246. [HttpPost]
  247. public async Task<AjaxResult<PosResDto>> PosX2D1NoXlAsync(X2D1NoXlPosDto dto)
  248. {
  249. using (RHDWContext db = new RHDWContext())
  250. {
  251. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
  252. if (runTask == null)
  253. {
  254. Serilog.Log.Warning($"接收到两星一地带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  255. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  256. }
  257. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  258. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  259. var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
  260. 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();
  261. if (xlInfo1 == null)
  262. {
  263. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  264. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  265. }
  266. 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();
  267. if (xlInfo2 == null)
  268. {
  269. Serilog.Log.Error($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  270. return Error<PosResDto>($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  271. }
  272. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  273. Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
  274. var settings = await db.SysSetings.FirstOrDefaultAsync();
  275. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  276. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  277. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  278. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  279. var ephAdja = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  280. var StationRes = db.StationRes.Add(new StationRes()
  281. {
  282. SatTxLon = dto.SatTxLon,
  283. SatTxLat = dto.SatTxLat,
  284. CdbTxLon = dto.CdbTxLon,
  285. CdbTxLat = dto.CdbTxLat,
  286. RefLon = dto.RefLon,
  287. RefLat = dto.RefLat,
  288. });
  289. var cgRes = db.CgRes.Add(new CgRes()
  290. {
  291. SigTime = dto.SigTime,
  292. Dto1 = dto.SxDto,
  293. Dfo1 = dto.SxDfo,
  294. Snr1 = dto.SxSnr,
  295. DtoCdb = dto.XdDto,
  296. DfoCdb = dto.XdDfo,
  297. SnrCdb = dto.XdSnr,
  298. YbMainDto = dto.MainYbDto,
  299. YbAdja1Dto = dto.AdjaYbDto,
  300. StationResID = StationRes.ID,
  301. MainCode = dto.MainCode,
  302. Adja1Code = dto.AdjaCode,
  303. MainX = ephMain.X,
  304. MainY = ephMain.Y,
  305. MainZ = ephMain.Z,
  306. Adja1X = ephAdja.X,
  307. Adja1Y = ephAdja.Y,
  308. Adja1Z = ephAdja.Z,
  309. });
  310. var res = PosApi.X2D1_Pos(cgRes, StationRes);
  311. PosRes posRes = new PosRes()
  312. {
  313. SigTime = dto.SigTime,
  314. TaskInfoID = runTask.ID,
  315. CgResID = cgRes.ID,
  316. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  317. TsName = dto.TsName,
  318. PosLon = res[0],
  319. PosLat = res[1],
  320. MirrLon = res[3],
  321. MirrLat = res[4],
  322. PosResType = EnumPosResType.X2D1,
  323. };
  324. posRes = db.PosRes.Add(posRes);
  325. await db.SaveChangesAsync();
  326. PosObServer.Instance.Pub(posRes);
  327. return Success(Map(posRes));
  328. }
  329. }
  330. /// <summary>
  331. /// 两星一地无参定位(含星历)
  332. /// </summary>
  333. /// <param name="dto">定位参数</param>
  334. /// <returns></returns>
  335. [HttpPost]
  336. public async Task<AjaxResult<PosResDto>> PosX2D1NoParAsync(X2D1NoParPosDto dto)
  337. {
  338. using (RHDWContext db = new RHDWContext())
  339. {
  340. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  341. if (runTask == null)
  342. {
  343. Serilog.Log.Warning($"接收到两星一地无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  344. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  345. }
  346. var StationRes = db.StationRes.Add(new StationRes()
  347. {
  348. SatTxLon = dto.SatTxLon,
  349. SatTxLat = dto.SatTxLat,
  350. CdbTxLon = dto.CdbTxLon,
  351. CdbTxLat = dto.CdbTxLat,
  352. });
  353. var cgRes = db.CgRes.Add(new CgRes()
  354. {
  355. SigTime = dto.SigTime,
  356. Dto1 = dto.SxDto,
  357. Dfo1 = dto.SxDfo,
  358. Snr1 = dto.SxSnr,
  359. DtoCdb = dto.XdDto,
  360. DfoCdb = dto.XdDfo,
  361. SnrCdb = dto.XdSnr,
  362. StationResID = StationRes.ID,
  363. MainCode = dto.MainCode,
  364. Adja1Code = dto.AdjaCode,
  365. MainX = dto.MainX,
  366. MainY = dto.MainY,
  367. MainZ = dto.MainZ,
  368. Adja1X = dto.AdjaX,
  369. Adja1Y = dto.AdjaY,
  370. Adja1Z = dto.AdjaZ,
  371. });
  372. var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
  373. PosRes posRes = new PosRes()
  374. {
  375. SigTime = cgRes.SigTime,
  376. TaskInfoID = runTask.ID,
  377. CgResID = cgRes.ID,
  378. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  379. TsName = dto.TsName,
  380. PosLon = res[0],
  381. PosLat = res[1],
  382. MirrLon = res[3],
  383. MirrLat = res[4],
  384. PosResType = EnumPosResType.X2D1NoRef,
  385. };
  386. posRes = db.PosRes.Add(posRes);
  387. await db.SaveChangesAsync();
  388. PosObServer.Instance.Pub(posRes);
  389. return Success(Map(posRes));
  390. }
  391. }
  392. /// <summary>
  393. /// 两星一地无参定位(无星历)
  394. /// </summary>
  395. /// <returns>返回定位结果ID</returns>
  396. [HttpPost]
  397. public async Task<AjaxResult<PosResDto>> PosX2D1NoXlNoParAsync(X2D1NoXlNoParlPosDto dto)
  398. {
  399. using (RHDWContext db = new RHDWContext())
  400. {
  401. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2D1).FirstOrDefaultAsync();
  402. if (runTask == null)
  403. {
  404. Serilog.Log.Warning($"接收到两星一地无参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  405. return Error<PosResDto>($"多模式融合定位平台没有启动两星一地定位任务");
  406. }
  407. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  408. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  409. var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
  410. 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();
  411. if (xlInfo1 == null)
  412. {
  413. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  414. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  415. }
  416. 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();
  417. if (xlInfo2 == null)
  418. {
  419. Serilog.Log.Error($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  420. return Error<PosResDto>($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  421. }
  422. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  423. Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
  424. var settings = await db.SysSetings.FirstOrDefaultAsync();
  425. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  426. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  427. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  428. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  429. var ephAdja = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  430. var StationRes = db.StationRes.Add(new StationRes()
  431. {
  432. SatTxLon = dto.SatTxLon,
  433. SatTxLat = dto.SatTxLat,
  434. CdbTxLon = dto.CdbTxLon,
  435. CdbTxLat = dto.CdbTxLat,
  436. });
  437. var cgRes = db.CgRes.Add(new CgRes()
  438. {
  439. SigTime = dto.SigTime,
  440. Dto1 = dto.SxDto,
  441. Dfo1 = dto.SxDfo,
  442. Snr1 = dto.SxSnr,
  443. DtoCdb = dto.XdDto,
  444. DfoCdb = dto.XdDfo,
  445. SnrCdb = dto.XdSnr,
  446. StationResID = StationRes.ID,
  447. MainCode = dto.MainCode,
  448. Adja1Code = dto.AdjaCode,
  449. MainX = ephMain.X,
  450. MainY = ephMain.Y,
  451. MainZ = ephMain.Z,
  452. Adja1X = ephAdja.X,
  453. Adja1Y = ephAdja.Y,
  454. Adja1Z = ephAdja.Z,
  455. });
  456. var res = PosApi.X2D1_PosNoRef(cgRes, StationRes);
  457. PosRes posRes = new PosRes()
  458. {
  459. SigTime = dto.SigTime,
  460. TaskInfoID = runTask.ID,
  461. CgResID = cgRes.ID,
  462. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  463. TsName = dto.TsName,
  464. PosLon = res[0],
  465. PosLat = res[1],
  466. MirrLon = res[3],
  467. MirrLat = res[4],
  468. PosResType = EnumPosResType.X2D1NoRef,
  469. };
  470. posRes = db.PosRes.Add(posRes);
  471. await db.SaveChangesAsync();
  472. PosObServer.Instance.Pub(posRes);
  473. return Success(Map(posRes));
  474. }
  475. }
  476. #endregion
  477. #region 融合定位
  478. /// <summary>
  479. /// 融合带参定位(含星历)
  480. /// </summary>
  481. /// <param name="dto">定位参数</param>
  482. /// <returns></returns>
  483. [HttpPost]
  484. public async Task<AjaxResult<PosResDto>> PosRhAsync(RHPosDto dto)
  485. {
  486. using (RHDWContext db = new RHDWContext())
  487. {
  488. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
  489. if (runTask == null)
  490. {
  491. Serilog.Log.Warning($"接收到融合带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  492. return Error<PosResDto>($"多模式融合定位平台没有启动融合定位任务");
  493. }
  494. var StationRes = db.StationRes.Add(new StationRes()
  495. {
  496. SatTxLon = dto.SatTxLon,
  497. SatTxLat = dto.SatTxLat,
  498. CdbTxLon = dto.CdbTxLon,
  499. CdbTxLat = dto.CdbTxLat,
  500. CxLon = dto.CxLon,
  501. CxLat = dto.CxLat,
  502. RefLon = dto.RefLon,
  503. RefLat = dto.RefLat,
  504. });
  505. var cgRes = db.CgRes.Add(new CgRes()
  506. {
  507. SigTime = dto.SigTime,
  508. Dto1 = dto.SxDto,
  509. Dfo1 = dto.SxDfo,
  510. Snr1 = dto.SxSnr,
  511. DtoCdb = dto.XdDto,
  512. DfoCdb = dto.XdDfo,
  513. SnrCdb = dto.XdSnr,
  514. YbMainDto = dto.MainYbDto,
  515. YbAdja1Dto = dto.AdjaYbDto,
  516. StationResID = StationRes.ID,
  517. MainCode = dto.MainCode,
  518. Adja1Code = dto.AdjaCode,
  519. MainX = dto.MainX,
  520. MainY = dto.MainY,
  521. MainZ = dto.MainZ,
  522. Adja1X = dto.AdjaX,
  523. Adja1Y = dto.AdjaY,
  524. Adja1Z = dto.AdjaZ,
  525. });
  526. var cxRes = db.CxRes.Add(new CxRes()
  527. {
  528. SigTime = dto.SigTime,
  529. Fx = dto.CxRes,
  530. });
  531. var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
  532. PosRes posRes = new PosRes()
  533. {
  534. SigTime = cgRes.SigTime,
  535. TaskInfoID = runTask.ID,
  536. CxResID = cxRes.ID,
  537. CgResID = cgRes.ID,
  538. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  539. TsName = dto.TsName,
  540. PosLon = res[0],
  541. PosLat = res[1],
  542. MirrLon = res[3],
  543. MirrLat = res[4],
  544. PosResType = EnumPosResType.RH,
  545. };
  546. posRes = db.PosRes.Add(posRes);
  547. await db.SaveChangesAsync();
  548. PosObServer.Instance.Pub(posRes);
  549. return Success(Map(posRes));
  550. }
  551. }
  552. /// <summary>
  553. /// 融合带参定位(无星历)
  554. /// </summary>
  555. /// <returns>返回定位结果ID</returns>
  556. [HttpPost]
  557. public async Task<AjaxResult<PosResDto>> PosRhNoXlAsync(RHNoXlPosDto dto)
  558. {
  559. using (RHDWContext db = new RHDWContext())
  560. {
  561. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.RH).FirstOrDefaultAsync();
  562. if (runTask == null)
  563. {
  564. Serilog.Log.Warning($"接收到融合带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  565. return Error<PosResDto>($"多模式融合定位平台没有启动融合定位任务");
  566. }
  567. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  568. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  569. var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
  570. 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();
  571. if (xlInfo1 == null)
  572. {
  573. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  574. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  575. }
  576. 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();
  577. if (xlInfo2 == null)
  578. {
  579. Serilog.Log.Error($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  580. return Error<PosResDto>($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  581. }
  582. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  583. Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
  584. var settings = await db.SysSetings.FirstOrDefaultAsync();
  585. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  586. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  587. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  588. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  589. var ephAdja = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  590. var StationRes = db.StationRes.Add(new StationRes()
  591. {
  592. SatTxLon = dto.SatTxLon,
  593. SatTxLat = dto.SatTxLat,
  594. CdbTxLon = dto.CdbTxLon,
  595. CdbTxLat = dto.CdbTxLat,
  596. CxLon = dto.CxLon,
  597. CxLat = dto.CxLat,
  598. RefLon = dto.RefLon,
  599. RefLat = dto.RefLat,
  600. });
  601. var cgRes = db.CgRes.Add(new CgRes()
  602. {
  603. SigTime = dto.SigTime,
  604. Dto1 = dto.SxDto,
  605. Dfo1 = dto.SxDfo,
  606. Snr1 = dto.SxSnr,
  607. DtoCdb = dto.XdDto,
  608. DfoCdb = dto.XdDfo,
  609. SnrCdb = dto.XdSnr,
  610. YbMainDto = dto.MainYbDto,
  611. YbAdja1Dto = dto.AdjaYbDto,
  612. StationResID = StationRes.ID,
  613. MainCode = dto.MainCode,
  614. Adja1Code = dto.AdjaCode,
  615. MainX = ephMain.X,
  616. MainY = ephMain.Y,
  617. MainZ = ephMain.Z,
  618. Adja1X = ephAdja.X,
  619. Adja1Y = ephAdja.Y,
  620. Adja1Z = ephAdja.Z,
  621. });
  622. var cxRes = db.CxRes.Add(new CxRes()
  623. {
  624. SigTime = dto.SigTime,
  625. Fx = dto.CxRes,
  626. });
  627. var res = PosApi.RH_Pos(cgRes, StationRes, cxRes);
  628. PosRes posRes = new PosRes()
  629. {
  630. SigTime = cgRes.SigTime,
  631. TaskInfoID = runTask.ID,
  632. CxResID = cxRes.ID,
  633. CgResID = cgRes.ID,
  634. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  635. TsName = dto.TsName,
  636. PosLon = res[0],
  637. PosLat = res[1],
  638. MirrLon = res[3],
  639. MirrLat = res[4],
  640. PosResType = EnumPosResType.RH,
  641. };
  642. posRes = db.PosRes.Add(posRes);
  643. await db.SaveChangesAsync();
  644. PosObServer.Instance.Pub(posRes);
  645. return Success(Map(posRes));
  646. }
  647. }
  648. #endregion
  649. #region 三星双时差定位
  650. /// <summary>
  651. /// 三星双时差带参定位(含星历)
  652. /// </summary>
  653. /// <param name="dto">定位参数</param>
  654. /// <returns></returns>
  655. [HttpPost]
  656. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoAsync(X3TwoDtoPosDto dto)
  657. {
  658. using (RHDWContext db = new RHDWContext())
  659. {
  660. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
  661. if (runTask == null)
  662. {
  663. Serilog.Log.Warning($"接收到三星双时差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  664. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  665. }
  666. var StationRes = db.StationRes.Add(new StationRes()
  667. {
  668. SatTxLon = dto.SatTxLon,
  669. SatTxLat = dto.SatTxLat,
  670. RefLon = dto.RefLon,
  671. RefLat = dto.RefLat,
  672. });
  673. var cgRes = db.CgRes.Add(new CgRes()
  674. {
  675. SigTime = dto.SigTime,
  676. Dto1 = dto.Dto1,
  677. Dfo1 = dto.Dfo1,
  678. Snr1 = dto.Snr1,
  679. Dto2 = dto.Dto2,
  680. Dfo2 = dto.Dfo2,
  681. Snr2 = dto.Snr2,
  682. YbMainDto = dto.YbMainDto,
  683. YbAdja1Dto = dto.YbAdja1Dto,
  684. YbAdja2Dto = dto.YbAdja2Dto,
  685. StationResID = StationRes.ID,
  686. MainCode = dto.MainCode,
  687. Adja1Code = dto.Adja1Code,
  688. Adja2Code = dto.Adja2Code,
  689. MainX = dto.MainX,
  690. MainY = dto.MainY,
  691. MainZ = dto.MainZ,
  692. Adja1X = dto.Adja1X,
  693. Adja1Y = dto.Adja1Y,
  694. Adja1Z = dto.Adja1Z,
  695. Adja2X = dto.Adja2X,
  696. Adja2Y = dto.Adja2Y,
  697. Adja2Z = dto.Adja2Z,
  698. });
  699. var res = PosApi.X3_Pos(cgRes, StationRes);
  700. PosRes posRes = new PosRes()
  701. {
  702. SigTime = cgRes.SigTime,
  703. TaskInfoID = runTask.ID,
  704. CgResID = cgRes.ID,
  705. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  706. TsName = dto.TsName,
  707. PosLon = res[0],
  708. PosLat = res[1],
  709. MirrLon = res[3],
  710. MirrLat = res[4],
  711. PosResType = EnumPosResType.X3,
  712. };
  713. posRes = db.PosRes.Add(posRes);
  714. await db.SaveChangesAsync();
  715. PosObServer.Instance.Pub(posRes);
  716. return Success(Map(posRes));
  717. }
  718. }
  719. /// <summary>
  720. /// 三星双时差带参定位(无星历)
  721. /// </summary>
  722. /// <returns>返回定位结果ID</returns>
  723. [HttpPost]
  724. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoXlAsync(X3TwoDtoNoXlPosDto dto)
  725. {
  726. using (RHDWContext db = new RHDWContext())
  727. {
  728. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
  729. if (runTask == null)
  730. {
  731. Serilog.Log.Warning($"接收到三星双时差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  732. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  733. }
  734. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  735. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  736. var parameter3 = new SQLiteParameter("@satcode", dto.Adja1Code);
  737. var parameter4 = new SQLiteParameter("@satcode", dto.Adja2Code);
  738. 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();
  739. if (xlInfo1 == null)
  740. {
  741. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  742. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  743. }
  744. 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();
  745. if (xlInfo2 == null)
  746. {
  747. Serilog.Log.Error($"未找到卫星[{dto.Adja1Code}]的双行根数星历");
  748. return Error<PosResDto>($"未找到卫星[{dto.Adja1Code}]的双行根数星历");
  749. }
  750. 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();
  751. if (xlInfo3 == null)
  752. {
  753. Serilog.Log.Error($"未找到卫星[{dto.Adja2Code}]的双行根数星历");
  754. return Error<PosResDto>($"未找到卫星[{dto.Adja2Code}]的双行根数星历");
  755. }
  756. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  757. Serilog.Log.Information($"卫星{dto.Adja1Code}使用{xlInfo2.TwoLine}进行星历推算");
  758. Serilog.Log.Information($"卫星{dto.Adja2Code}使用{xlInfo3.TwoLine}进行星历推算");
  759. var settings = await db.SysSetings.FirstOrDefaultAsync();
  760. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  761. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  762. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  763. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  764. var ephAdja1 = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  765. var XlCalcDto3 = new XlCalcDto() { tleStr = xlInfo3.TwoLine, dt = dto.SigTime };
  766. var ephAdja2 = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto3);
  767. var StationRes = db.StationRes.Add(new StationRes()
  768. {
  769. SatTxLon = dto.SatTxLon,
  770. SatTxLat = dto.SatTxLat,
  771. RefLon = dto.RefLon,
  772. RefLat = dto.RefLat,
  773. });
  774. var cgRes = db.CgRes.Add(new CgRes()
  775. {
  776. SigTime = dto.SigTime,
  777. Dto1 = dto.Dto1,
  778. Dfo1 = dto.Dfo1,
  779. Snr1 = dto.Snr1,
  780. Dto2 = dto.Dto2,
  781. Dfo2 = dto.Dfo2,
  782. Snr2 = dto.Snr2,
  783. YbMainDto = dto.YbMainDto,
  784. YbAdja1Dto = dto.YbAdja1Dto,
  785. YbAdja2Dto = dto.YbAdja2Dto,
  786. StationResID = StationRes.ID,
  787. MainCode = dto.MainCode,
  788. Adja1Code = dto.Adja1Code,
  789. Adja2Code = dto.Adja2Code,
  790. MainX = ephMain.X,
  791. MainY = ephMain.Y,
  792. MainZ = ephMain.Z,
  793. Adja1X = ephAdja1.X,
  794. Adja1Y = ephAdja1.Y,
  795. Adja1Z = ephAdja1.Z,
  796. Adja2X = ephAdja2.X,
  797. Adja2Y = ephAdja2.Y,
  798. Adja2Z = ephAdja2.Z,
  799. });
  800. var res = PosApi.X3_Pos(cgRes, StationRes);
  801. PosRes posRes = new PosRes()
  802. {
  803. SigTime = dto.SigTime,
  804. TaskInfoID = runTask.ID,
  805. CgResID = cgRes.ID,
  806. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  807. TsName = dto.TsName,
  808. PosLon = res[0],
  809. PosLat = res[1],
  810. MirrLon = res[3],
  811. MirrLat = res[4],
  812. PosResType = EnumPosResType.X3,
  813. };
  814. posRes = db.PosRes.Add(posRes);
  815. await db.SaveChangesAsync();
  816. PosObServer.Instance.Pub(posRes);
  817. return Success(Map(posRes));
  818. }
  819. }
  820. /// <summary>
  821. /// 三星双时差无参定位(含星历)
  822. /// </summary>
  823. /// <param name="dto">定位参数</param>
  824. /// <returns></returns>
  825. [HttpPost]
  826. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoParAsync(X3TwoDtoNoParPosDto dto)
  827. {
  828. using (RHDWContext db = new RHDWContext())
  829. {
  830. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDto && p.TaskState == EnumTaskState.Running);
  831. if (runTask == null)
  832. {
  833. Serilog.Log.Warning($"接收到三星双时差无参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  834. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  835. }
  836. var StationRes = db.StationRes.Add(new StationRes()
  837. {
  838. SatTxLon = dto.SatTxLon,
  839. SatTxLat = dto.SatTxLat,
  840. });
  841. var cgRes = db.CgRes.Add(new CgRes()
  842. {
  843. SigTime = dto.SigTime,
  844. Dto1 = dto.Dto1,
  845. Dfo1 = dto.Dfo1,
  846. Snr1 = dto.Snr1,
  847. Dto2 = dto.Dto2,
  848. Dfo2 = dto.Dfo2,
  849. Snr2 = dto.Snr2,
  850. StationResID = StationRes.ID,
  851. MainCode = dto.MainCode,
  852. Adja1Code = dto.Adja1Code,
  853. Adja2Code = dto.Adja2Code,
  854. MainX = dto.MainX,
  855. MainY = dto.MainY,
  856. MainZ = dto.MainZ,
  857. Adja1X = dto.Adja1X,
  858. Adja1Y = dto.Adja1Y,
  859. Adja1Z = dto.Adja1Z,
  860. Adja2X = dto.Adja2X,
  861. Adja2Y = dto.Adja2Y,
  862. Adja2Z = dto.Adja2Z,
  863. });
  864. var res = PosApi.X3_PosNoRef(cgRes, StationRes);
  865. PosRes posRes = new PosRes()
  866. {
  867. SigTime = cgRes.SigTime,
  868. TaskInfoID = runTask.ID,
  869. CgResID = cgRes.ID,
  870. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  871. TsName = dto.TsName,
  872. PosLon = res[0],
  873. PosLat = res[1],
  874. MirrLon = res[3],
  875. MirrLat = res[4],
  876. PosResType = EnumPosResType.X3NoRef,
  877. };
  878. posRes = db.PosRes.Add(posRes);
  879. await db.SaveChangesAsync();
  880. PosObServer.Instance.Pub(posRes);
  881. return Success(Map(posRes));
  882. }
  883. }
  884. /// <summary>
  885. /// 三星双时差无参定位(无星历)
  886. /// </summary>
  887. /// <returns>返回定位结果ID</returns>
  888. [HttpPost]
  889. public async Task<AjaxResult<PosResDto>> PosX3TwoDtoNoXlNoParAsync(X3TwoDtoNoXlNoParPosDto dto)
  890. {
  891. using (RHDWContext db = new RHDWContext())
  892. {
  893. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDto).FirstOrDefaultAsync();
  894. if (runTask == null)
  895. {
  896. Serilog.Log.Warning($"接收到三星双时差无参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  897. return Error<PosResDto>($"多模式融合定位平台没有启动三星双时差定位任务");
  898. }
  899. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  900. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  901. var parameter3 = new SQLiteParameter("@satcode", dto.Adja1Code);
  902. var parameter4 = new SQLiteParameter("@satcode", dto.Adja2Code);
  903. 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();
  904. if (xlInfo1 == null)
  905. {
  906. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  907. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  908. }
  909. 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();
  910. if (xlInfo2 == null)
  911. {
  912. Serilog.Log.Error($"未找到卫星[{dto.Adja1Code}]的双行根数星历");
  913. return Error<PosResDto>($"未找到卫星[{dto.Adja1Code}]的双行根数星历");
  914. }
  915. 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();
  916. if (xlInfo3 == null)
  917. {
  918. Serilog.Log.Error($"未找到卫星[{dto.Adja2Code}]的双行根数星历");
  919. return Error<PosResDto>($"未找到卫星[{dto.Adja2Code}]的双行根数星历");
  920. }
  921. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  922. Serilog.Log.Information($"卫星{dto.Adja1Code}使用{xlInfo2.TwoLine}进行星历推算");
  923. Serilog.Log.Information($"卫星{dto.Adja2Code}使用{xlInfo3.TwoLine}进行星历推算");
  924. var settings = await db.SysSetings.FirstOrDefaultAsync();
  925. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  926. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  927. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  928. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  929. var ephAdja1 = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  930. var XlCalcDto3 = new XlCalcDto() { tleStr = xlInfo3.TwoLine, dt = dto.SigTime };
  931. var ephAdja2 = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto3);
  932. var StationRes = db.StationRes.Add(new StationRes()
  933. {
  934. SatTxLon = dto.SatTxLon,
  935. SatTxLat = dto.SatTxLat,
  936. });
  937. var cgRes = db.CgRes.Add(new CgRes()
  938. {
  939. SigTime = dto.SigTime,
  940. Dto1 = dto.Dto1,
  941. Dfo1 = dto.Dfo1,
  942. Snr1 = dto.Snr1,
  943. Dto2 = dto.Dto2,
  944. Dfo2 = dto.Dfo2,
  945. Snr2 = dto.Snr2,
  946. StationResID = StationRes.ID,
  947. MainCode = dto.MainCode,
  948. Adja1Code = dto.Adja1Code,
  949. Adja2Code = dto.Adja2Code,
  950. MainX = ephMain.X,
  951. MainY = ephMain.Y,
  952. MainZ = ephMain.Z,
  953. Adja1X = ephAdja1.X,
  954. Adja1Y = ephAdja1.Y,
  955. Adja1Z = ephAdja1.Z,
  956. Adja2X = ephAdja2.X,
  957. Adja2Y = ephAdja2.Y,
  958. Adja2Z = ephAdja2.Z,
  959. });
  960. var res = PosApi.X3_PosNoRef(cgRes, StationRes);
  961. PosRes posRes = new PosRes()
  962. {
  963. SigTime = dto.SigTime,
  964. TaskInfoID = runTask.ID,
  965. CgResID = cgRes.ID,
  966. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  967. TsName = dto.TsName,
  968. PosLon = res[0],
  969. PosLat = res[1],
  970. MirrLon = res[3],
  971. MirrLat = res[4],
  972. PosResType = EnumPosResType.X3NoRef,
  973. };
  974. posRes = db.PosRes.Add(posRes);
  975. await db.SaveChangesAsync();
  976. PosObServer.Instance.Pub(posRes);
  977. return Success(Map(posRes));
  978. }
  979. }
  980. #endregion
  981. #region 三星双频差定位
  982. /// <summary>
  983. /// 三星双频差带参定位(含星历)
  984. /// </summary>
  985. /// <param name="dto">定位参数</param>
  986. /// <returns></returns>
  987. [HttpPost]
  988. public async Task<AjaxResult<PosResDto>> PosX3TwoDfoAsync(X3TwoDfoPosDto dto)
  989. {
  990. using (RHDWContext db = new RHDWContext())
  991. {
  992. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X3TwoDfo && p.TaskState == EnumTaskState.Running);
  993. if (runTask == null)
  994. {
  995. Serilog.Log.Warning($"接收到三星双频差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  996. return Error<PosResDto>($"多模式融合定位平台没有启动三星双频差定位任务");
  997. }
  998. var StationRes = db.StationRes.Add(new StationRes()
  999. {
  1000. SatTxLon = dto.SatTxLon,
  1001. SatTxLat = dto.SatTxLat,
  1002. RefLon = dto.RefLon,
  1003. RefLat = dto.RefLat,
  1004. });
  1005. var cgRes = db.CgRes.Add(new CgRes()
  1006. {
  1007. SigTime = dto.SigTime,
  1008. Dto1 = dto.Dto1,
  1009. Dfo1 = dto.Dfo1,
  1010. Snr1 = dto.Snr1,
  1011. Dto2 = dto.Dto2,
  1012. Dfo2 = dto.Dfo2,
  1013. Snr2 = dto.Snr2,
  1014. YbMainDfo = dto.YbMainDfo,
  1015. YbAdja1Dfo = dto.YbAdja1Dfo,
  1016. YbAdja2Dfo = dto.YbAdja2Dfo,
  1017. TarFreqUp = dto.TarFreqUp,
  1018. TarFreqDown = dto.TarFreqDown,
  1019. RefFreqUp = dto.RefFreqUp,
  1020. RefFreqDown = dto.RefFreqDown,
  1021. StationResID = StationRes.ID,
  1022. MainCode = dto.MainCode,
  1023. Adja1Code = dto.Adja1Code,
  1024. Adja2Code = dto.Adja2Code,
  1025. MainX = dto.MainX,
  1026. MainY = dto.MainY,
  1027. MainZ = dto.MainZ,
  1028. MainVx = dto.MainVx,
  1029. MainVy = dto.MainVy,
  1030. MainVz = dto.MainVz,
  1031. Adja1X = dto.Adja1X,
  1032. Adja1Y = dto.Adja1Y,
  1033. Adja1Z = dto.Adja1Z,
  1034. Adja1Vx = dto.Adja1Vx,
  1035. Adja1Vy = dto.Adja1Vy,
  1036. Adja1Vz = dto.Adja1Vz,
  1037. Adja2X = dto.Adja2X,
  1038. Adja2Y = dto.Adja2Y,
  1039. Adja2Z = dto.Adja2Z,
  1040. Adja2Vx = dto.Adja2Vx,
  1041. Adja2Vy = dto.Adja2Vy,
  1042. Adja2Vz = dto.Adja2Vz,
  1043. });
  1044. var res = PosApi.X3_PosTwoDfo(cgRes, StationRes);
  1045. PosRes posRes = new PosRes()
  1046. {
  1047. SigTime = cgRes.SigTime,
  1048. TaskInfoID = runTask.ID,
  1049. CgResID = cgRes.ID,
  1050. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1051. TsName = dto.TsName,
  1052. PosLon = res[0],
  1053. PosLat = res[1],
  1054. MirrLon = res[3],
  1055. MirrLat = res[4],
  1056. PosResType = EnumPosResType.X3TwoDfo,
  1057. };
  1058. posRes = db.PosRes.Add(posRes);
  1059. await db.SaveChangesAsync();
  1060. PosObServer.Instance.Pub(posRes);
  1061. return Success(Map(posRes));
  1062. }
  1063. }
  1064. /// <summary>
  1065. /// 三星双频差带参定位(无星历)
  1066. /// </summary>
  1067. /// <returns>返回定位结果ID</returns>
  1068. [HttpPost]
  1069. public async Task<AjaxResult<PosResDto>> PosX3TwoDfoNoXlAsync(X3TwoDfoNoXlPosDto dto)
  1070. {
  1071. using (RHDWContext db = new RHDWContext())
  1072. {
  1073. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X3TwoDfo).FirstOrDefaultAsync();
  1074. if (runTask == null)
  1075. {
  1076. Serilog.Log.Warning($"接收到三星双频差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  1077. return Error<PosResDto>($"多模式融合定位平台没有启动三星双频差定位任务");
  1078. }
  1079. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  1080. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  1081. var parameter3 = new SQLiteParameter("@satcode", dto.Adja1Code);
  1082. var parameter4 = new SQLiteParameter("@satcode", dto.Adja2Code);
  1083. 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();
  1084. if (xlInfo1 == null)
  1085. {
  1086. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  1087. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  1088. }
  1089. 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();
  1090. if (xlInfo2 == null)
  1091. {
  1092. Serilog.Log.Error($"未找到卫星[{dto.Adja1Code}]的双行根数星历");
  1093. return Error<PosResDto>($"未找到卫星[{dto.Adja1Code}]的双行根数星历");
  1094. }
  1095. 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();
  1096. if (xlInfo3 == null)
  1097. {
  1098. Serilog.Log.Error($"未找到卫星[{dto.Adja2Code}]的双行根数星历");
  1099. return Error<PosResDto>($"未找到卫星[{dto.Adja2Code}]的双行根数星历");
  1100. }
  1101. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  1102. Serilog.Log.Information($"卫星{dto.Adja1Code}使用{xlInfo2.TwoLine}进行星历推算");
  1103. Serilog.Log.Information($"卫星{dto.Adja2Code}使用{xlInfo3.TwoLine}进行星历推算");
  1104. var settings = await db.SysSetings.FirstOrDefaultAsync();
  1105. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  1106. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  1107. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  1108. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  1109. var ephAdja1 = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  1110. var XlCalcDto3 = new XlCalcDto() { tleStr = xlInfo3.TwoLine, dt = dto.SigTime };
  1111. var ephAdja2 = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto3);
  1112. var StationRes = db.StationRes.Add(new StationRes()
  1113. {
  1114. SatTxLon = dto.SatTxLon,
  1115. SatTxLat = dto.SatTxLat,
  1116. RefLon = dto.RefLon,
  1117. RefLat = dto.RefLat,
  1118. });
  1119. var cgRes = db.CgRes.Add(new CgRes()
  1120. {
  1121. SigTime = dto.SigTime,
  1122. Dto1 = dto.Dto1,
  1123. Dfo1 = dto.Dfo1,
  1124. Snr1 = dto.Snr1,
  1125. Dto2 = dto.Dto2,
  1126. Dfo2 = dto.Dfo2,
  1127. Snr2 = dto.Snr2,
  1128. YbMainDfo = dto.YbMainDfo,
  1129. YbAdja1Dfo = dto.YbAdja1Dfo,
  1130. YbAdja2Dfo = dto.YbAdja2Dfo,
  1131. TarFreqUp = dto.TarFreqUp,
  1132. TarFreqDown = dto.TarFreqDown,
  1133. RefFreqUp = dto.RefFreqUp,
  1134. RefFreqDown = dto.RefFreqDown,
  1135. StationResID = StationRes.ID,
  1136. MainCode = dto.MainCode,
  1137. Adja1Code = dto.Adja1Code,
  1138. Adja2Code = dto.Adja2Code,
  1139. MainX = ephMain.X,
  1140. MainY = ephMain.Y,
  1141. MainZ = ephMain.Z,
  1142. MainVx = ephMain.VX,
  1143. MainVy = ephMain.VY,
  1144. MainVz = ephMain.VZ,
  1145. Adja1X = ephAdja1.X,
  1146. Adja1Y = ephAdja1.Y,
  1147. Adja1Z = ephAdja1.Z,
  1148. Adja1Vx = ephAdja1.VX,
  1149. Adja1Vy = ephAdja1.VY,
  1150. Adja1Vz = ephAdja1.VZ,
  1151. Adja2X = ephAdja2.X,
  1152. Adja2Y = ephAdja2.Y,
  1153. Adja2Z = ephAdja2.Z,
  1154. Adja2Vx = ephAdja2.VX,
  1155. Adja2Vy = ephAdja2.VY,
  1156. Adja2Vz = ephAdja2.VZ,
  1157. });
  1158. var res = PosApi.X3_PosTwoDfo(cgRes, StationRes);
  1159. PosRes posRes = new PosRes()
  1160. {
  1161. SigTime = dto.SigTime,
  1162. TaskInfoID = runTask.ID,
  1163. CgResID = cgRes.ID,
  1164. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1165. TsName = dto.TsName,
  1166. PosLon = res[0],
  1167. PosLat = res[1],
  1168. MirrLon = res[3],
  1169. MirrLat = res[4],
  1170. PosResType = EnumPosResType.X3TwoDfo,
  1171. };
  1172. posRes = db.PosRes.Add(posRes);
  1173. await db.SaveChangesAsync();
  1174. PosObServer.Instance.Pub(posRes);
  1175. return Success(Map(posRes));
  1176. }
  1177. }
  1178. #endregion
  1179. #region 双星时频差定位
  1180. /// <summary>
  1181. /// 双星时频差带参定位(含星历)
  1182. /// </summary>
  1183. /// <param name="dto">定位参数</param>
  1184. /// <returns></returns>
  1185. [HttpPost]
  1186. public async Task<AjaxResult<PosResDto>> PosX2DtoDfoAsync(X2DtoDfoPosDto dto)
  1187. {
  1188. using (RHDWContext db = new RHDWContext())
  1189. {
  1190. var runTask = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2Dfo && p.TaskState == EnumTaskState.Running);
  1191. if (runTask == null)
  1192. {
  1193. Serilog.Log.Warning($"接收到双星时频差带参定位(含星历)参数,由于任务没有运行中忽略本次定位!");
  1194. return Error<PosResDto>($"多模式融合定位平台没有启动双星时频差定位任务");
  1195. }
  1196. var StationRes = db.StationRes.Add(new StationRes()
  1197. {
  1198. SatTxLon = dto.SatTxLon,
  1199. SatTxLat = dto.SatTxLat,
  1200. RefLon = dto.RefLon,
  1201. RefLat = dto.RefLat,
  1202. });
  1203. var cgRes = db.CgRes.Add(new CgRes()
  1204. {
  1205. SigTime = dto.SigTime,
  1206. Dto1 = dto.Dto,
  1207. Dfo1 = dto.Dfo,
  1208. Snr1 = dto.Snr,
  1209. YbMainDto = dto.YbMainDto,
  1210. YbAdja1Dto = dto.YbAdjaDto,
  1211. YbMainDfo = dto.YbMainDfo,
  1212. YbAdja1Dfo = dto.YbAdjaDfo,
  1213. TarFreqUp = dto.TarFreqUp,
  1214. TarFreqDown = dto.TarFreqDown,
  1215. RefFreqUp = dto.RefFreqUp,
  1216. RefFreqDown = dto.RefFreqDown,
  1217. StationResID = StationRes.ID,
  1218. MainCode = dto.MainCode,
  1219. Adja1Code = dto.AdjaCode,
  1220. MainX = dto.MainX,
  1221. MainY = dto.MainY,
  1222. MainZ = dto.MainZ,
  1223. MainVx = dto.MainVx,
  1224. MainVy = dto.MainVy,
  1225. MainVz = dto.MainVz,
  1226. Adja1X = dto.AdjaX,
  1227. Adja1Y = dto.AdjaY,
  1228. Adja1Z = dto.AdjaZ,
  1229. Adja1Vx = dto.AdjaVx,
  1230. Adja1Vy = dto.AdjaVy,
  1231. Adja1Vz = dto.AdjaVz,
  1232. });
  1233. var res = PosApi.X2_PosDtoDfo(cgRes, StationRes);
  1234. PosRes posRes = new PosRes()
  1235. {
  1236. SigTime = cgRes.SigTime,
  1237. TaskInfoID = runTask.ID,
  1238. CgResID = cgRes.ID,
  1239. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1240. TsName = dto.TsName,
  1241. PosLon = res[0],
  1242. PosLat = res[1],
  1243. MirrLon = res[3],
  1244. MirrLat = res[4],
  1245. PosResType = EnumPosResType.X2Dfo,
  1246. };
  1247. posRes = db.PosRes.Add(posRes);
  1248. await db.SaveChangesAsync();
  1249. PosObServer.Instance.Pub(posRes);
  1250. return Success(Map(posRes));
  1251. }
  1252. }
  1253. /// <summary>
  1254. /// 双星时频差带参定位(无星历)
  1255. /// </summary>
  1256. /// <returns>返回定位结果ID</returns>
  1257. [HttpPost]
  1258. public async Task<AjaxResult<PosResDto>> PosX2DtoDfoNoXlAsync(X2DtoDfoNoXlPosDto dto)
  1259. {
  1260. using (RHDWContext db = new RHDWContext())
  1261. {
  1262. var runTask = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running && p.PosType == EnumPosType.X2Dfo).FirstOrDefaultAsync();
  1263. if (runTask == null)
  1264. {
  1265. Serilog.Log.Warning($"接收到双星时频差带参定位(无星历)参数,由于任务没有运行中忽略本次定位!");
  1266. return Error<PosResDto>($"多模式融合定位平台没有启动双星时频差定位任务");
  1267. }
  1268. var parameter1 = new SQLiteParameter("@sigTime", dto.SigTime);
  1269. var parameter2 = new SQLiteParameter("@satcode", dto.MainCode);
  1270. var parameter3 = new SQLiteParameter("@satcode", dto.AdjaCode);
  1271. 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();
  1272. if (xlInfo1 == null)
  1273. {
  1274. Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
  1275. return Error<PosResDto>($"未找到卫星[{dto.MainCode}]的双行根数星历");
  1276. }
  1277. 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();
  1278. if (xlInfo2 == null)
  1279. {
  1280. Serilog.Log.Error($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  1281. return Error<PosResDto>($"未找到卫星[{dto.AdjaCode}]的双行根数星历");
  1282. }
  1283. Serilog.Log.Information($"卫星{dto.MainCode}使用{xlInfo1.TwoLine}进行星历推算");
  1284. Serilog.Log.Information($"卫星{dto.AdjaCode}使用{xlInfo2.TwoLine}进行星历推算");
  1285. var settings = await db.SysSetings.FirstOrDefaultAsync();
  1286. string url = string.Format("http://{0}:{1}/Api/Xl/Calc", IpHelper.GetLocalIp(), settings.HttpPort);
  1287. var XlCalcDto = new XlCalcDto() { tleStr = xlInfo1.TwoLine, dt = dto.SigTime };
  1288. var ephMain = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto);
  1289. var XlCalcDto2 = new XlCalcDto() { tleStr = xlInfo2.TwoLine, dt = dto.SigTime };
  1290. var ephAdja = HttpHelper.PostRequest<SatEphDto>(url, XlCalcDto2);
  1291. var StationRes = db.StationRes.Add(new StationRes()
  1292. {
  1293. SatTxLon = dto.SatTxLon,
  1294. SatTxLat = dto.SatTxLat,
  1295. RefLon = dto.RefLon,
  1296. RefLat = dto.RefLat,
  1297. });
  1298. var cgRes = db.CgRes.Add(new CgRes()
  1299. {
  1300. SigTime = dto.SigTime,
  1301. Dto1 = dto.Dto,
  1302. Dfo1 = dto.Dfo,
  1303. Snr1 = dto.Snr,
  1304. YbMainDto = dto.YbMainDto,
  1305. YbAdja1Dto = dto.YbAdjaDto,
  1306. YbMainDfo = dto.YbMainDfo,
  1307. YbAdja1Dfo = dto.YbAdjaDfo,
  1308. TarFreqUp = dto.TarFreqUp,
  1309. TarFreqDown = dto.TarFreqDown,
  1310. RefFreqUp = dto.RefFreqUp,
  1311. RefFreqDown = dto.RefFreqDown,
  1312. StationResID = StationRes.ID,
  1313. MainCode = dto.MainCode,
  1314. Adja1Code = dto.AdjaCode,
  1315. MainX = ephMain.X,
  1316. MainY = ephMain.Y,
  1317. MainZ = ephMain.Z,
  1318. MainVx = ephMain.VX,
  1319. MainVy = ephMain.VY,
  1320. MainVz = ephMain.VZ,
  1321. Adja1X = ephAdja.X,
  1322. Adja1Y = ephAdja.Y,
  1323. Adja1Z = ephAdja.Z,
  1324. Adja1Vx = ephAdja.VX,
  1325. Adja1Vy = ephAdja.VY,
  1326. Adja1Vz = ephAdja.VZ,
  1327. });
  1328. var res = PosApi.X2_PosDtoDfo(cgRes, StationRes);
  1329. PosRes posRes = new PosRes()
  1330. {
  1331. SigTime = dto.SigTime,
  1332. TaskInfoID = runTask.ID,
  1333. CgResID = cgRes.ID,
  1334. TarName = string.IsNullOrWhiteSpace(dto.TarName) ? "未知目标" : dto.TarName,
  1335. TsName = dto.TsName,
  1336. PosLon = res[0],
  1337. PosLat = res[1],
  1338. MirrLon = res[3],
  1339. MirrLat = res[4],
  1340. PosResType = EnumPosResType.X2Dfo,
  1341. };
  1342. posRes = db.PosRes.Add(posRes);
  1343. await db.SaveChangesAsync();
  1344. PosObServer.Instance.Pub(posRes);
  1345. return Success(Map(posRes));
  1346. }
  1347. }
  1348. #endregion
  1349. private PosResDto Map(PosRes res)
  1350. {
  1351. return new PosResDto()
  1352. {
  1353. ID = res.ID,
  1354. SigTime = res.SigTime,
  1355. TaskInfoID = res.TaskInfoID,
  1356. TarName = string.IsNullOrWhiteSpace(res.TarName) ? "未知目标" : res.TarName,
  1357. PosLon = res.PosLon,
  1358. PosLat = res.PosLat,
  1359. MirrLon = res.MirrLon,
  1360. MirrLat = res.MirrLat,
  1361. PosResType = (EnumPosResTypeDto)((int)res.PosResType)
  1362. };
  1363. }
  1364. /// <summary>
  1365. /// 查询定位结果(暂未实现)
  1366. /// </summary>
  1367. /// <param name="dto"></param>
  1368. /// <returns></returns>
  1369. /// <exception cref="Exception"></exception>
  1370. [HttpGet]
  1371. public async Task<AjaxResult<PosResDto>> GetPosRes(PosResQueryDto dto)
  1372. {
  1373. await Task.Delay(100);
  1374. return Error<PosResDto>("该功能暂未实现!");
  1375. }
  1376. }
  1377. }