using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Net; using System.Text; using System.Threading.Tasks; using System.Web.Http; using XdCxRhDw.Dto; using XdCxRhDW.Core.Api; using XdCxRhDW.WebApi; using System.ComponentModel.DataAnnotations; namespace XdCxRhDW.WebApi.Controllers { /// /// 检测参估功能相关接口 /// public class DetectCgController : BaseController { /// /// CPU参估计算 /// /// CPU参估参数 /// [HttpPost] public async Task> CpuCgCalc(CpuCgDto dto) { dto.file1 = GetLocalFile(dto.file1); dto.file2 = GetLocalFile(dto.file2); XcorrStruct xItem = new XcorrStruct(); xItem.file1 = dto.file1; xItem.file2 = dto.file2; xItem.samplingRate = dto.samplingRate; xItem.dtCenter = dto.dtCenter; xItem.dtRange = dto.dtRange; xItem.dfRange = dto.dfRange; //样点数为0时计算所有样本 if (dto.smpCount == 0) { FileInfo file = new FileInfo(dto.file1); long totalsamp = file.Length / 4; xItem.smpCount = (int)totalsamp - dto.smpStart; } else { xItem.smpCount = dto.smpCount; } xItem.smpStart = dto.smpStart; xItem.snrThreshold = dto.snrThreshold; CpuCgResDto resDto = new CpuCgResDto(); try { XcorrUtils xcorr = new XcorrUtils(); var result = await xcorr.Calc(xItem); //开始计算 if (result.flag == -2) { Serilog.Log.Warning("参估计算内部错误!"); return Error("参估计算内部错误!"); } else if (result.flag == -1) { Serilog.Log.Warning("参估计算所需数据超出文件范围!"); return Error("参估计算所需数据超出文件范围!"); } resDto.TimeMs = result.tm; resDto.Smpstart = result.smpstart; resDto.Smplen = result.smplen; resDto.File1 = result.file1; resDto.File2 = result.file2; if (result.flag == 1) { resDto.Dt = result.dt.Value; resDto.Df = result.df.Value; resDto.Snr = result.snr.Value; } } catch (Exception ex) { return Error($"执行参估计算异常,{ex.Message}"); } finally { try { //删除计算得文件 File.Delete(dto.file1); File.Delete(dto.file2); } catch { } } return Success(resDto); } /// /// 信号检测(支持DAMA、IBS、能量检测) /// /// 信号检测参数 /// [HttpPost] public async Task>> DetectCalc(DetectDto dto) { dto.file1 = GetLocalFile(dto.file1); List list = new List(); try { XcorrUtils xcorr = new XcorrUtils(); var dmcResult = await xcorr.DmcCheckAsync(dto.file1, dto.fsHz, dto.dmcType); foreach (var dmcItem in dmcResult) { DetectResDto detectRes = new DetectResDto(dmcItem.Start, dmcItem.Length, dmcItem.UserName); detectRes.SigType = dmcItem.SigType; detectRes.File1 = dto.file1; detectRes.TimeMs = dmcItem.Times; list.Add(detectRes); } } catch (Exception ex) { return Error>($"执行检测计算异常,{ex.Message}"); } finally { try { //删除检测的文件 File.Delete(dto.file1); } catch { } } return Success>(list); } } }