XlRepository.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using DW5S.Entity;
  2. using Microsoft.AspNetCore.Mvc.RazorPages;
  3. using Microsoft.EntityFrameworkCore;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace DW5S.Repostory
  12. {
  13. /// <summary>
  14. /// 双行根星历仓储
  15. /// </summary>
  16. public class XlRepository : Repository<XlInfo>
  17. {
  18. public XlRepository(OracleContext ctx)
  19. : base(ctx)
  20. {
  21. }
  22. /// <summary>
  23. /// 获取双行根数总条数
  24. /// </summary>
  25. /// <param name="satCode"></param>
  26. /// <returns></returns>
  27. public async Task<int> GetCount(int? satCode)
  28. {
  29. var queryable = base.dbSet.AsQueryable();
  30. if (satCode != null)
  31. queryable = queryable.Where(p => p.SatCode == satCode);
  32. var count = await queryable.CountAsync();
  33. return count;
  34. }
  35. /// <summary>
  36. /// 获取数据库双行根数
  37. /// </summary>
  38. /// <param name="currentPage">当前页(从1开始)</param>
  39. /// <param name="pageSize">每页显示的条数</param>
  40. /// <param name="satCode">卫星编号</param>
  41. /// <returns></returns>
  42. public async Task<List<XlInfo>> GetPageAsync(int currentPage, int pageSize, int? satCode)
  43. {
  44. try
  45. {
  46. int skip = (currentPage - 1) * pageSize;
  47. var queryable = base.dbSet.AsQueryable();
  48. if (satCode != null)
  49. queryable = queryable.Where(p => p.SatCode == satCode);
  50. var res = await queryable.OrderByDescending(p => p.TimeUTC)
  51. .ThenByDescending(p => p.Lon).Skip(skip).Take(pageSize).ToListAsync();
  52. return res;
  53. }
  54. catch (Exception ex)
  55. {
  56. throw new Exception("分页星历信息查询异常", ex);
  57. }
  58. }
  59. /// <summary>
  60. /// 获取某个星某个时刻最近的双行根(可能返回null)
  61. /// </summary>
  62. /// <param name="satCode">卫星编号</param>
  63. /// <param name="sigTime">时刻</param>
  64. /// <returns></returns>
  65. public async Task<XlInfo> GetLatestAsync(int satCode, DateTime sigTime)
  66. {
  67. try
  68. {
  69. var max =await dbSet.Where(p => p.SatCode == satCode && p.TimeUTC >= sigTime)
  70. .OrderBy(p => p.TimeUTC).FirstOrDefaultAsync();
  71. var min =await dbSet.Where(p => p.SatCode == satCode && p.TimeUTC <= sigTime)
  72. .OrderByDescending(p => p.TimeUTC).FirstOrDefaultAsync();
  73. if (max == null && min == null)
  74. return null;
  75. else if (max != null && min == null)
  76. return max;
  77. else if (max == null && min != null)
  78. return min;
  79. else
  80. {
  81. //谁离得更接近就用谁
  82. var val1 = Math.Abs((max.TimeUTC - sigTime).TotalSeconds);
  83. var val2 = Math.Abs((min.TimeUTC - sigTime).TotalSeconds);
  84. if (val1 < val2)
  85. return max;
  86. else
  87. return min;
  88. }
  89. }
  90. catch (Exception ex)
  91. {
  92. throw new Exception($"获取卫星[{satCode}]--{sigTime:yyyyMMddHHmmss}时刻附近的双行根数出错!", ex);
  93. }
  94. }
  95. }
  96. }