using System; using System.Collections.Generic; using System.Data.Entity; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using XdCxRhDW.Entity; namespace XdCxRhDW.Repostory { public static class RefCgRepository { /// /// 获取数据库所有双行根数 /// /// public static async Task> GetAllAsync() { try { using (RHDWContext db = new RHDWContext()) { var res = await db.RefCgRes.OrderByDescending(p => p.SigTime).OrderByDescending(p => p.SatCode).ToListAsync(); return res; } } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("加载参考参估信息异常", ex); return null; } } public static async Task GetCount(int? satCode, DateTime? startdt = null, DateTime? enddt = null) { using (RHDWContext db = new RHDWContext()) { StringBuilder sb = new StringBuilder(); sb.Append($"select count(*) from RefCgRes where 1=1 "); if (satCode != null) { sb.Append($"and SatCode={satCode} "); } if (startdt != null && startdt != DateTime.MinValue) { sb.Append($"and SigTime>='{startdt.Value:yyyy-MM-dd HH:mm:ss}' "); } if (enddt != null && enddt != DateTime.MinValue) { sb.Append($"and SigTime<='{enddt.Value:yyyy-MM-dd HH:mm:ss}' "); } string sql = sb.ToString(); var res = await db.Database.SqlQuery(sql).FirstAsync(); return res; } } /// /// 获取数据库所有参考参估结果数据 /// /// public static async Task> GetPageAsync(int currentPage, int pageSize, int? satCode, DateTime? startdt = null, DateTime? enddt = null) { try { using (RHDWContext db = new RHDWContext()) { var topNumber = (currentPage - 1) * pageSize; StringBuilder sb = new StringBuilder(); sb.Append($"select * from RefCgRes where 1=1 "); if (satCode != null) { sb.Append($" and SatCode={satCode} "); } if (startdt != null && startdt != DateTime.MinValue) { sb.Append($" and SigTime>='{startdt.Value:yyyy-MM-dd HH:mm:ss}' "); } if (enddt != null && enddt != DateTime.MinValue) { sb.Append($" and SigTime<='{enddt.Value:yyyy-MM-dd HH:mm:ss}' "); } sb.Append($" order by SigTime desc limit {pageSize} offset {topNumber}"); string sql = sb.ToString(); var res = await db.Database.SqlQuery(sql).ToListAsync(); return res; } } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("加载参考参估信息异常", ex); return null; } } /// /// 获取某个星某个时刻最近的参考参估结果 /// /// 卫星编号 /// 时刻 /// public static async Task> GetLatestAsync(int satCode, DateTime sigTime) { try { DateTime startdt = sigTime.AddMinutes(-15); DateTime enddt = sigTime.AddMinutes(15); using (RHDWContext db = new RHDWContext()) { StringBuilder sb = new StringBuilder(); sb.Append($"select * from RefCgRes where YbSnr!=0 and SatCode={satCode} "); sb.Append($" and SigTime>='{startdt:yyyy-MM-dd HH:mm:ss}' "); sb.Append($" and SigTime<='{enddt:yyyy-MM-dd HH:mm:ss}' "); string sql = sb.ToString(); var res = await db.Database.SqlQuery(sql).ToListAsync(); return res; } } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error($"获取卫星[{satCode}]--{sigTime:yyyyMMddHHmmss}时刻附近的参考参估结果出错!", ex); return null; } } public static double CalSigTimeDto(DateTime x, DateTime x0, DateTime x1, double y0, double y1) { // 线性插值公式: y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0)) double y = y0 + (x - x0).TotalSeconds * ((y1 - y0) / (x1 - x0).TotalSeconds); if (y == double.NaN) { y = 0; } return y; } } }