CtrlHome.cs 29 KB

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