| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- using DevExpress.Office.Internal;
- using DevExpress.PivotGrid.Criteria.Validation;
- using DevExpress.Utils.Win.Hook;
- using DevExpress.Xpo;
- using DevExpress.XtraEditors;
- using Ips.Eph.ResolveUtil;
- using Ips.Library.Basic;
- using Ips.Library.DxpLib;
- using Ips.Library.Entity;
- using Ips.Sps.Sats;
- using System;
- 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 System.Windows.Forms;
- namespace Ips.Sps.Ephs
- {
- public partial class EphImportForm : DevExpress.XtraEditors.XtraForm
- {
- public EphImportForm()
- {
- InitializeComponent();
- txtEphFiles.EnableDragDropFile();
- _session = new Session();
- }
- Session _session;
- private bool _imported;
- List<EphImportVo> _ephFileList;
- List<Sat> _allSatList;
- private void EphImportForm_Load(object sender, EventArgs e)
- {
- _allSatList = _session.Query<Sat>().Where(m => m.Enable).ToList();
- }
- private void txtEphFiles_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
- {
- bool isFile = e.Button.Caption == "文件";
- if (isFile)
- {
- string files = ToolDialog.OpenFile("", "星历文件", null, "所有文件 (*.*)|*.*", true);
- if (files.IsNullOrEmpty()) return;
- txtEphFiles.Text = files;
- }
- else
- {
- string folder = ToolDialog.OpenFolder("星历文件夹");
- txtEphFiles.Text = folder;
- }
- }
- private void txtEphFiles_EditValueChanged(object sender, EventArgs e)
- {
- BindImportList();
- }
- private void txtImportAll_CheckedChanged(object sender, EventArgs e)
- {
- BindImportList();
- }
- private void BindImportList()
- {
- string ephFileText = txtEphFiles.Text;
- if (ephFileText.IsNullOrWhitespace()) return;
- var ephFileList = ephFileText.Split(";", StringSplitOptions.RemoveEmptyEntries);
- _ephFileList = new List<EphImportVo>();
- foreach (var ephFile in ephFileList)
- {
- if (File.Exists(ephFile))
- {
- AddFileToList(ephFile);
- }
- else if (Directory.Exists(ephFile))
- {
- var files = Directory.GetFiles(ephFile, "*", SearchOption.AllDirectories);
- files.ForEach(m => AddFileToList(m));
- }
- }
- grdEphFiles.DataSource = _ephFileList;
- grdEphFiles.RefreshDataSource();
- }
- private void AddFileToList(string fullName)
- {
- if (!File.Exists(fullName)) return;
- string ext = Path.GetExtension(fullName).ToLower();
- if (ext == ".dat")
- {
- string fileName = Path.GetFileNameWithoutExtension(fullName);
- var index = fileName.IndexOf('_');
- if (index < 0) return;
- var satNumsStr = fileName.Substring(0, index);
- int satNum = 0;
- int.TryParse(satNumsStr, out satNum);
- if (!txtImportAll.Checked)
- {
- if (satNum == 0 || !_allSatList.Any(m => m.SatNum == satNum)) return;
- }
- _ephFileList.Add(new EphImportVo(fullName, EphType.High, satNum));
- }
- else if (ext == ".txt")
- {
- _ephFileList.Add(new EphImportVo(fullName, EphType.Tle));
- }
- }
- private void btnImport_Click(object sender, EventArgs e)
- {
- var ephFileList = grdEphFiles.DataSource as List<EphImportVo>;
- if (ephFileList.IsNullOrEmpty())
- {
- MsgHelper.ShowMsg("导入文件列表空!");
- return;
- }
- _imported = true;
- bgImportWorker.RunWorkerAsync(ephFileList);
- SetImportState(true);
- }
- private void SetImportState(bool importing)
- {
- btnImport.Enabled = txtEphFiles.Enabled = txtImportAll.Enabled = !importing;
- }
- private void bgImportWorker_DoWork(object sender, DoWorkEventArgs e)
- {
- var fileList = e.Argument as List<EphImportVo>;
- Parallel.For(0, fileList.Count, new ParallelOptions() { MaxDegreeOfParallelism = 10 }, i =>
- {
- if (e.Cancel) return;
- var fileItem = fileList[i];
- bgImportWorker.ReportProgress(i, ImportState.Import);
- try
- {
- ImportEph(fileItem);
- bgImportWorker.ReportProgress(i, ImportState.Success);
- }
- catch (Exception ex)
- {
- bgImportWorker.ReportProgress(i, ImportState.Fail);
- fileItem.Message = ex.Message;
- }
- });
- }
- private void bgImportWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- _ephFileList[e.ProgressPercentage].State = (ImportState)e.UserState;
- gvEphFiles.RefreshRowCell(gvEphFiles.GetRowHandle(e.ProgressPercentage), colState);
- }
- private void bgImportWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- SetImportState(false);
- }
- private void EphImportForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (bgImportWorker.IsBusy)
- {
- bool isYes = MsgHelper.ShowConfirm("正在导入星历文件,你确定要关闭吗?");
- if (isYes)
- {
- bgImportWorker.CancelAsync();
- e.Cancel = false;
- }
- else
- {
- e.Cancel = true;
- }
- }
- this.DialogResult = _imported ? DialogResult.OK : DialogResult.Cancel;
- }
- private void gvEphFiles_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
- {
- if (e.Column == colState)
- {
- var state = (ImportState)e.CellValue;
- switch (state)
- {
- case ImportState.Import:
- e.Appearance.BackColor = Color.Blue;
- e.Appearance.ForeColor = Color.White;
- break;
- case ImportState.Success:
- e.Appearance.BackColor = Color.Green;
- e.Appearance.ForeColor = Color.White;
- break;
- case ImportState.Fail:
- e.Appearance.BackColor = Color.Red;
- e.Appearance.ForeColor = Color.White;
- break;
- }
- }
- }
- private void ImportEph(EphImportVo ephItem)
- {
- switch (ephItem.EphType)
- {
- case EphType.Tle:
- ImportTle(ephItem.FullName);
- break;
- case EphType.High:
- ImportHigh(ephItem.FullName, ephItem.SatNum);
- break;
- }
- EphManager.Default.ClearCache();
- }
- private void ImportTle(string fileName)
- {
- var tles = TleResolveUtil.ParseFile(fileName);
- List<Eph> ephList = new List<Eph>();
- using var uow = new UnitOfWork();
- foreach (var item in tles)
- {
- var sat = _allSatList.Find(m => m.SatNum == item.getSatNumber());
- if (sat == null && txtImportAll.Checked == false) continue;
- Eph eph = new Eph(uow);
- eph.SatNum = item.getSatNumber();
- eph.SatName = sat?.Name ?? item.getName();
- eph.EphType = EphType.Tle;
- eph.StartTime = item.getEpochTime();
- eph.EndTime = eph.StartTime.AddYears(10);
- eph.Content = $"{item.Line1};{item.Line2}";
- ephList.Add(eph);
- }
- uow.CommitChanges();
- }
- private void ImportHigh(string fileName, int satNum)
- {
- var sat = _allSatList.Find(m => m.SatNum == satNum);
- if (sat == null && txtImportAll.Checked == false) return;
- using var uow = new UnitOfWork();
- Eph eph = new Eph(uow);
- eph.SatNum = sat?.SatNum ?? satNum;
- eph.SatName = sat?.Name ?? "";
- eph.EphType = EphType.High;
- eph.StartTime = DateTime.MinValue;
- eph.EndTime = DateTime.MinValue;
- eph.Content = Path.GetFileName(fileName);
- uow.CommitChanges();
- var ephList = HpeResolveUtil.ParseFile(fileName, satNum);
- DateTime? startTime = null, endTime = null;
- foreach (var res in ephList)
- {
- EphHigh item = new EphHigh(uow);
- item.EphId = eph.Id;
- item.EphTime = res.Time;
- item.X = res.X;
- item.Y = res.Y;
- item.Z = res.Z;
- startTime = startTime ?? res.Time;
- endTime = res.Time;
- }
- eph.StartTime = startTime ?? DateTime.MinValue;
- eph.EndTime = endTime ?? DateTime.MinValue;
- uow.CommitChanges();
- }
- }
- }
|