XlCalculateForm.cs 7.2 KB

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