PosController.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net.Http;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using DW5S.DTO;
  8. using DW5S.Repostory;
  9. using System.IO;
  10. using DW5S.Entity;
  11. using DW5S.WebApi;
  12. using System.Diagnostics;
  13. using System.Configuration;
  14. using Microsoft.AspNetCore.Mvc;
  15. using Serilog;
  16. using DW5S.KxcApi;
  17. namespace DW5S.Controllers
  18. {
  19. /// <summary>
  20. /// 定位功能相关接口
  21. /// </summary>
  22. public class PosController : BaseController
  23. {
  24. ILogger logger { get; set; }
  25. IUnitOfWork unitOfWork { get; set; }
  26. #region 一星一地测向定位
  27. /// <summary>
  28. /// 一星一地测向带参定位
  29. /// </summary>
  30. /// <returns></returns>
  31. [HttpPost]
  32. public async Task<AjaxResult> PosX1D1Async(X1D1NoXlPosDto dto)
  33. {
  34. TaskInfo runTask;
  35. var repsTask = unitOfWork.Of<TaskInfo>();
  36. if (dto.TaskID == null)
  37. {
  38. runTask = await repsTask.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
  39. if (runTask == null)
  40. {
  41. string msg = $"接收到一星一地测向带参定位参数,由于找不到执行中的任务忽略本次定位";
  42. logger.Error(msg);
  43. return Error(msg);
  44. }
  45. }
  46. else
  47. {
  48. runTask = await repsTask.GetByIdAsync(dto.TaskID);
  49. if (runTask == null)
  50. {
  51. string msg = $"找不到任务,ID={dto.TaskID}";
  52. logger.Error(msg);
  53. return Error(msg);
  54. }
  55. }
  56. var repsXl = unitOfWork.Of<XlInfo>() as XlRepository;
  57. var xl1 = await repsXl.GetLatestAsync(dto.MainCode, dto.SigTime);
  58. if (xl1 == null)
  59. {
  60. string msg = $"系统缺少编号{dto.MainCode}卫星的星历!";
  61. logger.Error(msg);
  62. return Error(msg);
  63. }
  64. logger.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeUTC:yyyyMMddHHmmss}的星历进行推算");
  65. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, SigTime = dto.SigTime };
  66. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
  67. if (ephMain.code != 200)
  68. {
  69. string msg = $"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}";
  70. logger.Error(msg);
  71. return Error(msg);
  72. }
  73. var repsStationRes = unitOfWork.Of<StationRes>();
  74. var stationRes = await repsStationRes.AddOrUpdateAsync(new StationRes
  75. {
  76. SatTxLon = dto.SatTxLon,
  77. SatTxLat = dto.SatTxLat,
  78. CdbTxLon = dto.CdbTxLon,
  79. CdbTxLat = dto.CdbTxLat,
  80. CxLon = dto.CxLon,
  81. CxLat = dto.CxLat,
  82. RefLon = dto.RefLon,
  83. RefLat = dto.RefLat,
  84. });
  85. var repsCheckRes = unitOfWork.Of<CheckRes>();
  86. var ckRes = await repsCheckRes.AddOrUpdateAsync(new CheckRes
  87. {
  88. FileName = dto.CheckRes?.FileName,
  89. SmpStart = dto.CheckRes?.SmpStart,
  90. SmpCount = dto.CheckRes?.SmpCount,
  91. PosCheckType = (EnumPosCheckType?)dto.CheckRes?.PosCheckType,
  92. ModRate = dto.CheckRes?.ModRate,
  93. ModType = dto.CheckRes?.ModType,
  94. UserName = dto.CheckRes?.UserName,
  95. FfcHz = dto.CheckRes?.FfcHz,
  96. Snr = dto.CheckRes?.Snr
  97. });
  98. var repsCgRes = unitOfWork.Of<CgRes>();
  99. var cgRes = await repsCgRes.AddOrUpdateAsync(new CgRes
  100. {
  101. SigTime = dto.SigTime,
  102. DtoCdb = Math.Round(dto.XdDto, 10),
  103. DfoCdb = Math.Round(dto.XdDfo, 10),
  104. SnrCdb = Math.Round(dto.XdSnr, 1),
  105. YbMainDto = Math.Round(dto.MainYbDto, 10),
  106. StationResID = stationRes.Id,
  107. MainCode = dto.MainCode,
  108. MainXlTime = ephMain.data.TleTime,
  109. TaskID = runTask.Id,
  110. MainX = ephMain.data.X,
  111. MainY = ephMain.data.Y,
  112. MainZ = ephMain.data.Z,
  113. MainVx = ephMain.data.VX,
  114. MainVy = ephMain.data.VY,
  115. MainVz = ephMain.data.VZ,
  116. TarFreqUp = dto.FreqUp,
  117. TarFreqDown = dto.FreqDown,
  118. });
  119. var repsCxRes = unitOfWork.Of<CxRes>();
  120. var cxRes = await repsCxRes.AddOrUpdateAsync(new CxRes()
  121. {
  122. SigTime = dto.SigTime,
  123. Fx = dto.CxRes,
  124. });
  125. var res = PosApi.X1D1_Pos(cgRes, stationRes, cxRes, dto.CalcConfidence);
  126. var repsPosRes = unitOfWork.Of<PosRes>();
  127. var posRes = await repsPosRes.AddOrUpdateAsync(new PosRes
  128. {
  129. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  130. SigTime = cgRes.SigTime,
  131. TaskInfoID = runTask.Id,
  132. CxResID = cxRes.Id,
  133. CgResID = cgRes.Id,
  134. CheckResID = ckRes.Id,
  135. PosLon = res[0],
  136. PosLat = res[1],
  137. MirrLon = res[3],
  138. MirrLat = res[4],
  139. Confidence = (int)res[6],
  140. PosResType = EnumPosResType.X1D1CX,
  141. });
  142. await unitOfWork.SaveAsync();
  143. //await unitOfWork.DisposeAsync();//依赖注入的对象在容器销毁时自动释放
  144. Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
  145. return Success();
  146. }
  147. #endregion
  148. #region 两星一地定位
  149. /// <summary>
  150. /// 两星一地带参定位
  151. /// </summary>
  152. /// <returns></returns>
  153. [HttpPost]
  154. public async Task<AjaxResult> PosX2D1Async(X2D1NoXlPosDto dto)
  155. {
  156. TargetInfo target = null;
  157. TaskInfo runTask;
  158. var repsTask = unitOfWork.Of<TaskInfo>();
  159. if (dto.TaskID == null)
  160. {
  161. runTask = await repsTask.FirstOrDefaultAsync(p =>p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  162. if (runTask == null)
  163. {
  164. string msg = $"接收到两星一地带参定位参数,由于找不到执行中的任务忽略本次定位";
  165. logger.Error(msg);
  166. return Error(msg);
  167. }
  168. }
  169. else
  170. {
  171. runTask = await repsTask.GetByIdAsync(dto.TaskID);
  172. if (runTask == null)
  173. {
  174. string msg = $"找不到任务,ID={dto.TaskID}";
  175. logger.Error(msg);
  176. return Error(msg);
  177. }
  178. }
  179. if (!string.IsNullOrWhiteSpace(dto.Target))
  180. {
  181. var repsTarget = unitOfWork.Of<TargetInfo>();
  182. target = await repsTarget.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
  183. if (target == null)
  184. {
  185. target = await repsTarget.AddOrUpdateAsync(new TargetInfo()
  186. {
  187. TargetName = dto.Target.Trim(),
  188. TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
  189. });
  190. }
  191. }
  192. var repsXl = unitOfWork.Of<XlInfo>() as XlRepository;
  193. var xl1 = await repsXl.GetLatestAsync(dto.MainCode, dto.SigTime);
  194. if (xl1 == null)
  195. {
  196. string msg = $"系统缺少编号{dto.MainCode}卫星的星历!";
  197. logger.Error(msg);
  198. return Error(msg);
  199. }
  200. logger.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeUTC:yyyyMMddHHmmss}的星历进行推算");
  201. var xl2 = await repsXl.GetLatestAsync(dto.AdjaCode, dto.SigTime);
  202. if (xl2 == null)
  203. {
  204. string msg = $"系统缺少编号{dto.AdjaCode}卫星的星历!";
  205. logger.Error(msg);
  206. return Error(msg);
  207. }
  208. logger.Information($"卫星{dto.AdjaCode}使用发布时刻为{xl1.TimeUTC:yyyyMMddHHmmss}的星历进行推算");
  209. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, SigTime = dto.SigTime };
  210. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
  211. if (ephMain.code != 200)
  212. {
  213. string msg = $"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}";
  214. logger.Error(msg);
  215. return Error(msg);
  216. }
  217. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, SigTime = dto.SigTime };
  218. var ephAdja = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto2);
  219. if (ephAdja.code != 200)
  220. {
  221. string msg = $"推算卫星{dto.AdjaCode}的ECEF星历出错.{ephAdja.msg}";
  222. logger.Error(msg);
  223. return Error(msg);
  224. }
  225. //#warning 测试代码
  226. //var tarEcef = PhysicsHelper.GeoToEcef((110, 17, 0));
  227. //var ecefXl1 = (ephMain.data.X, ephMain.data.Y, ephMain.data.Z);
  228. //var ecefXl2 = (ephAdja.data.X, ephAdja.data.Y, ephAdja.data.Z);
  229. //var ecefCdb = PhysicsHelper.GeoToEcef((dto.CdbTxLon, dto.CdbTxLat, 0));
  230. //var ecefRec = PhysicsHelper.GeoToEcef((dto.SatTxLon, dto.SatTxLat, 0));
  231. //var dt1 = PhysicsHelper.Dto(tarEcef, ecefXl1, ecefRec);
  232. //var dt2 = PhysicsHelper.Dto(tarEcef, ecefXl2, ecefRec);
  233. //var dt3 = PhysicsHelper.Dto(tarEcef, ecefCdb);
  234. //var dto1 = dt1 - dt2;
  235. //var dto2 = dt1 - dt3;
  236. //dto.SxDto = Math.Round(dto1 * 1e6 + r.Next(-10, 10) + r.NextDouble(), 3);
  237. //dto.XdDto = Math.Round(dto2 * 1e6 + r.Next(-10, 10) + r.NextDouble(), 3);
  238. //var refEcef = PhysicsHelper.GeoToEcef((dto.RefLon, dto.RefLat, 0));
  239. //var refdt1 = PhysicsHelper.Dto(refEcef, ecefXl1, ecefRec);
  240. //var refdt2 = PhysicsHelper.Dto(refEcef, ecefXl2, ecefRec);
  241. //dto.MainYbDto = Math.Round(refdt1 * 1e6, 3);
  242. //dto.AdjaYbDto = Math.Round(refdt2 * 1e6, 3);
  243. var repsStationRes = unitOfWork.Of<StationRes>();
  244. var stationRes = await repsStationRes.AddOrUpdateAsync(new StationRes
  245. {
  246. SatTxLon = dto.SatTxLon,
  247. SatTxLat = dto.SatTxLat,
  248. CdbTxLon = dto.CdbTxLon,
  249. CdbTxLat = dto.CdbTxLat,
  250. RefLon = dto.RefLon,
  251. RefLat = dto.RefLat,
  252. });
  253. var repsCheckRes = unitOfWork.Of<CheckRes>();
  254. var ckRes = await repsCheckRes.AddOrUpdateAsync(new CheckRes
  255. {
  256. FileName = dto.CheckRes?.FileName,
  257. SmpStart = dto.CheckRes?.SmpStart,
  258. SmpCount = dto.CheckRes?.SmpCount,
  259. PosCheckType = (EnumPosCheckType?)dto.CheckRes?.PosCheckType,
  260. ModRate = dto.CheckRes?.ModRate,
  261. ModType = dto.CheckRes?.ModType,
  262. UserName = dto.CheckRes?.UserName,
  263. FfcHz = dto.CheckRes?.FfcHz,
  264. Snr = dto.CheckRes?.Snr
  265. });
  266. var repsCgRes = unitOfWork.Of<CgRes>();
  267. var cgRes = await repsCgRes.AddOrUpdateAsync(new CgRes
  268. {
  269. SigTime = dto.SigTime,
  270. Dto1 = Math.Round(dto.SxDto, 10),
  271. Dfo1 = Math.Round(dto.SxDfo, 10),
  272. Snr1 = Math.Round(dto.SxSnr, 1),
  273. DtoCdb = Math.Round(dto.XdDto, 10),
  274. DfoCdb = Math.Round(dto.XdDfo, 10),
  275. SnrCdb = Math.Round(dto.XdSnr, 1),
  276. YbMainDto = Math.Round(dto.MainYbDto, 10),
  277. YbAdja1Dto = Math.Round(dto.AdjaYbDto, 10),
  278. StationResID = stationRes.Id,
  279. MainCode = dto.MainCode,
  280. MainXlTime = ephMain.data.TleTime,
  281. Adja1Code = dto.AdjaCode,
  282. Adja1XlTime = ephAdja.data.TleTime,
  283. TaskID = runTask.Id,
  284. MainX = ephMain.data.X,
  285. MainY = ephMain.data.Y,
  286. MainZ = ephMain.data.Z,
  287. MainVx = ephMain.data.VX,
  288. MainVy = ephMain.data.VY,
  289. MainVz = ephMain.data.VZ,
  290. Adja1Vx = ephAdja.data.VX,
  291. Adja1Vy = ephAdja.data.VY,
  292. Adja1Vz = ephAdja.data.VZ,
  293. Adja1X = ephAdja.data.X,
  294. Adja1Y = ephAdja.data.Y,
  295. Adja1Z = ephAdja.data.Z,
  296. TarFreqUp = dto.FreqUp,
  297. TarFreqDown = dto.FreqDown,
  298. });
  299. var res = PosApi.X2D1_Pos(cgRes, stationRes, dto.CalcConfidence);
  300. var repsPosRes = unitOfWork.Of<PosRes>();
  301. var posRes = await repsPosRes.AddOrUpdateAsync(new PosRes
  302. {
  303. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  304. SigTime = dto.SigTime,
  305. TaskInfoID = runTask.Id,
  306. CgResID = cgRes.Id,
  307. CheckResID = ckRes.Id,
  308. PosLon = res[0],
  309. PosLat = res[1],
  310. MirrLon = res[3],
  311. MirrLat = res[4],
  312. Confidence = (int)res[6],
  313. PosResType = EnumPosResType.X2D1,
  314. TargetInfoID = target?.Id
  315. });
  316. await unitOfWork.SaveAsync();
  317. //await unitOfWork.DisposeAsync();//依赖注入的对象在容器销毁时自动释放
  318. Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
  319. return Success();
  320. }
  321. /// <summary>
  322. /// 两星一地无参定位
  323. /// </summary>
  324. /// <returns></returns>
  325. [HttpPost]
  326. public async Task<AjaxResult> PosX2D1NoParAsync(X2D1NoXlNoParlPosDto dto)
  327. {
  328. TargetInfo target = null;
  329. TaskInfo runTask;
  330. var repsTask = unitOfWork.Of<TaskInfo>();
  331. if (dto.TaskID == null)
  332. {
  333. runTask = await repsTask.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  334. if (runTask == null)
  335. {
  336. string msg = $"接收到两星一地无参定位参数,由于找不到执行中的任务忽略本次定位";
  337. logger.Error(msg);
  338. return Error(msg);
  339. }
  340. }
  341. else
  342. {
  343. runTask = await repsTask.GetByIdAsync(dto.TaskID);
  344. if (runTask == null)
  345. {
  346. string msg = $"找不到任务,ID={dto.TaskID}";
  347. logger.Error(msg);
  348. return Error(msg);
  349. }
  350. }
  351. if (!string.IsNullOrWhiteSpace(dto.Target))
  352. {
  353. var repsTarget = unitOfWork.Of<TargetInfo>();
  354. target = await repsTarget.FirstOrDefaultAsync(p => p.TargetName == dto.Target.Trim());
  355. if (target == null)
  356. {
  357. target = await repsTarget.AddOrUpdateAsync(new TargetInfo()
  358. {
  359. TargetName = dto.Target.Trim(),
  360. TargeColor = ColorHelper.GetHtmlColor(dto.Target.Trim())
  361. });
  362. }
  363. }
  364. var repsXl = unitOfWork.Of<XlInfo>() as XlRepository;
  365. var xl1 = await repsXl.GetLatestAsync(dto.MainCode, dto.SigTime);
  366. if (xl1 == null)
  367. {
  368. string msg = $"系统缺少编号{dto.MainCode}卫星的星历!";
  369. logger.Error(msg);
  370. return Error(msg);
  371. }
  372. logger.Information($"卫星{dto.MainCode}使用发布时刻为{xl1.TimeUTC:yyyyMMddHHmmss}的星历进行推算");
  373. var xl2 = await repsXl.GetLatestAsync(dto.AdjaCode, dto.SigTime);
  374. if (xl2 == null)
  375. {
  376. string msg = $"系统缺少编号{dto.AdjaCode}卫星的星历!";
  377. logger.Error(msg);
  378. return Error(msg);
  379. }
  380. logger.Information($"卫星{dto.AdjaCode}使用发布时刻为{xl1.TimeUTC:yyyyMMddHHmmss}的星历进行推算");
  381. var XlCalcDto = new XlCalcDto() { tleStr = xl1.TwoLine, SigTime = dto.SigTime };
  382. var ephMain = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
  383. if (ephMain.code != 200)
  384. {
  385. string msg = $"推算卫星{dto.MainCode}的ECEF星历出错.{ephMain.msg}";
  386. logger.Error(msg);
  387. return Error(msg);
  388. }
  389. var XlCalcDto2 = new XlCalcDto() { tleStr = xl2.TwoLine, SigTime = dto.SigTime };
  390. var ephAdja = await HttpHelper.PostRequestAsync<SatEphResDto>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto2);
  391. if (ephAdja.code != 200)
  392. {
  393. string msg = $"推算卫星{dto.AdjaCode}的ECEF星历出错.{ephAdja.msg}";
  394. logger.Error(msg);
  395. return Error(msg);
  396. }
  397. //#warning 测试代码
  398. //var tarEcef = PhysicsHelper.GeoToEcef((46, 21, 0));
  399. //var ecefXl1 = (ephMain.data.X, ephMain.data.Y, ephMain.data.Z);
  400. //var ecefXl2 = (ephAdja.data.X, ephAdja.data.Y, ephAdja.data.Z);
  401. //var ecefCdb = PhysicsHelper.GeoToEcef((dto.CdbTxLon, dto.CdbTxLat, 0));
  402. //var ecefRec = PhysicsHelper.GeoToEcef((dto.SatTxLon, dto.SatTxLat, 0));
  403. //var dt1 = PhysicsHelper.Dto(tarEcef, ecefXl1, ecefRec);
  404. //var dt2 = PhysicsHelper.Dto(tarEcef, ecefXl2, ecefRec);
  405. //var dt3 = PhysicsHelper.Dto(tarEcef, ecefCdb);
  406. //var dto1 = dt1 - dt2;
  407. //var dto2 = dt1 - dt3;
  408. //dto.SxDto = dto1 * 1e6 + r.Next(-10, 10) + Math.Round(r.NextDouble(), 3);
  409. //dto.XdDto = dto2 * 1e6 + r.Next(-10, 10) + Math.Round(r.NextDouble(), 3);
  410. var repsStationRes = unitOfWork.Of<StationRes>();
  411. var stationRes = await repsStationRes.AddOrUpdateAsync(new StationRes
  412. {
  413. SatTxLon = dto.SatTxLon,
  414. SatTxLat = dto.SatTxLat,
  415. CdbTxLon = dto.CdbTxLon,
  416. CdbTxLat = dto.CdbTxLat,
  417. });
  418. var repsCheckRes = unitOfWork.Of<CheckRes>();
  419. var ckRes = await repsCheckRes.AddOrUpdateAsync(new CheckRes
  420. {
  421. FileName = dto.CheckRes?.FileName,
  422. SmpStart = dto.CheckRes?.SmpStart,
  423. SmpCount = dto.CheckRes?.SmpCount,
  424. PosCheckType = (EnumPosCheckType?)dto.CheckRes?.PosCheckType,
  425. ModRate = dto.CheckRes?.ModRate,
  426. ModType = dto.CheckRes?.ModType,
  427. UserName = dto.CheckRes?.UserName,
  428. FfcHz = dto.CheckRes?.FfcHz,
  429. Snr = dto.CheckRes?.Snr
  430. });
  431. var repsCgRes = unitOfWork.Of<CgRes>();
  432. var cgRes = await repsCgRes.AddOrUpdateAsync(new CgRes
  433. {
  434. SigTime = dto.SigTime,
  435. Dto1 = Math.Round(dto.SxDto, 10),
  436. Dfo1 = Math.Round(dto.SxDfo, 10),
  437. Snr1 = Math.Round(dto.SxSnr, 1),
  438. DtoCdb = Math.Round(dto.XdDto, 10),
  439. DfoCdb = Math.Round(dto.XdDfo, 10),
  440. SnrCdb = Math.Round(dto.XdSnr, 1),
  441. StationResID = stationRes.Id,
  442. MainCode = dto.MainCode,
  443. Adja1Code = dto.AdjaCode,
  444. MainXlTime = ephMain.data.TleTime,
  445. Adja1XlTime = ephAdja.data.TleTime,
  446. TaskID = runTask.Id,
  447. MainX = ephMain.data.X,
  448. MainY = ephMain.data.Y,
  449. MainZ = ephMain.data.Z,
  450. Adja1X = ephAdja.data.X,
  451. Adja1Y = ephAdja.data.Y,
  452. Adja1Z = ephAdja.data.Z,
  453. MainVx = ephMain.data.VX,
  454. MainVy = ephMain.data.VY,
  455. MainVz = ephMain.data.VZ,
  456. Adja1Vx = ephAdja.data.VX,
  457. Adja1Vy = ephAdja.data.VY,
  458. Adja1Vz = ephAdja.data.VZ,
  459. TarFreqUp = dto.FreqUp,
  460. TarFreqDown = dto.FreqDown,
  461. });
  462. var res = PosApi.X2D1_PosNoRef_ZL(cgRes, stationRes, dto.CalcConfidence);
  463. var repsPosRes = unitOfWork.Of<PosRes>();
  464. var posRes = await repsPosRes.AddOrUpdateAsync(new PosRes
  465. {
  466. FreqUpHz = (long)cgRes.TarFreqUp.Value,
  467. SigTime = dto.SigTime,
  468. TaskInfoID = runTask.Id,
  469. CgResID = cgRes.Id,
  470. CheckResID = ckRes.Id,
  471. PosLon = res[0],
  472. PosLat = res[1],
  473. MirrLon = res[3],
  474. MirrLat = res[4],
  475. Confidence = (int)res[6],
  476. PosResType = EnumPosResType.X2D1NoRef,
  477. TargetInfoID = target?.Id
  478. });
  479. await unitOfWork.SaveAsync();
  480. //await unitOfWork.DisposeAsync();//依赖注入的对象在容器销毁时自动释放
  481. Messenger.Defalut.Pub("新增定位点", MapModel(posRes));
  482. return Success();
  483. }
  484. #endregion
  485. private object MapModel(PosRes res)
  486. {
  487. return res;
  488. //return new ModelPosRes()
  489. //{
  490. // ID = res.ID,
  491. // FreqUpHz = res.FreqUpHz,
  492. // SigTime = res.SigTime,
  493. // TaskInfoID = res.TaskInfoID,
  494. // PosLon = res.PosLon,
  495. // PosLat = res.PosLat,
  496. // MirrLon = res.MirrLon,
  497. // MirrLat = res.MirrLat,
  498. // TargetState = res.TargetState,
  499. // PosResType = res.PosResType,
  500. // CgResID = res.CgResID,
  501. // CheckRes = res.CheckRes,
  502. // CheckResID = res.CheckResID,
  503. // ColorKey = res.ColorKey,
  504. // CreateTime = res.CreateTime,
  505. // CxResID = res.CxResID,
  506. // StationResID = res.StationResID,
  507. // TargetInfo = res.TargetInfo,
  508. // TargetInfoID = res.TargetInfoID,
  509. // UpdateTime = res.UpdateTime,
  510. // Confidence = res.Confidence,
  511. //};
  512. }
  513. }
  514. }