CtrlHome.cs 27 KB

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