188 lines
6.5 KiB
C#
188 lines
6.5 KiB
C#
using ATS.Tools;
|
|
using ATS_DBContext;
|
|
using ATS_DBContext.Models;
|
|
using ClosedXML.Excel;
|
|
using MahApps.Metro.Controls;
|
|
using Microsoft.Win32;
|
|
using PropertyChanged;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
|
|
namespace ATS.Windows
|
|
{
|
|
[AddINotifyPropertyChangedInterface]
|
|
public partial class TestDataInfomationWindow : MetroWindow
|
|
{
|
|
public ObservableCollection<DataModel> DataList { get; set; } = [];
|
|
|
|
public string Search_ParaName { get; set; }
|
|
|
|
public string Search_Result { get; set; }
|
|
|
|
public bool Search_IsUseTime { get; set; } = true;
|
|
|
|
public DateTime Search_StartTime { get; set; } = DateTime.Now.Date;
|
|
|
|
public DateTime Search_EndTime { get; set; } = DateTime.Now.AddDays(1).Date;
|
|
|
|
public TestDataInfomationWindow()
|
|
{
|
|
InitializeComponent();
|
|
DataContext = this;
|
|
}
|
|
|
|
private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
Search_Click(sender, e);
|
|
}
|
|
|
|
private void GroupBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (e.ChangedButton == MouseButton.Left) DragMove();
|
|
}
|
|
|
|
private async void Search_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
using (ATS_DB db = new())
|
|
{
|
|
// 始终过滤ProgramID
|
|
IQueryable<DataModel> query = db.TestData.Where(x => x.ProgramID == MainWindow.Instance.Program.ID);
|
|
|
|
// 参数名称搜索
|
|
if (!string.IsNullOrEmpty(Search_ParaName))
|
|
{
|
|
// 获取匹配的参数ID列表
|
|
var paramIds = MainWindow.Instance.Program.Parameters.Where(p => p.Name.Contains(Search_ParaName)).Select(p => p.ID).ToList();
|
|
query = query.Where(x => paramIds.Contains(x.ParameterID));
|
|
}
|
|
|
|
// 测试结果筛选
|
|
if (!string.IsNullOrEmpty(Search_Result))
|
|
{
|
|
if (Search_Result == "PASS")
|
|
{
|
|
query = query.Where(x => x.Result);
|
|
}
|
|
if (Search_Result == "FAIL")
|
|
{
|
|
query = query.Where(x => !x.Result);
|
|
}
|
|
}
|
|
|
|
// 时间范围过滤
|
|
if (Search_IsUseTime)
|
|
{
|
|
query = query.Where(x => x.InsertTime >= Search_StartTime && x.InsertTime < Search_EndTime);
|
|
}
|
|
|
|
List<DataModel>? results = query.OrderByDescending(x => x.InsertTime).ToList();
|
|
Application.Current.Dispatcher.Invoke(() =>
|
|
{
|
|
DataList = new(results);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
private void TestDataWindow_PreviewKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
switch (e.Key)
|
|
{
|
|
case Key.Enter:
|
|
Search_Click(sender, e);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private async void Export_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
// 检查是否有数据可导出
|
|
if (DataList == null || DataList.Count == 0)
|
|
{
|
|
MessageBox.Show("没有数据可导出!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
// 显示保存文件对话框
|
|
var saveFileDialog = new SaveFileDialog
|
|
{
|
|
Filter = "Excel文件|*.xlsx",
|
|
FileName = $"测试数据_{DateTime.Now:yyyyMMddHHmmss}.xlsx",
|
|
Title = "导出测试数据"
|
|
};
|
|
|
|
if (saveFileDialog.ShowDialog() != true)
|
|
return;
|
|
|
|
string filePath = saveFileDialog.FileName;
|
|
|
|
try
|
|
{
|
|
// 异步执行导出操作
|
|
await Task.Run(() => ExportToExcel(filePath));
|
|
|
|
MessageBox.Show($"测试数据导出成功", "导出成功", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"导出失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
}
|
|
|
|
private void ExportToExcel(string filePath)
|
|
{
|
|
using (var workbook = new XLWorkbook())
|
|
{
|
|
var worksheet = workbook.Worksheets.Add("测试数据");
|
|
|
|
// 添加标题行
|
|
worksheet.Cell(1, 1).Value = "参数名称";
|
|
worksheet.Cell(1, 2).Value = "实际值";
|
|
worksheet.Cell(1, 3).Value = "下限值";
|
|
worksheet.Cell(1, 4).Value = "上限值";
|
|
worksheet.Cell(1, 5).Value = "测试结果";
|
|
worksheet.Cell(1, 6).Value = "测试时间";
|
|
|
|
// 设置标题行样式
|
|
var titleRow = worksheet.Row(1);
|
|
titleRow.Style.Font.Bold = true;
|
|
titleRow.Style.Fill.BackgroundColor = XLColor.LightGray;
|
|
|
|
// 填充数据
|
|
int row = 2;
|
|
foreach (var item in DataList)
|
|
{
|
|
// 转换参数ID为参数名称
|
|
string parameterName = "未知参数";
|
|
var parameter = MainWindow.Instance.Program.Parameters.FirstOrDefault(p => p.ID == item.ParameterID);
|
|
if (parameter != null)
|
|
{
|
|
parameterName = parameter.Name;
|
|
}
|
|
|
|
worksheet.Cell(row, 1).Value = parameterName;
|
|
worksheet.Cell(row, 2).Value = item.Value;
|
|
worksheet.Cell(row, 3).Value = item.LowerLimit;
|
|
worksheet.Cell(row, 4).Value = item.UpperLimit;
|
|
worksheet.Cell(row, 5).Value = item.Result ? "PASS" : "FAIL";
|
|
worksheet.Cell(row, 6).Value = item.InsertTime;
|
|
|
|
row++;
|
|
}
|
|
|
|
// 调整列宽
|
|
worksheet.Columns().AdjustToContents();
|
|
|
|
// 保存文件
|
|
workbook.SaveAs(filePath);
|
|
}
|
|
}
|
|
}
|
|
} |