2023-12-06 13:52:01 +08:00
|
|
|
|
using Aitex.Core.RT.Log;
|
|
|
|
|
using Caliburn.Micro;
|
|
|
|
|
using DocumentFormat.OpenXml.EMMA;
|
|
|
|
|
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.CenterViews.Core.Charting;
|
|
|
|
|
using MECF.Framework.UI.Client.ClientBase;
|
|
|
|
|
using SciChart.Charting.Model.DataSeries;
|
|
|
|
|
using SciChart.Charting.Visuals.Axes;
|
|
|
|
|
using SciChart.Charting.Visuals.RenderableSeries;
|
2023-12-06 17:23:21 +08:00
|
|
|
|
using SciChart.Core.Extensions;
|
|
|
|
|
using SciChart.Core.Framework;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
using SciChart.Data.Model;
|
|
|
|
|
using Sicentury.Core;
|
|
|
|
|
using Sicentury.Core.EventArgs;
|
|
|
|
|
using Sicentury.Core.Pipelines;
|
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;
|
|
|
|
|
using System.Data;
|
2023-12-01 15:18:22 +08:00
|
|
|
|
using System.Dynamic;
|
2023-12-06 13:52:01 +08:00
|
|
|
|
using System.Linq;
|
|
|
|
|
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-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-06 13:52:01 +08:00
|
|
|
|
public string CbSelect { get; set; }
|
2023-12-01 15:18:22 +08:00
|
|
|
|
|
|
|
|
|
public RecipeProcessHistoryData RecipeProcessHistoryData { get; set; }
|
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
public List<ProcessHistoryData> ProcessHistoryDataList { get; set; }
|
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-06 17:23:21 +08:00
|
|
|
|
private ObservableCollection<ProcessHistoryDeviceData> _processHistoryDeviceDataList;
|
|
|
|
|
public ObservableCollection<ProcessHistoryDeviceData> ProcessHistoryDeviceDataList
|
|
|
|
|
{
|
|
|
|
|
get => _processHistoryDeviceDataList;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_processHistoryDeviceDataList = value;
|
|
|
|
|
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;
|
|
|
|
|
public ObservableCollection<IRenderableSeries> AppendedSeries
|
|
|
|
|
{
|
|
|
|
|
get => appendedSeries;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
appendedSeries = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(AppendedSeries));
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
2023-12-05 08:51:05 +08:00
|
|
|
|
private ProcessHistoryItemsDefault ProcessHistoryItemsDefault = new ProcessHistoryItemsDefault();
|
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查询进度信息更新。
|
|
|
|
|
/// </summary>
|
|
|
|
|
private IProgress<ProgressUpdatingEventArgs> _progQueryUpdate;
|
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
private void IniUIData()
|
|
|
|
|
{
|
|
|
|
|
PmList = new List<string>();
|
|
|
|
|
for (int i = 1; i <= 2; i++)
|
|
|
|
|
{
|
|
|
|
|
if ((bool)QueryDataClient.Instance.Service.GetConfig($"PM.PM{i}.TMAEnable"))
|
|
|
|
|
PmList.Add($"PM{i}");
|
|
|
|
|
}
|
|
|
|
|
if (PmList.Count > 0)
|
|
|
|
|
CbSelect = PmList[0];
|
|
|
|
|
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-06 17:23:21 +08:00
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dialog = new ProcessHistoryInfMessageBoxViewModel(StartDateTime.ToString(), EndDateTime.ToString(), CbSelect);
|
|
|
|
|
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;
|
|
|
|
|
ProcessHistoryDataList = ProcessHistorySqlHelp.QueryProcessHistoryData(dialog.RecipeProcessHistoryData.ProcessGuid, dialog.RecipeProcessHistoryData.Name);
|
2023-12-06 17:23:21 +08:00
|
|
|
|
ProcessHistoryDeviceDataList?.Clear();
|
2023-12-01 15:18:22 +08:00
|
|
|
|
Refresh();
|
|
|
|
|
}
|
2023-12-06 17:23:21 +08:00
|
|
|
|
|
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-12-08 09:31:08 +08:00
|
|
|
|
public void GetProcessHistory()
|
2023-12-01 15:18:22 +08:00
|
|
|
|
{
|
2023-12-05 08:51:05 +08:00
|
|
|
|
Query(SelectProcessHistoryData);
|
|
|
|
|
|
|
|
|
|
Refresh();
|
2023-12-01 15:18:22 +08:00
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
2023-12-01 15:18:22 +08:00
|
|
|
|
public void QuerDeviceData()
|
|
|
|
|
{
|
|
|
|
|
}
|
2023-12-05 08:51:05 +08:00
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
public void Query(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-06 13:52:01 +08:00
|
|
|
|
ProcessHistoryDeviceDataList = ProcessHistorySqlHelp.GetProcessHistoryDeviceData(daySlices, CbSelect, ProcessHistoryItemsDefault.ItemList);
|
2023-12-05 08:51:05 +08:00
|
|
|
|
|
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
|
|
|
|
public void GetItem()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private IRange _timeRange;
|
|
|
|
|
private IRange _visibleRangeValue;
|
|
|
|
|
private AutoRange _autoRange;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public 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];
|
|
|
|
|
|
|
|
|
|
dateList.Add(date);
|
|
|
|
|
valueList.Add(cellValue);
|
2023-12-06 17:23:21 +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
|
|
|
|
|
2023-12-06 13:52:01 +08:00
|
|
|
|
|
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-11-30 13:42:06 +08:00
|
|
|
|
}
|
2023-12-06 13:52:01 +08:00
|
|
|
|
}
|