using DevExpress.Xpo; using Ips.Library.Basic; using Ips.Library.Entity; using Ips.Sps.Ephs; using Ips.Sps.Mappers; using Ips.Sps.Scheduling.Entities; using Ips.Sps.TskResults.Pases; using Ips.Sps.TskResults.Peses; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ips.Sps.Scheduling.SigProces { public class ProcSigUtil { public static List SaveCorResult(CorResult[] corResults, RunTsk tsk, RunSig sig, Pas mainPas, Pas adjaPas, EphResult mainEph, EphResult adjaEph, CancellationToken token) { if (corResults.IsNullOrEmpty()) return new List(); using var uow = new UnitOfWork(); List pesList = new List(); foreach (var corResult in corResults) { Pes pes = CreatePes(uow, tsk, sig, mainPas, adjaPas, corResult, mainEph, adjaEph, token); pesList.Add(pes); } uow.CommitChanges(); return pesList; } public static Pes CreatePes(Session session, RunTsk tsk, RunSig sig, Pas mainPas, Pas adjaPas, CorResult corResult, EphResult mainEph, EphResult adjaEph, CancellationToken token) { var pes = new Pes(session); var scd = mainPas ?? adjaPas; pes.TskId = tsk.TskId; pes.SigId = sig.SigId; pes.EmtId = sig.EmtId; pes.SigTime = adjaPas.SigTime.AddSeconds(corResult.Start * 1.0d / scd.Fs); pes.SigFreq = sig.SigFreq; pes.BandWidth = sig.BandWidth; pes.CreateTime = DateTime.Now; pes.Category = sig.SigCategory; pes.SigType = sig.SigType; pes.SigLon = sig.SigLon; pes.SigLat = sig.SigLat; pes.SigAlt = sig.SigAlt; pes.LonMin = sig.SigLon - sig.LonRange / 2; pes.LonMax = sig.SigLon + sig.LonRange / 2; pes.LatMin = sig.SigLat - sig.LatRange / 2; pes.LatMax = sig.SigLat + sig.LatRange / 2; if (mainPas != null) { pes.MainSatId = mainPas.SatId; pes.MainSatNum = mainPas.SatNum; pes.MainAntId = mainPas.AntId; pes.MainAntLon = mainPas.AntLon; pes.MainAntLat = mainPas.AntLat; pes.MainAntAlt = mainPas.AntAlt; if (mainPas.SigTime.ClearMillisecond() != pes.SigTime.ClearMillisecond()) { mainEph = EphManager.Default.GetEph(mainPas.SatNum, pes.SigTime, token); } } if (mainEph != null) { pes.MainEphX = mainEph.X; pes.MainEphY = mainEph.Y; pes.MainEphZ = mainEph.Z; pes.MainEphVx = mainEph.Vx; pes.MainEphVy = mainEph.Vy; pes.MainEphVz = mainEph.Vz; } if (adjaPas != null) { pes.AdjaSatId = adjaPas.SatId; pes.AdjaSatNum = adjaPas.SatNum; pes.AdjaAntId = adjaPas.AntId; pes.AdjaAntLon = adjaPas.AntLon; pes.AdjaAntLat = adjaPas.AntLat; pes.AdjaAntAlt = adjaPas.AntAlt; if (adjaPas.SigTime.ClearMillisecond() != pes.SigTime.ClearMillisecond()) { adjaEph = EphManager.Default.GetEph(adjaPas.SatNum, pes.SigTime, token); } } if (adjaEph != null) { pes.AdjaEphX = adjaEph.X; pes.AdjaEphY = adjaEph.Y; pes.AdjaEphZ = adjaEph.Z; pes.AdjaEphVx = adjaEph.Vx; pes.AdjaEphVy = adjaEph.Vy; pes.AdjaEphVz = adjaEph.Vz; } if (corResult != null) { pes.StartPos = corResult.Start; pes.Length = corResult.Length; pes.Dt = corResult.Dto; pes.Df = corResult.Dfo; pes.Snr = corResult.Snr; pes.IsValid = corResult.IsValid; } pes.Save(); using var uow = new UnitOfWork(); corResult.XgfList.ForEach(m => { PesXgf xgf = new PesXgf(uow); xgf.PesId = pes.Id; xgf.Dt = m.Dto; xgf.Df = m.Dfo; xgf.Snr = m.Snr; }); if (pes.Category == SignalCategory.RefSig) { //PesRef pesRef = new PesRef(uow); //SpsMapper.Default.Map(pes, pesRef); } uow.CommitChanges(); return pes; } } }