RefCgRepository.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Entity;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using XdCxRhDW.Entity;
  9. namespace XdCxRhDW.Repostory
  10. {
  11. public static class RefCgRepository
  12. {
  13. /// <summary>
  14. /// 获取数据库所有双行根数
  15. /// </summary>
  16. /// <returns></returns>
  17. public static async Task<List<RefCgRes>> GetAllAsync()
  18. {
  19. try
  20. {
  21. using (RHDWContext db = new RHDWContext())
  22. {
  23. var res = await db.RefCgRes.OrderByDescending(p => p.SigTime).OrderByDescending(p => p.SatCode).ToListAsync();
  24. return res;
  25. }
  26. }
  27. catch (Exception ex)
  28. {
  29. XdCxRhDW.Framework.LogHelper.Error("加载参考参估信息异常", ex);
  30. return null;
  31. }
  32. }
  33. public static async Task<int> GetCount(int? satCode, DateTime? startdt = null, DateTime? enddt = null)
  34. {
  35. using (RHDWContext db = new RHDWContext())
  36. {
  37. StringBuilder sb = new StringBuilder();
  38. sb.Append($"select count(*) from RefCgRes where 1=1 ");
  39. if (satCode != null)
  40. {
  41. sb.Append($"and SatCode={satCode} ");
  42. }
  43. if (startdt != null && startdt != DateTime.MinValue)
  44. {
  45. sb.Append($"and SigTime>='{startdt.Value:yyyy-MM-dd HH:mm:ss}' ");
  46. }
  47. if (enddt != null && enddt != DateTime.MinValue)
  48. {
  49. sb.Append($"and SigTime<='{enddt.Value:yyyy-MM-dd HH:mm:ss}' ");
  50. }
  51. string sql = sb.ToString();
  52. var res = await db.Database.SqlQuery<int>(sql).FirstAsync();
  53. return res;
  54. }
  55. }
  56. /// <summary>
  57. /// 获取数据库所有参考参估结果数据
  58. /// </summary>
  59. /// <returns></returns>
  60. public static async Task<List<RefCgRes>> GetPageAsync(int currentPage, int pageSize, int? satCode, DateTime? startdt = null, DateTime? enddt = null)
  61. {
  62. try
  63. {
  64. using (RHDWContext db = new RHDWContext())
  65. {
  66. var topNumber = (currentPage - 1) * pageSize;
  67. StringBuilder sb = new StringBuilder();
  68. sb.Append($"select * from RefCgRes where 1=1 ");
  69. if (satCode != null)
  70. {
  71. sb.Append($" and SatCode={satCode} ");
  72. }
  73. if (startdt != null && startdt != DateTime.MinValue)
  74. {
  75. sb.Append($" and SigTime>='{startdt.Value:yyyy-MM-dd HH:mm:ss}' ");
  76. }
  77. if (enddt != null && enddt != DateTime.MinValue)
  78. {
  79. sb.Append($" and SigTime<='{enddt.Value:yyyy-MM-dd HH:mm:ss}' ");
  80. }
  81. sb.Append($" order by SigTime desc limit {pageSize} offset {topNumber}");
  82. string sql = sb.ToString();
  83. var res = await db.Database.SqlQuery<RefCgRes>(sql).ToListAsync();
  84. return res;
  85. }
  86. }
  87. catch (Exception ex)
  88. {
  89. XdCxRhDW.Framework.LogHelper.Error("加载参考参估信息异常", ex);
  90. return null;
  91. }
  92. }
  93. /// <summary>
  94. /// 获取某个星某个时刻最近的参考参估结果
  95. /// </summary>
  96. /// <param name="satCode">卫星编号</param>
  97. /// <param name="sigTime">时刻</param>
  98. /// <returns></returns>
  99. public static async Task<List<RefCgRes>> GetLatestAsync(int satCode, DateTime sigTime)
  100. {
  101. try
  102. {
  103. DateTime startdt = sigTime.AddMinutes(-15);
  104. DateTime enddt = sigTime.AddMinutes(15);
  105. using (RHDWContext db = new RHDWContext())
  106. {
  107. StringBuilder sb = new StringBuilder();
  108. sb.Append($"select * from RefCgRes where YbSnr!=0 and SatCode={satCode} ");
  109. sb.Append($" and SigTime>='{startdt:yyyy-MM-dd HH:mm:ss}' ");
  110. sb.Append($" and SigTime<='{enddt:yyyy-MM-dd HH:mm:ss}' ");
  111. string sql = sb.ToString();
  112. var res = await db.Database.SqlQuery<RefCgRes>(sql).ToListAsync();
  113. return res;
  114. }
  115. }
  116. catch (Exception ex)
  117. {
  118. XdCxRhDW.Framework.LogHelper.Error($"获取卫星[{satCode}]--{sigTime:yyyyMMddHHmmss}时刻附近的参考参估结果出错!", ex);
  119. return null;
  120. }
  121. }
  122. public static double CalSigTimeDto(DateTime x, DateTime x0, DateTime x1, double y0, double y1)
  123. {
  124. // 线性插值公式: y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0))
  125. double y = y0 + (x - x0).TotalSeconds * ((y1 - y0) / (x1 - x0).TotalSeconds);
  126. if (y == double.NaN)
  127. {
  128. y = 0;
  129. }
  130. return y;
  131. }
  132. }
  133. }