历史曲线的多日期合并

This commit is contained in:
2025-11-25 15:56:03 +08:00
parent 6bf51ba09b
commit b9085c4a93
6 changed files with 211 additions and 174 deletions

View File

@@ -15,8 +15,8 @@ using Prism.Events;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
@@ -224,15 +224,7 @@ namespace CapMachine.Wpf.ViewModels
set { _SelectedHistoryExp = value; RaisePropertyChanged(); }
}
private HistoryWorkCondFile _SelectedHistoryWorkCondFile;
/// <summary>
/// 选中的历史数据文件
/// </summary>
public HistoryWorkCondFile SelectedHistoryWorkCondFile
{
get { return _SelectedHistoryWorkCondFile; }
set { _SelectedHistoryWorkCondFile = value; RaisePropertyChanged(); }
}
/// <summary>
/// 当前搜索的工况条件
@@ -268,7 +260,13 @@ namespace CapMachine.Wpf.ViewModels
if (par is HistoryExp)
{
SelectedHistoryExp = par as HistoryExp;
ListHistoryWorkCondFile = SelectedHistoryExp!.HistoryWorkCondFiles!;
var files = SelectedHistoryExp!.HistoryWorkCondFiles!;
foreach (var f in files)
{
if (f != null) f.IsSelected = false;
}
ListHistoryWorkCondFile = files.ToList();
//ListHistoryWorkCondFile = ListHistoryWorkCondFile.ToList();
return;
}
if ((par as SelectionChangedEventArgs)!.AddedItems.Count == 0)
@@ -290,63 +288,18 @@ namespace CapMachine.Wpf.ViewModels
if (Selecteddata != null)
{
SelectedHistoryExp = Selecteddata;
ListHistoryWorkCondFile = SelectedHistoryExp.HistoryWorkCondFiles!;
}
}
private DelegateCommand<object> _FileGridSelectionChangedCmd;
/// <summary>
/// 试验信息选中行数据命令
/// </summary>
public DelegateCommand<object> FileGridSelectionChangedCmd
{
set
{
_FileGridSelectionChangedCmd = value;
}
get
{
if (_FileGridSelectionChangedCmd == null)
var files = SelectedHistoryExp.HistoryWorkCondFiles!;
foreach (var f in files)
{
_FileGridSelectionChangedCmd = new DelegateCommand<object>((par) => FileGridSelectionChangedCmdMethod(par));
if (f != null) f.IsSelected = false;
}
return _FileGridSelectionChangedCmd;
ListHistoryWorkCondFile = files;
ListHistoryWorkCondFile = ListHistoryWorkCondFile.ToList();
}
}
private void FileGridSelectionChangedCmdMethod(object par)
{
if (par == null)
{
return;
}
if (par is HistoryWorkCondFile)
{
SelectedHistoryWorkCondFile = par as HistoryWorkCondFile;
return;
}
if ((par as SelectionChangedEventArgs)!.AddedItems.Count == 0)
{
return;
}
//先判断是否是正确的集合数据防止DataGrid的数据源刷新导致的触发事件
var Selecteddata = (par as SelectionChangedEventArgs)!.AddedItems[0] as HistoryWorkCondFile;
////选中的行数据
//var Selecteddata = (par as DataGrid)!.SelectedItem as HistoryExp;
////选中的列数据
//var selectedColumn = (par as DataGrid)!.CurrentColumn;
//SelectedIndex= ProParsHelper.GetIndexByName(selectedColumn);
//SelectedProStepDto = par as ProStepDto;
if (Selecteddata != null)
{
SelectedHistoryWorkCondFile = Selecteddata;
}
}
private DelegateCommand _FilterHistoryDataFileCmd;
/// <summary>
@@ -397,6 +350,48 @@ namespace CapMachine.Wpf.ViewModels
HasHeaderRecord = false,
};
private DelegateCommand<object> _SelectAllFilesCmd;
public DelegateCommand<object> SelectAllFilesCmd
{
set
{
_SelectAllFilesCmd = value;
}
get
{
if (_SelectAllFilesCmd == null)
{
_SelectAllFilesCmd = new DelegateCommand<object>((par) => SelectAllFilesCmdMethod(par));
}
return _SelectAllFilesCmd;
}
}
private void SelectAllFilesCmdMethod(object par)
{
bool isChecked = false;
if (par is bool b) { isChecked = b; }
else
{
var nb = par as bool?;
if (nb.HasValue) isChecked = nb.Value;
else
{
var sb = par as string;
if (!string.IsNullOrWhiteSpace(sb))
{
bool.TryParse(sb, out isChecked);
}
}
}
if (ListHistoryWorkCondFile == null) return;
foreach (var f in ListHistoryWorkCondFile)
{
if (f != null) f.IsSelected = isChecked;
}
// 触发刷新
ListHistoryWorkCondFile = ListHistoryWorkCondFile.ToList();
}
Stopwatch stopwatch = new Stopwatch();
private DelegateCommand _HistoryDataFileCmd;
@@ -424,118 +419,110 @@ namespace CapMachine.Wpf.ViewModels
/// </summary>
private void HistoryDataFileCmdMethod()
{
//SelectedHistoryWorkCondFile
if (SelectedHistoryExp != null && SelectedHistoryWorkCondFile != null)
{
CsvRecordModels = new List<CsvRecordModel>();
////第一次计时
stopwatch.Start(); //启动Stopwatch
if (!string.IsNullOrEmpty(SelectedHistoryWorkCondFile.FilePath))
{
if (File.Exists(SelectedHistoryWorkCondFile.FilePath))//是否存在文件
{
lock (ConfigService.CsvFileLock)
{
using (var reader = new StreamReader(SelectedHistoryWorkCondFile.FilePath))
using (var csv = new CsvReader(reader, CultureInfo.CurrentCulture))
{
csv.Context.RegisterClassMap<CsvRecordModelMap>();
//GetRecords<CsvRecordModel>().ToList();
CsvRecordModels.AddRange(csv.GetRecords<CsvRecordModel>().ToList());
}
}
}
else
{
System.Windows.MessageBox.Show("没有发现地址对应的文件");
}
}
else
{
System.Windows.MessageBox.Show("发现空的文件地址");
}
//数据加载完毕后进入到Chart曲线中
if (CsvRecordModels.Count > 0)
{
EventAggregator.GetEvent<HistoryDataToChartEvent>().Publish(new HistoryDataToChartMsg() { Machine = "History", Data = CsvRecordModels });
}
stopwatch.Stop(); //停止Stopwatch
Console.WriteLine("加载CSV数据耗时:{0}", stopwatch.Elapsed.TotalSeconds.ToString());
stopwatch.Reset();
IsLeftDrawerOpen = false;
}
else
if (SelectedHistoryExp == null)
{
System.Windows.MessageBox.Show("请选中后再操作", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
return;
}
var files = new List<HistoryWorkCondFile>();
if (ListHistoryWorkCondFile != null)
{
foreach (var f in ListHistoryWorkCondFile)
{
if (f != null && f.IsSelected)
{
files.Add(f);
}
}
}
#region
//整个试验工况一起加载数据
//if (SelectedHistoryExp != null && SelectedHistoryExp.HistoryWorkCondFiles != null)
//{
// CsvRecordModels = new List<CsvRecordModel>();
files = files
.Where(f => f != null)
.GroupBy(f => string.IsNullOrWhiteSpace(f.FilePath) ? $"ID:{f.Id}" : f.FilePath)
.Select(g => g.First())
.ToList();
// ////第一次计时
// stopwatch.Start(); //启动Stopwatch
if (files.Count == 0)
{
System.Windows.MessageBox.Show("请先在右侧勾选至少一个CSV文件", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
// foreach (var item in SelectedHistoryExp.HistoryWorkCondFiles)
// {
// if (!string.IsNullOrEmpty(item.FilePath))
// {
// if (File.Exists(item.FilePath))//是否存在文件
// {
// lock (ConfigService.CsvFileLock)
// {
// using (var reader = new StreamReader(item.FilePath))
// using (var csv = new CsvReader(reader, CultureInfo.CurrentCulture))
// {
// csv.Context.RegisterClassMap<CsvRecordModelMap>();
// //GetRecords<CsvRecordModel>().ToList();
CsvRecordModels = new List<CsvRecordModel>();
stopwatch.Start();
// CsvRecordModels.AddRange(csv.GetRecords<CsvRecordModel>().ToList());
// }
// }
var errors = new StringBuilder();
foreach (var f in files)
{
try
{
if (f == null) continue;
if (string.IsNullOrWhiteSpace(f.FilePath))
{
errors.AppendLine("发现空的文件地址");
continue;
}
if (!File.Exists(f.FilePath))
{
errors.AppendLine($"没有发现地址对应的文件: {f.FilePath}");
continue;
}
// }
// else
// {
// System.Windows.MessageBox.Show("没有发现地址对应的文件");
// }
// }
// else
// {
// System.Windows.MessageBox.Show("发现空的文件地址");
// }
// }
var rec = ReadCsvFile(f.FilePath);
if (rec != null && rec.Count > 0)
{
CsvRecordModels.AddRange(rec);
}
}
catch (Exception ex)
{
errors.AppendLine($"读取CSV失败: {ex.Message}");
}
}
// //数据加载完毕后进入到Chart曲线中
// if (CsvRecordModels.Count > 0)
// {
// EventAggregator.GetEvent<HistoryDataToChartEvent>().Publish(new HistoryDataToChartMsg() { Machine = "History", Data = CsvRecordModels });
// }
if (errors.Length > 0)
{
System.Windows.MessageBox.Show(errors.ToString(), "读取提示", MessageBoxButton.OK, MessageBoxImage.Warning);
}
// stopwatch.Stop(); //停止Stopwatch
// Console.WriteLine("加载CSV数据耗时:{0}", stopwatch.Elapsed.TotalSeconds.ToString());
// stopwatch.Reset();
if (CsvRecordModels.Count > 0)
{
CsvRecordModels = CsvRecordModels
.Where(r => r != null)
.OrderBy(r => r.CreateTime)
.ToList();
EventAggregator.GetEvent<HistoryDataToChartEvent>().Publish(new HistoryDataToChartMsg() { Machine = "History", Data = CsvRecordModels });
}
// IsLeftDrawerOpen = false;
//}
//else
//{
// System.Windows.MessageBox.Show("请选中后再操作", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
//}
stopwatch.Stop();
Console.WriteLine("加载CSV数据耗时:{0}", stopwatch.Elapsed.TotalSeconds.ToString());
stopwatch.Reset();
#endregion
IsLeftDrawerOpen = false;
}
private List<CsvRecordModel> ReadCsvFile(string filePath)
{
var result = new List<CsvRecordModel>();
lock (ConfigService.CsvFileLock)
{
using (var reader = new StreamReader(filePath, Encoding.UTF8))
using (var csv = new CsvReader(reader, CultureInfo.CurrentCulture))
{
csv.Context.RegisterClassMap<CsvRecordModelMap>();
var list = csv.GetRecords<CsvRecordModel>().ToList();
if (list != null && list.Count > 0)
{
// 过滤无效时间,避免排序异常
result = list.Where(r => r != null && r.CreateTime != default && r.CreateTime != DateTime.MinValue).ToList();
}
}
}
return result;
}
//ReportDataCmd
private DelegateCommand<object> _ReportDataCmd;