| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | using DW5S.Entity;using Microsoft.AspNetCore.Mvc.RazorPages;using Microsoft.EntityFrameworkCore;using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DW5S.Repostory{    /// <summary>    /// 双行根星历仓储    /// </summary>    public class XlRepository : Repository<XlInfo>    {        public XlRepository(OracleContext ctx)            : base(ctx)        {        }        /// <summary>        /// 获取双行根数总条数        /// </summary>        /// <param name="satCode"></param>        /// <returns></returns>        public async Task<int> GetCount(int? satCode)        {            var queryable = base.dbSet.AsQueryable();            if (satCode != null)                queryable = queryable.Where(p => p.SatCode == satCode);            var count = await queryable.CountAsync();            return count;        }        /// <summary>        /// 获取数据库双行根数        /// </summary>        /// <param name="currentPage">当前页(从1开始)</param>        /// <param name="pageSize">每页显示的条数</param>        /// <param name="satCode">卫星编号</param>        /// <returns></returns>        public async Task<List<XlInfo>> GetPageAsync(int currentPage, int pageSize, int? satCode)        {            try            {                int skip = (currentPage - 1) * pageSize;                var queryable = base.dbSet.AsQueryable();                if (satCode != null)                    queryable = queryable.Where(p => p.SatCode == satCode);                var res = await queryable.OrderByDescending(p => p.TimeUTC)                    .ThenByDescending(p => p.Lon).Skip(skip).Take(pageSize).ToListAsync();                return res;            }            catch (Exception ex)            {                throw new Exception("分页星历信息查询异常", ex);            }        }        /// <summary>        /// 获取某个星某个时刻最近的双行根(可能返回null)        /// </summary>        /// <param name="satCode">卫星编号</param>        /// <param name="sigTime">时刻</param>        /// <returns></returns>        public async Task<XlInfo> GetLatestAsync(int satCode, DateTime sigTime)        {            try            {                var max =await dbSet.Where(p => p.SatCode == satCode && p.TimeUTC >= sigTime)                    .OrderBy(p => p.TimeUTC).FirstOrDefaultAsync();                var min =await dbSet.Where(p => p.SatCode == satCode && p.TimeUTC <= sigTime)                    .OrderByDescending(p => p.TimeUTC).FirstOrDefaultAsync();                if (max == null && min == null)                    return null;                else if (max != null && min == null)                    return max;                else if (max == null && min != null)                    return min;                else                {                    //谁离得更接近就用谁                    var val1 = Math.Abs((max.TimeUTC - sigTime).TotalSeconds);                    var val2 = Math.Abs((min.TimeUTC - sigTime).TotalSeconds);                    if (val1 < val2)                        return max;                    else                        return min;                }            }            catch (Exception ex)            {                throw new Exception($"获取卫星[{satCode}]--{sigTime:yyyyMMddHHmmss}时刻附近的双行根数出错!", ex);            }        }    }}
 |