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 ;
2023-06-09 13:15:02 +08:00
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 ;
2023-07-03 18:05:21 +08:00
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 ; }
2023-07-03 09:12:26 +08:00
[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-08-15 15:46:44 +08:00
public string SelectedMfcRorArray { get ; set ; }
2023-07-03 18:05:21 +08:00
public MfcRorData SelectedMfcRorData { get ; set ; } = new MfcRorData ( ) ;
2023-06-08 17:34:02 +08:00
2023-08-15 15:46:44 +08:00
public MfcRorData [ ] SelectedMfcRorDataList { get ; set ; }
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-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-08-15 15:46:44 +08:00
if ( string . IsNullOrEmpty ( SelectedMfcRorArray ) )
{
return ;
}
string [ ] mfcRorList = SelectedMfcRorArray . Split ( ',' ) ;
if ( mfcRorList = = null | | mfcRorList . Length = = 0 )
{
return ;
}
SelectedMfcRorData . Name = mfcRorList [ mfcRorList . Length - 1 ] ;
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-08-15 15:46:44 +08:00
SelectedMfcRorData . Volume = StandardMfcRorData ! = null ? StandardMfcRorData . Volume : 0 ;
2023-06-08 17:34:02 +08:00
2023-06-09 13:15: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-08-15 15:46:44 +08:00
if ( string . IsNullOrEmpty ( SelectedMfcRorArray ) )
2023-06-14 17:40:00 +08:00
{
2023-08-15 15:46:44 +08:00
MessageBox . Show ( "Please Select Mfc First!" ) ;
2023-06-14 17:40:00 +08:00
return ;
}
2023-06-27 18:24:31 +08:00
2023-08-15 15:46:44 +08:00
string [ ] mfcRorList = SelectedMfcRorArray . Split ( ',' ) ;
if ( mfcRorList = = null | | mfcRorList . Length = = 0 )
2023-06-27 18:24:31 +08:00
{
2023-08-15 15:46:44 +08:00
MessageBox . Show ( "Please Select Mfc First!" ) ;
return ;
2023-06-27 18:24:31 +08:00
}
2023-06-14 17:40:00 +08:00
2023-08-15 15:46:44 +08:00
if ( mfcRorList . Count ( ) = = 1 )
{
if ( StandardMfcRorData = = null & & ! SelectedMfcRorData . IsStandardMfc )
{
MessageBox . Show ( "Standard Mfc do not Ror!" ) ;
return ;
}
if ( SelectedMfcRorData . IsStandardMfc )
{
SelectedMfcRorData . ActualFlow = SelectedMfcRorData . SetFlow ;
}
InvokeClient . Instance . Service . DoOperation ( $"{SystemName}.MfcRor" , SelectedMfcRorData ) ;
}
else
{
if ( StandardMfcRorData = = null )
{
MessageBox . Show ( "Standard Mfc do not Ror!" ) ;
return ;
}
SelectedMfcRorDataList = new MfcRorData [ mfcRorList . Length ] ;
for ( int i = 0 ; i < SelectedMfcRorDataList . Length ; i + + )
{
SelectedMfcRorDataList [ i ] = new MfcRorData ( ) ;
SelectedMfcRorDataList [ i ] . Name = mfcRorList [ i ] ;
SelectedMfcRorDataList [ i ] . Scale = ( double ) QueryDataClient . Instance . Service . GetConfig ( $"PM.{SystemName}.MFC.{SelectedMfcRorDataList[i].Name}.N2Scale" ) ;
SelectedMfcRorDataList [ i ] . Temperature = 293 ;
SelectedMfcRorDataList [ i ] . Interval = 30 ;
//MFC默认的设定流量为量程的一半
SelectedMfcRorDataList [ i ] . SetFlow = SelectedMfcRorDataList [ i ] . Scale / 2.0 ;
SelectedMfcRorDataList [ i ] . BasePressure = 400 ;
SelectedMfcRorDataList [ i ] . Volume = StandardMfcRorData ! = null ? StandardMfcRorData . Volume : 0 ;
SelectedMfcRorDataList [ i ] . Module = SystemName ;
}
InvokeClient . Instance . Service . DoOperation ( $"{SystemName}.MfcRor" , SelectedMfcRorDataList ) ;
}
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
{
2023-07-04 09:18:14 +08:00
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
}
}