ProcSigUtil.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using DevExpress.Xpo;
  2. using Ips.Library.Basic;
  3. using Ips.Library.Entity;
  4. using Ips.Sps.Ephs;
  5. using Ips.Sps.Mappers;
  6. using Ips.Sps.Scheduling.Entities;
  7. using Ips.Sps.TskResults.Pases;
  8. using Ips.Sps.TskResults.Peses;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace Ips.Sps.Scheduling.SigProces
  15. {
  16. public class ProcSigUtil
  17. {
  18. public static List<Pes> SaveCorResult(CorResult[] corResults, RunTsk tsk, RunSig sig, Pas mainPas, Pas adjaPas, EphResult mainEph, EphResult adjaEph, CancellationToken token)
  19. {
  20. if (corResults.IsNullOrEmpty()) return new List<Pes>();
  21. using var uow = new UnitOfWork();
  22. List<Pes> pesList = new List<Pes>();
  23. foreach (var corResult in corResults)
  24. {
  25. Pes pes = CreatePes(uow, tsk, sig, mainPas, adjaPas, corResult, mainEph, adjaEph, token);
  26. pesList.Add(pes);
  27. }
  28. uow.CommitChanges();
  29. return pesList;
  30. }
  31. public static Pes CreatePes(Session session, RunTsk tsk, RunSig sig, Pas mainPas, Pas adjaPas, CorResult corResult, EphResult mainEph, EphResult adjaEph, CancellationToken token)
  32. {
  33. var pes = new Pes(session);
  34. var scd = mainPas ?? adjaPas;
  35. pes.TskId = tsk.TskId;
  36. pes.SigId = sig.SigId;
  37. pes.EmtId = sig.EmtId;
  38. pes.SigTime = adjaPas.SigTime.AddSeconds(corResult.Start * 1.0d / scd.Fs);
  39. pes.SigFreq = sig.SigFreq;
  40. pes.BandWidth = sig.BandWidth;
  41. pes.CreateTime = DateTime.Now;
  42. pes.Category = sig.SigCategory;
  43. pes.SigType = sig.SigType;
  44. pes.SigLon = sig.SigLon;
  45. pes.SigLat = sig.SigLat;
  46. pes.SigAlt = sig.SigAlt;
  47. pes.LonMin = sig.SigLon - sig.LonRange / 2;
  48. pes.LonMax = sig.SigLon + sig.LonRange / 2;
  49. pes.LatMin = sig.SigLat - sig.LatRange / 2;
  50. pes.LatMax = sig.SigLat + sig.LatRange / 2;
  51. if (mainPas != null)
  52. {
  53. pes.MainSatId = mainPas.SatId;
  54. pes.MainSatNum = mainPas.SatNum;
  55. pes.MainAntId = mainPas.AntId;
  56. pes.MainAntLon = mainPas.AntLon;
  57. pes.MainAntLat = mainPas.AntLat;
  58. pes.MainAntAlt = mainPas.AntAlt;
  59. if (mainPas.SigTime.ClearMillisecond() != pes.SigTime.ClearMillisecond())
  60. {
  61. mainEph = EphManager.Default.GetEph(mainPas.SatNum, pes.SigTime, token);
  62. }
  63. }
  64. if (mainEph != null)
  65. {
  66. pes.MainEphX = mainEph.X;
  67. pes.MainEphY = mainEph.Y;
  68. pes.MainEphZ = mainEph.Z;
  69. pes.MainEphVx = mainEph.Vx;
  70. pes.MainEphVy = mainEph.Vy;
  71. pes.MainEphVz = mainEph.Vz;
  72. }
  73. if (adjaPas != null)
  74. {
  75. pes.AdjaSatId = adjaPas.SatId;
  76. pes.AdjaSatNum = adjaPas.SatNum;
  77. pes.AdjaAntId = adjaPas.AntId;
  78. pes.AdjaAntLon = adjaPas.AntLon;
  79. pes.AdjaAntLat = adjaPas.AntLat;
  80. pes.AdjaAntAlt = adjaPas.AntAlt;
  81. if (adjaPas.SigTime.ClearMillisecond() != pes.SigTime.ClearMillisecond())
  82. {
  83. adjaEph = EphManager.Default.GetEph(adjaPas.SatNum, pes.SigTime, token);
  84. }
  85. }
  86. if (adjaEph != null)
  87. {
  88. pes.AdjaEphX = adjaEph.X;
  89. pes.AdjaEphY = adjaEph.Y;
  90. pes.AdjaEphZ = adjaEph.Z;
  91. pes.AdjaEphVx = adjaEph.Vx;
  92. pes.AdjaEphVy = adjaEph.Vy;
  93. pes.AdjaEphVz = adjaEph.Vz;
  94. }
  95. if (corResult != null)
  96. {
  97. pes.StartPos = corResult.Start;
  98. pes.Length = corResult.Length;
  99. pes.Dt = corResult.Dto;
  100. pes.Df = corResult.Dfo;
  101. pes.Snr = corResult.Snr;
  102. pes.IsValid = corResult.IsValid;
  103. }
  104. pes.Save();
  105. using var uow = new UnitOfWork();
  106. corResult.XgfList.ForEach(m =>
  107. {
  108. PesXgf xgf = new PesXgf(uow);
  109. xgf.PesId = pes.Id;
  110. xgf.Dt = m.Dto;
  111. xgf.Df = m.Dfo;
  112. xgf.Snr = m.Snr;
  113. });
  114. if (pes.Category == SignalCategory.RefSig)
  115. {
  116. //PesRef pesRef = new PesRef(uow);
  117. //SpsMapper.Default.Map(pes, pesRef);
  118. }
  119. uow.CommitChanges();
  120. return pes;
  121. }
  122. }
  123. }