using Aurora.Api; using Aurora.View; using VisionCommon; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Reactive.Linq; using System.Windows; using VisionSequence.Aligner; using VisionAligner; namespace VisionUI.Aligner { /// 패턴 로그 뷰 모델 public class PatternLogViewModel : NotifyPropertyChangedBase { private Logger _Logger = new Logger(typeof(PatternLogViewModel).Name); private ObservableCollection patternResultItems; /// Pattern 결과 Items public ObservableCollection PatternResultItems { get => patternResultItems; set => SetProperty(ref patternResultItems, value); } private DateTime selectedDate; /// 선택한 날짜 public DateTime SelectedDate { get => selectedDate; set { SetProperty(ref selectedDate, value); CalendarChanged(value); } } private SubSysInfo _SubSysInfo; private SubSysRecipe _SubSysRecipe; private CsvManager _CsvManager = new CsvManager(); /// /// 생성자 /// /// 서브시스템 정보 public PatternLogViewModel(SubSysInfo subSysInfo) { _SubSysInfo = subSysInfo; _SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(_SubSysInfo); PatternResultItems = new ObservableCollection(); //ProcResultItemManager.SetPatternResultItems(_SubSysInfo, PatternResultItems); SelectedDate = DateTime.Now.Date; SetObservable(); } private void SetObservable() { foreach (var fovRecipe in _SubSysRecipe.FovRecipes) { var fovInfo = VisionRecipeManager.GetFovInfo(_SubSysInfo, fovRecipe.FovId); VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.UPDATE_PATTERN_RESULT). Where(x => x.From == fovInfo.GetKey()).Subscribe(msg => UpdatePatternResult(msg)); VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.UPDATE_PATTERN_RESULTS). Where(x => x.From == fovInfo.GetKey()).Subscribe(msg => UpdatePatternResults(msg)); } } /// /// 패턴 결과 업데이트 /// /// 이벤트 메세지 public void UpdatePatternResult(EventMessage msg) { var patternResult = msg.Param as PatternResult; PatternResultItem item = PatternResultItemManager.GetPatternResultItem(_SubSysInfo, patternResult); Application.Current.Dispatcher.BeginInvoke( new Action(() => { PatternResultItems.Add(item); })); _CsvManager.SaveCsv(_SubSysInfo, item, eSaveDataType.Pattern); } /// /// 여러개의 패턴 결과 업데이트 /// /// 이벤트 메세지 public void UpdatePatternResults(EventMessage msg) { var patternResults = msg.Param as Dictionary; Application.Current.Dispatcher.BeginInvoke( new Action(() => { foreach (var itemPairs in patternResults) { var patternResult = itemPairs.Value; var item = PatternResultItemManager.GetPatternResultItem(_SubSysInfo, patternResult); PatternResultItems.Add(item); } })); var dataList = new List(); foreach (var itemPairs in patternResults) { var patternResult = itemPairs.Value; dataList.Add(PatternResultItemManager.GetPatternResultItem(_SubSysInfo, patternResult)); } _CsvManager.SaveCsv(_SubSysInfo, dataList, eSaveDataType.Pattern); } private void CalendarChanged(DateTime dateTime) { LoadCsv(dateTime); } private void LoadCsv(DateTime dateTime) { try { PatternResultItems?.Clear(); List items = _CsvManager.LoadCsv(_SubSysInfo, dateTime, eSaveDataType.Pattern); if (items != null) { // 로드할 파일이 없으면 items가 null임. foreach (PatternResultItem item in items) { PatternResultItems.Add(item); } } } catch (Exception e) { _Logger.FuncE(e.Message); } } } }