wyq 1 年之前
父节点
当前提交
0cb0411898
共有 2 个文件被更改,包括 70 次插入13 次删除
  1. 65 8
      XdCxRhDW.WebApi/Controllers/PosController.cs
  2. 5 5
      XdCxRhDw.Dto/PosResQueryDto.cs

+ 65 - 8
XdCxRhDW.WebApi/Controllers/PosController.cs

@@ -23,6 +23,7 @@ using XdCxRhDW.WebApi.Controllers;
 using System.ComponentModel.DataAnnotations;
 using System.Web.Caching;
 using XdCxRhDW.Repostory;
+using System.IO;
 
 namespace XdCxRhDW.App.WebAPI
 {
@@ -484,7 +485,7 @@ namespace XdCxRhDW.App.WebAPI
             }
             using (RHDWPartContext db = RHDWPartContext.GetContext(dto.SigTime))
             {
-               var xlInfoList = await XlCache.GetAllAsync();
+                var xlInfoList = await XlCache.GetAllAsync();
 
                 var mainXl = xlInfoList.Where(w => w.SatCode == dto.MainCode);
                 var minTime = mainXl.Min(m => Math.Abs((m.TimeBJ - dto.SigTime).TotalSeconds));
@@ -1089,7 +1090,7 @@ namespace XdCxRhDW.App.WebAPI
 
                 var mainXl = xlInfoList.Where(w => w.SatCode == dto.MainCode);
                 var minTime = mainXl.Min(m => Math.Abs((m.TimeBJ - dto.SigTime).TotalSeconds));
-                var xlInfo1 = mainXl.Where(w => Math.Abs((w.TimeBJ - dto.SigTime).TotalSeconds) == minTime).FirstOrDefault(); 
+                var xlInfo1 = mainXl.Where(w => Math.Abs((w.TimeBJ - dto.SigTime).TotalSeconds) == minTime).FirstOrDefault();
                 if (xlInfo1 == null)
                 {
                     Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
@@ -1312,7 +1313,7 @@ namespace XdCxRhDW.App.WebAPI
 
                 var mainXl = xlInfoList.Where(w => w.SatCode == dto.MainCode);
                 var minTime = mainXl.Min(m => Math.Abs((m.TimeBJ - dto.SigTime).TotalSeconds));
-                var xlInfo1 = mainXl.Where(w => Math.Abs((w.TimeBJ - dto.SigTime).TotalSeconds) == minTime).FirstOrDefault(); 
+                var xlInfo1 = mainXl.Where(w => Math.Abs((w.TimeBJ - dto.SigTime).TotalSeconds) == minTime).FirstOrDefault();
                 if (xlInfo1 == null)
                 {
                     Serilog.Log.Error($"未找到卫星[{dto.MainCode}]的双行根数星历");
@@ -1659,16 +1660,72 @@ namespace XdCxRhDW.App.WebAPI
         }
 
         /// <summary>
-        /// 查询定位结果(暂未实现)
+        /// 查询定位结果
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
         /// <exception cref="Exception"></exception>
-        [HttpGet]
-        public async Task<AjaxResult<PosResDto>> GetPosRes(PosResQueryDto dto)
+        [HttpPost]
+        public async Task<AjaxResult<List<PosResDto>>> GetPosRes([FromBody] PosResQueryDto dto)
         {
-            await Task.Delay(100);
-            return Error<PosResDto>("该功能暂未实现!");
+            List<PosResDto> posList = new List<PosResDto>();
+            try
+            {
+                DateTime start = dto.BeginTime;
+                DateTime end = dto.EndTime;
+                if (!Directory.Exists("DbPart")) return Success(posList);
+                var yearDirs = Directory.EnumerateDirectories(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart")).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列
+                foreach (var yearDir in yearDirs)
+                {
+                    //每一天的db文件,倒序排列
+                    var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4)));
+                    foreach (var dayFile in dayFiles)
+                    {
+                        using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile))
+                        {
+                            if (db.PosRes.Any(p => p.TaskInfoID == dto.TaskInfoID))
+                                end = await db.PosRes.Where(p => p.TaskInfoID == dto.TaskInfoID).MaxAsync(p => p.SigTime);
+                        }
+                        if (end != DateTime.MinValue)
+                        {
+                            goto skip;
+                        }
+                    }
+                }
+
+            skip:
+                if (end == DateTime.MinValue)
+                {
+                    return Success(posList);//没有数据不查询
+                }
+                if (end >= dto.EndTime)
+                {
+                    end = dto.EndTime;
+                }
+                start = dto.BeginTime;
+                DateTime endDay = new DateTime(end.Year, end.Month, end.Day);
+                DateTime startDay = new DateTime(start.Year, start.Month, start.Day);
+                while (endDay >= startDay)
+                {
+                    using (RHDWPartContext db = RHDWPartContext.GetContext(endDay))
+                    {
+                        var posRes = await db.PosRes
+                            .Where(w => w.SigTime >= start && w.SigTime <= end && w.TaskInfoID == dto.TaskInfoID)
+                            .OrderByDescending(o => o.SigTime).ToListAsync();
+                        posList.AddRange(posRes.Select(m => Map(m)));
+                    }
+                    endDay = endDay.AddDays(-1);
+                }
+                return Success(posList);
+
+            }
+
+            catch (Exception ex)
+            {
+                string err = $"定位查询任务编号:{dto.TaskInfoID},{dto.BeginTime:yyyy-MM-dd HH:mm:ss}-{dto.EndTime:yyyy-MM-dd HH:mm:ss}异常:{ex.Message}";
+                Serilog.Log.Error(err);
+                return Error<List<PosResDto>>(err);
+            }
         }
 
     }

+ 5 - 5
XdCxRhDw.Dto/PosResQueryDto.cs

@@ -12,6 +12,11 @@ namespace XdCxRhDw.Dto
     /// </summary>
     public class PosResQueryDto
     {
+        /// <summary>
+        /// 任务编号
+        /// </summary>
+        [RangeInt(0)]
+        public int TaskInfoID { get; set; }
         /// <summary>
         /// 开始时间
         /// </summary>
@@ -22,10 +27,5 @@ namespace XdCxRhDw.Dto
         /// </summary>
         public DateTime EndTime { get; set; }
 
-        /// <summary>
-        /// Test
-        /// </summary>
-        [Range(5, 10, ErrorMessage = "5-10")]
-        public int Test { get; set; }
     }
 }