SimulationCache.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 DataSimulation.Repostory.EFContext;
  9. using DataSimulation.Repostory.Model;
  10. namespace DataSimulation.Repostory
  11. {
  12. public static class SimulationCache
  13. {
  14. /// <summary>
  15. /// 获取数据库所有航迹
  16. /// </summary>
  17. /// <returns></returns>
  18. public static async Task<List<SimulationInfo>> GetAllAsync()
  19. {
  20. try
  21. {
  22. List<SimulationInfo> list = new List<SimulationInfo>();
  23. var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
  24. if (!Directory.Exists(dir)) return list;
  25. var yearDirs = Directory.EnumerateDirectories(dir).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列
  26. foreach (var yearDir in yearDirs)
  27. {
  28. //每一天的db文件,倒序排列
  29. var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4)));
  30. foreach (var dayFile in dayFiles)
  31. {
  32. using (SimulationPartContext db = SimulationPartContext.GetContext(dayFile))
  33. {
  34. list.AddRange(await db.SimulationInfos.ToListAsync());
  35. }
  36. }
  37. }
  38. return list;
  39. }
  40. catch (Exception ex)
  41. {
  42. Serilog.Log.Error(ex, "加载仿真航迹信息异常");
  43. return null;
  44. }
  45. }
  46. /// <summary>
  47. /// 根据编号查询航迹点
  48. /// </summary>
  49. /// <param name="simulationId">航迹编号</param>
  50. /// <param name="createTime">航迹创建时间</param>
  51. /// <returns></returns>
  52. public static async Task<List<SimulationPonit>> GetAllByIDAsync(long simulationId, DateTime createTime)
  53. {
  54. try
  55. {
  56. List<SimulationPonit> list = new List<SimulationPonit>();
  57. var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
  58. if (!Directory.Exists(dir)) return list;
  59. using (SimulationPartContext db = SimulationPartContext.GetContext(createTime))
  60. {
  61. var points = await db.SimulationPonits.Where(s => s.SimulationId == simulationId).ToListAsync();
  62. list.AddRange(points);
  63. }
  64. return list;
  65. }
  66. catch (Exception ex)
  67. {
  68. Serilog.Log.Error(ex, $"查询仿真航迹{simulationId}信息异常");
  69. return null;
  70. }
  71. }
  72. }
  73. }