243 lines
8.2 KiB
C#
243 lines
8.2 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Collections.ObjectModel;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Windows;
|
||
using Aitex.Core.Common.DeviceData;
|
||
using Aitex.Core.RT.Log;
|
||
using Aitex.Core.Util;
|
||
using Aitex.Sorter.Common;
|
||
using Caliburn.Micro.Core;
|
||
using MECF.Framework.Common.CommonData;
|
||
using MECF.Framework.Common.DataCenter;
|
||
using MECF.Framework.Common.Equipment;
|
||
using MECF.Framework.Common.OperationCenter;
|
||
using MECF.Framework.UI.Client.ClientBase;
|
||
using OpenSEMI.ClientBase;
|
||
using SciChart.Core.Extensions;
|
||
using SicUI.Client.Models.Platform.LeakCheck;
|
||
|
||
namespace SicUI.Models.PMs
|
||
{
|
||
public class PMLeakCheckViewModel : SicModuleUIViewModelBase, ISupportMultipleSystem
|
||
{
|
||
[Subscription("Status")]
|
||
public string LeakCheckStatus { get; set; }
|
||
|
||
[Subscription("LeakCheckElapseTime")]
|
||
public int LeakCheckElapseTime { get; set; }
|
||
|
||
[Subscription("ChamberPressure")]
|
||
public double ChamberPressure { get; set; }
|
||
|
||
public int PumpTimeSetPoint { get; set; }
|
||
|
||
public int LeakCheckTimeSetPoint { get; set; }
|
||
|
||
public bool PumpTimeTextSaved { get; set; }
|
||
|
||
public bool LeakCheckTimeTextSaved { get; set; }
|
||
|
||
public ObservableCollection<LeakCheckItem> LeakCheckData { get; set; }
|
||
|
||
private string LeakCheckPreviousStatus { get; set; }
|
||
|
||
public List<string> Types
|
||
{
|
||
get { return new List<string>() { "ChamberOnly", "ChamberAndGasline", "ChamberAndGaslineToFacility" }; }
|
||
}
|
||
|
||
private string _selectedType;
|
||
public string SelectedType
|
||
{
|
||
get { return _selectedType; }
|
||
set
|
||
{
|
||
_selectedType = value;
|
||
NotifyOfPropertyChange("SelectedType");
|
||
}
|
||
}
|
||
|
||
public bool GasLineTypeSelected => SelectedType != Types[0]; // 选择类型不是ChamberOnly,MFC选项 Enable
|
||
public double OpacityGasLine => GasLineTypeSelected ? 1 : 0.3;
|
||
|
||
public bool IsMfc1Checked { get; set; }
|
||
public bool IsMfc2Checked { get; set; }
|
||
public bool IsMfc3Checked { get; set; }
|
||
public bool IsMfc4Checked { get; set; }
|
||
|
||
private bool[] IsMfcChecked
|
||
{
|
||
get
|
||
{
|
||
bool[] isMfcCheck = new bool[]
|
||
{
|
||
IsMfc1Checked,
|
||
IsMfc2Checked,
|
||
IsMfc3Checked,
|
||
IsMfc4Checked,
|
||
};
|
||
|
||
return isMfcCheck;
|
||
}
|
||
}
|
||
|
||
public PMLeakCheckViewModel()
|
||
{
|
||
this.DisplayName = "PM";
|
||
|
||
PumpTimeTextSaved = true;
|
||
LeakCheckTimeTextSaved = true;
|
||
|
||
LeakCheckData = new ObservableCollection<LeakCheckItem>();
|
||
|
||
}
|
||
protected override void OnInitialize()
|
||
{
|
||
base.OnInitialize();
|
||
|
||
SelectedType = Types[0];
|
||
|
||
QueryHistory();
|
||
}
|
||
|
||
protected override void OnActivate()
|
||
{
|
||
base.OnActivate();
|
||
|
||
GetConfig();
|
||
}
|
||
|
||
private void GetConfig()
|
||
{
|
||
string PumpDelayTime = QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.LeakCheck.ContinuePumpTime").ToString();
|
||
string LeakCheckDelayTime = QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.LeakCheck.LeakCheckDelayTime").ToString();
|
||
|
||
if (!int.TryParse(PumpDelayTime, out int pumpDelayTime) || pumpDelayTime < 0)
|
||
{
|
||
DialogBox.ShowWarning($"{PumpDelayTime} is not a valid pump delay time value");
|
||
return;
|
||
}
|
||
|
||
if (!int.TryParse(LeakCheckDelayTime, out int leakCheckDelayTime) || leakCheckDelayTime < 0)
|
||
{
|
||
DialogBox.ShowWarning($"{LeakCheckDelayTime} is not a valid leak check delay time value");
|
||
return;
|
||
}
|
||
|
||
PumpTimeSetPoint = pumpDelayTime;
|
||
LeakCheckTimeSetPoint = leakCheckDelayTime;
|
||
}
|
||
|
||
private void QueryHistory()
|
||
{
|
||
try
|
||
{
|
||
LeakCheckData.Clear();
|
||
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
||
{
|
||
string sql = $"SELECT * FROM \"leak_check_data\" order by \"operate_time\" ASC;";
|
||
|
||
DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
|
||
|
||
if (dbData == null || dbData.Rows.Count == 0)
|
||
return;
|
||
|
||
for (int i = 0; i < dbData.Rows.Count; i++)
|
||
{
|
||
LeakCheckItem item = new LeakCheckItem();
|
||
|
||
item.Guid = dbData.Rows[i]["guid"].ToString();
|
||
|
||
if (!dbData.Rows[i]["operate_time"].Equals(DBNull.Value))
|
||
item.OperateTime = ((DateTime)dbData.Rows[i]["operate_time"]).ToString("yyyy/MM/dd HH:mm:ss.fff");
|
||
|
||
item.Status = dbData.Rows[i]["status"].ToString();
|
||
|
||
if (!dbData.Rows[i]["leak_rate"].Equals(DBNull.Value))
|
||
item.LeakRate = Convert.ToDouble(dbData.Rows[i]["leak_rate"]).ToString("F2");
|
||
|
||
if (!dbData.Rows[i]["start_pressure"].Equals(DBNull.Value))
|
||
item.StartPressure = Convert.ToDouble(dbData.Rows[i]["start_pressure"]).ToString("F2");
|
||
|
||
if (!dbData.Rows[i]["stop_pressure"].Equals(DBNull.Value))
|
||
item.StopPressure = Convert.ToDouble(dbData.Rows[i]["stop_pressure"]).ToString("F2");
|
||
|
||
item.LeakCheckTime = dbData.Rows[i]["leak_check_time"].ToString();
|
||
|
||
item.Mode = dbData.Rows[i]["mode"].ToString();
|
||
|
||
item.ModuleName = dbData.Rows[i]["module_name"].ToString();
|
||
|
||
item.GaslineSelection = dbData.Rows[i]["gasline_selection"].ToString();
|
||
|
||
if (item.ModuleName == SystemName)
|
||
LeakCheckData.Add(item);
|
||
}
|
||
}));
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
LOG.Write(e);
|
||
}
|
||
}
|
||
|
||
public void DeleteLeakCheck(LeakCheckItem item)
|
||
{
|
||
InvokeClient.Instance.Service.DoOperation($"System.DBExecute", $"delete from \"leak_check_data\" where \"guid\"='{item.Guid}'");
|
||
|
||
LeakCheckData.Remove(item);
|
||
}
|
||
|
||
protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
|
||
{
|
||
if (LeakCheckPreviousStatus == "LeakCheck" && LeakCheckStatus != LeakCheckPreviousStatus)
|
||
{
|
||
QueryHistory();
|
||
}
|
||
|
||
LeakCheckPreviousStatus = LeakCheckStatus;
|
||
}
|
||
|
||
public void LeakCheck()
|
||
{
|
||
if ((PumpTimeSetPoint <= 0) || (LeakCheckTimeSetPoint <= 0))
|
||
{
|
||
DialogBox.ShowWarning("Time not valid");
|
||
return;
|
||
}
|
||
|
||
//if (SelectedType == Types[2])
|
||
//{
|
||
// MessageBoxResult result = MessageBox.Show("Please confirm that the N2 manual valve is closed.", "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Warning);
|
||
// if (result == MessageBoxResult.No)
|
||
// {
|
||
// return;
|
||
// }
|
||
//}
|
||
|
||
InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"PM.{SystemName}.LeakCheck.ContinuePumpTime", PumpTimeSetPoint);
|
||
InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"PM.{SystemName}.LeakCheck.LeakCheckDelayTime", LeakCheckTimeSetPoint);
|
||
InvokeClient.Instance.Service.DoOperation($"{SystemName}.LeakCheck", PumpTimeSetPoint, LeakCheckTimeSetPoint);
|
||
|
||
PumpTimeTextSaved = true;
|
||
NotifyOfPropertyChange(nameof(PumpTimeTextSaved));
|
||
|
||
|
||
LeakCheckTimeTextSaved = true;
|
||
NotifyOfPropertyChange(nameof(LeakCheckTimeTextSaved));
|
||
}
|
||
|
||
public void Abort()
|
||
{
|
||
if (DialogBox.Confirm($"Are you sure you want to abort {SystemName} leak check service?"))
|
||
{
|
||
InvokeClient.Instance.Service.DoOperation($"{SystemName}.Abort");
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|