XlCalculateForm.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraTreeList.Data;
  3. using ExtensionsDev;
  4. using PosResAnalysis;
  5. using System;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. using System.ComponentModel;
  9. using System.Data;
  10. using System.Data.Entity;
  11. using System.Drawing;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using XdCxRhDW.Dto;
  17. using XdCxRhDW.App.Model;
  18. using XdCxRhDW.Entity;
  19. using XdCxRhDW.Repostory;
  20. namespace XdCxRhDW.App.CorTools
  21. {
  22. public partial class XlCalculateForm : DevExpress.XtraEditors.XtraForm
  23. {
  24. List<ModelSatEphRes> listEph = new List<ModelSatEphRes>();
  25. //选择卫星执行星历推算
  26. public XlCalculateForm()
  27. {
  28. InitializeComponent();
  29. this.itemTle.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  30. }
  31. //选择TLE执行星历推算
  32. public XlCalculateForm(string tle)
  33. : this()
  34. {
  35. this.Text = "星历推算";
  36. this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
  37. this.IconOptions.ShowIcon = false;
  38. this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
  39. this.txtTle.Text = tle;
  40. this.itemTle.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  41. this.itemSat.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  42. }
  43. private async void XlCalculateForm_Load(object sender, EventArgs e)
  44. {
  45. List<SatInfo> list1 = new List<SatInfo>();//配置的卫星
  46. using (MySqlContext db = new MySqlContext())
  47. {
  48. list1 =await db.SatInfos.OrderBy(p => p.SatCode).ToListAsync();
  49. }
  50. var list2 =await XlRepository.GetAllSatAsync();//所有卫星
  51. list2.RemoveAll(p => list1.Select(t => t.SatCode).Contains(p.SatCode));
  52. list2.InsertRange(0, list1);
  53. this.txtSat.UseDefault().SetData(list2, nameof(SatInfo.Sat)).UseDoubleClickToSelectAll();
  54. gridControl.UseDefault(listEph).UseMultiSelect().UseRowNumber();
  55. txtStartTime.UseDefault().UseDoubleClickToSelectAll();
  56. txtEndTime.UseDefault().UseDoubleClickToSelectAll();
  57. layoutControl1.BestFit();
  58. }
  59. private async void btnCalculate_Click(object sender, EventArgs e)
  60. {
  61. if (itemSat.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always)
  62. {
  63. if (txtSat.EditValue == null)
  64. {
  65. DxHelper.MsgBoxHelper.ShowError("请选择卫星");
  66. return;
  67. }
  68. }
  69. else
  70. {
  71. if (string.IsNullOrWhiteSpace(txtTle.Text))
  72. {
  73. DxHelper.MsgBoxHelper.ShowError("请选择双行根数");
  74. return;
  75. }
  76. }
  77. if (string.IsNullOrWhiteSpace(txtStartTime.Text))
  78. {
  79. DxHelper.MsgBoxHelper.ShowError("请填写开始时间");
  80. return;
  81. }
  82. int spanSeconds = 1;
  83. if (txtEndTime.DateTime != txtStartTime.DateTime)
  84. {
  85. if (!string.IsNullOrEmpty(txtEndTime.Text) && !int.TryParse(txtSpanSeconds.Text, out spanSeconds))
  86. {
  87. DxHelper.MsgBoxHelper.ShowError("推算间隔非数字");
  88. return;
  89. }
  90. }
  91. var startTime = Convert.ToDateTime(txtStartTime.EditValue);
  92. var endTime = Convert.ToDateTime(txtEndTime.EditValue);
  93. if (!string.IsNullOrEmpty(txtStartTime.Text) && !string.IsNullOrEmpty(txtEndTime.Text))
  94. {
  95. if (endTime < startTime)
  96. {
  97. DxHelper.MsgBoxHelper.ShowError("开始时间不能大于结束时间");
  98. return;
  99. }
  100. if ((endTime - startTime).TotalHours > 24)
  101. {
  102. DxHelper.MsgBoxHelper.ShowError("开始时间和结束时间不能相差超过24小时");
  103. return;
  104. }
  105. }
  106. listEph.Clear();
  107. try
  108. {
  109. if (!string.IsNullOrEmpty(txtEndTime.Text) && !string.IsNullOrEmpty(txtSpanSeconds.Text))
  110. {
  111. var XlCalcMultDto = new XlCalcMultDto()
  112. {
  113. startTime = startTime,
  114. endTime = endTime,
  115. spanSeconds = spanSeconds,
  116. };
  117. if (itemTle.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always)
  118. {
  119. XlCalcMultDto.tleStr = txtTle.Text.Trim();
  120. }
  121. else
  122. {
  123. var sat = txtSat.EditValue as SatInfo;
  124. var xlInfo = await XlRepository.GetLatestAsync(sat.SatCode, startTime);
  125. XlCalcMultDto.tleStr = xlInfo.TwoLine;
  126. }
  127. var ephRes = await HttpHelper.PostRequestAsync<List<ModelSatEphRes>>(SysConfig.GetUrl("Xl/CalcMult"), XlCalcMultDto);
  128. if (ephRes.code == 200)
  129. {
  130. listEph.AddRange(ephRes.data);
  131. gridView.RefreshData();
  132. }
  133. else
  134. {
  135. DxHelper.MsgBoxHelper.ShowError(ephRes.msg);
  136. }
  137. }
  138. else
  139. {
  140. var XlCalcDto = new XlCalcDto()
  141. {
  142. SigTime = txtStartTime.DateTime,
  143. };
  144. if (itemTle.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always)
  145. {
  146. XlCalcDto.tleStr = txtTle.Text;
  147. }
  148. else
  149. {
  150. var sat = txtSat.EditValue as SatInfo;
  151. var xlInfo = await XlRepository.GetLatestAsync(sat.SatCode, XlCalcDto.SigTime);
  152. XlCalcDto.tleStr = xlInfo.TwoLine;
  153. }
  154. var ephRes = await HttpHelper.PostRequestAsync<ModelSatEphRes>(SysConfig.GetUrl("Xl/Calc"), XlCalcDto);
  155. if (ephRes.code == 200)
  156. {
  157. listEph.Add(ephRes.data);
  158. gridView.RefreshData();
  159. }
  160. else
  161. {
  162. DxHelper.MsgBoxHelper.ShowError(ephRes.msg);
  163. }
  164. }
  165. }
  166. catch (TaskCanceledException)
  167. {
  168. XdCxRhDW.Framework.LogHelper.Warning("星历推算Http接口调用超时");
  169. DxHelper.MsgBoxHelper.ShowInfo("星历推算Http接口调用超时");
  170. }
  171. catch (Exception ex)
  172. {
  173. XdCxRhDW.Framework.LogHelper.Error("星历推算异常", ex);
  174. DxHelper.MsgBoxHelper.ShowError("星历推算异常");
  175. }
  176. }
  177. }
  178. }