Sic08/SicUI/Models/PMs/PMMfcRorViewModel.cs

175 lines
5.4 KiB
C#
Raw Normal View History

2023-06-05 14:39:23 +08:00
using MECF.Framework.Common.DataCenter;
using MECF.Framework.UI.Client.ClientBase;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
2023-06-09 18:31:58 +08:00
using System.Data;
using System.Windows.Forms;
2023-06-13 09:23:22 +08:00
using Aitex.Core.Common.DeviceData;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
2023-07-03 18:05:21 +08:00
using Caliburn.Micro;
using MECF.Framework.UI.Client.CenterViews.DataLogs.Event;
using OpenSEMI.ClientBase;
2023-06-05 14:39:23 +08:00
namespace SicUI.Models.PMs
{
public class PMMfcRorViewModel : UiViewModelBase, ISupportMultipleSystem
{
2023-07-03 18:05:21 +08:00
private PMMfcRorView view;
public DateTime SearchBeginTime
{
get => view.wfTimeFrom.Value;
set
{
view.wfTimeFrom.Value = value;
NotifyOfPropertyChange(nameof(SearchBeginTime));
}
}
public DateTime SearchEndTime
{
get => view.wfTimeTo.Value;
set
{
view.wfTimeTo.Value = value;
NotifyOfPropertyChange(nameof(SearchEndTime));
}
}
2023-06-08 17:34:02 +08:00
//标准MFC
2023-06-13 09:23:22 +08:00
[Subscription("StandardMfcRorData")]
2023-06-08 17:34:02 +08:00
public MfcRorData StandardMfcRorData { get; set; }
[Subscription("MfcNameList")]
public List<string> MfcNameList { get; set; }
[Subscription("MfcRorList")]
public List<MfcRorData> MfcRorList { get; set; }
2023-07-03 18:05:21 +08:00
public List<MfcRorData> DataGridMfcRorList { get; set; }
2023-06-08 17:34:02 +08:00
//选中的MFC
2023-07-03 18:05:21 +08:00
public MfcRorData SelectedMfcRorData { get; set; } = new MfcRorData();
2023-06-08 17:34:02 +08:00
2023-07-03 18:05:21 +08:00
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
2023-06-08 17:34:02 +08:00
2023-07-03 18:05:21 +08:00
// 默认的查询时间设置为当天
this.view = (PMMfcRorView)view;
SearchBeginTime = DateTime.Today;
SearchEndTime = DateTime.Today.AddDays(1).AddTicks(-1);
2023-06-09 18:31:58 +08:00
2023-07-03 18:05:21 +08:00
SelectedMfcRorData.Name = MfcNameList.FirstOrDefault();
2023-06-05 14:39:23 +08:00
}
2023-06-08 17:34:02 +08:00
2023-06-05 14:39:23 +08:00
public void MfcSelectionChanged()
{
2023-06-08 17:34:02 +08:00
SelectedMfcRorData.Scale = (double)QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.MFC.{SelectedMfcRorData.Name}.N2Scale");
SelectedMfcRorData.Temperature = 293;
SelectedMfcRorData.Interval = 30;
//MFC默认的设定流量为量程的一半
SelectedMfcRorData.SetFlow = SelectedMfcRorData.Scale / 2.0;
SelectedMfcRorData.BasePressure = 400;
2023-06-14 17:40:00 +08:00
SelectedMfcRorData.Volume = StandardMfcRorData != null ? StandardMfcRorData.Volume : 0;
2023-06-08 17:34:02 +08:00
SelectedMfcRorData.Module = SystemName;
2023-06-05 14:39:23 +08:00
Refresh();
}
2023-06-08 17:34:02 +08:00
public void StartMfcRor()
2023-06-05 14:39:23 +08:00
{
2023-06-14 17:40:00 +08:00
if(StandardMfcRorData == null && !SelectedMfcRorData.IsStandardMfc)
{
MessageBox.Show("Standard Mfc do not Ror!");
return;
}
if(SelectedMfcRorData.IsStandardMfc)
{
SelectedMfcRorData.ActualFlow = SelectedMfcRorData.SetFlow;
}
2023-06-14 17:40:00 +08:00
2023-06-08 17:34:02 +08:00
InvokeClient.Instance.Service.DoOperation($"{SystemName}.MfcRor", JsonConvert.SerializeObject(SelectedMfcRorData));
2023-06-05 14:39:23 +08:00
}
2023-06-09 18:31:58 +08:00
2023-07-03 18:05:21 +08:00
public void QueryData()
2023-06-09 18:31:58 +08:00
{
2023-07-03 18:05:21 +08:00
if (SearchBeginTime > SearchEndTime)
2023-06-09 18:31:58 +08:00
{
MessageBox.Show("Time range invalid, start time should be early than end time");
return;
}
try
{
string sql = $"select * from \"pm_mfcror\" where \"module\" = '{SystemName}' and \"starttime\" >='{SearchBeginTime:yyyyMMdd HHmmss}' and \"endtime\" <='{SearchEndTime:yyyyMMdd HHmmss}' order by \"endtime\" ASC";
2023-06-09 18:31:58 +08:00
DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
2023-07-03 18:05:21 +08:00
DataGridMfcRorList = TableToListModel<MfcRorData>(dbData);
2023-06-09 18:31:58 +08:00
Refresh();
}
catch (Exception)
{
}
}
2023-07-03 18:05:21 +08:00
public void ClearMfcRorData()
{
var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.Cancel, DialogType.CONFIRM,
"Are you sure clear all mfc ror data?");
if (selection == DialogButton.Yes)
{
InvokeClient.Instance.Service.DoOperation($"{SystemName}.ClearMfcRorData");
}
}
2023-06-09 18:31:58 +08:00
public List<T> TableToListModel<T>(DataTable dt) where T : new()
{
// 定义集合
List<T> ts = new List<T>();
// 获得此模型的类型
Type type = typeof(T);
string tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name; // 检查DataTable是否包含此列
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts;
}
2023-06-05 14:39:23 +08:00
}
}