using DevExpress.Data.Extensions; using DevExpress.Internal.WinApi.Windows.UI.Notifications; using DevExpress.Mvvm.Native; using DevExpress.XtraEditors; using DevExpress.XtraLayout.Utils; using DxHelper; using ExtensionsDev; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Entity; using System.Drawing; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Http.Results; using System.Web.UI.WebControls; using System.Windows.Forms; using XdCxRhDw.Dto; using XdCxRhDW.Core; using XdCxRhDW.Core.Api; using XdCxRhDW.Repostory.EFContext; namespace XdCxRhDW.App.CorTools { public partial class DetectToolForm : DevExpress.XtraEditors.XtraForm { static readonly string inifile = Path.Combine(Application.StartupPath, "par.ini"); private string baseUrl; BindingList gridSource = new BindingList(); public DetectToolForm() { InitializeComponent(); } private async void MainForm_Load(object sender, EventArgs e) { this.gridControl1.Init().UseExportXlsx().AddMenu("清除", SvgHelper.CreateClear(), () => { gridSource.Clear(); }); this.gridControl1.DataSource = gridSource; this.btnFile1.UseChooseFile(); this.btnFile2.UseChooseFile(); 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; } else if (ckIBS.Checked) { dmcType = DmcType.IBS; } else if (chkDama.Checked) { dmcType = DmcType.DAMA; } DetectDto dto = new DetectDto(); dto.dmcType = dmcType; layoutControl1.Enabled = false; await Task.Run(async () => { try { dto.file1 = HttpHelper.UploadFile(btnFile1.Text, baseUrl + "File/UploadFileAsync"); dto.fsHz = double.Parse(tefs.Text) * 1e6; var dmcResult =await HttpHelper.PostRequestAsync>(baseUrl + "DetectCg/DetectCalc", dto); if (dmcResult.code == 200) { gridSource.Clear(); foreach (var dmcItem in dmcResult.data) { gridSource.Add(new CafResult() { file1 = btnFile1.Text, file2 = btnFile2.Text, smpstart = dmcItem.Start, smplen = dmcItem.Length, tm = dmcItem.TimeMs, }); } } WriteIni(); } catch (Exception ex) { Serilog.Log.Error(ex, "信号检测出错"); DxHelper.MsgBoxHelper.ShowError($"信号检测出错"); } }); layoutControl1.Enabled = true; } private async void btnCalc_Click(object sender, EventArgs e) { if (!ValidateFiles(btnFile1.Text, btnFile2.Text)) return; List xcorrs = new List(); XcorrStruct xItem = new XcorrStruct(); layoutControl1.Enabled = false; await Task.Run(async () => { try { xItem.file1 = HttpHelper.UploadFile(btnFile1.Text, baseUrl + "File/UploadFileAsync"); xItem.file2 = HttpHelper.UploadFile(btnFile2.Text, baseUrl + "File/UploadFileAsync"); xItem.smpCount = int.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 = int.Parse(tePos.Text); xItem.snrThreshold = int.Parse(teSnr.Text); } catch (Exception ex) { Serilog.Log.Error(ex, "参数错误"); DxHelper.MsgBoxHelper.ShowError($"参数错误{ex.Message}"); return; } if (lciStartPos.Visibility == LayoutVisibility.Never) { foreach (var item in gridSource) { var corritem = xItem.Copy(); corritem.smpCount = (int)item.smplen; corritem.smpStart = (int)item.smpstart; xcorrs.Add(corritem); } } else { xcorrs.Add(xItem); } WriteIni(); gridSource.Clear(); foreach (var xcitem in xcorrs) { try { var result = await HttpHelper.PostRequestAsync(baseUrl + "DetectCg/CpuCgCalc", xcitem); if (result.code==200) { 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, }); gridView1.FocusedRowHandle = gridSource.Count - 1; } } catch (Exception ex) { Serilog.Log.Error(ex, "CPU参估出错"); continue; } } }); 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 = int.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().ShowDialog(); //} new Test().ShowDialog(); } 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; } } 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; } } 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; } } private bool ValidateFiles(params string[] files) { foreach (var file in files) { if (string.IsNullOrWhiteSpace(file)) { DxHelper.MsgBoxHelper.ShowError($"请选择文件!"); return false; } if (!File.Exists(file)) { DxHelper.MsgBoxHelper.ShowError($"文件【{file}】不存在"); return false; } } return true; } //读取配置 void ReadIni() { if (File.Exists(inifile)) { var lines = File.ReadAllLines(inifile); if (lines.Length != 9) { Serilog.Log.Error($"文件[{inifile}]读取失败,文件格式错误!"); return; } 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]; } } // 写入配置 void WriteIni() { var lines = new List { btnFile1.Text, btnFile2.Text, teCount.Text, tefs.Text, teCenter.Text, teRange.Text, teSnr.Text, tePos.Text, teDfRange.Text }; File.WriteAllLines(inifile, lines); } } }