StationEditor.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. using DW5S.Entity;
  2. using DW5S.Repostory;
  3. using DW5S.ViewModel;
  4. using DxHelper;
  5. using ExtensionsDev;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.Linq;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using XdCxRhDW5S.ViewModel;
  13. namespace DW5S.App.EditForms
  14. {
  15. public partial class StationEditor : DevExpress.XtraEditors.XtraForm
  16. {
  17. public AdCardViewModel info;
  18. public List<AdChannelViewModel> AdChItems = new List<AdChannelViewModel>();
  19. public List<AdChannelViewModel> DeleteChItems = new List<AdChannelViewModel>();
  20. private List<AdCardViewModel> infos;
  21. public StationEditor()
  22. {
  23. InitializeComponent();
  24. this.layoutControl1.UseDefault();
  25. this.Text = "添加采集";
  26. info = new AdCardViewModel();
  27. this.StartPosition = FormStartPosition.CenterParent;
  28. cbTriggerMode.Properties.AddEnum<EnumAdTriggerMode>();
  29. cbClockerType.Properties.AddEnum<EnumAdClockType>();
  30. cbClockerType.EditValue = EnumAdClockType.In;
  31. cbTriggerMode.EditValue = EnumAdTriggerMode.In;
  32. this.txtClockFreq.EditValue = 100;
  33. this.txtDdcFreq.EditValue = 70;
  34. this.txtMutil.EditValue = 1;
  35. this.txtStorePath.EditValue = "E:\\data";
  36. this.txtStationAddress.EditValue = "192.168.1.20:5001";
  37. this.checkEnable.Checked = true;
  38. grdChannelList.UseDefault(AdChItems).UseEmptyText("请添加采集通道").UseEdit()
  39. .HideColumn(nameof(AdChannelViewModel.Id))
  40. .UseBoolColumn(nameof(AdChannelViewModel.Enable), "启用", "禁用");
  41. }
  42. public StationEditor(AdCardViewModel info)
  43. : this()
  44. {
  45. this.Text = "编辑采集";
  46. this.info = info;
  47. this.AdChItems = info.AdChannels;
  48. }
  49. private async void CxEditor_Load(object sender, EventArgs e)
  50. {
  51. try
  52. {
  53. if (!this.DesignMode)
  54. {
  55. grdChannelList.UseSearchEditColumn(nameof(AdChannelViewModel.TxInfoID), GetAnts, displayField: nameof(RecTxViewModel.Name))
  56. .UseSearchEditColumn(nameof(AdChannelViewModel.SatInfoID), GetSats, displayField: nameof(SatViewModel.Sat));
  57. gvChannelList.Columns[nameof(AdChannelViewModel.ChNum)].OptionsColumn.AllowEdit = true;
  58. gvChannelList.Columns[nameof(AdChannelViewModel.CenterFreq)].OptionsColumn.AllowEdit = true;
  59. gvChannelList.Columns[nameof(AdChannelViewModel.SatInfoID)].OptionsColumn.AllowEdit = true;
  60. gvChannelList.Columns[nameof(AdChannelViewModel.TxInfoID)].OptionsColumn.AllowEdit = true;
  61. gvChannelList.Columns[nameof(AdChannelViewModel.Enable)].OptionsColumn.AllowEdit = true;
  62. gvChannelList.CellValueChanged += GvChannelList_CellValueChanged;
  63. }
  64. if (this.Text == "编辑采集" && info != null)
  65. {
  66. this.txtStationName.EditValue = info.Name;
  67. this.cbTriggerMode.EditValue = info.TriggerMode;
  68. this.cbTriggerMode.EditValue = info.TriggerMode;
  69. this.txtClockFreq.EditValue = info.ClockFreq;
  70. this.txtDdcFreq.EditValue = info.DdcFreq;
  71. this.txtMutil.EditValue = info.Mutil;
  72. this.txtStorePath.EditValue = info.StorePath;
  73. this.txtStationAddress.EditValue = info.Address;
  74. this.checkEnable.Checked = info.Enable;
  75. }
  76. var unitOfWork = IocContainer.UnitOfWork;
  77. infos = new List<AdCardViewModel>();
  78. var repsCx = unitOfWork.Of<AdCard>();
  79. var res = await repsCx.GetAllAsync();
  80. infos.AddRange(res.To<List<AdCardViewModel>>());
  81. this.grdChannelList.DataSource = AdChItems;
  82. this.gvChannelList.BestFitColumns();
  83. }
  84. catch (Exception ex)
  85. {
  86. string msg = "查询采集信息异常";
  87. IocContainer.Logger.Error(ex, msg);
  88. DxHelper.MsgBoxHelper.ShowError(msg);
  89. }
  90. }
  91. private void GvChannelList_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
  92. {
  93. if (e.Column.FieldName == nameof(AdChannelViewModel.ChNum))
  94. {
  95. var ChNum = (int)e.Value;
  96. if (AdChItems.Count(i => i.ChNum == ChNum) > 1)
  97. {
  98. DxHelper.MsgBoxHelper.ShowError($"采集通道[{ChNum}]已经存在!");
  99. return;
  100. }
  101. }
  102. }
  103. private async Task<List<RecTxViewModel>> GetAnts()
  104. {
  105. var unitOfWork = IocContainer.UnitOfWork;
  106. var repsRecTx = unitOfWork.Of<TxInfo>();
  107. var items = await repsRecTx.FindAsync(f => f.Enable == true, p => p.Name);
  108. var ss = items.To<List<RecTxViewModel>>();
  109. return ss;
  110. }
  111. private async Task<List<SatViewModel>> GetSats()
  112. {
  113. var unitOfWork = IocContainer.UnitOfWork;
  114. var reps = unitOfWork.Of<SatInfo>();
  115. var res = await reps.GetAllAsync();
  116. return res.OrderBy(s => s.SatName).To<List<SatViewModel>>();
  117. }
  118. private void btnOk_Click(object sender, EventArgs e)
  119. {
  120. try
  121. {
  122. dxErrorProvider.ClearErrors();
  123. if (string.IsNullOrEmpty(txtStationName.Text))
  124. {
  125. dxErrorProvider.SetError(txtStationName, "采集名称不能为空");
  126. return;
  127. }
  128. if (infos.Any(i => i.Id != info.Id && i.Name == txtStationName.Text))
  129. {
  130. dxErrorProvider.SetError(txtStationName, $"采集[{txtStationName.Text}]已经存在!");
  131. return;
  132. }
  133. if (cbTriggerMode.EditValue == null)
  134. {
  135. dxErrorProvider.SetError(cbTriggerMode, $"请选择触发模式!");
  136. return;
  137. }
  138. if (cbClockerType.EditValue == null)
  139. {
  140. dxErrorProvider.SetError(cbClockerType, $"请选择时钟类型!");
  141. return;
  142. }
  143. if (!double.TryParse(txtClockFreq.Text, out double clockFreqMHz))
  144. {
  145. dxErrorProvider.SetError(txtClockFreq, $"时钟频率非有效数字!");
  146. return;
  147. }
  148. if (!double.TryParse(txtDdcFreq.Text, out double ddcFreqMHz))
  149. {
  150. dxErrorProvider.SetError(txtDdcFreq, $"DDC频率非有效数字!");
  151. return;
  152. }
  153. if (!int.TryParse(txtMutil.Text, out int mutil))
  154. {
  155. dxErrorProvider.SetError(txtMutil, $"抽取倍数非有效整形数字!");
  156. return;
  157. }
  158. if (string.IsNullOrEmpty(txtStorePath.Text.Trim()))
  159. {
  160. dxErrorProvider.SetError(txtStorePath, "存储路径不能为空");
  161. return;
  162. }
  163. if (string.IsNullOrEmpty(txtStationAddress.Text.Trim()))
  164. {
  165. dxErrorProvider.SetError(txtStationAddress, "采集服务地址不能为空");
  166. return;
  167. }
  168. bool checkSucess = info.AdChannels.Count == 0 ? true : false;
  169. string msg = "";
  170. foreach (var chitem in info.AdChannels)
  171. {
  172. if (chitem.ChNum == 0)
  173. {
  174. msg = $"采集通道号不能为空";
  175. checkSucess = false;
  176. break;
  177. }
  178. if (chitem.SatInfoID == 0)
  179. {
  180. msg = $"采集通道号[{chitem.ChNum}]对应卫星不能为空";
  181. checkSucess = false;
  182. break;
  183. }
  184. if (chitem.TxInfoID == 0)
  185. {
  186. msg = $"采集通道号[{chitem.ChNum}]对应天线不能为空";
  187. checkSucess = false;
  188. break;
  189. }
  190. checkSucess = true;
  191. }
  192. if (!checkSucess)
  193. {
  194. DxHelper.MsgBoxHelper.ShowError(msg);
  195. return;
  196. }
  197. info.Name = txtStationName.Text;
  198. info.TriggerMode = (EnumAdTriggerMode)cbTriggerMode.EditValue;
  199. info.ClockerType = (EnumAdClockType)cbClockerType.EditValue;
  200. info.ClockFreq = clockFreqMHz;
  201. info.DdcFreq = ddcFreqMHz;
  202. info.Mutil = mutil;
  203. info.StorePath = txtStorePath.Text.Trim();
  204. info.Address = txtStationAddress.Text.Trim();
  205. info.Enable = checkEnable.Checked;
  206. this.DialogResult = DialogResult.OK;
  207. }
  208. catch (Exception ex)
  209. {
  210. string msg = "编辑站点信息出错";
  211. IocContainer.Logger.Error(ex, msg);
  212. DxHelper.MsgBoxHelper.ShowError(msg);
  213. }
  214. }
  215. private void btnCancle_Click(object sender, EventArgs e)
  216. {
  217. this.DialogResult = DialogResult.Cancel;
  218. }
  219. private void GroupChannel_CustomButtonClick(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e)
  220. {
  221. string caption = e.Button.Properties.Caption;
  222. switch (caption)
  223. {
  224. case "添加":
  225. AdChItems.Add(new AdChannelViewModel() { CreateTime = DateTime.Now, UpdateTime = DateTime.Now });
  226. gvChannelList.RefreshData();
  227. break;
  228. case "删除":
  229. try
  230. {
  231. if (MsgBoxHelper.ShowConfirm("确定删除选中的采集通道吗?"))
  232. {
  233. var deletes = gvChannelList.DeleteSelectedRows<AdChannelViewModel>();
  234. DeleteChItems.AddRange(deletes);
  235. }
  236. }
  237. catch (Exception ex)
  238. {
  239. string msg = "删除采集通道信息异常";
  240. IocContainer.Logger.Error(ex, msg);
  241. DxHelper.MsgBoxHelper.ShowError(msg);
  242. }
  243. break;
  244. }
  245. }
  246. }
  247. }