using DevExpress.XtraEditors; using DevExpress.XtraTreeList.Data; using ExtensionsDev; using PosResAnalysis; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using DW5S.DTO; using DW5S.Entity; using DW5S.Repostory; using Serilog; using DW5S.Service; using DW5S.ViewModel; namespace DW5S.App.CorTools { public partial class XlCalculateForm : DevExpress.XtraEditors.XtraForm { List listEph = new List(); //选择卫星执行星历推算 public XlCalculateForm() { InitializeComponent(); this.itemTle.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; var unitOfWork = IocContainer.UnitOfWork; var list1 = unitOfWork.Of().GetAllAsync(p => p.SatCode).Result; var repsXl = unitOfWork.Of() as XlRepository; var list2 = repsXl.GetAllSat().Result.ToList();//所有卫星 list2.RemoveAll(p => list1.Select(t => t.SatCode).Contains(p.SatCode)); list2.InsertRange(0, list1); this.txtSat.UseDefault().SetData(list2, nameof(SatInfo.Sat)).UseDoubleClickToSelectAll(); } //选择TLE执行星历推算 public XlCalculateForm(string tle) : this() { this.Text = "星历推算"; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.IconOptions.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.txtTle.Text = tle; this.itemTle.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; this.itemSat.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; } private void XlCalculateForm_Load(object sender, EventArgs e) { gridControl.UseDefault(listEph).UseMultiSelect().UseRowNumber(); txtStartTime.UseDefault().UseDoubleClickToSelectAll(); txtEndTime.UseDefault().UseDoubleClickToSelectAll(); layoutControl1.BestFit(); } private async void btnCalculate_Click(object sender, EventArgs e) { if (itemSat.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always) { if (txtSat.EditValue == null) { DxHelper.MsgBoxHelper.ShowError("请选择卫星"); return; } } else { if (string.IsNullOrWhiteSpace(txtTle.Text)) { DxHelper.MsgBoxHelper.ShowError("请选择双行根数"); return; } } if (string.IsNullOrWhiteSpace(txtStartTime.Text)) { DxHelper.MsgBoxHelper.ShowError("请填写开始时间"); return; } int spanSeconds = 1; if (txtEndTime.DateTime != txtStartTime.DateTime) { if (!string.IsNullOrEmpty(txtEndTime.Text) && !int.TryParse(txtSpanSeconds.Text, out spanSeconds)) { DxHelper.MsgBoxHelper.ShowError("推算间隔非数字"); return; } } var startTime = Convert.ToDateTime(txtStartTime.EditValue); var endTime = Convert.ToDateTime(txtEndTime.EditValue); if (!string.IsNullOrEmpty(txtStartTime.Text) && !string.IsNullOrEmpty(txtEndTime.Text)) { if (endTime < startTime) { DxHelper.MsgBoxHelper.ShowError("开始时间不能大于结束时间"); return; } if ((endTime - startTime).TotalHours > 24) { DxHelper.MsgBoxHelper.ShowError("开始时间和结束时间不能相差超过24小时"); return; } } listEph.Clear(); try { var unitOfWork = IocContainer.UnitOfWork; var repsXl = unitOfWork.Of() as XlRepository; if (!string.IsNullOrEmpty(txtEndTime.Text) && !string.IsNullOrEmpty(txtSpanSeconds.Text)) { var XlCalcMultDto = new XlCalcMultDto() { startTime = startTime, endTime = endTime, spanSeconds = spanSeconds, }; if (itemTle.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always) { XlCalcMultDto.tleStr = txtTle.Text.Trim(); } else { var sat = txtSat.EditValue as SatInfo; var xlInfo = await repsXl.GetLatestAsync(sat.SatCode, startTime); XlCalcMultDto.tleStr = xlInfo.TwoLine; } var ephRes = await HttpHelper.PostRequestAsync>(SysConfig.GetUrl("Xl/CalcMult"), XlCalcMultDto); if (ephRes.code == 200) { listEph.AddRange(ephRes.data); gridView.RefreshData(); } else { DxHelper.MsgBoxHelper.ShowError(ephRes.msg); } } else { var XlCalcDto = new XlCalcDto() { SigTime = txtStartTime.DateTime, }; if (itemTle.Visibility == DevExpress.XtraLayout.Utils.LayoutVisibility.Always) { XlCalcDto.tleStr = txtTle.Text; } else { var sat = txtSat.EditValue as SatInfo; var xlInfo = await repsXl.GetLatestAsync(sat.SatCode, XlCalcDto.SigTime); XlCalcDto.tleStr = xlInfo.TwoLine; } var ephRes = await HttpHelper.PostRequestAsync(SysConfig.GetUrl("Xl/Calc"), XlCalcDto); if (ephRes.code == 200) { listEph.Add(ephRes.data); gridView.RefreshData(); } else { DxHelper.MsgBoxHelper.ShowError(ephRes.msg); } } } catch (TaskCanceledException) { string msg = "星历推算Http接口调用超时"; IocContainer.Logger.Warning(msg); DxHelper.MsgBoxHelper.ShowWarning("星历推算Http接口调用超时"); } catch (Exception ex) { string msg = "星历推算异常"; IocContainer.Logger.Error(ex,msg); DxHelper.MsgBoxHelper.ShowError("星历推算异常"); } } } }