CtrlHome.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. using DevExpress.Mvvm.DataAnnotations;
  2. using DevExpress.Utils;
  3. using DevExpress.Utils.Design;
  4. using DevExpress.Utils.Drawing;
  5. using DevExpress.Utils.Svg;
  6. using DevExpress.XtraEditors;
  7. using DevExpress.XtraEditors.ButtonsPanelControl;
  8. using DevExpress.XtraEditors.Controls;
  9. using DevExpress.XtraEditors.Repository;
  10. using DevExpress.XtraGrid.Columns;
  11. using DevExpress.XtraGrid.Views.Grid;
  12. using DevExpress.XtraGrid.Views.Grid.ViewInfo;
  13. using DxHelper;
  14. using XdCxRhDW.App.EFContext;
  15. using XdCxRhDW.App.Model;
  16. using System;
  17. using System.Collections.Generic;
  18. using System.ComponentModel;
  19. using System.ComponentModel.DataAnnotations;
  20. using System.ComponentModel.DataAnnotations.Schema;
  21. using System.Data;
  22. using System.Drawing;
  23. using System.Linq;
  24. using System.Security.Cryptography;
  25. using System.Text;
  26. using System.Threading.Tasks;
  27. using System.Windows.Forms;
  28. using XdCxRhDW.App.EditForms;
  29. using System.Data.Entity;
  30. using DevExpress.XtraBars.Customization;
  31. using System.Reflection;
  32. using System.Net.Sockets;
  33. using System.Net;
  34. using DevExpress.XtraCharts.Native;
  35. using System.Threading;
  36. using XdCxRhDW.Dto;
  37. using XdCxRhDW.App.Api;
  38. using System.Windows.Controls;
  39. using XdCxRhDW.App.WebAPI;
  40. using Microsoft.Owin.Hosting;
  41. using XdCxRhDW.App.App.Properties;
  42. using System.Web.Http;
  43. namespace XdCxRhDW.App.UserControl
  44. {
  45. public partial class CtrlHome : DevExpress.XtraEditors.XtraUserControl
  46. {
  47. List<TaskInfo> list = new List<TaskInfo>();
  48. public CtrlHome()
  49. {
  50. InitializeComponent();
  51. gridHomeTask.Init();
  52. gridHomePosRes.Init().UseMultiSelect().UseRowNumber();
  53. mapControl1.UseDefalutOptions()
  54. //.UseCluster()//定位点使用内置聚合
  55. .UseClearAll()
  56. .UseDistanceLine()
  57. .UseMarkDot()
  58. .UseExportImg()
  59. .UseExportXlsx()
  60. .UseExportCsv()
  61. .UseDrawRect(rect =>
  62. {
  63. (double startLon, double startLat, double centerLon, double centerLat, double endLon, double endLat, double lonRange, double latRange) = rect;
  64. });
  65. }
  66. private async void GridView1_FocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e)
  67. {
  68. var tsk = (e.Row as TaskInfo);
  69. var btnEdit = (layoutControlGroup1.CustomHeaderButtons[1] as GroupBoxButton);
  70. var btnDel = (layoutControlGroup1.CustomHeaderButtons[2] as GroupBoxButton);
  71. btnDel.Enabled = btnEdit.Enabled = tsk.TaskState != EnumTaskState.Running;
  72. List<PosRes> listPos = new List<PosRes>();
  73. using (RHDWContext db = new RHDWContext())
  74. {
  75. var items = await db.PosRes.Where(p => p.TaskID == tsk.ID).OrderByDescending(p => p.SigTime).ToListAsync();
  76. listPos.AddRange(items);
  77. }
  78. this.gridHomePosRes.DataSource = listPos;
  79. mapControl1.SetPosDataSource(listPos.Where(p => p.PosLon <= 180), false);
  80. }
  81. private async void CtrlHome_Load(object sender, EventArgs e)
  82. {
  83. gridView1.FocusedRowObjectChanged += GridView1_FocusedRowObjectChanged;
  84. try
  85. {
  86. List<SatInfo> satList = new List<SatInfo>();
  87. List<TxInfo> txList = new List<TxInfo>();
  88. using (RHDWContext db = new RHDWContext())
  89. {
  90. var qq = db.TaskInfos.OrderByDescending(p => p.CreateTime).ToList();
  91. list.AddRange(qq);
  92. var runningList = await db.TaskInfos.Where(p => p.TaskState == EnumTaskState.Running).ToListAsync();
  93. foreach (var item in runningList)
  94. {
  95. item.TaskState = EnumTaskState.Stopped;
  96. }
  97. await db.SaveChangesAsync();
  98. var satres = db.SatInfos.OrderBy(p => p.SatName).OrderBy(p => p.SatName);
  99. satList.AddRange(await satres.ToListAsync());
  100. var txres = await db.TxInfos.ToListAsync();
  101. txList.AddRange(txres);
  102. }
  103. foreach (var sat in satList)
  104. {
  105. if (!sat.SatLon.HasValue) continue;
  106. mapControl1.Invoke(new Action(() =>
  107. {
  108. mapControl1.DrawFixedImg("sat", 10, sat.SatLon.Value, DxHelper.SvgHelper.CreateSat(), new Size(32, 32), $"{sat.Sat}\r\n");
  109. }));
  110. }
  111. foreach (var txitem in txList)
  112. {
  113. if ((txitem.Lon >= 180 || txitem.Lon <= 180) && txitem.Lat >= -90 || txitem.Lat <= 90)//画天线
  114. {
  115. mapControl1.Invoke(new Action(() =>
  116. {
  117. switch (txitem.TxType)
  118. {
  119. #warning 天线图片需要邹大哥给
  120. case EnumTxType.MainSat:
  121. mapControl1.DrawFixedImg("MainSatTx", txitem.Lat, txitem.Lon, DxHelper.SvgHelper.CreatePentagram(), new Size(32, 32), $"[{txitem.Name}]\r\n主星天线经度:{txitem.Lon}°\r\n主星天线纬度:{txitem.Lat}°\r\n");
  122. break;
  123. case EnumTxType.AdjaSat:
  124. mapControl1.DrawFixedImg("AdjaSatTx", txitem.Lat, txitem.Lon, DxHelper.SvgHelper.CreatePentagram(), new Size(32, 32), $"[{txitem.Name}]\r\n邻星天线经度:{txitem.Lon}°\r\n邻星天线纬度:{txitem.Lat}°\r\n");
  125. break;
  126. case EnumTxType.Cdb:
  127. mapControl1.DrawFixedImg("CdbStation", txitem.Lat, txitem.Lon, DxHelper.SvgHelper.CreatePentagram(), new Size(32, 32), $"[{txitem.Name}]\r\n超短站经度:{txitem.Lon}°\r\n超短站纬度:{txitem.Lat}°\r\n");
  128. break;
  129. case EnumTxType.Cx:
  130. mapControl1.DrawFixedImg("CxStation", txitem.Lat, txitem.Lon, DxHelper.SvgHelper.CreatePentagram(), new Size(32, 32), $"[{txitem.Name}]\r\n测向站经度:{txitem.Lon}°\r\n测向站纬度:{txitem.Lat}°\r\n");
  131. break;
  132. case EnumTxType.Ref:
  133. mapControl1.DrawFixedImg("RefStation", txitem.Lat, txitem.Lon, DxHelper.SvgHelper.CreatePentagram(), new Size(32, 32), $"参考站经度:{txitem.Lon}°\r\n参考站纬度:{txitem.Lat}°\r\n");
  134. break;
  135. default:
  136. break;
  137. }
  138. }));
  139. }
  140. }
  141. }
  142. catch (Exception ex)
  143. {
  144. Serilog.Log.Error(ex, "加载任务信息异常");
  145. DxHelper.MsgBoxHelper.ShowError("加载任务信息异常");
  146. }
  147. gridHomeTask.DataSource = list;
  148. gridView1.Columns["TaskName"].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;
  149. this.svgImageCollection1.Add("Stopped", SvgHelper.CreateCycle("#1E8B58"));
  150. this.svgImageCollection1.Add("Running", SvgHelper.CreateCycle("#2E8B57"));
  151. gridView1.CustomDrawCell += GridView1_CustomDrawCell;
  152. using (RHDWContext db = new RHDWContext())
  153. {
  154. var settings = await db.SysSetings.FirstOrDefaultAsync();
  155. if (settings == null)
  156. {
  157. DxHelper.MsgBoxHelper.ShowWarning($"请在系统设置中配置IP端口信息");
  158. return;
  159. }
  160. try
  161. {
  162. StartOptions options = new StartOptions();
  163. options.Urls.Add($"http://+:{settings.HttpPort}");
  164. httpServer = WebApp.Start<Startup>(options);
  165. }
  166. catch (Exception ex)
  167. {
  168. httpServer = null;
  169. Serilog.Log.Error(ex, "启动Http定位接口服务失败!");
  170. DxHelper.MsgBoxHelper.ShowWarning($"启动Http定位接口服务失败!");
  171. }
  172. }
  173. WaitHelper.CloseForm();
  174. }
  175. private void GridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
  176. {
  177. if (e.Column.FieldName == "TaskName" && (EnumTaskState)gridView1.GetRowCellValue(e.RowHandle, "TaskState") == EnumTaskState.Running)
  178. {
  179. var palette = SvgPaletteHelper.GetSvgPalette(this.LookAndFeel, ObjectState.Normal);
  180. e.Cache.DrawSvgImage(svgImageCollection1[1], new Rectangle(new Point(e.Bounds.X + 4, e.Bounds.Y + (e.Bounds.Height - 16) / 2), new Size(16, 16)), palette);
  181. Rectangle txtBounds = e.Bounds;
  182. txtBounds.Width -= 24;
  183. txtBounds.X += 24;
  184. e.Appearance.DrawString(e.Cache, e.DisplayText, txtBounds);
  185. e.Handled = true;
  186. }
  187. }
  188. //public void SetEnumColumnImage(GridView gv, string columnFieldName, object imageCollection)
  189. //{
  190. // var repositoryItemImageComboBoxStatus = new RepositoryItemImageEdit();
  191. // var col = gv.Columns[columnFieldName];
  192. // col.MaxWidth = 40;
  193. // repositoryItemImageComboBoxStatus.Images = imageCollection;
  194. // col.ColumnEdit = repositoryItemImageComboBoxStatus;
  195. //}
  196. private void toolTipController1_GetActiveObjectInfo(object sender, DevExpress.Utils.ToolTipControllerGetActiveObjectInfoEventArgs e)
  197. {
  198. GridHitInfo hitInfo = gridView1.CalcHitInfo(e.ControlMousePosition);
  199. if (hitInfo.RowHandle < 0 || hitInfo.Column == null || hitInfo.HitTest != GridHitTest.RowCell)
  200. {
  201. toolTipController1.HideHint();
  202. return;
  203. }
  204. if (hitInfo.Column.FieldName == "TaskName")
  205. {
  206. var state = (EnumTaskState)gridView1.GetRowCellValue(hitInfo.RowHandle, "TaskState");
  207. if (state == EnumTaskState.Running)
  208. e.Info = new ToolTipControlInfo(hitInfo.RowHandle, "执行中");
  209. }
  210. }
  211. private void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
  212. {
  213. if (gridView1.FocusedRowHandle < 0) return;
  214. var state = (EnumTaskState)gridView1.GetFocusedRowCellValue("TaskState");
  215. btnStart.Enabled = state == EnumTaskState.Stopped;
  216. btnStop.Enabled = state == EnumTaskState.Running;
  217. popupMenu1.ShowPopup(MousePosition);
  218. }
  219. private void gridView2_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
  220. {
  221. if (gridView2.FocusedRowHandle < 0) return;
  222. if (!gridView2.GetSelectedRows().Any())
  223. {
  224. btnDelPos.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
  225. }
  226. else
  227. {
  228. btnDelPos.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
  229. }
  230. popupMenu2.ShowPopup(MousePosition);
  231. }
  232. private async void layoutControlGroup1_CustomButtonClick(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e)
  233. {
  234. var txt = (e.Button as GroupBoxButton).Caption;
  235. if (txt == "新建任务")
  236. {
  237. try
  238. {
  239. TaskEditor frm = new TaskEditor();
  240. if (frm.ShowDialog() != DialogResult.OK) return;
  241. var addItem = frm.info;
  242. using (RHDWContext db = new RHDWContext())
  243. {
  244. if (await db.TaskInfos.AnyAsync(p => p.TaskName == addItem.TaskName))
  245. {
  246. DxHelper.MsgBoxHelper.ShowWarning("任务名称重复");
  247. return;
  248. }
  249. db.TaskInfos.Add(addItem);
  250. await db.SaveChangesAsync();
  251. }
  252. list.Insert(0, addItem);
  253. gridView1.RefreshData();
  254. gridView1.FocusedRowHandle = 0;
  255. }
  256. catch (Exception ex)
  257. {
  258. Serilog.Log.Error(ex, "保存任务异常");
  259. DxHelper.MsgBoxHelper.ShowError("保存任务异常");
  260. }
  261. }
  262. else if (txt == "编辑任务")
  263. {
  264. try
  265. {
  266. var editItem = gridView1.GetFocusedRow() as TaskInfo;
  267. TaskEditor frm = new TaskEditor(editItem);
  268. if (frm.ShowDialog() != DialogResult.OK) return;
  269. editItem = frm.info;
  270. using (RHDWContext db = new RHDWContext())
  271. {
  272. if (await db.TaskInfos.AnyAsync(p => p.ID != editItem.ID && p.TaskName == editItem.TaskName))
  273. {
  274. DxHelper.MsgBoxHelper.ShowWarning("任务名称重复");
  275. return;
  276. }
  277. var find = await db.TaskInfos.Where(p => p.ID == editItem.ID).FirstOrDefaultAsync();
  278. find.TaskName = editItem.TaskName;
  279. find.PosType = editItem.PosType;
  280. await db.SaveChangesAsync();
  281. }
  282. gridView1.RefreshData();
  283. }
  284. catch (Exception ex)
  285. {
  286. Serilog.Log.Error(ex, "保存任务异常");
  287. DxHelper.MsgBoxHelper.ShowError("保存任务异常");
  288. }
  289. }
  290. else
  291. {
  292. try
  293. {
  294. var tsk = gridView1.GetFocusedRow() as TaskInfo;
  295. if (tsk == null) return;
  296. if (!DxHelper.MsgBoxHelper.ShowConfirm($"删除任务[{tsk.TaskName}]?"))
  297. return;
  298. using (RHDWContext db = new RHDWContext())
  299. {
  300. var item = db.TaskInfos.FirstOrDefault(p => p.ID == tsk.ID);
  301. db.TaskInfos.Remove(item);
  302. db.SaveChanges();
  303. }
  304. gridView1.DeleteSelectedRows();
  305. }
  306. catch (Exception ex)
  307. {
  308. Serilog.Log.Error(ex, "删除任务异常");
  309. DxHelper.MsgBoxHelper.ShowError("删除任务异常");
  310. }
  311. }
  312. }
  313. IDisposable httpServer;
  314. TcpServer server;
  315. private async void btn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  316. {
  317. var tsk = gridView1.GetFocusedRow() as TaskInfo;
  318. if (e.Item.Caption == "启动任务")
  319. {
  320. try
  321. {
  322. using (RHDWContext db = new RHDWContext())
  323. {
  324. var find = await db.TaskInfos.FirstOrDefaultAsync(p => p.TaskState == EnumTaskState.Running && p.PosType == tsk.PosType);
  325. if (find != null)
  326. {
  327. var field = typeof(EnumPosType).GetField(Enum.GetName(typeof(EnumPosType), find.PosType));
  328. DxHelper.MsgBoxHelper.ShowWarning($"已经有一个[{field.GetCustomAttribute<DisplayAttribute>().Name}]任务正在执行,请先停止!");
  329. return;
  330. }
  331. var settings = await db.SysSetings.FirstOrDefaultAsync();
  332. if (settings == null)
  333. {
  334. DxHelper.MsgBoxHelper.ShowWarning($"请在系统设置中配置IP端口信息");
  335. return;
  336. }
  337. if (server == null)
  338. {
  339. server = new TcpServer();
  340. server.OnDataReceived += this.Server_OnDataReceived;
  341. server.Start(settings.Port);
  342. }
  343. if (httpServer == null)
  344. {
  345. try
  346. {
  347. StartOptions options = new StartOptions();
  348. options.Urls.Add($"http://+:{settings.HttpPort}");
  349. httpServer = WebApp.Start<Startup>(options);
  350. }
  351. catch (Exception ex)
  352. {
  353. Serilog.Log.Error(ex, "启动任务异常,Http定位接口服务启动失败");
  354. DxHelper.MsgBoxHelper.ShowError($"启动任务异常,Http定位接口服务启动失败");
  355. }
  356. }
  357. var item = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == tsk.ID);
  358. item.TaskState = EnumTaskState.Running;
  359. await db.SaveChangesAsync();
  360. tsk.TaskState = EnumTaskState.Running;
  361. Serilog.Log.Information($"用户启动了任务,ID={tsk.ID}");
  362. }
  363. }
  364. catch (Exception ex)
  365. {
  366. Serilog.Log.Error(ex, "启动任务异常");
  367. DxHelper.MsgBoxHelper.ShowError($"启动任务异常.{ex.Message}");
  368. }
  369. }
  370. else
  371. {
  372. try
  373. {
  374. using (RHDWContext db = new RHDWContext())
  375. {
  376. var item = await db.TaskInfos.FirstOrDefaultAsync(p => p.ID == tsk.ID);
  377. item.TaskState = EnumTaskState.Stopped;
  378. await db.SaveChangesAsync();
  379. if (!db.TaskInfos.Any(p => p.TaskState == EnumTaskState.Running))
  380. {
  381. server?.StopListening();
  382. server = null;
  383. }
  384. }
  385. tsk.TaskState = EnumTaskState.Stopped;
  386. Serilog.Log.Information($"用户停止了任务,ID={tsk.ID}");
  387. }
  388. catch (Exception ex)
  389. {
  390. Serilog.Log.Error(ex, "停止任务异常");
  391. DxHelper.MsgBoxHelper.ShowError($"停止任务异常.{ex.Message}");
  392. }
  393. }
  394. gridView1.RefreshData();
  395. var btnEdit = (layoutControlGroup1.CustomHeaderButtons[1] as GroupBoxButton);
  396. var btnDel = (layoutControlGroup1.CustomHeaderButtons[2] as GroupBoxButton);
  397. btnDel.Enabled = btnEdit.Enabled = tsk.TaskState != EnumTaskState.Running;
  398. }
  399. private void gridView1_CustomDrawEmptyForeground(object sender, DevExpress.XtraGrid.Views.Base.CustomDrawEventArgs e)
  400. {
  401. if (gridView1.RowCount == 0)
  402. {
  403. string txt = "点击+创建任务";
  404. var s = e.Appearance.CalcTextSize(e.Cache, txt, e.Bounds.Width).ToSize();
  405. var x = (e.Bounds.Width - s.Width) / 2;
  406. var y = (e.Bounds.Height - s.Height) / 2;
  407. //e.Appearance.DrawString(e.Cache, txt, new Rectangle(x,y,s.Width,s.Height));
  408. e.DrawHtml(htmlTemplate1);
  409. }
  410. }
  411. readonly Random r = new Random();
  412. private async void Server_OnDataReceived(byte[] data)
  413. {
  414. try
  415. {
  416. var msg = Encoding.UTF8.GetString(data);
  417. var dto = Newtonsoft.Json.JsonConvert.DeserializeObject<SendDto>(msg);
  418. if (dto == null) return;
  419. var sigTime = DateTime.Now;
  420. using (RHDWContext db = new RHDWContext())
  421. {
  422. var cgRes = db.CgRes.Add(new CgRes()
  423. {
  424. SigTime = sigTime,
  425. DtoSx = dto.SxDto * 1e6,
  426. DfoSx = 200 + r.Next(1, 5) + Math.Round(r.NextDouble(), 3),
  427. SnrSx = r.Next(18, 24) + Math.Round(r.NextDouble(), 1),
  428. DtoCdb = dto.XdDto * 1e6,
  429. DfoCdb = 600 + r.Next(1, 5) + Math.Round(r.NextDouble(), 3),
  430. SnrCdb = r.Next(22, 32) + Math.Round(r.NextDouble(), 1),
  431. YbMain = dto.MainYbDto * 1e6,
  432. YbAdja = dto.AdjaYbDto * 1e6,
  433. MainX = dto.MainX,
  434. MainY = dto.MainY,
  435. MainZ = dto.MainZ,
  436. AdjaX = dto.AdjaX,
  437. AdjaY = dto.AdjaY,
  438. AdjaZ = dto.AdjaZ,
  439. });
  440. var listTx = await db.TxInfos.ToListAsync();
  441. var cxRes = db.CxRes.Add(new CxRes()
  442. {
  443. SigTime = sigTime,
  444. Fx = dto.CxRes,
  445. });
  446. var tsk1X1D = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X1D1CX && p.TaskState == EnumTaskState.Running);
  447. var tsk2X1D = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.X2D1 && p.TaskState == EnumTaskState.Running);
  448. var tskRh = await db.TaskInfos.FirstOrDefaultAsync(p => p.PosType == EnumPosType.RH && p.TaskState == EnumTaskState.Running);
  449. if (tsk1X1D != null)
  450. {
  451. var res = PosApi.X1D1_POS(cgRes, listTx, cxRes);
  452. PosRes posRes = new PosRes()
  453. {
  454. SigTime = sigTime,
  455. TaskID = tsk1X1D.ID,
  456. CxResID = cxRes.ID,
  457. CgResID = cgRes.ID,
  458. TarName = "未知目标",
  459. TsName = "DAMA--56-115ms",
  460. PosLon = res[0],
  461. PosLat = res[1],
  462. MirrLon = res[3],
  463. MirrLat = res[4],
  464. };
  465. db.PosRes.Add(posRes);
  466. var currentTask = gridView1.GetFocusedRow() as TaskInfo;
  467. if (currentTask != null && currentTask.ID == tsk1X1D.ID)
  468. {
  469. var ds = this.gridHomePosRes.DataSource as List<PosRes>;
  470. ds.Insert(0, posRes);
  471. this.Invoke(new Action(() =>
  472. {
  473. gridView2.RefreshData();
  474. mapControl1.AddPosItem(posRes);
  475. }));
  476. }
  477. }
  478. if (tsk2X1D != null)
  479. {
  480. var res = PosApi.X2D1_POS(cgRes, listTx);
  481. PosRes posRes = new PosRes()
  482. {
  483. SigTime = sigTime,
  484. TaskID = tsk2X1D.ID,
  485. CxResID = cxRes.ID,
  486. CgResID = cgRes.ID,
  487. TarName = "未知目标",
  488. TsName = "DAMA-225-173ms",
  489. PosLon = res[0],
  490. PosLat = res[1],
  491. MirrLon = res[3],
  492. MirrLat = res[4],
  493. };
  494. db.PosRes.Add(posRes);
  495. var currentTask = gridView1.GetFocusedRow() as TaskInfo;
  496. if (currentTask.ID == tsk2X1D.ID)
  497. {
  498. var ds = this.gridHomePosRes.DataSource as List<PosRes>;
  499. ds.Insert(0, posRes);
  500. this.Invoke(new Action(() =>
  501. {
  502. gridView2.RefreshData();
  503. mapControl1.AddPosItem(posRes);
  504. }));
  505. }
  506. }
  507. if (tskRh != null)
  508. {
  509. var res = PosApi.RH_POS(cgRes, listTx, cxRes);
  510. PosRes posRes = new PosRes()
  511. {
  512. SigTime = sigTime,
  513. TaskID = tskRh.ID,
  514. CxResID = cxRes.ID,
  515. CgResID = cgRes.ID,
  516. TarName = "未知目标",
  517. TsName = "DAMA-738-109ms",
  518. PosLon = res[0],
  519. PosLat = res[1],
  520. MirrLon = res[3],
  521. MirrLat = res[4],
  522. };
  523. db.PosRes.Add(posRes);
  524. var currentTask = gridView1.GetFocusedRow() as TaskInfo;
  525. if (currentTask.ID == tskRh.ID)
  526. {
  527. var ds = this.gridHomePosRes.DataSource as List<PosRes>;
  528. ds.Insert(0, posRes);
  529. this.Invoke(new Action(() =>
  530. {
  531. gridView2.RefreshData();
  532. mapControl1.AddPosItem(posRes);
  533. }));
  534. }
  535. }
  536. await db.SaveChangesAsync();
  537. }
  538. }
  539. catch (Exception ex)
  540. {
  541. Serilog.Log.Error(ex, "接收到推送消息后处理异常");
  542. }
  543. }
  544. private async void btnDelPos_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  545. {
  546. try
  547. {
  548. var ids = gridView2.GetSelectedRows();
  549. using (RHDWContext db = new RHDWContext())
  550. {
  551. foreach (var id in ids)
  552. {
  553. var item = gridView2.GetRow(id) as PosRes;
  554. var delItem = await db.PosRes.Where(p => p.ID == item.ID).FirstOrDefaultAsync();
  555. if (delItem != null)
  556. {
  557. db.PosRes.Remove(delItem);
  558. mapControl1.DelPosItem<PosRes>(item);
  559. }
  560. }
  561. await db.SaveChangesAsync();
  562. }
  563. gridView2.DeleteSelectedRows();
  564. }
  565. catch (Exception ex)
  566. {
  567. Serilog.Log.Error(ex, "删除定位结果异常");
  568. DxHelper.MsgBoxHelper.ShowError("删除定位结果异常");
  569. }
  570. }
  571. private void gridView2_RowClick(object sender, RowClickEventArgs e)
  572. {
  573. var p = gridView2.GetFocusedRow() as PosRes;
  574. p.Selected = true;
  575. mapControl1.UpdatePosItem(p);
  576. }
  577. }
  578. }