using DW5S.Entity; using DW5S.Repostory; using ExtensionsDev; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Windows.Forms; namespace DW5S.App.EditForms { public partial class SampleEditor : DevExpress.XtraEditors.XtraForm { public SampleInfo info; private List infos; public SampleEditor() { InitializeComponent(); this.layoutControl1.UseDefault(); txtSampleName.UseDoubleClickToSelectAll(); txtSampleFile.UseDoubleClickToSelectAll(); this.Text = "添加样本"; info = new SampleInfo(); this.StartPosition = FormStartPosition.CenterParent; } public SampleEditor(SampleInfo info) : this() { this.Text = "编辑样本"; this.info = info; } private async void SampleEditor_Load(object sender, EventArgs e) { var reftxs = new List(); var refsigs = new List(); var unitOfWork = IocContainer.UnitOfWork; var res = await unitOfWork.Of().FindAsync(t=>t.TxType== EnumTxType.Ref); reftxs.AddRange(res); var refsigList = await unitOfWork.Of().FindAsync(s => s.SigType == EnumSigType.Ref); refsigs.AddRange(refsigList); this.searchLookRef.UseDefault().SetData(reftxs, displayField: nameof(TxInfo.Name)).UseDoubleClickToSelectAll(); this.txtRefSig.UseDefault().SetData(refsigs, displayField: nameof(SigInfo.FreqDownDis)).UseDoubleClickToSelectAll(); if (this.Text == "编辑样本" && info != null) { this.txtSampleName.EditValue = info.SampleName; this.txtFsHz.EditValue = info.Fs; this.txtStartSec.EditValue = info.StartSec; this.txtEndSec.EditValue = info.EndSec; this.searchLookRef.EditValue = reftxs.FirstOrDefault(r => r.Id == info.RefTxInfoID); this.txtRefSig.EditValue = refsigs.FirstOrDefault(s => s.Id == info.SigInfoID); this.txtSampleFile.EditValue = Path.Combine(info.SamplePath, info.SampleFileName); this.txtRmark.Text = info.Remark; } infos = new List(); var repsSample = unitOfWork.Of(); var sampleres = await repsSample.GetAllAsync(); infos.AddRange(sampleres); } private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } private async void btnOk_Click(object sender, EventArgs e) { try { dxErrorProvider.ClearErrors(); string sampleName = txtSampleName.Text; if (string.IsNullOrWhiteSpace(sampleName)) { dxErrorProvider.SetError(txtSampleName, "请输入样本名称"); return; } if (searchLookRef.EditValue == null) { dxErrorProvider.SetError(searchLookRef, "请选择参考站"); return; } if (txtRefSig.EditValue == null) { dxErrorProvider.SetError(txtRefSig, "请选择参考信号"); return; } if (!double.TryParse(txtFsHz.Text, out double fsHz)) { dxErrorProvider.SetError(txtFsHz, "采样率格式错误"); return; } if (!int.TryParse(txtStartSec.Text, out int startSec)) { dxErrorProvider.SetError(txtStartSec, "开始秒数格式错误"); return; } if (!int.TryParse(txtEndSec.Text, out int endSec)) { dxErrorProvider.SetError(txtEndSec, "结束秒数格式错误"); return; } if (endSec <= startSec) { dxErrorProvider.SetError(txtEndSec, "结束秒数大于开始秒数"); return; } var unitOfWork = IocContainer.UnitOfWork; var settings =await unitOfWork.Of().FirstOrDefaultAsync(); if (string.IsNullOrEmpty(settings.SampleDirectory)) { DxHelper.MsgBoxHelper.ShowError($"系统设置中输入样本存储目录"); return; } if (!Directory.Exists(settings.SampleDirectory)) { DxHelper.MsgBoxHelper.ShowError($"系统设置中的样本存储目录不存在"); return; } string sampleFile = txtSampleFile.Text; if (string.IsNullOrEmpty(sampleFile)) { dxErrorProvider.SetError(txtSampleFile, "请输入样本文件"); return; } if (!File.Exists(sampleFile)) { dxErrorProvider.SetError(txtSampleFile, "样本文件不存在"); return; } if (infos.Any(i => i.Id != info.Id && i.SampleName == sampleName)) { DxHelper.MsgBoxHelper.ShowError($"样本名称[{sampleName}]已经存在!"); return; } string fileName = Path.GetFileName(sampleFile); try { string destfile = Path.Combine(settings.SampleDirectory, fileName); if (!sampleFile.Equals(destfile)) { if (File.Exists(destfile)) { File.Delete(destfile); } File.Copy(sampleFile, destfile); } } catch (Exception ex) { IocContainer.Logger.Error(ex,$"移动样本文件到样本存储目录{settings.SampleDirectory}失败"); DxHelper.MsgBoxHelper.ShowError($"移动样本文件到样本存储目录{settings.SampleDirectory}失败"); return; } var refinfo = (searchLookRef.EditValue as TxInfo); var siginfo = (txtRefSig.EditValue as SigInfo); info.SampleName = sampleName; info.Fs = fsHz; info.StartSec = startSec; info.EndSec = endSec; info.RefTxInfoID = refinfo.Id; info.RefTxInfo = refinfo; info.SigInfoID = siginfo.Id; info.SigInfo = siginfo; info.SampleFileName = fileName; info.SamplePath = settings.SampleDirectory; info.Remark = txtRmark.Text; this.DialogResult = DialogResult.OK; } catch (Exception ex) { IocContainer.Logger.Error(ex,"编辑样本信息出错"); DxHelper.MsgBoxHelper.ShowError("编辑样本信息出错"); } } private void btnSampleFile_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Title = "文件选择"; dlg.Multiselect = false; if (dlg.ShowDialog() == DialogResult.OK) { txtSampleFile.Text = dlg.FileName; } } } }