CtrlSignal.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using DevExpress.Utils.About;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Documents;
  11. using System.Windows.Forms;
  12. using DW5S.App.EditForms;
  13. using DW5S.Entity;
  14. using DW5S.Repostory;
  15. using Serilog;
  16. using DevExpress.XtraBars.Customization;
  17. using DW5S.Service;
  18. using DW5S.ViewModel;
  19. namespace DW5S.App.UserControl
  20. {
  21. public partial class CtrlSignal : DevExpress.XtraEditors.XtraUserControl
  22. {
  23. readonly List<SigViewModel> listSigInfo = new List<SigViewModel>();
  24. readonly List<SigDelayViewModel> listSigDelay = new List<SigDelayViewModel>();
  25. public CtrlSignal()
  26. {
  27. InitializeComponent();
  28. }
  29. private async void CtrlSignal_Load(object sender, EventArgs e)
  30. {
  31. try
  32. {
  33. gridSignal.UseDefault(listSigInfo).UseMultiSelect().UseRowNumber()
  34. .UseAddAsync(AddSigInfo)
  35. .UseEditAsync<SigViewModel>(EditSigInfo)
  36. .UseDeleteAsync<SigViewModel>(DeleteSigInfo);
  37. gridSigDelay.UseDefault(listSigDelay).UseMultiSelect().UseRowNumber()
  38. .UseAddAsync(AddSigDelay)
  39. .UseEditAsync<SigDelayViewModel>(EditSigDelay)
  40. .UseDeleteAsync<SigDelayViewModel>(DeleteSigDelay);
  41. var unitOfWork = IocContainer.UnitOfWork;
  42. var repsSig = unitOfWork.Of<SigInfo>();
  43. var items = await repsSig.GetAllAsync(p => p.FreqUp);
  44. listSigInfo.AddRange(items.To<List<SigViewModel>>().OrderBy(i=>i.FreqDown));
  45. var repsFixedStation = unitOfWork.Of<FixedStation>();
  46. var fixedStations = await repsFixedStation.FindAsync(p => p.Enable);
  47. foreach (var item in listSigInfo)
  48. {
  49. if (fixedStations.Any(p => p.FreqUpHz == item.FreqUp))
  50. item.IsFixedStationFreq = "✔";
  51. else
  52. item.IsFixedStationFreq = "✖";
  53. }
  54. if (listSigInfo.Count > 0)
  55. {
  56. var repsSigDelay = unitOfWork.Of<SigDelay>();
  57. var repsSat = unitOfWork.Of<SatInfo>();
  58. var delayItems = await repsSigDelay.FindAsync(w => w.SigInfoId == listSigInfo.First().Id);
  59. var sats = await repsSat.GetAllAsync();
  60. foreach (var delayItem in delayItems)
  61. {
  62. SigDelay sigDelay = delayItem as SigDelay;
  63. var satInfo = sats.FirstOrDefault(f => f.SatCode == sigDelay.SatInfoSatCode);
  64. if (satInfo != null)
  65. {
  66. sigDelay.Sat = $"[{satInfo.SatLon}°]{satInfo.SatName}({satInfo.SatCode})";
  67. }
  68. listSigDelay.Add(sigDelay.To<SigDelayViewModel>());
  69. }
  70. }
  71. gridViewSignal.RefreshData();
  72. }
  73. catch (Exception ex)
  74. {
  75. IocContainer.Logger.Error(ex, "查询信号信息异常");
  76. DxHelper.MsgBoxHelper.ShowError("查询信号信息异常");
  77. }
  78. }
  79. private async Task<SigViewModel> AddSigInfo()
  80. {
  81. try
  82. {
  83. SigEditor frm = new SigEditor();
  84. if (frm.ShowDialog() != DialogResult.OK) return null;
  85. var addItem = frm.info;
  86. var unitOfWork = IocContainer.UnitOfWork;
  87. var repsSig = unitOfWork.Of<SigInfo>();
  88. var sig = await repsSig.AddOrUpdateAsync(addItem.To<SigInfo>());
  89. await unitOfWork.SaveAsync();
  90. addItem.Id = sig.Id;
  91. return addItem;
  92. }
  93. catch (Exception ex)
  94. {
  95. IocContainer.Logger.Error(ex, "添加信号信息异常");
  96. DxHelper.MsgBoxHelper.ShowError("添加信号信息异常");
  97. return null;
  98. }
  99. }
  100. private async Task<SigViewModel> EditSigInfo(SigViewModel editItem)
  101. {
  102. try
  103. {
  104. SigEditor frm = new SigEditor(editItem);
  105. if (frm.ShowDialog() != DialogResult.OK) return null;
  106. editItem = frm.info;
  107. var unitOfWork = IocContainer.UnitOfWork;
  108. var repsSig = unitOfWork.Of<SigInfo>();
  109. var sig = await repsSig.AddOrUpdateAsync(editItem.To<SigInfo>());
  110. await unitOfWork.SaveAsync();
  111. return editItem;
  112. }
  113. catch (Exception ex)
  114. {
  115. IocContainer.Logger.Error(ex, "保存信号信息异常");
  116. DxHelper.MsgBoxHelper.ShowError("保存信号信息异常");
  117. return null;
  118. }
  119. }
  120. private async Task<bool> DeleteSigInfo(List<SigViewModel> list)
  121. {
  122. try
  123. {
  124. var ids = list.Select(p => p.Id);
  125. var unitOfWork = IocContainer.UnitOfWork;
  126. var repsSigDelay = unitOfWork.Of<SigDelay>();
  127. var delayItems = await repsSigDelay.FindAsync(p => ids.Contains(p.SigInfoId));
  128. await repsSigDelay.DeleteAsync(delayItems);
  129. var repsSig = unitOfWork.Of<SigInfo>();
  130. await repsSig.DeleteAsync(list.To<List<SigInfo>>());
  131. await unitOfWork.SaveAsync();
  132. return true;
  133. }
  134. catch (Exception ex)
  135. {
  136. IocContainer.Logger.Error(ex, "删除信号信息异常");
  137. DxHelper.MsgBoxHelper.ShowError("删除信号信息异常");
  138. return false;
  139. }
  140. }
  141. private async Task<SigDelayViewModel> AddSigDelay()
  142. {
  143. try
  144. {
  145. var sigInfoId = gridViewSignal.GetFocusedRow() as SigViewModel;
  146. if (sigInfoId == null) return null;
  147. SigDelayEditor frm = new SigDelayEditor(sigInfoId.Id);
  148. if (frm.ShowDialog() != DialogResult.OK) return null;
  149. var addItem = frm.info;
  150. var unitOfWork = IocContainer.UnitOfWork;
  151. var repsSigDelay = unitOfWork.Of<SigDelay>();
  152. addItem.SigInfoId = sigInfoId.Id;
  153. var sigDelay = repsSigDelay.AddOrUpdateAsync(addItem.To<SigDelay>());
  154. await unitOfWork.SaveAsync();
  155. addItem.Id = sigDelay.Id;
  156. return addItem;
  157. }
  158. catch (Exception ex)
  159. {
  160. IocContainer.Logger.Error(ex, "添加转发延迟异常");
  161. DxHelper.MsgBoxHelper.ShowError("添加转发延迟异常");
  162. return null;
  163. }
  164. }
  165. private async Task<SigDelayViewModel> EditSigDelay(SigDelayViewModel editItem)
  166. {
  167. try
  168. {
  169. var sigInfoId = gridViewSignal.GetFocusedRow() as SigViewModel;
  170. if (sigInfoId == null) return null;
  171. SigDelayEditor frm = new SigDelayEditor(editItem, sigInfoId.Id);
  172. if (frm.ShowDialog() != DialogResult.OK) return null;
  173. editItem = frm.info;
  174. var unitOfWork = IocContainer.UnitOfWork;
  175. var repsSigDelay = unitOfWork.Of<SigDelay>();
  176. await repsSigDelay.AddOrUpdateAsync(editItem.To<SigDelay>());
  177. await unitOfWork.SaveAsync();
  178. return editItem;
  179. }
  180. catch (Exception ex)
  181. {
  182. IocContainer.Logger.Error(ex, "保存转发延迟异常");
  183. DxHelper.MsgBoxHelper.ShowError("保存转发延迟异常");
  184. return null;
  185. }
  186. }
  187. private async Task<bool> DeleteSigDelay(List<SigDelayViewModel> list)
  188. {
  189. try
  190. {
  191. var ids = list.Select(p => p.Id);
  192. var unitOfWork = IocContainer.UnitOfWork;
  193. var repsSigDelay = unitOfWork.Of<SigDelay>();
  194. await repsSigDelay.DeleteAsync(list.To<List<SigDelay>>());
  195. await unitOfWork.SaveAsync();
  196. return true;
  197. }
  198. catch (Exception ex)
  199. {
  200. IocContainer.Logger.Error(ex, "删除转发延迟异常");
  201. DxHelper.MsgBoxHelper.ShowError("删除转发延迟异常");
  202. return false;
  203. }
  204. }
  205. private async void gridViewSignal_FocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e)
  206. {
  207. listSigDelay.Clear();
  208. var sigInfoId = gridViewSignal.GetFocusedRow() as SigViewModel;
  209. if (sigInfoId == null) return;
  210. var unitOfWork = IocContainer.UnitOfWork;
  211. var repsSigDelay = unitOfWork.Of<SigDelay>();
  212. var repsSat = unitOfWork.Of<SatInfo>();
  213. var delayItems = await repsSigDelay.FindAsync(w => w.SigInfoId == sigInfoId.Id);
  214. var sats = await repsSat.GetAllAsync();
  215. foreach (var delayItem in delayItems)
  216. {
  217. SigDelay sigDelay = delayItem as SigDelay;
  218. var satInfo = sats.FirstOrDefault(f => f.SatCode == sigDelay.SatInfoSatCode);
  219. if (satInfo != null)
  220. {
  221. sigDelay.Sat = $"[{satInfo.SatLon}°]{satInfo.SatName}({satInfo.SatCode})";
  222. }
  223. listSigDelay.Add(sigDelay.To<SigDelayViewModel>());
  224. }
  225. gridViewSigDelay.RefreshData();
  226. }
  227. private async void gridViewSignal_DoubleClick(object sender, EventArgs e)
  228. {
  229. var editItem = gridViewSignal.GetFocusedRow() as SigViewModel;
  230. if (editItem == null) return;
  231. await EditSigInfo(editItem);
  232. }
  233. private async void gridViewSigDelay_DoubleClick(object sender, EventArgs e)
  234. {
  235. var editItem = gridViewSigDelay.GetFocusedRow() as SigDelayViewModel;
  236. if (editItem == null) return;
  237. await EditSigDelay(editItem);
  238. }
  239. }
  240. }