CtrlSignal.cs 9.5 KB

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