123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Collections.ObjectModel;
- using System.Windows.Input;
- using Aitex.UI.Charting.Command;
- using System.Windows;
- using Aitex.UI.Charting.View;
- using Aitex.UI.Charting.Model;
- using System.Text.RegularExpressions;
- using DataAnalysisControl.Core;
- namespace Aitex.UI.Charting.ViewModel
- {
- public class DataSourceSelectionViewModel : ChartingBaseViewModel
- {
- public DataSourceSelectionViewModel(DataSourceSelection view)
- {
- CommonViewModel = CommonViewModel.Instance;
- _view = view;
- //初始化各个对象
- RecipeSearch_ChamberList = new ObservableCollection<string>();
- RecipeSearch_ChamberList.Add("不限");
- foreach (var item in CONTEXT.GetRecipeChamberList())
- RecipeSearch_ChamberList.Add(item.Value);
- RecipeSearch_SelectedChamber = "不限";
- TimeSearch_ChamberList = new ObservableCollection<string>();
- foreach (var item in CONTEXT.GetChamberList())
- TimeSearch_ChamberList.Add(item.Value);
- TimeSearch_SelectedChamber = TimeSearch_ChamberList.First();
- RecipeSearch_UserDefinedIdList = new ObservableCollection<string>();
- RecipeSearch_RecipeNameList = new ObservableCollection<string>();
- RecipeSearch_SusceptorDescList = new ObservableCollection<string>();
- RecipeSearch_SusceptorData = new ObservableCollection<SusceptorDataModel>();
- RecipeSearch_BeginDate = RecipeSearch_BeginTime = DateTime.Now.Date - new TimeSpan(7, 0, 0, 0);
- TimeSearch_BeginDate = TimeSearch_BeginTime = DateTime.Now.Date;
- TimeSearch_EndDate = TimeSearch_EndTime = RecipeSearch_EndDate = RecipeSearch_EndTime = DateTime.Now.Date + new TimeSpan(23, 59, 59);
- SearchRecipeHistoryCommand = new ChartingCommand((o) => true, (o) => SearchRecipeHistory(o));
- AddDataSourceByRecipeCommand = new ChartingCommand((o) => true, (o) => AddDataSource_ByRecipe(o));
- AddDataSourceByTimeCommand = new ChartingCommand((o) => true, (o) => AddDataSource_ByTime(o));
- //预先加载查询数据
- Preload_Information();
- }
- public DataSourceSelection _view;
- public CommonViewModel CommonViewModel { get; private set; }
- public ICommand SearchRecipeHistoryCommand { get; set; }
- public ICommand AddDataSourceByRecipeCommand { get; set; }
- public ICommand AddDataSourceByTimeCommand { get; set; }
- //select by recipe history
- public DateTime RecipeSearch_BeginDate { get; set; }
- public DateTime RecipeSearch_EndDate { get; set; }
- public DateTime RecipeSearch_BeginTime { get; set; }
- public DateTime RecipeSearch_EndTime { get; set; }
- public ObservableCollection<string> RecipeSearch_UserDefinedIdList { get; set; }
- public string RecipeSearch_SelectedUserDefinedId { get; set; }
- public ObservableCollection<string> RecipeSearch_SusceptorDescList { get; set; }
- public string RecipeSearch_SelectedSusceptorDesc { get; set; }
- public ObservableCollection<string> RecipeSearch_RecipeNameList { get; set; }
- public string RecipeSearch_SelectedRecipeName { get; set; }
- public ObservableCollection<string> RecipeSearch_ChamberList { get; set; }
- public string RecipeSearch_SelectedChamber { get; set; }
- public ObservableCollection<SusceptorDataModel> RecipeSearch_SusceptorData { get; set; }
- //select by customized time
- public DateTime TimeSearch_BeginDate { get; set; }
- public DateTime TimeSearch_EndDate { get; set; }
- public DateTime TimeSearch_BeginTime { get; set; }
- public DateTime TimeSearch_EndTime { get; set; }
- public ObservableCollection<string> TimeSearch_ChamberList { get; set; }
- public string TimeSearch_SelectedChamber { get; set; }
- long btBak;
- long etBak;
- /// <summary>
- /// 预设置数据,方便用户查询
- /// </summary>
- void Preload_Information()
- {
- //预加载数据功能如果放置于GUI线程执行,一旦数据查询缓慢,会影响到界面正常操作,
- //因此此处放置于单独线程中执行,在执行完毕后通知GUI更新数据
- Action act = new Action(() =>
- {
- string c1 = "";
- foreach (var item in CONTEXT.GetChamberList())
- {
- if (item.Value == RecipeSearch_SelectedChamber)
- {
- c1 = item.Key;
- break;
- }
- }
- var bt = new DateTime(RecipeSearch_BeginDate.Year, RecipeSearch_BeginDate.Month, RecipeSearch_BeginDate.Day,
- RecipeSearch_BeginTime.Hour, RecipeSearch_BeginTime.Minute, 0);
- var et = new DateTime(RecipeSearch_EndDate.Year, RecipeSearch_EndDate.Month, RecipeSearch_EndDate.Day,
- RecipeSearch_EndTime.Hour, RecipeSearch_EndTime.Minute, 0);
- if (btBak != bt.Ticks || etBak != et.Ticks)
- {
- RecipeSearch_SelectedRecipeName = "";
- RecipeSearch_SelectedSusceptorDesc = "";
- RecipeSearch_SelectedUserDefinedId = "";
- }
- var recipeName = RecipeSearch_SelectedRecipeName;
- var desc = RecipeSearch_SelectedSusceptorDesc;
- var userDefinedId = RecipeSearch_SelectedUserDefinedId;
- var data = GetSusceptorList(bt, et, c1, recipeName, desc, userDefinedId);
- //ObservableCollection must be modified by GUI thread
- _view.Dispatcher.Invoke(new Action<List<SusceptorDataModel>>((o) =>
- {
- if (btBak != bt.Ticks || etBak != et.Ticks)
- {
- RecipeSearch_UserDefinedIdList.Clear();
- RecipeSearch_SusceptorDescList.Clear();
- RecipeSearch_RecipeNameList.Clear();
- btBak = bt.Ticks ;
- etBak = et.Ticks;
- }
- RecipeSearch_SusceptorData.Clear();
- foreach (var item in o)
- {
- if (!RecipeSearch_UserDefinedIdList.Contains(item.UserDefinedId)) RecipeSearch_UserDefinedIdList.Add(item.UserDefinedId);
- if (!RecipeSearch_SusceptorDescList.Contains(item.Description)) RecipeSearch_SusceptorDescList.Add(item.Description);
- if (!RecipeSearch_RecipeNameList.Contains(item.RecipeName)) RecipeSearch_RecipeNameList.Add(item.RecipeName);
-
- RecipeSearch_SusceptorData.Add(item);
- }
- InvokePropertyChanged();
- }), data);
- });
- act.BeginInvoke(null, null);
- }
- /// <summary>
- /// 按照查询条件搜索菜单历史
- /// </summary>
- /// <param name="obj"></param>
- void SearchRecipeHistory(object obj)
- {
- Preload_Information();
- }
- /// <summary>
- /// 搜索数据源
- /// </summary>
- /// <param name="obj"></param>
- void AddDataSource_ByRecipe(object obj)
- {
- //speical code to get view's control information, for 'SelectedItems' in DataGrid cannot be binded with view model
- foreach (ChartingBaseViewModel.SusceptorDataModel item in _view.dataGrid_SusceptorList.SelectedItems)
- {
- var susceptorId = item.SusceptorId;
- var recipeRunGuid = item.RecipeRunGuid;
- var chamString = item.ProcessIn;
- //var chamString = "System";
- var beginTimeString = item.ProcessBeginTime.Replace("星期一","").Replace("星期二","").Replace("星期三","").Replace("星期四","").Replace("星期五","").Replace("星期六","").Replace("星期日","");
- var endTimeString = item.ProcessEndTime;
- DateTime beginTime, endTime;
- if (!DateTime.TryParse(beginTimeString, out beginTime)) continue;
- //if current recipe has no end time (maybe on running state), default set end time 12 hours later than begin time
- if (!DateTime.TryParse(endTimeString, out endTime)) endTime = beginTime + new TimeSpan(12, 0, 0);
- if (string.IsNullOrEmpty(chamString))
- {
- continue;
- }
- string reason;
- List<string> dataList;
- Dictionary<string, Tuple<string, List<string>>> virtualDevices;
- ReadDbDataNameList(beginTime, chamString, out reason, out dataList, out virtualDevices);
- if (dataList == null || dataList.Count == 0)
- {
- MessageBox.Show(string.Format("{0}在{1}没有数据记录,请重新选择数据源!", chamString, beginTime.ToString("yyyy/MM/dd")), "数据源选择警告", MessageBoxButton.OK, MessageBoxImage.Warning);
- continue;
- }
- var singleDataSource = new PostgreSqlDataSource();
- singleDataSource.RecipeSteps = GetRecipeStepInfo(recipeRunGuid);
- singleDataSource.BeginTime = beginTime;
- singleDataSource.ChamberName = chamString;
- singleDataSource.Datas = new Dictionary<string, DataItem>();
- foreach (string dataName in dataList)
- {
- if (!singleDataSource.Datas.ContainsKey(dataName))
- singleDataSource.Datas.Add(dataName, new DataItem() { DataName = dataName, RawData = new List<float>(), TimeStamp = new List<DateTime>() });
- }
- //singleDataSource.AliasList = dataList;
- singleDataSource.VirtualDeviceTable = virtualDevices;
- singleDataSource.Description = item.Description; //_selectedDescription;//string.Format("{0}数据库文件,开始时间:{1},结束时间:{2}", selectedCham, BeginTime, EndTime);
- singleDataSource.EndTime = endTime;
- var chamName = CONTEXT.GetChamberList()[chamString];
- string recipeName = item.RecipeName;
- //如果RecipeName以201XXXXXXXXXX_YYYY方式命名,此处自动缩减为*_YYYY方式显示,减少显示长度
- if (Regex.Match(recipeName, @"^\d\d\d\d\d\d\d\d\d\d\d\d\d\d_*").Success && recipeName.Length > 15)
- recipeName = recipeName.Substring(15);
- singleDataSource.Title = string.Format("{0} {1}", chamName, recipeName);
- singleDataSource.TimeMove = new TimeSpan(0);
- singleDataSource.SyncPoint = singleDataSource.RecipeSteps.First();
- //SelectedDataSources.Add(singleDataSource);
- CommonViewModel.AddDataSource(singleDataSource);
- }
- _view.Close();
- }
- /// <summary>
- /// 搜索数据源
- /// </summary>
- /// <param name="obj"></param>
- void AddDataSource_ByTime(object obj)
- {
- var beginTime = new DateTime(TimeSearch_BeginDate.Year, TimeSearch_BeginDate.Month, TimeSearch_BeginDate.Day,
- TimeSearch_BeginTime.Hour, TimeSearch_BeginTime.Minute, TimeSearch_BeginTime.Second);
- var endTime = new DateTime(TimeSearch_EndDate.Year, TimeSearch_EndDate.Month, TimeSearch_EndDate.Day,
- TimeSearch_EndTime.Hour, TimeSearch_EndTime.Minute, TimeSearch_EndTime.Second);
- var selectedCham = "";
- foreach (var item in CONTEXT.GetChamberList())
- {
- if (item.Value == TimeSearch_SelectedChamber)
- {
- selectedCham = item.Key;
- break;
- }
- }
- if (string.IsNullOrEmpty(selectedCham)) return;
- string reason;
- List<string> dataList;
- Dictionary<string, Tuple<string, List<string>>> virtualDevices;
- ReadDbDataNameList(beginTime, selectedCham, out reason, out dataList, out virtualDevices);
- if (dataList == null || dataList.Count == 0)
- {
- MessageBox.Show(string.Format("{0}在{1}没有数据记录,请重新选择数据源!", selectedCham, beginTime.ToString("yyyy/MM/dd")), "数据源选择警告", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- var singleDataSource = new PostgreSqlDataSource();
- singleDataSource.RecipeSteps = GetRecipeStepInfo(null);
- singleDataSource.BeginTime = beginTime;
- singleDataSource.ChamberName = selectedCham;
- singleDataSource.Datas = new Dictionary<string, DataItem>();
- foreach (string dataName in dataList)
- singleDataSource.Datas.Add(dataName, new DataItem() { DataName = dataName, RawData = new List<float>(), TimeStamp = new List<DateTime>() });
- //singleDataSource.AliasList = dataList;
- singleDataSource.VirtualDeviceTable = virtualDevices;
- singleDataSource.Description = "";//string.Format("{0}数据库文件,开始时间:{1},结束时间:{2}", selectedCham, BeginTime, EndTime);
- singleDataSource.EndTime = endTime;
- var chamName = CONTEXT.GetChamberList()[selectedCham];// Aitex.DataAnalysisControl.Core.Converter.ToCstring((ChamberSet)Enum.Parse(typeof(ChamberSet), selectedCham));
- singleDataSource.Title = string.Format("{0} {1}", chamName, beginTime.ToString("MM-dd HH:mm"));
- singleDataSource.TimeMove = new TimeSpan(0);
- singleDataSource.SyncPoint = singleDataSource.RecipeSteps.First();
- //SelectedDataSources = new List<IDataSource>();
- //SelectedDataSources.Add(singleDataSource);
- CommonViewModel.AddDataSource(singleDataSource);
- _view.Close();
- }
- }
- }
|