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;
}
}
}