123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Data;
- using System.Linq;
- using System.Windows;
- using System.Windows.Input;
- using Aitex.Core.RT.Log;
- using Aitex.Core.UI.MVVM;
- using Aitex.Core.Util;
- using MECF.Framework.Common.CommonData;
- using MECF.Framework.Common.DataCenter;
- using MECF.Framework.UI.Client.CenterViews.DataLogs.WaferHistory;
- using MECF.Framework.UI.Client.ClientBase;
- using SciChart.Core.Extensions;
- namespace MECF.Framework.UI.Client.CenterViews.Operations.LotHistory
- {
- //public class WaferHistoryDetail
- //{
- // public string Guid { get; set; }
- // public string CreateTime { get; set; }
- // public string DeleteTime { get; set; }
- // public string LoadPort { get; set; }
- // public string Slot { get; set; }
- // public string CarrierID { get; set; }
- // public string LotID { get; set; }
- // public string WaferID { get; set; }
- // public string Status { get; set; }
- //}
- //public class WaferMovement
- //{
- // public string Time { get; set; }
- // public string Station { get; set; }
- // public string Slot { get; set; }
- // public string Status { get; set; }
- //}
- /*
- *
- * start_time timestamp without time zone,
- end_time timestamp without time zone,
- carrier_data_guid text,
- name text,
- input_port text,
- output_port text,
- total_wafer_count integer,
- abort_wafer_count integer,
- unprocessed_wafer_count integer,
- CONSTRAINT pj_data_pkey PRIMARY KEY (guid)
- */
- public class CJItem:NotifiableItem
- {
- public string Guid { get; set; }
- public string Name { get; set; }
- public string StartTime { get; set; }
- public string EndTime { get; set; }
- public string CarrierId { get; set; }
- public string TotalWafer { get; set; }
- public string PortIn { get; set; }
- public string PortOut { get; set; }
- public string AbortedWafer { get; set; }
- public string UnprocessedWafer { get; set; }
- }
- public class LotHistoryViewModel : UiViewModelBase
- {
- public bool IsPermission { get => this.Permission == 3; }
- private DateTime _historyDate;
- public DateTime HistoryJobDate
- {
- get { return _historyDate; }
- set
- {
- _historyDate = value;
- UpdateHistoryList(value);
- }
- }
- private CJItem _selectedHistoryLot;
- public CJItem SelectedHistoryLot
- {
- get { return _selectedHistoryLot; }
- set
- {
- if (_selectedHistoryLot != value)
- {
- _selectedHistoryLot = value;
- HistoryLotChanged(value);
- }
-
- }
- }
-
- public CJItem Current { get; set; }
- private WaferHistoryDetail _currentWafer;
- public WaferHistoryDetail CurrentWafer
- {
- get { return _currentWafer; }
- set
- {
- if (_currentWafer != value)
- {
- _currentWafer = value;
- WaferHistoryChanged(value);
- }
- }
- }
- private CJItem _selectedRunningLot;
- public CJItem SelectedRunLot
- {
- get { return _selectedRunningLot; }
- set
- {
- if (_selectedRunningLot != value)
- {
- _selectedRunningLot = value;
- RunLotChanged(value);
- }
- }
- }
- public CJItem RunningJob { get; set; }
-
- public ObservableCollection<WaferHistoryDetail> Wafers { get; set; }
- public ObservableCollection<WaferMovement> Movements { get; set; }
-
- public ObservableCollection<CJItem> RunningJobs { get; set; }
- public ObservableCollection<CJItem> HistoryJobs { get; set; }
- public ICommand FilterHistoryCommand { get; set; }
- [Subscription("Scheduler.CjIdList")]
- public List<string> RunningCjIdList { get; set; }
-
- public LotHistoryViewModel()
- {
- this.DisplayName = "Lot History";
- var now = DateTime.Now;
-
- this.HistoryJobDate = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0, 0);
-
- this.Wafers = new ObservableCollection<WaferHistoryDetail>();
- this.Movements = new ObservableCollection<WaferMovement>();
- RunningJobs = new ObservableCollection<CJItem>();
- HistoryJobs = new ObservableCollection<CJItem>();
-
- FilterHistoryCommand = new DelegateCommand<object>(PerformFilter);
- }
- private void PerformFilter(object obj)
- {
- UpdateHistoryList(HistoryJobDate);
- }
- protected override void OnInitialize()
- {
- base.OnInitialize();
-
- }
- protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
- {
- base.InvokeBeforeUpdateProperty(data);
- //foreach (var pj in RunningPjIdList)
- {
-
- }
- }
- protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
- {
- base.InvokeAfterUpdateProperty(data);
- try
- {
- List<string> alreadyExistList = Array.ConvertAll(RunningJobs.ToArray(), x => x.Guid).ToList();
- foreach (var o in RunningCjIdList)
- {
- if (!alreadyExistList.Contains(o))
- {
- RunningJobs.Add(GetCJ(o));
- }
- else
- {
- alreadyExistList.Remove(o);
- }
- }
- foreach (var id in alreadyExistList)
- {
- RunningJobs.RemoveWhere(x => x.Guid == id);
- }
- }
- catch (Exception ex)
- {
- LOG.Write(ex);
- }
- }
- public void WaferRunningChanged(CJItem date)
- {
- Current = date;
- NotifyOfPropertyChange(nameof(Current));
- if (Current != null)
- {
- Current.InvokePropertyChanged();
- Query(Current.Guid);
- }
- else
- {
- Wafers.Clear();
- Movements.Clear();
- }
- }
- public void HistoryLotChanged(CJItem date)
- {
- Current = date;
- NotifyOfPropertyChange(nameof(Current));
- if (Current != null)
- {
- Current.InvokePropertyChanged();
- Query(Current.Guid);
- }
- else
- {
- Wafers.Clear();
- Movements.Clear();
- }
- }
- public void RunLotChanged(CJItem date)
- {
- HistoryLotChanged(date);
-
- }
- public void UpdateHistoryList(DateTime date)
- {
- try
- {
- var from = new DateTime(date.Year, date.Month, date.Day, 0,0,0);
- var to = new DateTime(date.Year, date.Month, date.Day, 23, 59,59);
- string sql = string.Format(
- "SELECT * FROM \"cj_data\" where \"start_time\" >= '{0}' and \"start_time\" <= '{1}' order by \"start_time\" ASC;",
- from.ToString("yyyy/MM/dd HH:mm:ss.fff"), to.ToString("yyyy/MM/dd HH:mm:ss.fff"));
-
- DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
- Application.Current.Dispatcher.BeginInvoke(new Action(() =>
- {
- HistoryJobs.Clear();
- if (dbData == null || dbData.Rows.Count == 0)
- return;
- for (int i = 0; i < dbData.Rows.Count; i++)
- {
- var cjItem = new CJItem();
- cjItem.Guid = dbData.Rows[i]["guid"].ToString();
- cjItem.Name = dbData.Rows[i]["name"].ToString();
- cjItem.PortIn = dbData.Rows[i]["input_port"].ToString();
- cjItem.PortOut = dbData.Rows[i]["output_port"].ToString();
- cjItem.TotalWafer = dbData.Rows[i]["total_wafer_count"].ToString();
- cjItem.AbortedWafer = dbData.Rows[i]["abort_wafer_count"].ToString();
- cjItem.UnprocessedWafer = dbData.Rows[i]["unprocessed_wafer_count"].ToString();
-
- if (!dbData.Rows[i]["start_time"].Equals(DBNull.Value))
- cjItem.StartTime = ((DateTime)dbData.Rows[i]["start_time"]).ToString("HH:mm:ss");
- if (!dbData.Rows[i]["end_time"].Equals(DBNull.Value))
- cjItem.EndTime = ((DateTime)dbData.Rows[i]["end_time"]).ToString("HH:mm:ss");
- HistoryJobs.Add(cjItem);
- }
- }));
- }
- catch (Exception e)
- {
- LOG.Write(e);
- }
- }
- public CJItem GetCJ(string guid)
- {
- CJItem cjItem = new CJItem();
- try
- {
- string sql = string.Format(
- "SELECT * FROM \"cj_data\" where \"guid\" = '{0}' order by \"start_time\" ASC;",
- guid);
- DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
- Application.Current.Dispatcher.BeginInvoke(new Action(() =>
- {
- if (dbData == null || dbData.Rows.Count == 0)
- return;
- for (int i = 0; i < dbData.Rows.Count; i++)
- {
- //pjItem = new PJItem();
- cjItem.Guid = dbData.Rows[i]["guid"].ToString();
- cjItem.Name = dbData.Rows[i]["name"].ToString();
- cjItem.PortIn = dbData.Rows[i]["input_port"].ToString();
- cjItem.PortOut = dbData.Rows[i]["output_port"].ToString();
- cjItem.TotalWafer = dbData.Rows[i]["total_wafer_count"].ToString();
- cjItem.AbortedWafer = dbData.Rows[i]["abort_wafer_count"].ToString();
- cjItem.UnprocessedWafer = dbData.Rows[i]["unprocessed_wafer_count"].ToString();
- if (!dbData.Rows[i]["start_time"].Equals(DBNull.Value))
- cjItem.StartTime = ((DateTime)dbData.Rows[i]["start_time"]).ToString("HH:mm:ss");
- if (!dbData.Rows[i]["end_time"].Equals(DBNull.Value))
- cjItem.EndTime = ((DateTime)dbData.Rows[i]["end_time"]).ToString("HH:mm:ss");
- }
-
- }));
- }
- catch (Exception e)
- {
- LOG.Write(e);
- }
- return cjItem;
- }
- public void Query(string cjID)
- {
- try
- {
- string sql = string.Format(
- "SELECT * FROM \"wafer_data\",\"carrier_data\" where \"lot_data_guid\" = '{0}' and \"wafer_data\".\"carrier_data_guid\"=\"carrier_data\".\"guid\" order by \"create_time\" ASC, \"create_station\" ASC,\"create_slot\" ASC;",
- cjID);
- DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
- Application.Current.Dispatcher.BeginInvoke(new Action(() =>
- {
- Wafers.Clear();
- try
- {
- if (dbData == null || dbData.Rows.Count == 0)
- return;
- for (int i = 0; i < dbData.Rows.Count; i++)
- {
- WaferHistoryDetail item = new WaferHistoryDetail();
- item.Guid = dbData.Rows[i]["guid"].ToString();
- item.LoadPort = dbData.Rows[i]["create_station"].ToString();
- item.Slot = dbData.Rows[i]["create_slot"].ToString();
- item.CarrierID = dbData.Rows[i]["rfid"].ToString();
- item.LotID = dbData.Rows[i]["lot_id"].ToString();
- item.WaferID = dbData.Rows[i]["wafer_id"].ToString();
- item.Status = dbData.Rows[i]["process_status"].ToString();
- item.NotchAngle = dbData.Rows[i]["notch_angle"].ToString();
- item.SequenceName = dbData.Rows[i]["sequence_name"].ToString();
- item.LotId = dbData.Rows[i]["lot_id"].ToString();
- if (!dbData.Rows[i]["create_time"].Equals(DBNull.Value))
- item.CreateTime = ((DateTime)dbData.Rows[i]["create_time"]).ToString("HH:mm:ss.fff");
- if (!dbData.Rows[i]["delete_time"].Equals(DBNull.Value))
- item.DeleteTime = ((DateTime)dbData.Rows[i]["delete_time"]).ToString("HH:mm:ss.fff");
- Wafers.Add(item);
- }
- }
- catch (Exception ex)
- {
- LOG.Write(ex);
- }
- }));
- }
- catch (Exception e)
- {
- LOG.Write(e);
- }
- }
- public void WaferHistoryChanged( WaferHistoryDetail detail)
- {
- try
- {
- if (detail == null)
- {
- Application.Current.Dispatcher.BeginInvoke(new Action(() =>
- {
- Movements.Clear();
- }));
- return;
- }
- string sql = string.Format(
- "SELECT * FROM \"wafer_move_history\" where \"wafer_data_guid\" = '{0}' order by \"arrive_time\" ASC;",
- detail.Guid);
- DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
- Application.Current.Dispatcher.BeginInvoke(new Action(() =>
- {
- Movements.Clear();
- if (dbData == null || dbData.Rows.Count == 0)
- return;
- for (int i = 0; i < dbData.Rows.Count; i++)
- {
- WaferMovement item = new WaferMovement();
- item.Station = dbData.Rows[i]["station"].ToString();
- item.Slot = dbData.Rows[i]["slot"].ToString();
- item.Status = dbData.Rows[i]["status"].ToString();
- if (!dbData.Rows[i]["arrive_time"].Equals(DBNull.Value))
- item.Time = ((DateTime)dbData.Rows[i]["arrive_time"]).ToString("HH:mm:ss.fff");
- Movements.Add(item);
- }
- }));
- }
- catch (Exception e)
- {
- LOG.Write(e);
- }
- }
- }
- }
|