SampleEditor.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using DW5S.Entity;
  2. using DW5S.Repostory;
  3. using DW5S.ViewModel;
  4. using ExtensionsDev;
  5. using Microsoft.EntityFrameworkCore;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Windows.Forms;
  12. namespace DW5S.App.EditForms
  13. {
  14. public partial class SampleEditor : DevExpress.XtraEditors.XtraForm
  15. {
  16. public SampleViewModel info;
  17. private List<SampleViewModel> infos;
  18. public SampleEditor()
  19. {
  20. InitializeComponent();
  21. this.layoutControl1.UseDefault();
  22. txtSampleName.UseDoubleClickToSelectAll();
  23. txtSampleFile.UseDoubleClickToSelectAll();
  24. this.Text = "添加样本";
  25. info = new SampleViewModel();
  26. this.StartPosition = FormStartPosition.CenterParent;
  27. }
  28. public SampleEditor(SampleViewModel info)
  29. : this()
  30. {
  31. this.Text = "编辑样本";
  32. this.info = info;
  33. }
  34. private async void SampleEditor_Load(object sender, EventArgs e)
  35. {
  36. var reftxs = new List<RefTxViewModel>();
  37. var refsigs = new List<SigViewModel>();
  38. var unitOfWork = IocContainer.UnitOfWork;
  39. var res = await unitOfWork.Of<TxInfo>().FindAsync(t=>t.TxType== EnumTxType.Ref);
  40. reftxs.AddRange(res.To<List<RefTxViewModel>>());
  41. var refsigList = await unitOfWork.Of<SigInfo>().FindAsync(s => s.SigType == EnumSigType.Ref);
  42. refsigs.AddRange(refsigList.To<List<SigViewModel>>());
  43. this.searchLookRef.UseDefault().SetData(reftxs, displayField: nameof(RefTxViewModel.Name)).UseDoubleClickToSelectAll();
  44. this.txtRefSig.UseDefault().SetData(refsigs, displayField: nameof(SigViewModel.FreqDownDis)).UseDoubleClickToSelectAll();
  45. if (this.Text == "编辑样本" && info != null)
  46. {
  47. this.txtSampleName.EditValue = info.SampleName;
  48. this.txtFsHz.EditValue = info.Fs;
  49. this.txtStartSec.EditValue = info.StartSec;
  50. this.txtEndSec.EditValue = info.EndSec;
  51. this.searchLookRef.EditValue = reftxs.FirstOrDefault(r => r.Id == info.TxInfoID);
  52. this.txtRefSig.EditValue = refsigs.FirstOrDefault(s => s.Id == info.SigInfoID);
  53. this.txtSampleFile.EditValue = Path.Combine(info.SamplePath, info.SampleFileName);
  54. this.txtRmark.Text = info.Remark;
  55. }
  56. infos = new List<SampleViewModel>();
  57. var repsSample = unitOfWork.Of<SampleInfo>();
  58. var sampleres = await repsSample.GetAllAsync();
  59. infos.AddRange(sampleres.To<List<SampleViewModel>>());
  60. }
  61. private void btnCancel_Click(object sender, EventArgs e)
  62. {
  63. this.DialogResult = DialogResult.Cancel;
  64. }
  65. private async void btnOk_Click(object sender, EventArgs e)
  66. {
  67. try
  68. {
  69. dxErrorProvider.ClearErrors();
  70. string sampleName = txtSampleName.Text;
  71. if (string.IsNullOrWhiteSpace(sampleName))
  72. {
  73. dxErrorProvider.SetError(txtSampleName, "请输入样本名称");
  74. return;
  75. }
  76. if (searchLookRef.EditValue == null)
  77. {
  78. dxErrorProvider.SetError(searchLookRef, "请选择参考站");
  79. return;
  80. }
  81. if (txtRefSig.EditValue == null)
  82. {
  83. dxErrorProvider.SetError(txtRefSig, "请选择参考信号");
  84. return;
  85. }
  86. if (!double.TryParse(txtFsHz.Text, out double fsHz))
  87. {
  88. dxErrorProvider.SetError(txtFsHz, "采样率格式错误");
  89. return;
  90. }
  91. if (!int.TryParse(txtStartSec.Text, out int startSec))
  92. {
  93. dxErrorProvider.SetError(txtStartSec, "开始秒数格式错误");
  94. return;
  95. }
  96. if (!int.TryParse(txtEndSec.Text, out int endSec))
  97. {
  98. dxErrorProvider.SetError(txtEndSec, "结束秒数格式错误");
  99. return;
  100. }
  101. if (endSec <= startSec)
  102. {
  103. dxErrorProvider.SetError(txtEndSec, "结束秒数大于开始秒数");
  104. return;
  105. }
  106. var unitOfWork = IocContainer.UnitOfWork;
  107. var settings =await unitOfWork.Of<SysSetings>().FirstOrDefaultAsync();
  108. if (string.IsNullOrEmpty(settings.SampleDirectory))
  109. {
  110. DxHelper.MsgBoxHelper.ShowError($"系统设置中输入样本存储目录");
  111. return;
  112. }
  113. if (!Directory.Exists(settings.SampleDirectory))
  114. {
  115. DxHelper.MsgBoxHelper.ShowError($"系统设置中的样本存储目录不存在");
  116. return;
  117. }
  118. string sampleFile = txtSampleFile.Text;
  119. if (string.IsNullOrEmpty(sampleFile))
  120. {
  121. dxErrorProvider.SetError(txtSampleFile, "请输入样本文件");
  122. return;
  123. }
  124. if (!File.Exists(sampleFile))
  125. {
  126. dxErrorProvider.SetError(txtSampleFile, "样本文件不存在");
  127. return;
  128. }
  129. if (infos.Any(i => i.Id != info.Id && i.SampleName == sampleName))
  130. {
  131. DxHelper.MsgBoxHelper.ShowError($"样本名称[{sampleName}]已经存在!");
  132. return;
  133. }
  134. string fileName = Path.GetFileName(sampleFile);
  135. try
  136. {
  137. string destfile = Path.Combine(settings.SampleDirectory, fileName);
  138. if (!sampleFile.Equals(destfile))
  139. {
  140. if (File.Exists(destfile))
  141. {
  142. File.Delete(destfile);
  143. }
  144. File.Copy(sampleFile, destfile);
  145. }
  146. }
  147. catch (Exception ex)
  148. {
  149. IocContainer.Logger.Error(ex,$"移动样本文件到样本存储目录{settings.SampleDirectory}失败");
  150. DxHelper.MsgBoxHelper.ShowError($"移动样本文件到样本存储目录{settings.SampleDirectory}失败");
  151. return;
  152. }
  153. var refinfo = (searchLookRef.EditValue as RefTxViewModel);
  154. var siginfo = (txtRefSig.EditValue as SigViewModel);
  155. info.SampleName = sampleName;
  156. info.Fs = fsHz;
  157. info.StartSec = startSec;
  158. info.EndSec = endSec;
  159. info.TxInfoID = refinfo.Id;
  160. info.RefTxInfo = refinfo.To<TxInfo>();
  161. info.SigInfoID = siginfo.Id;
  162. info.SigInfo = siginfo.To<SigInfo>();
  163. info.SampleFileName = fileName;
  164. info.SamplePath = settings.SampleDirectory;
  165. info.Remark = txtRmark.Text;
  166. this.DialogResult = DialogResult.OK;
  167. }
  168. catch (Exception ex)
  169. {
  170. IocContainer.Logger.Error(ex,"编辑样本信息出错");
  171. DxHelper.MsgBoxHelper.ShowError("编辑样本信息出错");
  172. }
  173. }
  174. private void btnSampleFile_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
  175. {
  176. OpenFileDialog dlg = new OpenFileDialog();
  177. dlg.Title = "文件选择";
  178. dlg.Multiselect = false;
  179. if (dlg.ShowDialog() == DialogResult.OK)
  180. {
  181. txtSampleFile.Text = dlg.FileName;
  182. }
  183. }
  184. }
  185. }