PosController.cs 22 KB

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