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"); private string baseUrl; List gridSource = new List(); public DetectToolForm() { InitializeComponent(); this.gcCheckCgRes.UseDefault(gridSource); txtFileTime.UseDefault().UseDoubleClickToSelectAll(); } private async 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; }); gridView1.RefreshData(); foreach (var item in data) { string file1 = null, file2 = null; try { file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, baseUrl + "File/UploadFileAsync"); } catch (Exception ex) { layoutControl1.Enabled = true; Serilog.Log.Error(ex, ex.Message); DxHelper.MsgBoxHelper.ShowError(ex.Message); break; } try { file2 = await HttpHelper.UploadFileAsync(btnFile2.Text, baseUrl + "File/UploadFileAsync"); } catch (Exception ex) { layoutControl1.Enabled = true; Serilog.Log.Error(ex, ex.Message); DxHelper.MsgBoxHelper.ShowError(ex.Message); break; } XcorrStruct xItem = null; try { xItem = new XcorrStruct() { file1 = file1, file2 = file2, smpCount = item.smplen, samplingRate = double.Parse(tefs.Text) * 1e6, dtCenter = double.Parse(teCenter.Text), dtRange = double.Parse(teRange.Text), dfRange = int.Parse(teDfRange.Text), smpStart = item.smpstart, snrThreshold = int.Parse(teSnr.Text) }; } catch (Exception ex) { Serilog.Log.Error(ex, "CPU时隙参估参数错误"); DxHelper.MsgBoxHelper.ShowError($"CPU时隙参估参数错误"); break; } try { var result = await HttpHelper.PostRequestAsync(baseUrl + "DetectCg/CpuCgCalc", xItem); if (result.code == 200) { item.dt = result.data.Dt; item.df = result.data.Df; item.snr = result.data.Snr; item.tm = result.data.TimeMs; this.gridView1.RefreshData(); } else { Serilog.Log.Error(result.msg); continue; } } catch { break; } } 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(); using (RHDWContext db = new RHDWContext()) { var res = await db.SysSetings.FirstOrDefaultAsync(); if (res != null) { this.baseUrl = $"http://{IpHelper.GetLocalIp()}:{res.HttpPort}/api/"; } } } private async void btnCheck_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text)) { return; } DmcType dmcType = DmcType.DAMA; if (ckKY.Checked) { dmcType |= DmcType.Ky5758; } if (ckIBS.Checked) { dmcType |= DmcType.IBS; } if (chkDama.Checked) { dmcType |= DmcType.DAMA; } else { dmcType = dmcType & ~DmcType.DAMA; } DetectDto dto = new DetectDto(); dto.dmcType = dmcType; layoutControl1.Enabled = false; gridSource.Clear(); try { try { dto.file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, baseUrl + "File/UploadFileAsync"); } catch (Exception ex) { Serilog.Log.Error(ex, ex.Message); DxHelper.MsgBoxHelper.ShowError(ex.Message); return; } dto.fsHz = double.Parse(tefs.Text) * 1e6; dto.band = double.Parse(txtBand.Text); var dmcResult = await HttpHelper.PostRequestAsync>(baseUrl + "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 CafResult() { file1 = btnFile1.Text, file2 = btnFile2.Text, smpstart = dmcItem.Start, smplen = dmcItem.Length, DmcType = dmcItem.DmcType, SigTime = sigTime, tm = dmcItem.TimeMs, ModType = dmcItem.ModType, UserName = dmcItem.UserName, }); } } else { Serilog.Log.Error(dmcResult.msg); DxHelper.MsgBoxHelper.ShowError(dmcResult.msg); } WriteIni(); } catch (Exception ex) { Serilog.Log.Error(ex, "信号检测出错"); DxHelper.MsgBoxHelper.ShowError($"信号检测出错"); } gridView1.RefreshData(); layoutControl1.Enabled = true; } private async void btnCalc_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text, btnFile2.Text)) return; XcorrStruct xItem = new XcorrStruct(); layoutControl1.Enabled = false; try { xItem.file1 = await HttpHelper.UploadFileAsync(btnFile1.Text, baseUrl + "File/UploadFileAsync"); xItem.file2 = await HttpHelper.UploadFileAsync(btnFile2.Text, baseUrl + "File/UploadFileAsync"); } catch (Exception ex) { layoutControl1.Enabled = true; Serilog.Log.Error(ex, ex.Message); 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; Serilog.Log.Error(ex, "CPU文件参估参数错误"); DxHelper.MsgBoxHelper.ShowError($"CPU文件参估参数错误"); return; } WriteIni(); gridSource.Clear(); try { var result = await HttpHelper.PostRequestAsync(baseUrl + "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 CafResult() { file1 = btnFile1.Text, file2 = 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 { Serilog.Log.Error(result.msg); DxHelper.MsgBoxHelper.ShowError(result.msg); } } catch (Exception ex) { Serilog.Log.Error(ex, "CPU文件参估出错"); DxHelper.MsgBoxHelper.ShowError("CPU文件参估出错"); } gridView1.RefreshData(); layoutControl1.Enabled = true; } private async void btnDrawImage_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text, btnFile2.Text)) return; XcorrStruct par = new XcorrStruct() { 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), }; FileInfo file1 = new FileInfo(par.file1); FileInfo file2 = new FileInfo(par.file2); long minFileLen = file1.Length > file2.Length ? file2.Length : file1.Length; int totalsamp = (int)(minFileLen / 4); if (par.smpCount == 0) { par.smpCount = (int)totalsamp - par.smpStart; } if (par.smpStart + par.smpCount > totalsamp) { par.smpCount = totalsamp - par.smpStart; } layoutControl1.Enabled = false; List res; try { res = await new XcorrUtils().DrawImage(par); WriteIni(); } catch (Exception ex) { Serilog.Log.Error(ex, "参估绘图失败"); DxHelper.MsgBoxHelper.ShowError($"参估绘图失败{ex.Message}"); return; } finally { layoutControl1.Enabled = true; } if (res != null && res.Any()) { new CgImageForm(res).ShowDialog(); } else { DxHelper.MsgBoxHelper.ShowInfo("无计算结果!"); } } 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; if (chkDama.Checked) { //ckIBS.Checked = false; //ckKY.Checked = false; UserName.Visible = true; modType.Visible = true; modRate.Visible = true; } else { UserName.Visible = false; modType.Visible = false; modRate.Visible = false; } 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; if (ckIBS.Checked) { //chkDama.Checked = false; //ckKY.Checked = false; itemBand.Visibility = LayoutVisibility.Always; } else { itemBand.Visibility = 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; //if (ckKY.Checked) //{ // ckIBS.Checked = false; // chkDama.Checked = false; //} 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)) { 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]; if (lines.Length > 10) txtBand.Text = lines[10]; } } // 写入配置 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(CafResult.dt) || e.Column.FieldName == nameof(CafResult.df) || e.Column.FieldName == nameof(CafResult.snr)) { var val = gridView1.GetRowCellValue(e.ListSourceRowIndex, gridView1.Columns[nameof(CafResult.snr)]); if (val != null && (double)val == 0) { e.DisplayText = "--"; } } else if (e.Column.FieldName == nameof(CafResult.ModType) || e.Column.FieldName == nameof(CafResult.ModRate)) { if (e.Value == null||e.Value.ToString()=="") e.DisplayText = "--"; } } } }