2023-12-14 16:53:43 +08:00
|
|
|
|
using Aitex.Core.RT.SCCore;
|
|
|
|
|
using Caliburn.Micro;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
using MECF.Framework.Common.Aitex.Core.Common.DeviceData;
|
|
|
|
|
using MECF.Framework.Common.DataCenter;
|
|
|
|
|
using MECF.Framework.UI.Client.CenterViews.Core;
|
|
|
|
|
using MECF.Framework.UI.Client.ClientBase;
|
|
|
|
|
using SciChart.Charting.Model.DataSeries;
|
|
|
|
|
using SciChart.Charting.Visuals.Axes;
|
|
|
|
|
using SciChart.Charting.Visuals.RenderableSeries;
|
|
|
|
|
using SciChart.Data.Model;
|
|
|
|
|
using Sicentury.Core;
|
2023-11-30 13:42:06 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
using System.Collections.ObjectModel;
|
2023-12-01 15:18:22 +08:00
|
|
|
|
using System.Dynamic;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
using System.Threading;
|
2023-12-01 15:18:22 +08:00
|
|
|
|
using System.Windows;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
using System.Windows.Controls;
|
2023-11-30 13:42:06 +08:00
|
|
|
|
|
|
|
|
|
namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory
|
|
|
|
|
{
|
|
|
|
|
public class ProcessHistoryTestViewModel : UiViewModelBase
|
|
|
|
|
{
|
2023-12-11 15:21:53 +08:00
|
|
|
|
#region Variables
|
|
|
|
|
|
|
|
|
|
private ProcessHistoryItemsDefault ProcessHistoryItemsDefault;
|
|
|
|
|
private IRange _timeRange;
|
|
|
|
|
private IRange _visibleRangeValue;
|
|
|
|
|
private AutoRange _autoRange;
|
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回ViewModel绑定的视图对象。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public UserControl View { get; private set; }
|
|
|
|
|
|
|
|
|
|
public DateTime StartDateTime
|
|
|
|
|
{
|
|
|
|
|
get => ((ProcessHistoryTestView)View).wfTimeFrom.Value;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
((ProcessHistoryTestView)View).wfTimeFrom.Value = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(StartDateTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public DateTime EndDateTime
|
|
|
|
|
{
|
|
|
|
|
get => ((ProcessHistoryTestView)View).wfTimeTo.Value;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
((ProcessHistoryTestView)View).wfTimeTo.Value = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(EndDateTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
public List<string> PmList { get; set; }
|
2023-12-01 15:18:22 +08:00
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
private string cbSelectPM;
|
|
|
|
|
|
|
|
|
|
public string CbSelectPM
|
|
|
|
|
{
|
|
|
|
|
get => cbSelectPM;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
cbSelectPM = value;
|
|
|
|
|
ProcessHistoryItemsDefault = new ProcessHistoryItemsDefault(value);//选择的PM变化时,重新加载模板
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-01 15:18:22 +08:00
|
|
|
|
|
|
|
|
|
public RecipeProcessHistoryData RecipeProcessHistoryData { get; set; }
|
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
private ObservableCollection<ProcessHistoryData> processHistoryDataList;
|
|
|
|
|
|
|
|
|
|
public ObservableCollection<ProcessHistoryData> ProcessHistoryDataList
|
|
|
|
|
{
|
|
|
|
|
get => processHistoryDataList;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
processHistoryDataList = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(ProcessHistoryDataList));
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-01 15:18:22 +08:00
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
public ProcessHistoryData SelectProcessHistoryData { get; set; }
|
2023-12-01 15:18:22 +08:00
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
private ObservableCollection<ProcessHistoryDeviceData> processHistoryDeviceDataList;
|
|
|
|
|
|
2023-12-06 17:23:21 +08:00
|
|
|
|
public ObservableCollection<ProcessHistoryDeviceData> ProcessHistoryDeviceDataList
|
|
|
|
|
{
|
2023-12-11 15:21:53 +08:00
|
|
|
|
get => processHistoryDeviceDataList;
|
2023-12-06 17:23:21 +08:00
|
|
|
|
set
|
|
|
|
|
{
|
2023-12-11 15:21:53 +08:00
|
|
|
|
processHistoryDeviceDataList = value;
|
2023-12-06 17:23:21 +08:00
|
|
|
|
NotifyOfPropertyChange(nameof(ProcessHistoryDeviceDataList));
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-05 08:51:05 +08:00
|
|
|
|
|
|
|
|
|
public ProcessHistoryDeviceData SelectProcessHistoryDeviceData { get; set; }
|
|
|
|
|
|
2023-12-06 17:23:21 +08:00
|
|
|
|
private ObservableCollection<IRenderableSeries> appendedSeries;
|
2023-12-11 15:21:53 +08:00
|
|
|
|
|
2023-12-06 17:23:21 +08:00
|
|
|
|
public ObservableCollection<IRenderableSeries> AppendedSeries
|
|
|
|
|
{
|
|
|
|
|
get => appendedSeries;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
appendedSeries = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(AppendedSeries));
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
public IRange VisibleRangeTime
|
|
|
|
|
{
|
|
|
|
|
get => _timeRange;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_timeRange = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(VisibleRangeTime));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IRange VisibleRangeValue
|
|
|
|
|
{
|
|
|
|
|
get => _visibleRangeValue;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_visibleRangeValue = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(VisibleRangeValue));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public AutoRange ChartAutoRange
|
|
|
|
|
{
|
|
|
|
|
get => _autoRange;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_autoRange = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(ChartAutoRange));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion Variables
|
2023-12-05 08:51:05 +08:00
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
protected override void OnViewLoaded(object _view)
|
|
|
|
|
{
|
|
|
|
|
base.OnViewLoaded(_view);
|
2023-12-06 13:52:01 +08:00
|
|
|
|
View = (ProcessHistoryTestView)_view;
|
2023-12-01 15:18:22 +08:00
|
|
|
|
IniUIData();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void IniUIData()
|
|
|
|
|
{
|
|
|
|
|
PmList = new List<string>();
|
|
|
|
|
for (int i = 1; i <= 2; i++)
|
|
|
|
|
{
|
2023-12-14 16:53:43 +08:00
|
|
|
|
if ((bool)QueryDataClient.Instance.Service.GetConfig($"System.SetUp.IsPM{i}Installed"))
|
2023-12-01 15:18:22 +08:00
|
|
|
|
PmList.Add($"PM{i}");
|
|
|
|
|
}
|
|
|
|
|
if (PmList.Count > 0)
|
2023-12-11 15:21:53 +08:00
|
|
|
|
CbSelectPM = PmList[0];
|
2023-12-01 15:18:22 +08:00
|
|
|
|
StartDateTime = DateTime.Now.Date;
|
|
|
|
|
EndDateTime = DateTime.Now.Date.AddDays(1).AddTicks(-1);
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
|
|
|
|
VisibleRangeTime = new DateRange(DateTime.Now.AddMinutes(-60), DateTime.Now.AddMinutes(60));
|
|
|
|
|
VisibleRangeValue = new DoubleRange(0, 10);
|
2023-12-11 15:21:53 +08:00
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 根据时间段查询Recipe生产的历史记录
|
|
|
|
|
/// </summary>
|
2023-12-01 15:18:22 +08:00
|
|
|
|
public void QueryRecipeProcessHistory()
|
|
|
|
|
{
|
|
|
|
|
if (StartDateTime > EndDateTime)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("time range invalid, start time should be early than end time.", "Error",
|
|
|
|
|
MessageBoxButton.OK,
|
|
|
|
|
MessageBoxImage.Error);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
var dialog = new ProcessHistoryInfMessageBoxViewModel(StartDateTime.ToString(), EndDateTime.ToString(), CbSelectPM);
|
2023-12-01 15:18:22 +08:00
|
|
|
|
var wm = new WindowManager();
|
|
|
|
|
|
|
|
|
|
dynamic settings = new ExpandoObject();
|
|
|
|
|
settings.WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
|
|
|
|
settings.Title = "Recipe历史生产数据选择";
|
|
|
|
|
settings.ResizeMode = ResizeMode.NoResize;
|
|
|
|
|
settings.ShowInTaskbar = false;
|
|
|
|
|
|
|
|
|
|
var bret = wm.ShowDialog(dialog, null, settings);
|
|
|
|
|
if ((bool)bret)
|
|
|
|
|
{
|
|
|
|
|
if (dialog.RecipeProcessHistoryData == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
RecipeProcessHistoryData = dialog.RecipeProcessHistoryData;
|
2023-12-11 15:21:53 +08:00
|
|
|
|
ProcessHistoryDataList = ProcessHistorySqlHelp.QueryProcessHistoryData(dialog.RecipeProcessHistoryData.ProcessGuid, dialog.RecipeProcessHistoryData.Name, dialog.StepModel);
|
2023-12-06 17:23:21 +08:00
|
|
|
|
ProcessHistoryDeviceDataList?.Clear();
|
2023-12-11 15:21:53 +08:00
|
|
|
|
AppendedSeries?.Clear();
|
2023-12-01 15:18:22 +08:00
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 选择Recipe后,自动查询当时记录的Step详情
|
|
|
|
|
/// </summary>
|
2023-12-08 09:31:08 +08:00
|
|
|
|
public void GetProcessHistory()
|
2023-12-01 15:18:22 +08:00
|
|
|
|
{
|
2023-12-14 16:53:43 +08:00
|
|
|
|
if (SelectProcessHistoryData == null)
|
|
|
|
|
return;
|
|
|
|
|
QueryProcessHistory(SelectProcessHistoryData);
|
2023-12-05 08:51:05 +08:00
|
|
|
|
|
|
|
|
|
Refresh();
|
2023-12-01 15:18:22 +08:00
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
2023-12-14 16:53:43 +08:00
|
|
|
|
public void QueryProcessHistory(ProcessHistoryData processHistoryData)
|
2023-12-05 08:51:05 +08:00
|
|
|
|
{
|
2023-12-06 13:52:01 +08:00
|
|
|
|
var daySlices = DateRangeHelper.SplitInToHours(new DateRangeHelper(Convert.ToDateTime(processHistoryData.StepBeginTime), Convert.ToDateTime(processHistoryData.StepEndTime)), 12);
|
2023-12-05 08:51:05 +08:00
|
|
|
|
List<List<GasFlowSum>> gasFlowRunVent = new List<List<GasFlowSum>>();
|
|
|
|
|
|
|
|
|
|
//按天查询数据库,单天返回数据类型为List<GasFlowSum>
|
2023-12-11 15:21:53 +08:00
|
|
|
|
ProcessHistoryDeviceDataList = ProcessHistorySqlHelp.GetProcessHistoryDeviceData(daySlices, CbSelectPM, ProcessHistoryItemsDefault.ItemList);
|
2023-12-06 13:52:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-12-11 15:21:53 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 显示Charting历史数据记录
|
|
|
|
|
/// </summary>
|
2023-12-14 16:53:43 +08:00
|
|
|
|
public void DeviceCharting()
|
2023-12-06 13:52:01 +08:00
|
|
|
|
{
|
2023-12-14 16:53:43 +08:00
|
|
|
|
if (SelectProcessHistoryDeviceData == null)
|
|
|
|
|
return;
|
|
|
|
|
GetDeviceCharting();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void GetDeviceCharting()
|
|
|
|
|
{
|
|
|
|
|
|
2023-12-06 17:23:21 +08:00
|
|
|
|
AppendedSeries = new ObservableCollection<IRenderableSeries> { SelectProcessHistoryDeviceData.GetLineSeries() };
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
2023-12-06 17:23:21 +08:00
|
|
|
|
var dataSeries = AppendedSeries[0].DataSeries as XyDataSeries<DateTime, double>;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
var dateList = new List<DateTime>();
|
|
|
|
|
var valueList = new List<double>();
|
|
|
|
|
var metaList = new List<ParameterNodePoint>();
|
|
|
|
|
|
|
|
|
|
// 数据记录点
|
|
|
|
|
for (int i = 0; i < SelectProcessHistoryDeviceData.DeviceValue.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
var date = new DateTime(long.Parse(SelectProcessHistoryDeviceData.TimeStamp[i]));
|
|
|
|
|
var cellValue = SelectProcessHistoryDeviceData.DeviceValue[i];
|
2023-12-11 15:21:53 +08:00
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
dateList.Add(date);
|
|
|
|
|
valueList.Add(cellValue);
|
2023-12-11 15:21:53 +08:00
|
|
|
|
metaList.Add(new ParameterNodePoint(date, cellValue));
|
2023-12-06 13:52:01 +08:00
|
|
|
|
}
|
|
|
|
|
dataSeries.Append(dateList, valueList, metaList);
|
|
|
|
|
|
2023-12-06 17:23:21 +08:00
|
|
|
|
Thread.Sleep(10);
|
2023-12-06 13:52:01 +08:00
|
|
|
|
ChartAutoRange = AutoRange.Never;
|
|
|
|
|
((ProcessHistoryTestView)View).chart.ZoomExtents();
|
|
|
|
|
}
|
2023-12-14 16:53:43 +08:00
|
|
|
|
|
|
|
|
|
|
2023-11-30 13:42:06 +08:00
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
}
|