This repository has been archived on 2023-03-29. You can view files and clone it, but cannot push or open issues or pull requests.
Sic02/FrameworkLocal/UIClient/CenterViews/Maitenances/CalibrationTable/CalibrationTableViewModel.cs

216 lines
6.4 KiB
C#
Raw Normal View History

2022-08-05 14:47:02 +08:00
using Aitex.Core.RT.Log;
using MECF.Framework.UI.Client.ClientBase;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using Aitex.Core.RT.SCCore;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using DocumentFormat.OpenXml.Drawing.Charts;
using MECF.Framework.Common.CommonData;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.OperationCenter;
using SciChart.Core.Extensions;
namespace MECF.Framework.UI.Client.CenterViews.Maitenances.CalibrationTable
{
public interface ICalibrationTableViewModelParameter
{
List<CalibrationTableItem> Items { get; set; }
}
public class CalibrationTableItem
{
public string DisplayName { get; set; }
public string ItemTableScName { get; set; }
public string ItemEnableScName { get; set; }
}
public class CalibrationTableViewModel : UiViewModelBase, ISupportMultipleSystem
{
public ICalibrationTableViewModelParameter CustomParameter { get; set; }
public string SystemName { get; set; }
public class NotifiableCalibrationTableItem : NotifiableItem
{
public string DisplayName { get; set; }
public float FeedbackValue { get; set; }
public float CalibrationValue { get; set; }
}
public ObservableCollection<CalibrationTableItem> CalibrationItems { get; set; }
public ObservableCollection<NotifiableCalibrationTableItem> TableData { get; set; }
public string FeedbackValue { get; set; }
public string CalibrationValue { get; set; }
private CalibrationTableItem _currentSelection;
public CalibrationTableItem CurrentSelection
{
get { return _currentSelection; }
set
{
_currentSelection = value;
ChangeSelection(_currentSelection);
NotifyOfPropertyChange(nameof(CurrentSelection));
}
}
public CalibrationTableViewModel()
{
DisplayName = "Calibration Table ";
CalibrationItems = new ObservableCollection<CalibrationTableItem>();
TableData = new ObservableCollection<NotifiableCalibrationTableItem>();
}
protected override void OnInitialize()
{
base.OnInitialize();
}
protected override void OnActivate()
{
base.OnActivate();
if (CustomParameter != null && CustomParameter.Items != null && CalibrationItems.IsEmpty())
{
foreach (var item in CustomParameter.Items)
{
CalibrationItems.Add(new CalibrationTableItem()
{
DisplayName = item.DisplayName,
ItemEnableScName = item.ItemEnableScName,
ItemTableScName = item.ItemTableScName,
});
}
}
}
protected void ChangeSelection(CalibrationTableItem item)
{
if (item == null)
{
TableData.Clear();
return;
}
var tableValues = QueryDataClient.Instance.Service.GetConfig(item.ItemTableScName);
if (tableValues == null)
return;
var scValue = (string) tableValues;
string[] items = scValue.Split(';');
var tableData = new ObservableCollection<NotifiableCalibrationTableItem>();
for (int i = 0; i < items.Length; i++)
{
if (items.Length > i)
{
string itemValue = items[i];
if (!string.IsNullOrEmpty(itemValue))
{
string[] pairValue = itemValue.Split('#');
if (pairValue.Length == 2)
{
if (float.TryParse(pairValue[0], out float rangeItem1)
&& float.TryParse(pairValue[1], out float rangeItem2))
{
tableData.Add(new NotifiableCalibrationTableItem()
{
FeedbackValue = rangeItem1,
CalibrationValue = rangeItem2,
});
}
}
}
}
}
TableData = new ObservableCollection<NotifiableCalibrationTableItem>( tableData.OrderBy(x => x.FeedbackValue).ToList());
NotifyOfPropertyChange(nameof(TableData));
}
public void Save()
{
if (CurrentSelection == null)
return;
string data = "";
foreach (var item in TableData)
{
data += $"{item.FeedbackValue}#{item.CalibrationValue};";
}
InvokeClient.Instance.Service.DoOperation("System.SetConfig", CurrentSelection.ItemTableScName, data);
Reload();
}
public void Cancel()
{
Reload();
}
private void Reload()
{
ChangeSelection(CurrentSelection);
}
public void Add()
{
if (string.IsNullOrEmpty(FeedbackValue) || string.IsNullOrEmpty(CalibrationValue))
{
MessageBox.Show("Input value is empty");
return;
}
if (!float.TryParse(FeedbackValue, out float feedback) ||
!float.TryParse(CalibrationValue, out float calibrationValue))
{
MessageBox.Show("Input value not valid");
return;
}
FeedbackValue = "";
CalibrationValue = "";
NotifyOfPropertyChange(nameof(FeedbackValue));
NotifyOfPropertyChange(nameof(CalibrationValue));
TableData.Add(new NotifiableCalibrationTableItem()
{
DisplayName = CurrentSelection.DisplayName,
FeedbackValue = feedback,
CalibrationValue = calibrationValue,
});
}
public void DeleteItem(NotifiableCalibrationTableItem item)
{
TableData.Remove(item);
}
}
}