123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Reflection;
- using System.IO;
- using System.Threading.Tasks;
- using System.Data;
- using Aitex.UI.Charting.ViewModel;
- using Aitex.UI.Charting.Model;
- namespace Aitex.UI.Charting.View
- {
- /// <summary>
- /// Interaction logic for VirtualDeviceFunctionEditor.xaml
- /// </summary>
- public partial class VirtualDeviceFunctionEditor : Window
- {
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="varName">被编辑的变量名,如果null则表明新建变量</param>
- /// <param name="dataSelectFrame"></param>
- public VirtualDeviceFunctionEditor(string varName, DataSelectFrame parentWindow)
- {
- InitializeComponent();
- _parentWindow = parentWindow;
- _varName = varName;
- Loaded += new RoutedEventHandler(VirtualDeviceFunctionEditor_Loaded);
- }
- DataSelectFrame _parentWindow;
- string _varName;
- void VirtualDeviceFunctionEditor_Loaded(object sender, RoutedEventArgs e)
- {
- textBox.SetHotWords(CommonViewModel.Instance.CurrentSelectedDataSource.Datas.Keys.ToList());
- if (string.IsNullOrWhiteSpace(_varName))
- {
- this.timeLabel.Content = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
- this.textBox.Text = @"//名称:Example.TMGa_1.Press
- //作者:administrator
- //时间:2014/03/18
- //描述:TMGa_1源瓶的虚拟压力读值(tor)
- var1 = PM.PCs.P_TMGa_1_Press.Feedback; //unit: mbar
- var2 = var1 * 1.33;
- value = var2;
- return value;";
- }
- else
- {
- deviceNameBox.Text = _varName;
- Task.Factory.StartNew(() =>
- {
- try
- {
- this.Dispatcher.Invoke(new Action(() =>
- {
- this.textBox.Text = "正在读取...";
- }));
- string sql = string.Format("SELECT \"DeviceName\", \"LastModifyDate\", \"FunctionBlock\" FROM \"VirtualDevice\" where \"ChamberID\"='{0}' and \"DeviceName\"='{1}'",
- ViewModel.CommonViewModel.Instance.CurrentSelectedDataSource.ChamberName,
- _varName);
- var ds = Charting.ViewModel.ChartingBaseViewModel.ExecuteDataset(sql, null);
- var deviceName = ds.Tables[0].Rows[0]["DeviceName"].ToString();
- var lastTime = ds.Tables[0].Rows[0]["LastModifyDate"].ToString();
- var funcCode = ds.Tables[0].Rows[0]["FunctionBlock"].ToString();
- this.Dispatcher.Invoke(new Action(() =>
- {
- this.timeLabel.Content = lastTime;
- this.textBox.Text = funcCode;
- }));
- }
- catch (Exception ex)
- {
- System.Diagnostics.Debug.WriteLine(ex.Message);
- }
- });
- }
- }
- private void Button_Save_Click(object sender, RoutedEventArgs e)
- {
- try
- {
- string curChamName = ViewModel.CommonViewModel.Instance.CurrentSelectedDataSource.ChamberName;
- string funcContent = textBox.Text;
- string deviceName = this.deviceNameBox.Text.Trim();
- if (string.IsNullOrWhiteSpace(deviceName))
- {
- MessageBox.Show("变量名称为空", "输入错误", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- if (string.IsNullOrEmpty(funcContent))
- {
- MessageBox.Show("变量公式为空", "输入错误", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- var ass = Assembly.GetExecutingAssembly();
- var rs = ass.GetManifestResourceStream("DataAnalysisControl.VirtualDataTable.sql");
- using (StreamReader fs = new StreamReader(rs))
- {
- //create virtual device table?
- string sql = fs.ReadToEnd();
- Charting.ViewModel.ChartingBaseViewModel.ExecuteNonQuery(sql);
- }
- string insertSQL = string.Format("DELETE FROM \"VirtualDevice\" where \"ChamberID\" ='{0}' and \"DeviceName\" = '{1}';\nINSERT INTO \"VirtualDevice\"(\"ChamberID\", \"DeviceName\", \"LastModifyDate\", \"FunctionBlock\") VALUES ('{2}', '{3}', '{4}', '{5}');",
- curChamName, _varName, curChamName, deviceName, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), funcContent);
- Charting.ViewModel.ChartingBaseViewModel.ExecuteNonQuery(insertSQL);
- //update tree view
- var currentDataSource = ViewModel.CommonViewModel.Instance.CurrentSelectedDataSource;
- #if false
- var keyList = currentDataSource.Datas.Keys.ToList();
- string compareObj = "PM.VirtualDevice.";
- int compareLen = compareObj.Length;
- foreach(var dataId in keyList)
- {
- if (string.Compare(dataId, 0, compareObj, 0, compareLen) == 0)
- {
- currentDataSource.Datas.Remove(dataId);
- }
- }
- string sqlQuery = string.Format("SELECT * FROM \"VirtualDevice\" where \"ChamberID\" ='{0}'", curChamName);
- var ds = Charting.ViewModel.ChartingBaseViewModel.ExecuteDataset(sqlQuery);
- foreach (DataRow row in ds.Tables[0].Rows)
- {
- string virtualDeviceName = row["DeviceName"].ToString();
-
- }
- #endif
- string fullDeviceName = "PM.VirtualDevice." + deviceName;
- if (string.IsNullOrEmpty(_varName))
- {
- //create
- currentDataSource.Datas.Add(fullDeviceName, new DataItem() { DataName = fullDeviceName, RawData = new List<float>(), TimeStamp = new List<DateTime>() });
- if (currentDataSource is Charting.Model.PostgreSqlDataSource)
- {
- var varList = new List<string>();
- var collection = System.Text.RegularExpressions.Regex.Matches(funcContent, @"PM(\.\w+)+");
- foreach (var item in collection)
- {
- varList.Add(item.ToString());
- }
- var source = ((Charting.Model.PostgreSqlDataSource)currentDataSource);
- source.VirtualDeviceTable.Add(fullDeviceName, new Tuple<string, List<string>>(funcContent, varList));
- }
- }
- else
- {
- //modify
- string oldName = "PM.VirtualDevice." + _varName;
- if (currentDataSource.Datas.ContainsKey(oldName))
- currentDataSource.Datas.Remove(oldName);
- currentDataSource.Datas.Add(fullDeviceName, new DataItem() { DataName = fullDeviceName, RawData = new List<float>(), TimeStamp = new List<DateTime>() });
- if (currentDataSource is Charting.Model.PostgreSqlDataSource)
- {
- var varList = new List<string>();
- var collection = System.Text.RegularExpressions.Regex.Matches(funcContent, @"PM(\.\w+)+");
- foreach (var item in collection)
- {
- varList.Add(item.ToString());
- }
- var source = ((Charting.Model.PostgreSqlDataSource)currentDataSource);
- if (source.VirtualDeviceTable.ContainsKey(oldName))
- source.VirtualDeviceTable.Remove(oldName);
- source.VirtualDeviceTable.Add(fullDeviceName, new Tuple<string, List<string>>(funcContent, varList));
- }
- }
- _parentWindow.UpdateTreeView(ViewModel.CommonViewModel.Instance.CurrentSelectedDataSourceName);
- MessageBox.Show("保存成功!", "公式编辑", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);
- }
- catch (Exception ex)
- {
- MessageBox.Show("公式保存失败\n\n" + ex.Message, "公式编辑", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
- }
- finally
- {
- Close();
- }
- }
- private void Button_Close_Click(object sender, RoutedEventArgs e)
- {
- Close();
- }
- }
- }
|