| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- using Dm.util;
- using Microsoft.Win32;
- using ProximaAnalizer.Helpers;
- using ScottPlot;
- using SqlSugar;
- using System.Collections.ObjectModel;
- using System.IO;
- using System.Reflection.Metadata.Ecma335;
- using System.Security.Claims;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls.Ribbon;
- namespace ProximaAnalizer.ViewModels.Dialog;
- internal partial class TraceDataListViewModel : ObservableObject, IDialogAware
- {
- public DialogCloseListener RequestClose { get; set; }
- public string Title { get; set; } = "DataLog";
- [ObservableProperty]
- private ObservableDictionary<DateTime, DynamicDisplay> _DynamicDisplay = [];
- [ObservableProperty]
- private ObservableCollection<string> _Headers = [];
- public bool CanCloseDialog()
- {
- return true;
- }
- public void OnDialogClosed()
- {
- }
- public void OnDialogOpened(IDialogParameters parameters)
- {
- if (!parameters.TryGetValue("Data", out object? trace))
- return;
- if (trace is not DisplayDataHelper traceData)
- return;
- Dictionary<string, List<float>> cache = [];
- cache = cache.Concat(traceData.DataLeft).ToDictionary();
- if (traceData.DataRight is not null)
- cache = cache.Concat(traceData.DataRight).ToDictionary();
- this.Headers.Clear();
- HashSet<string> headers = new();
- for (int i = 0; i < traceData.Time.Count; i++)
- {
- DynamicDisplay dynamicDisplay = new();
- long ticks = traceData.Time[i].Ticks;
- ticks -= ticks % 10000000;
- dynamicDisplay.Time = new(ticks);
- this.DynamicDisplay[dynamicDisplay.Time] = dynamicDisplay;
- foreach (var item in cache)
- {
- PairData pairData = new()
- {
- Name = item.Key,
- Value = item.Value[i].ToString("0.00"),
- };
- headers.Add(item.Key);
- dynamicDisplay.Data.Add(pairData);
- }
- }
- Headers.AddRange(headers);
- if (!parameters.TryGetValue("Alarm", out object? rawAlarm))
- return;
- if (rawAlarm is not IEnumerable<EventData> alarms)
- return;
- foreach (EventData eventData in alarms)
- {
- if (string.IsNullOrEmpty(eventData.Description))
- continue;
- long ticks = eventData.Occur_Time.Ticks;
- ticks -= ticks % 10000000;
- if (!this.DynamicDisplay.TryGetValue(new(ticks), out DynamicDisplay? display) || display is null)
- continue;
- display.Alarm.Add(eventData.Description);
- }
- }
- [RelayCommand]
- private void Export()
- {
- SaveFileDialog saveFileDialog = new()
- {
- Filter = "History files |*.csv;",
- FileName = "DataLog.csv",
- InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
- };
- if (saveFileDialog.ShowDialog() != true)
- return;
- try
- {
- using StreamWriter sw = new(saveFileDialog.FileName);
- StringBuilder header = new();
- header.append("Time");
- header.Append(',');
- foreach (var item in Headers)
- {
- header.append(item);
- header.Append(',');
- }
- header.append("Alarm");
- sw.WriteLine(header);
- foreach (var item in this.DynamicDisplay)
- {
- StringBuilder sb = new();
- sb.Append(item.Value.Time.ToString("yyyy-MM-dd HH:mm:ss.f"));
- sb.Append(',');
- foreach (var data in item.Value.Data)
- {
- sb.append(data.Value);
- sb.Append(',');
- }
- StringBuilder sbAlarm = new();
- for (int i = 0; i < item.Value.Alarm.Count; i++)
- {
- sbAlarm.Append($"{item.Value.Alarm[i].Replace("°C", string.Empty)}");
- if (i != item.Value.Alarm.Count - 1)
- sbAlarm.Append(Environment.NewLine);
- }
- if (item.Value.Alarm.Count != 0)
- sb.append($"\"{sbAlarm}\"");
- sw.WriteLine(sb);
- }
- MessageBoxResult result = MessageBox.Show("文件保存成功,是否查看文件?", "Save History File", MessageBoxButton.YesNo, MessageBoxImage.Question);
- FileInfo fileInfo = new(saveFileDialog.FileName);
- if (result == MessageBoxResult.Yes && fileInfo.Directory is not null)
- System.Diagnostics.Process.Start("Explorer.exe", fileInfo.Directory.FullName);
- }
- catch
- {
- MessageBox.Show("文件保存失败!", "Save History File", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- }
- }
- public class DynamicDisplay
- {
- public DateTime Time { get; set; }
- public List<PairData> Data { get; } = [];
- public List<string> Alarm { get; } = [];
- }
- public class PairData
- {
- public string? Name { get; set; }
- public string? Value { get; set; }
- }
|