using DxHelper; using ExtensionsDev; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Entity; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using XdCxRhDW.Dto; using XdCxRhDW.Repostory; using XdCxRhDW.Api; using DevExpress.XtraLayout.Utils; namespace XdCxRhDW.App.CorTools { public partial class DetectToolForm : DevExpress.XtraEditors.XtraForm { static readonly string inifile = Path.Combine(Application.StartupPath, "par.ini"); List gridSource = new List(); public DetectToolForm() { InitializeComponent(); this.gcCheckCgRes.UseDefault(gridSource, showScrollH: true); txtFileTime.UseDefault().UseDoubleClickToSelectAll(); gridView1.Columns[nameof(CafResultDto.file1)].MaxWidth = 300; gridView1.Columns[nameof(CafResultDto.file2)].MaxWidth = 300; } private void MainForm_Load(object sender, EventArgs e) { layoutControl1.BestFit(); this.gcCheckCgRes.UseRowNumber() .UseExportCsv() .UseExportXlsx() .AddContentMenu("时隙参估", SvgHelper.CreateSlotCg(), async data => { layoutControl1.Enabled = false; data.ForEach(t => { t.dt = null; t.df = null; t.snr = null; t.file2 = Path.GetFileName(btnFile2.Text); }); gridView1.RefreshData(); string file1 = null, file2 = null; try { file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl()); } catch (Exception ex) { layoutControl1.Enabled = true; XdCxRhDW.Framework.LogHelper.Error(ex.Message, ex); DxHelper.MsgBoxHelper.ShowError(ex.Message); return; } try { file2 = await HttpHelper.UploadFileAsync(btnFile2.Text, SysConfig.GetBaseUrl()); } catch (Exception ex) { layoutControl1.Enabled = true; XdCxRhDW.Framework.LogHelper.Error(ex.Message, ex); DxHelper.MsgBoxHelper.ShowError(ex.Message); return; } CpuCgMultiDto dto = null; try { dto = new CpuCgMultiDto() { file1 = file1, file2 = file2, samplingRate = double.Parse(tefs.Text) * 1e6, dtCenter = double.Parse(teCenter.Text), dtRange = double.Parse(teRange.Text), dfRange = int.Parse(teDfRange.Text), snrThreshold = int.Parse(teSnr.Text), }; dto.smpPositions.AddRange(data.Select(p => new SmpPosition() { smpStart = p.smpstart, smpCount = p.smplen, })); } catch (Exception ex) { layoutControl1.Enabled = true; XdCxRhDW.Framework.LogHelper.Error("CPU多时隙参估参数错误", ex); DxHelper.MsgBoxHelper.ShowError($"CPU多时隙参估参数错误"); return; } try { var result = await HttpHelper.PostRequestAsync>(SysConfig.GetUrl("DetectCg/CpuCgMultiCalc"), dto); if (result.code == 200) { for (int i = 0; i < result.data.Count; i++) { data[i].dt = result.data[i].Dt; data[i].df = result.data[i].Df; data[i].snr = result.data[i].Snr; data[i].tm = result.data[i].TimeMs; } this.gridView1.RefreshData(); WriteIni(); } else { DxHelper.MsgBoxHelper.ShowError(result.msg); XdCxRhDW.Framework.LogHelper.Error(result.msg); } } catch (TaskCanceledException) { DxHelper.MsgBoxHelper.ShowInfo($"CPU多时隙参估计算超时"); } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("CPU多时隙参估计算异常", ex); DxHelper.MsgBoxHelper.ShowError($"CPU多时隙参估计算异常"); } await HttpHelper.DeleteFileAsync(SysConfig.GetBaseUrl(), file1, file2); layoutControl1.Enabled = true; }, false) .AddContentMenu("信号识别", SvgHelper.CreateSigProc(), async data => { layoutControl1.Enabled = false; try { data.ForEach(t => { t.ModType = ""; t.ModRate = null; t.FfcHz = null; t.dt = null; t.df = null; t.snr = null; }); gridView1.RefreshData(); var file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl()); var smps = data.Select(p => new SmpPosition() { smpStart = p.smpstart, smpCount = p.smplen, }).ToList(); var dto = new SignalProcDto() { File = file1, Fs = (long)(Convert.ToDouble(tefs.Text) * 1e6), Smps = smps, }; var result = await HttpHelper.PostRequestAsync>(SysConfig.GetUrl("DetectCg/SignalProc"), dto); if (result.code == 200) { var resData = result.data; for (int i = 0; i < data.Count; i++) { data[i].ModType = resData[i].ModType.GetEnumDisplayName(); data[i].ModRate = resData[i].Rate; data[i].FfcHz = resData[i].Ffc; data[i].SigSnr = resData[i].Snr; } gridView1.RefreshData(); gridView1.BestFitColumns(); } else { XdCxRhDW.Framework.LogHelper.Error(result.msg); DxHelper.MsgBoxHelper.ShowError(result.msg); } await HttpHelper.DeleteFileAsync(SysConfig.GetBaseUrl(), file1); } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("信号识别异常", ex); } layoutControl1.Enabled = true; }, false) .UseClear(menuCaption: "清除表格"); this.btnFile1.UseChooseWaveFile((file, fsHz) => { if (fsHz > 0) tefs.Text = (fsHz / 1e6).ToString(); else tefs.Text = "0.096"; }).UseDoubleClickToSelectAll(); this.btnFile2.UseChooseFile().UseDoubleClickToSelectAll(); btnCheck.Enabled = !ckKY.Checked && !ckIBS.Checked && !chkDama.Checked ? false : true; ReadIni(); } private async void btnCheck_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text)) { return; } EnumSigCheckTypeDto dmcType = EnumSigCheckTypeDto.DAMA; if (ckKY.Checked) { dmcType |= EnumSigCheckTypeDto.Ky5758; } if (ckIBS.Checked) { dmcType |= EnumSigCheckTypeDto.IBS; } if (chkDama.Checked) { dmcType |= EnumSigCheckTypeDto.DAMA; } else { dmcType = dmcType & ~EnumSigCheckTypeDto.DAMA; } int v1 = (int)dmcType; int v2 = (int)dmcType - 1; bool mergeRes = false; if ((v1 & v2) != 0) //多选 { mergeRes = MsgBoxHelper.ShowConfirm("是否合并多个检测结果"); } DetectDto dto = new DetectDto(); dto.mergeRes = mergeRes; dto.dmcType = dmcType; layoutControl1.Enabled = false; gridSource.Clear(); try { dto.fsHz = double.Parse(tefs.Text) * 1e6; dto.band = double.Parse(txtBand.Text); dto.file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl()); var dmcResult = await HttpHelper.PostRequestAsync>(SysConfig.GetUrl("DetectCg/DetectCalc"), dto); if (dmcResult.code == 200) { foreach (var dmcItem in dmcResult.data) { DateTime? sigTime = null; colSigTime.Visible = false; if (!string.IsNullOrWhiteSpace(txtFileTime.Text)) { sigTime = txtFileTime.DateTime.AddSeconds(dmcItem.Start / dto.fsHz); colSigTime.Visible = true; } gridSource.Add(new CafResultDto() { file1 = Path.GetFileName(btnFile1.Text), //file2 = btnFile2.Text, smpstart = dmcItem.Start, smplen = dmcItem.Length, DmcType = dmcItem.DmcType, SigSnr = dmcItem.Snr, SigTime = sigTime, tm = dmcItem.TimeMs, //ModType = dmcItem.ModType, UserName = dmcItem.UserName, }); } } else { XdCxRhDW.Framework.LogHelper.Error(dmcResult.msg); DxHelper.MsgBoxHelper.ShowError(dmcResult.msg); } WriteIni(); } catch (TaskCanceledException) { DxHelper.MsgBoxHelper.ShowInfo($"信号检测超时"); } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("信号检测出错", ex); DxHelper.MsgBoxHelper.ShowError($"信号检测出错"); } await HttpHelper.DeleteFileAsync(SysConfig.GetBaseUrl(), dto.file1); gridView1.RefreshData(); gridView1.BestFitColumns(); layoutControl1.Enabled = true; } private async void btnCalc_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text, btnFile2.Text)) return; CpuCgDto xItem = new CpuCgDto(); layoutControl1.Enabled = false; try { xItem.file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl()); xItem.file2 = await HttpHelper.UploadFileAsync(btnFile2.Text, SysConfig.GetBaseUrl()); } catch (Exception ex) { layoutControl1.Enabled = true; XdCxRhDW.Framework.LogHelper.Error(ex.Message, ex); DxHelper.MsgBoxHelper.ShowError(ex.Message); return; } try { xItem.smpCount = double.Parse(teCount.Text); xItem.samplingRate = Convert.ToInt32(double.Parse(tefs.Text) * 1e6); xItem.dtCenter = int.Parse(teCenter.Text); xItem.dtRange = int.Parse(teRange.Text); xItem.dfRange = int.Parse(teDfRange.Text); xItem.smpStart = long.Parse(tePos.Text); xItem.snrThreshold = int.Parse(teSnr.Text); } catch (Exception ex) { layoutControl1.Enabled = true; XdCxRhDW.Framework.LogHelper.Error("CPU文件参估参数错误", ex); DxHelper.MsgBoxHelper.ShowError($"CPU文件参估参数错误"); return; } WriteIni(); gridSource.Clear(); try { var result = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("DetectCg/CpuCgCalc"), xItem); if (result.code == 200) { DateTime? sigTime = null; if (!string.IsNullOrWhiteSpace(txtFileTime.Text)) { sigTime = txtFileTime.DateTime.AddSeconds(xItem.smpStart / xItem.samplingRate); } gridSource.Add(new CafResultDto() { file1 = Path.GetFileName(btnFile1.Text), file2 = Path.GetFileName(btnFile2.Text), smpstart = result.data.Smpstart, smplen = result.data.Smplen, dt = result.data.Dt, df = result.data.Df, snr = result.data.Snr, tm = result.data.TimeMs, SigTime = sigTime, }); gridView1.FocusedRowHandle = gridSource.Count - 1; } else { XdCxRhDW.Framework.LogHelper.Error(result.msg); DxHelper.MsgBoxHelper.ShowError(result.msg); } } catch (TaskCanceledException) { DxHelper.MsgBoxHelper.ShowInfo($"CPU文件参估计算超时"); } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("CPU文件参估出错", ex); DxHelper.MsgBoxHelper.ShowError("CPU文件参估出错"); } await HttpHelper.DeleteFileAsync(SysConfig.GetBaseUrl(), xItem.file1, xItem.file2); gridView1.RefreshData(); layoutControl1.Enabled = true; } private async void btnDrawImage_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text, btnFile2.Text)) return; layoutControl1.Enabled = false; try { CpuCgDto par = new CpuCgDto() { file1 = btnFile1.Text, file2 = btnFile2.Text, samplingRate = Convert.ToInt32(double.Parse(tefs.Text) * 1e6), dtCenter = int.Parse(teCenter.Text), dtRange = int.Parse(teRange.Text), dfRange = int.Parse(teDfRange.Text), smpStart = int.Parse(tePos.Text), smpCount = double.Parse(teCount.Text), snrThreshold = int.Parse(teSnr.Text), }; par.file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, SysConfig.GetBaseUrl()); par.file2 = await HttpHelper.UploadFileAsync(btnFile2.Text, SysConfig.GetBaseUrl()); var resp = await HttpHelper.PostRequestAsync>(SysConfig.GetUrl("DetectCg/DrawImage"), par); await HttpHelper.DeleteFileAsync(SysConfig.GetBaseUrl(), par.file1, par.file2); if (resp.code != 200) { XdCxRhDW.Framework.LogHelper.Error(resp.msg); DxHelper.MsgBoxHelper.ShowError(resp.msg); } else { if (resp.data != null && resp.data.Any()) { new CgImageForm(resp.data).ShowDialog(); } else { DxHelper.MsgBoxHelper.ShowInfo("无计算结果!"); } } WriteIni(); } catch (TaskCanceledException) { DxHelper.MsgBoxHelper.ShowInfo($"参估绘图超时"); } catch (Exception ex) { XdCxRhDW.Framework.LogHelper.Error("参估绘图失败", ex); DxHelper.MsgBoxHelper.ShowError($"参估绘图失败"); return; } finally { layoutControl1.Enabled = true; } } private void chkDama_CheckedChanged(object sender, EventArgs e) { lciStartPos.Visibility = lciSampleLength.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Never : LayoutVisibility.Always; btnCalc.Enabled = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? false : true; btnDrawImage.Enabled = btnCalc.Enabled; btnCheck.Enabled = !ckKY.Checked && !ckIBS.Checked && !chkDama.Checked ? false : true; itemBand.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Always : LayoutVisibility.Never; layoutControl1.BestFit(); } private void ckIBS_CheckedChanged(object sender, EventArgs e) { lciStartPos.Visibility = lciSampleLength.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Never : LayoutVisibility.Always; btnCalc.Enabled = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? false : true; btnDrawImage.Enabled = btnCalc.Enabled; btnCheck.Enabled = !ckKY.Checked && !ckIBS.Checked && !chkDama.Checked ? false : true; itemBand.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Always : LayoutVisibility.Never; layoutControl1.BestFit(); } private void ckKY_CheckedChanged(object sender, EventArgs e) { lciStartPos.Visibility = lciSampleLength.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Never : LayoutVisibility.Always; btnCalc.Enabled = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? false : true; btnDrawImage.Enabled = btnCalc.Enabled; btnCheck.Enabled = !ckKY.Checked && !ckIBS.Checked && !chkDama.Checked ? false : true; itemBand.Visibility = ckKY.Checked | ckIBS.Checked | chkDama.Checked ? LayoutVisibility.Always : LayoutVisibility.Never; layoutControl1.BestFit(); } private bool ValidateFiles(params string[] files) { foreach (var file in files) { if (string.IsNullOrWhiteSpace(file)) { DxHelper.MsgBoxHelper.ShowError($"请选择文件!"); return false; } if (!System.IO.File.Exists(file)) { DxHelper.MsgBoxHelper.ShowError($"文件【{file}】不存在"); return false; } } return true; } //读取配置 void ReadIni() { if (System.IO.File.Exists(inifile)) { try { var lines = System.IO.File.ReadAllLines(inifile); btnFile1.Text = lines[0]; btnFile2.Text = lines[1]; teCount.Text = lines[2]; tefs.Text = lines[3]; teCenter.Text = lines[4]; teRange.Text = lines[5]; teSnr.Text = lines[6]; tePos.Text = lines[7]; teDfRange.Text = lines[8]; txtFileTime.Text = lines[9]; txtBand.Text = lines[10]; } catch { } } } // 写入配置 void WriteIni() { var lines = new List { btnFile1.Text, btnFile2.Text, teCount.Text, tefs.Text, teCenter.Text, teRange.Text, teSnr.Text, tePos.Text, teDfRange.Text, txtFileTime.Text, txtBand.Text, }; System.IO.File.WriteAllLines(inifile, lines); } private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column.FieldName == nameof(CafResultDto.dt) || e.Column.FieldName == nameof(CafResultDto.df) || e.Column.FieldName == nameof(CafResultDto.snr)) { if (e.Value == null || e.Value.ToString() == "") e.DisplayText = "--"; //var val = gridView1.GetRowCellValue(e.ListSourceRowIndex, gridView1.Columns[nameof(CafResultDto.snr)]); //if (val != null && (double)val == 0) //{ // e.DisplayText = "--"; //} } else if (e.Column.FieldName == nameof(CafResultDto.ModType) || e.Column.FieldName == nameof(CafResultDto.ModRate) || e.Column.FieldName == nameof(CafResultDto.FfcHz)) { if (e.Value == null || e.Value.ToString() == "") e.DisplayText = "--"; } } } }