using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DW5S.DTO; using DW5S.Repostory; using System.IO; using DW5S.Entity; using DW5S.WebApi; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.EntityFrameworkCore; namespace DW5S.App.Controllers { /// /// 结果查询相关接口 /// public class ResultController : BaseController { [Autowired] private readonly ILogger logger; [Autowired] private readonly UnitOfWork unitOfWork; /// /// 根据时间范围查询参估结果 /// /// 查询参数 /// /// [HttpPost] public async Task>> GetCgResByTimeRange(CgResQueryDto dto) { try { var query = unitOfWork.Reps().AsQueryable(); query = query.Where(p => p.SigTime >= dto.BeginTime && p.SigTime <= dto.EndTime && p.TaskInfoID == dto.TaskInfoID); if (!dto.IncludeInvalidate) query = query.Where(p => p.PosLon != 999); if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0) query = query.Where(p => p.FreqUpHz == dto.TarFrequpHz.Value); var cgRes = await query.Include(p => p.CgRes).Select(t => t.CgRes).Include(t => t.StationRes).OrderByDescending(p => p.SigTime).ToListAsync(); List cgList = new List(); var listDto = MapCgDto(cgRes); cgList.AddRange(listDto); return Success(cgList); } catch (Exception ex) { string msg = $"参估结果时间范围查询异常.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}"; logger.LogError(ex, msg); return Error>("参估结果时间范围查询异常"); } } /// /// 获取指定任务的所有上行频点 /// /// 任务频点查询模型 /// 任务所有频点信息 /// [HttpPost] public async Task>> GetTaskFreqs(TaskFreqQueryDto dto) { try { var query = unitOfWork.Reps().AsQueryable(); var listFrequp = await query.Where(p => p.TaskInfoID == dto.TaskInfoID).Select(p => p.FreqUpHz).Distinct().ToListAsync(); var res = listFrequp.Select(p => new TaskFreqResDto() { FreqUpHz = p }).OrderBy(o => o.FreqUpHz).ToList(); return Success(res); } catch (Exception ex) { string msg = $"任务频点查询异常-任务编号:{dto.TaskInfoID}"; logger.LogError(ex, msg); return Error>("任务频点查询异常"); } } /// /// 获取所有执行中的任务 /// [HttpPost] public async Task>> GetRunningTasks() { try { var res = await unitOfWork.Reps().FindAsync(p => p.TaskState == EnumTaskState.Running); var resDto = res.Select(t => new TaskQueryResDto() { TaskID = t.Id, PosType = (EnumPosTypeDto)(int)t.PosType, TaskType = (EnumTaskTypeDto)(int)t.TaskType, }).ToList(); return Success(resDto); } catch (Exception ex) { string msg = $"查询执行中的任务异常"; logger.LogError(ex, msg); return Error>(msg); } } #region 定位结果查询接口 /// /// 根据时间范围查询定位结果 /// /// 查询参数 /// /// [HttpPost] public async Task>> GetPosResByTimeRange(PosRequestByTimeRangeDto dto) { var response = (await GetPosResByTimeRangeObsolete(dto)); if (response.code == 200) { var listDto = response.data?.Select(p => MapDto(p)).ToList(); return Success(listDto); } else { return Error>(response.msg); } } /// /// 查询最后X小时的的定位结果 /// /// 查询参数 /// /// [HttpPost] public async Task>> GetPosResByLastHours(PosRequestByLastRangeDto dto) { var response = (await GetPosResByLastHoursObsolete(dto)); if (response.code == 200) { var listDto = response.data?.Select(p => MapDto(p)).ToList(); return Success(listDto); } else { return Error>(response.msg); } } /// /// 根据时间范围查询定位结果(此方法内部调用) /// /// 查询参数 /// /// [HttpPost] [Obsolete] public async Task>> GetPosResByTimeRangeObsolete(PosRequestByTimeRangeDto dto) { try { var targets = await unitOfWork.Reps().GetAllAsync(); var query = unitOfWork.Reps().AsQueryable(); query = query.Where(p => p.SigTime >= dto.BeginTime && p.SigTime <= dto.EndTime && p.TaskInfoID == dto.TaskInfoID); if (!dto.IncludeInvalidate) query = query.Where(p => p.PosLon != 999); if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0) query = query.Where(p => p.FreqUpHz == dto.TarFrequpHz.Value); var posRes = await query.Include(p => p.CheckRes).OrderByDescending(p => p.SigTime).ToListAsync(); if (targets.Any()) { foreach (var itemPos in posRes) { if (itemPos.TargetInfoID > 0) { itemPos.TargetInfo = targets.FirstOrDefault(p => p.Id == itemPos.TargetInfoID); if (itemPos.TargetInfo != null && !string.IsNullOrWhiteSpace(itemPos.TargetInfo.TargeColor)) itemPos.ColorKey = itemPos.TargetInfo.TargeColor; } } } return Success(posRes); } catch (Exception ex) { string msg = $"定位结果时间范围查询异常.任务ID={dto.TaskInfoID},{dto.BeginTime:yyyyMMddHHmmss}-{dto.EndTime:yyyyMMddHHmmss}"; logger.LogError(ex, msg); return Error>("定位结果时间范围查询异常"); } } /// /// 查询最后X小时的的定位结果(此方法内部调用) /// /// 查询参数 /// /// [HttpPost] [Obsolete] public async Task>> GetPosResByLastHoursObsolete(PosRequestByLastRangeDto dto) { try { var targets = await unitOfWork.Reps().GetAllAsync(); var query = unitOfWork.Reps().AsQueryable(); query = query.Where(p => p.TaskInfoID == dto.TaskInfoID); if (!dto.IncludeInvalidate) { query = query.Where(p => p.PosLon != 999); } if (dto.TarFrequpHz != null && dto.TarFrequpHz > 0) { query = query.Where(p => p.FreqUpHz == dto.TarFrequpHz); } var max = await query.MaxAsync(p => (DateTime?)p.SigTime); if (max == null) return Success(new List()); DateTime min = max.Value.AddHours(-dto.Hours); var res = await GetPosResByTimeRangeObsolete(new PosRequestByTimeRangeDto() { TaskInfoID = dto.TaskInfoID, BeginTime = min, EndTime = max.Value, IncludeInvalidate = dto.IncludeInvalidate, TarFrequpHz = dto.TarFrequpHz, }); return res; } catch (Exception ex) { string msg = $"定位结果查询最新数据异常-任务编号:{dto.TaskInfoID},Hours:{dto.Hours}"; logger.LogError(ex, msg); return Error>("定位结果查询最新数据异常"); } } #endregion private PosResDto MapDto(PosRes res) { return new PosResDto() { ID = res.Id, FreqUpHz = res.FreqUpHz, SigTime = res.SigTime, TaskInfoID = res.TaskInfoID, TarName = res.TargetInfo?.TargetName, PosLon = res.PosLon, PosLat = res.PosLat, MirrLon = res.MirrLon, MirrLat = res.MirrLat, CheckType = res.CheckRes?.PosCheckType == null ? "" : res.CheckRes?.PosCheckType?.GetEnumDisplayName(), TargetState = (EnumTargetStateDto)res.TargetState, PosResType = (EnumPosResTypeDto)res.PosResType, Confidence = res.Confidence, CreateTime = res.CreateTime, }; } private List MapCgDto(List listCg) { List list = new List(); foreach (CgRes cgRes in listCg) { var dto = new CgResDto() { ID = cgRes.Id, TaskID = cgRes.TaskID, FreqUpHz = cgRes.TarFreqUp == null ? 0 : (long)(cgRes.TarFreqUp.Value), SigTime = cgRes.SigTime, Dto1 = cgRes.Dto1, Dfo1 = cgRes.Dfo1, Snr1 = cgRes.Snr1, Dto2 = cgRes.Dto2, Dfo2 = cgRes.Dfo2, Snr2 = cgRes.Snr2, DtoCdb = cgRes.DtoCdb, DfoCdb = cgRes.DfoCdb, SnrCdb = cgRes.SnrCdb, YbMainDto = cgRes.YbMainDto, YbMainDfo = cgRes.YbMainDfo, YbMainSnr = cgRes.YbMainSnr, YbAdja1Dto = cgRes.YbAdja1Dto, YbAdja1Dfo = cgRes.YbAdja1Dfo, YbAdja1Snr = cgRes.YbAdja1Snr, YbAdja2Dfo = cgRes.YbAdja2Dfo, YbAdja2Dto = cgRes.YbAdja2Dto, YbAdja2Snr = cgRes.YbAdja2Snr, TarFreqUp = cgRes.TarFreqUp, TarFreqDown = cgRes.TarFreqDown, RefFreqUp = cgRes.RefFreqUp, RefFreqDown = cgRes.RefFreqDown, MainCode = cgRes.MainCode, Adja1Code = cgRes.Adja1Code, Adja2Code = cgRes.Adja2Code, MainXlTime = cgRes.MainXlTime, Adja1XlTime = cgRes.Adja1XlTime, Adja2XlTime = cgRes.Adja2XlTime, MainX = cgRes.MainX, MainY = cgRes.MainY, MainZ = cgRes.MainZ, MainVx = cgRes.MainVx, MainVy = cgRes.MainVy, MainVz = cgRes.MainVz, Adja1X = cgRes.Adja1X, Adja1Y = cgRes.Adja1Y, Adja1Z = cgRes.Adja1Z, Adja1Vx = cgRes.Adja1Vx, Adja1Vy = cgRes.Adja1Vy, Adja1Vz = cgRes.Adja1Vz, Adja2X = cgRes.Adja2X, Adja2Y = cgRes.Adja2Y, Adja2Z = cgRes.Adja2Z, Adja2Vx = cgRes.Adja2Vx, Adja2Vy = cgRes.Adja2Vy, Adja2Vz = cgRes.Adja2Vz, SatTxLon = cgRes.StationRes.SatTxLon, SatTxLat = cgRes.StationRes.SatTxLat, CdbTxLon = cgRes.StationRes.CdbTxLon, CdbTxLat = cgRes.StationRes.CdbTxLat, CxLon = cgRes.StationRes.CxLon, CxLat = cgRes.StationRes.CxLat, RefLon = cgRes.StationRes.RefLon, RefLat = cgRes.StationRes.RefLat, CreateTime = cgRes.CreateTime, }; list.Add(dto); } return list; } } }