[UI.Client]

1添加单项数据Charting展示
2优化界面显和布局
This commit is contained in:
hanqiangqiang 2023-12-06 17:23:21 +08:00
parent e39ddd02b6
commit f4d7b3f2be
4 changed files with 151 additions and 208 deletions

View File

@ -5,6 +5,7 @@ using MECF.Framework.Common.Equipment;
using Sicentury.Core;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Text;
@ -92,17 +93,17 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
return processHistoryDataList;
}
//************************************************单步时硬件数据结果查询*******************************************************************
/// <summary>
/// 查询气体体积数据
/// 拆分的天循查询数据
/// </summary>
/// <param name="daySlices">拆分的天</param>
/// <param name="moduleName">PM名称</param>
/// <param name="gasFlowSumList">显示列表对象</param>
/// <returns></returns>
public static List<ProcessHistoryDeviceData> GetProcessHistoryDeviceData(IEnumerable<DateRangeHelper> daySlices, string moduleName, List<ProcessHistoryItem> processHistoryItemList)
public static ObservableCollection<ProcessHistoryDeviceData> GetProcessHistoryDeviceData(IEnumerable<DateRangeHelper> daySlices, string moduleName, List<ProcessHistoryItem> processHistoryItemList)
{
List<DataTable> dataTableList =new List<DataTable>();
@ -110,9 +111,9 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
{
dataTableList.Add(GetProcessHistoryDeviceDataListDaySlices(daySlice, moduleName, processHistoryItemList));//拆分后,每次查询结果放入集合中
}
List<ProcessHistoryDeviceData> processHistoryDeviceDataList = new List<ProcessHistoryDeviceData>();
ObservableCollection<ProcessHistoryDeviceData> processHistoryDeviceDataList = new ObservableCollection<ProcessHistoryDeviceData>();
foreach (var item in processHistoryItemList)
{

View File

@ -11,7 +11,8 @@
xmlns:userControls="clr-namespace:MECF.Framework.UI.Client.CenterViews.Core.UserControls"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
d:DesignHeight="800"
d:DesignWidth="1500"
d:DesignWidth="1900"
FontSize="14"
mc:Ignorable="d">
<Grid Margin="10">
<Grid.RowDefinitions>
@ -20,13 +21,13 @@
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="425" />
<ColumnDefinition Width="505" />
<ColumnDefinition Width="1350" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border
Grid.ColumnSpan="3"
Margin="0,5"
Padding="1"
HorizontalAlignment="Left"
Background="{StaticResource Table_BG_Content}"
@ -95,59 +96,73 @@
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Label Margin="3,0" VerticalAlignment="Center">RecipeName</Label>
<Label Margin="3,0" VerticalAlignment="Center">Select Recipe Name</Label>
<Label
Margin="3,0"
VerticalAlignment="Center"
Content="{Binding RecipeProcessHistoryData.Name}" />
Content="{Binding RecipeProcessHistoryData.Name}"
FontWeight="Black" />
<Label Margin="3,0" VerticalAlignment="Center">; Select Step Name</Label>
<Label
Margin="3,0"
VerticalAlignment="Center"
Content="{Binding SelectProcessHistoryData.StepName}"
FontWeight="Black" />
</StackPanel>
</StackPanel>
</Border>
<DataGrid
Grid.Row="1"
HorizontalAlignment="Left"
VerticalAlignment="Top"
AlternationCount="2"
AutoGenerateColumns="False"
CanUserAddRows="False"
FontSize="13"
IsReadOnly="True"
ItemsSource="{Binding ProcessHistoryDataList}"
SelectedItem="{Binding SelectProcessHistoryData}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}" />
</Style>
</DataGrid.CellStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<micro:ActionMessage MethodName="DoubleClickItem" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn
Width="150"
Binding="{Binding StepBeginTime}"
Header="Step Start Time" />
<DataGridTextColumn
Width="90"
Binding="{Binding StepEndTimeDisp}"
Header="End Time" />
<!--<DataGridTextColumn
Width="95"
Binding="{Binding StepTime}"
Header="Step Time/s" />-->
<DataGridTextColumn
Width="80"
Binding="{Binding StepNumber}"
Header="Step Num" />
<DataGridTextColumn
Width="100"
Binding="{Binding StepName}"
Header="Step Name" />
<!--<DataGridTemplateColumn Width="80" Header="Query">
<StackPanel Grid.Row="1" Orientation="Horizontal">
<DataGrid
HorizontalAlignment="Left"
VerticalAlignment="Top"
AlternationCount="2"
AutoGenerateColumns="False"
CanUserAddRows="False"
FontSize="14"
IsReadOnly="True"
ItemsSource="{Binding ProcessHistoryDataList}"
SelectedItem="{Binding SelectProcessHistoryData}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}" />
</Style>
</DataGrid.CellStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<micro:ActionMessage MethodName="DoubleClickItem" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn
Width="155"
Binding="{Binding StepBeginTime}"
Header="Step Start Time" />
<DataGridTextColumn
Width="95"
Binding="{Binding StepEndTimeDisp}"
Header="End Time" />
<DataGridTextColumn
Width="95"
Binding="{Binding StepTime}"
Header="Step Time/s" />
<DataGridTextColumn
Width="300"
Binding="{Binding RecipeName}"
Header="Recipe Name" />
<DataGridTextColumn
Width="80"
Binding="{Binding StepNumber}"
Header="Step Num" />
<DataGridTextColumn
Width="100"
Binding="{Binding StepName}"
Header="Step Name" />
<!--<DataGridTemplateColumn Width="80" Header="Query">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Statr" Margin="2">
@ -160,64 +175,61 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>-->
</DataGrid.Columns>
</DataGrid.Columns>
</DataGrid>
<DataGrid
Grid.Row="1"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalAlignment="Top"
AlternationCount="2"
AutoGenerateColumns="False"
CanUserAddRows="False"
FontSize="13"
IsReadOnly="True"
ItemsSource="{Binding ProcessHistoryDeviceDataList}"
SelectedItem="{Binding SelectProcessHistoryDeviceData}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}" />
</Style>
</DataGrid.CellStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<micro:ActionMessage MethodName="GetDeviceCharting" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn
Width="150"
Binding="{Binding DeviceName}"
Header="DeviceName" />
<DataGridTextColumn
Width="50"
Binding="{Binding Unit}"
Header="Unit" />
<DataGridTextColumn
Width="90"
Binding="{Binding Min, StringFormat=F1}"
Header="Min" />
<DataGridTextColumn
Width="90"
Binding="{Binding Average, StringFormat=F1}"
Header="Average" />
<DataGridTextColumn
Width="90"
Binding="{Binding Max, StringFormat=F1}"
Header="Max" />
</DataGrid.Columns>
</DataGrid>
</DataGrid>
<DataGrid
HorizontalAlignment="Left"
VerticalAlignment="Top"
AlternationCount="2"
AutoGenerateColumns="False"
CanUserAddRows="False"
FontSize="14"
IsReadOnly="True"
ItemsSource="{Binding ProcessHistoryDeviceDataList}"
SelectedItem="{Binding SelectProcessHistoryDeviceData}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content.Text}" />
</Style>
</DataGrid.CellStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<micro:ActionMessage MethodName="GetDeviceCharting" />
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn
Width="150"
Binding="{Binding DeviceName}"
Header="DeviceName" />
<DataGridTextColumn
Width="50"
Binding="{Binding Unit}"
Header="Unit" />
<DataGridTextColumn
Width="90"
Binding="{Binding Min, StringFormat=F1}"
Header="Min" />
<DataGridTextColumn
Width="90"
Binding="{Binding Max, StringFormat=F1}"
Header="Max" />
<DataGridTextColumn
Width="90"
Binding="{Binding Average, StringFormat=F1}"
Header="Average" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
<userControls:DataViewChart
x:Name="chart"
Grid.Row="1"
Grid.Column="2"
AutoRange="{Binding ChartAutoRange}"
RenderableSeries="{Binding appendedSeries}"
RenderableSeries="{Binding AppendedSeries}"
VisibleRangeTime="{Binding VisibleRangeTime}"
VisibleRangeValue="{Binding VisibleRangeValue}" />
</Grid>

View File

@ -9,6 +9,8 @@ using MECF.Framework.UI.Client.ClientBase;
using SciChart.Charting.Model.DataSeries;
using SciChart.Charting.Visuals.Axes;
using SciChart.Charting.Visuals.RenderableSeries;
using SciChart.Core.Extensions;
using SciChart.Core.Framework;
using SciChart.Data.Model;
using Sicentury.Core;
using Sicentury.Core.EventArgs;
@ -62,11 +64,29 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
public ProcessHistoryData SelectProcessHistoryData { get; set; }
public List<ProcessHistoryDeviceData> ProcessHistoryDeviceDataList { get; set; }
private ObservableCollection<ProcessHistoryDeviceData> _processHistoryDeviceDataList;
public ObservableCollection<ProcessHistoryDeviceData> ProcessHistoryDeviceDataList
{
get => _processHistoryDeviceDataList;
set
{
_processHistoryDeviceDataList = value;
NotifyOfPropertyChange(nameof(ProcessHistoryDeviceDataList));
}
}
public ProcessHistoryDeviceData SelectProcessHistoryDeviceData { get; set; }
public ObservableCollection<IRenderableSeries> appendedSeries { get; set; }
private ObservableCollection<IRenderableSeries> appendedSeries;
public ObservableCollection<IRenderableSeries> AppendedSeries
{
get => appendedSeries;
set
{
appendedSeries = value;
NotifyOfPropertyChange(nameof(AppendedSeries));
}
}
private ProcessHistoryItemsDefault ProcessHistoryItemsDefault = new ProcessHistoryItemsDefault();
@ -77,7 +97,6 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
IniUIData();
}
/// <summary>
/// 查询进度信息更新。
/// </summary>
@ -96,64 +115,9 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
StartDateTime = DateTime.Now.Date;
EndDateTime = DateTime.Now.Date.AddDays(1).AddTicks(-1);
VisibleRangeTime = new DateRange(DateTime.Now.AddMinutes(-60), DateTime.Now.AddMinutes(60));
VisibleRangeValue = new DoubleRange(0, 10);
//_progQueryUpdate = new Progress<ProgressUpdatingEventArgs>(e =>
//{
// if (e.CurrentProgress == e.TotalProgress)
// {
// foreach (var renderableSeries in SelectProcessHistoryDeviceData)
// {
// var series = renderableSeries as SicFastLineSeries;
// var dataSeries = series?.GetDataSeries();
// try
// {
// if (series != null && dataSeries != null)
// {
// var node = series.BackendParameterNode;
// if (double.IsInfinity((double)dataSeries.YRange.Diff))
// {
// node.ClearStatistic();
// }
// else
// {
// var min = ((double)dataSeries.YMin);
// var max = ((double)dataSeries.YMax);
// var average =
// dataSeries.Metadata.Cast<ParameterNodePoint>().Average(x => x.Value);
// node.SetStatistic(min, max, average);
// }
// }
// }
// catch (Exception ex)
// {
// var err = $"It's failed to load data of {series?.DataName ?? "Unknown"}, {ex.Message}";
// LOG.Error(err, ex);
// }
// }
// ChartAutoRange = AutoRange.Never;
// ((ProcessHistoryTestView)View).chart.ZoomExtents();
// }
//});
Refresh();
}
@ -184,8 +148,11 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
RecipeProcessHistoryData = dialog.RecipeProcessHistoryData;
ProcessHistoryDataList = ProcessHistorySqlHelp.QueryProcessHistoryData(dialog.RecipeProcessHistoryData.ProcessGuid, dialog.RecipeProcessHistoryData.Name);
ProcessHistoryDeviceDataList?.Clear();
Refresh();
}
}
public void DoubleClickItem()
@ -208,22 +175,6 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
ProcessHistoryDeviceDataList = ProcessHistorySqlHelp.GetProcessHistoryDeviceData(daySlices, CbSelect, ProcessHistoryItemsDefault.ItemList);
////解析数据库返回的数据
//foreach (var items in gasFlowRunVent)
//{
// foreach (var item in items)
// {
// var gasFlowSum = dayGasFlowList.Where(obj => item.Name.Contains(obj.Name)).First();
// if (item.Name.Contains("Run"))
// gasFlowSum.RunVolume += item.Volume;
// else
// gasFlowSum.VentVolume += item.Volume;
// }
//}
//使用公式转换单位
//_busyIndicatorContentExport.Report(new ProgressUpdatingEventArgs(100, 100, ""));
}
public void GetItem()
@ -269,16 +220,9 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
public void GetDeviceCharting()
{
AppendedSeries = new ObservableCollection<IRenderableSeries> { SelectProcessHistoryDeviceData.GetLineSeries() };
var v= SelectProcessHistoryDeviceData.ToList();
appendedSeries = new ObservableCollection<IRenderableSeries> { SelectProcessHistoryDeviceData.Append() };
ChartAutoRange = AutoRange.Always;
var dataSeries = appendedSeries[0].DataSeries as XyDataSeries<DateTime, double>;
var dataSeries = AppendedSeries[0].DataSeries as XyDataSeries<DateTime, double>;
var dateList = new List<DateTime>();
var valueList = new List<double>();
var metaList = new List<ParameterNodePoint>();
@ -289,31 +233,16 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
var date = new DateTime(long.Parse(SelectProcessHistoryDeviceData.TimeStamp[i]));
var cellValue = SelectProcessHistoryDeviceData.DeviceValue[i];
dateList.Add(date);
valueList.Add(cellValue);
metaList.Add(new ParameterNodePoint(date, cellValue));
metaList.Add(new ParameterNodePoint(date, cellValue));
}
dataSeries.Append(dateList, valueList, metaList);
VisibleRangeTime = dataSeries.XRange;
VisibleRangeValue= dataSeries.YRange;
//SelectedData = dataSeries.YRange;
//_progQueryUpdate.Report(new ProgressUpdatingEventArgs(100, 100, ""));
//var appendedSeries = SelectProcessHistoryDeviceData.ToList();
Thread.Sleep(10);
ChartAutoRange = AutoRange.Never;
((ProcessHistoryTestView)View).chart.ZoomExtents();
Thread.Sleep(100);
Refresh();
}
}
}

View File

@ -9,6 +9,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using SciChart.Data.Numerics;
using DrawingColor = System.Drawing.Color;
namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
{
@ -106,12 +107,12 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
Max = DeviceValue.Count > 0 ? DeviceValue.Max(t => t) : 0;
}
public IRenderableSeries Append()
public IRenderableSeries GetLineSeries()
{
Clear();
SicFastLineSeries sicFastLineSeries = new SicFastLineSeries(DeviceName)
{
Foreground = new SolidColorBrush(Colors.Red),
Stroke = Colors.Red,
AntiAliasing = true,
ResamplingMode = ResamplingMode.MinMax,
};