internal static OeeRecord CreateUnreportedFrom(OeeRecord data) { var newData = new OeeRecord(); newData.TimeRange = data.TimeRange; newData.TotalHours = data.TotalHours - data.UnreportedTime; newData.MainScheduledTime = data.MainScheduledTime - data.UnreportedTime; newData.ReworkScheduledTime = data.ReworkScheduledTime; newData.StoppageTime = data.StoppageTime; newData.IdleTime = data.IdleTime; newData.ProductionTime = data.ProductionTime; newData.DefectionTime = data.DefectionTime; return newData; }
public void FillPPMByMachine(OeeRecord record, bool isByProduct) { using (var context = new SoheilEdmContext()) { var selectedMachineRepository = new Repository<SelectedMachine>(context); var processRepository = new Repository<Process>(context); var processReportRepository = new Repository<ProcessReport>(context); var causeRepository = new Repository<Cause>(context); var selectedMachineList = selectedMachineRepository.GetAll(); var processReportList = processReportRepository.GetAll(); var causeList = causeRepository.GetAll(); var prQuery = from selmachine in selectedMachineList.Where(x => x.StateStationActivityMachine != null && x.StateStationActivityMachine.Machine.Id == record.MachineId && x.Process != null && x.Process.StateStationActivity != null && x.Process.StartDateTime < record.End && x.Process.EndDateTime > record.Start) from processReport in processReportList.Where(pr => selmachine.Process != null && pr.Process != null && pr.Process.Id == selmachine.Process.Id && pr.StartDateTime < record.End && pr.EndDateTime > record.Start) from stpr in processReport.DefectionReports let start = (processReport.StartDateTime < record.Start) ? record.Start : processReport.StartDateTime let end = (processReport.EndDateTime > record.End) ? record.End : processReport.EndDateTime let hours = (end - start).TotalHours let ratio = hours / processReport.DurationSeconds let cycleTime = processReport.Process.StateStationActivity.CycleTime select new { productDefection = stpr.ProductDefection, //stoppage hours h = (stpr.LostTime + stpr.LostCount * cycleTime) * ratio, }; //ppm by product if (isByProduct) { var s1Query = from stoppageReport in prQuery group stoppageReport by stoppageReport.productDefection.Product into prodGroup let h = prodGroup.Sum(x => x.h) orderby h descending select new { h, txt = prodGroup.Key.Name, g = prodGroup, id = prodGroup.Key.Id }; double total1 = s1Query.Sum(x => x.h); foreach (var rowC1 in s1Query) { var detail1 = new OeeRecordDetail { ParentHours = total1, Hours = rowC1.h, Text = rowC1.txt, Id = rowC1.id }; record.DefectionDetails.Add(detail1); var s2Query = from stpr in prQuery where stpr.productDefection.Product == rowC1.g.Key group stpr by stpr.productDefection.Defection into defGroup let h = defGroup.Sum(x => x.h) orderby h descending select new { h, txt = defGroup.Key.Name, g = defGroup, id = defGroup.Key.Id }; double total2 = s2Query.Sum(x => x.h); foreach (var rowC2 in s2Query) { var detail2 = new OeeRecordDetail { ParentHours = total2, Hours = rowC2.h, Text = rowC2.txt, Id = rowC2.id, ParentId = rowC1.id }; detail1.SubRecords.Add(detail2); } } } //ppm by defection else { var s1Query = from stoppageReport in prQuery group stoppageReport by stoppageReport.productDefection.Defection into defGroup let h = defGroup.Sum(x => x.h) orderby h descending select new { h, txt = defGroup.Key.Name, g = defGroup, id = defGroup.Key.Id }; double total1 = s1Query.Sum(x => x.h); foreach (var rowC1 in s1Query) { var detail1 = new OeeRecordDetail { ParentHours = total1, Hours = rowC1.h, Text = rowC1.txt, Id = rowC1.id }; record.DefectionDetails.Add(detail1); var s2Query = from stpr in prQuery where stpr.productDefection.Defection == rowC1.g.Key group stpr by stpr.productDefection.Product into prodGroup let h = prodGroup.Sum(x => x.h) orderby h descending select new { h, txt = prodGroup.Key.Name, g = prodGroup, id = prodGroup.Key.Id }; double total2 = s2Query.Sum(x => x.h); foreach (var rowC2 in s2Query) { var detail2 = new OeeRecordDetail { ParentHours = total2, Hours = rowC2.h, Text = rowC2.txt, Id = rowC2.id, ParentId = rowC1.id }; detail1.SubRecords.Add(detail2); } } } } }
public void FillOEEStoppageByMachine(OeeRecord record) { using (var context = new SoheilEdmContext()) { var selectedMachineRepository = new Repository<SelectedMachine>(context); var processRepository = new Repository<Process>(context); var processReportRepository = new Repository<ProcessReport>(context); var causeRepository = new Repository<Cause>(context); var selectedMachineList = selectedMachineRepository.GetAll(); var processReportList = processReportRepository.GetAll(); var causeList = causeRepository.GetAll(); var prQuery = from selmachine in selectedMachineList.Where(x => x.StateStationActivityMachine != null && x.StateStationActivityMachine.Machine.Id == record.MachineId && x.Process != null && x.Process.StateStationActivity != null && x.Process.StartDateTime < record.End && x.Process.EndDateTime > record.Start) from processReport in processReportList.Where(pr => selmachine.Process != null && pr.Process != null && pr.Process.Id == selmachine.Process.Id && pr.StartDateTime < record.End && pr.EndDateTime > record.Start) from stpr in processReport.StoppageReports let start = (processReport.StartDateTime < record.Start) ? record.Start : processReport.StartDateTime let end = (processReport.EndDateTime > record.End) ? record.End : processReport.EndDateTime let hours = (end - start).TotalHours let ratio = hours / processReport.DurationSeconds let cycleTime = processReport.Process.StateStationActivity.CycleTime select new { PrId = processReport.Id, l3 = stpr.Cause, l2 = stpr.Cause.Parent, l1 = stpr.Cause.Parent.Parent, //stoppage hours h = (stpr.LostTime + stpr.LostCount * cycleTime) * ratio, }; var s1Query = from stpr in prQuery group stpr by stpr.l1 into g1 let h = g1.Sum(x => x.h) orderby h descending select new { h, txt = g1.Key.Name, g = g1, }; double total1 = s1Query.Sum(x => x.h); foreach (var rowC1 in s1Query) { var detail1 = new OeeRecordDetail { ParentHours = total1, Hours = rowC1.h, Text = rowC1.txt, Id = rowC1.g.Key.Id }; record.StoppageDetails.Add(detail1); var s2Query = from stpr in prQuery where stpr.l1 == rowC1.g.Key group stpr by stpr.l2 into g2 let h = g2.Sum(x => x.h) orderby h descending select new { h, txt = g2.Key.Name, g = g2 }; double total2 = s2Query.Sum(x => x.h); foreach (var rowC2 in s2Query) { var detail2 = new OeeRecordDetail { ParentHours = total2, Hours = rowC2.h, Text = rowC2.g.Key.Name, Id = rowC2.g.Key.Id, ParentId = rowC1.g.Key.Id }; detail1.SubRecords.Add(detail2); var s3Query = from stpr in prQuery where stpr.l2 == rowC2.g.Key group stpr by stpr.l3 into g3 let h = g3.Sum(x => x.h) orderby h descending select new { h, txt = g3.Key.Name, g = g3 }; double total3 = s3Query.Sum(x => x.h); foreach (var rowC3 in s3Query) { var detail3 = new OeeRecordDetail { ParentHours = total3, Hours = rowC3.h, Text = rowC3.g.Key.Name, Id = rowC3.g.Key.Id, ParentId = rowC2.g.Key.Id }; detail2.SubRecords.Add(detail3); } } } } }
public void FillOEEByMachine(OeeRecord record) { using (var context = new SoheilEdmContext()) { var selectedMachineRepository = new Repository<SelectedMachine>(context); var processRepository = new Repository<Process>(context); var processReportRepository = new Repository<ProcessReport>(context); var selectedMachineList = selectedMachineRepository.GetAll(); var processReportList = processReportRepository.GetAll(); var pQuery = from selmachine in selectedMachineList.Where(x => x.StateStationActivityMachine != null && x.StateStationActivityMachine.Machine.Id == record.MachineId && x.Process != null && x.Process.StateStationActivity != null && x.Process.StartDateTime < record.End && x.Process.EndDateTime > record.Start) let process = selmachine.Process let start = (process.StartDateTime < record.Start) ? record.Start : process.StartDateTime let end = (process.EndDateTime > record.End) ? record.End : process.EndDateTime select new { model = process, rew = process.StateStationActivity.StateStation.State.OnProductRework.Rework, start, end, cycleTime = process.StateStationActivity.CycleTime }; record.MainScheduledTime = pQuery.Where(x => x.rew == null).Sum(x => (x.end - x.start).TotalHours); record.ReworkScheduledTime = pQuery.Where(x => x.rew != null).Sum(x => (x.end - x.start).TotalHours); var prQuery = from process in pQuery from processReport in processReportList.Where(pr => process != null && pr.Process != null && pr.Process.Id == process.model.Id && pr.StartDateTime < record.End && pr.EndDateTime > record.Start ) let start = (processReport.StartDateTime < record.Start) ? record.Start : processReport.StartDateTime let end = (processReport.EndDateTime > record.End) ? record.End : processReport.EndDateTime let hours = (end - start).TotalHours let ratio = hours / processReport.DurationSeconds select new { PrId = processReport.Id, model = processReport, //reported hours hours, //stoppage hours sr = (processReport.StoppageReports.Sum(x => x.LostTime) + processReport.StoppageReports.Sum(x => x.LostCount) * process.cycleTime) * ratio, //defection hours dr = (processReport.DefectionReports.Sum(x => x.LostTime) + processReport.DefectionReports.Sum(x => x.LostCount) * process.cycleTime) * ratio, //produced g1 hours g1 = processReport.ProducedG1 * process.cycleTime * ratio, }; record.ProductionTime = prQuery.Sum(x => x.g1); record.IdleTime = prQuery.Sum(x => x.hours - x.g1 - x.dr - x.sr); record.DefectionTime = prQuery.Sum(x => x.dr); record.StoppageTime = prQuery.Sum(x => x.sr); } }
/// <summary> /// View calls this method to load its index infromation from database /// </summary> public void Load(OeeType ot) { Timeline.Clear(); var dt = DateTime.Now.GetNorooz(); switch (ot.Interval) { case OeeType.OeeInterval.Monthly: dt = dt.AddDays(ot.MonthStart - 1); int months = (int)DateTime.Now.GetPersianMonth(); for (int i = 0; i < months; i++) { var vm = new OeeMachineDetailVm(); vm.Selected += () => { if (SelectedDetail != null) SelectedDetail.IsSelected = false; SelectedDetail = vm; }; Timeline.Add(vm); //load data var start = dt; if (i == months - 1) { dt = DateTime.Now; } else { dt = dt.AddDays(dt.GetPersianMonthDays()); } var end = dt; var data = new OeeRecord(Model.Id, start, end); data.TimeRange = start.GetPersianMonth().ToString(); _data.Add(data); vm.Load(data); } break; case OeeType.OeeInterval.Weekly: dt = dt.AddDays(-(int)dt.GetPersianDayOfWeek()); int weeks = DateTime.Now.GetPersianWeekOfYear() + 2; for (int i = 0; i < weeks; i++) { var vm = new OeeMachineDetailVm(); vm.Selected += () => { if (SelectedDetail != null) SelectedDetail.IsSelected = false; SelectedDetail = vm; }; Timeline.Add(vm); //load data var start = dt; if (i == weeks - 1) { dt = DateTime.Now; } else { dt = dt.AddDays(7); } var end = dt; var data = new OeeRecord(Model.Id, start, end); data.TimeRange = string.Format("از {0} الی {1}", start.ToPersianDateString(), end.ToPersianDateString()); _data.Add(data); vm.Load(data); } break; case OeeType.OeeInterval.Daily: dt = dt.Add(ot.DayStart); int days = DateTime.Now.GetPersianDayOfYear(); for (int i = 0; i < days; i++) { var vm = new OeeMachineDetailVm(); vm.Selected += () => { if (SelectedDetail != null) SelectedDetail.IsSelected = false; SelectedDetail = vm; }; Timeline.Add(vm); //load data var start = dt; if (i == days - 1) { dt = DateTime.Now; } else { dt = dt.AddDays(1); } var end = dt; var data = new OeeRecord(Model.Id, start, end); data.TimeRange = start.ToPersianCompactDateString(); _data.Add(data); vm.Load(data); } break; default: break; } if (Timeline.Any()) Timeline.LastOrDefault().SelectCommand.Execute(); }
private void refresh(OeeRecord data) { TimeText = data.TimeRange; OEE = data.OEE; AvailabilityRate = data.AvailabilityRate; EfficiencyRate = data.EfficiencyRate; SchedulingRate = data.SchedulingRate; QualityRate = data.QualityRate; ScheduledTime = new IndexTime(data.MainScheduledTime, data.TotalHours); ReworkTime = new IndexTime(data.ReworkScheduledTime, data.TotalHours); UnscheduledTime = new IndexTime(data.TotalHours - data.ScheduledTime, data.TotalHours); AvailableTime = new IndexTime(data.AvailableTime, data.TotalHours); StoppageTime = new IndexTime(data.StoppageTime, data.TotalHours); WorkingTime = new IndexTime(data.WorkingTime, data.TotalHours); UnreportedTime = new IndexTime(data.UnreportedTime, data.TotalHours); IdleTime = new IndexTime(data.IdleTime, data.TotalHours); UnsStpTime = new IndexTime(data.UnscheduledTime + data.StoppageTime, data.TotalHours); ProductionTime = new IndexTime(data.ProductionTime, data.TotalHours); DefectionTime = new IndexTime(data.DefectionTime, data.TotalHours); LostTime = new IndexTime(data.TotalHours - data.WorkingTime, data.TotalHours); //commands DefectionTime.Selected += item => { data.LoadDefectionDetails(item.IsByProduct); this.DefectionTime.SubItems.Clear(); foreach (var l1 in data.DefectionDetails) { var vm1 = new IndexTime(l1.Hours, l1.ParentHours, l1.Text); vm1.Selected += i => DefectionTime.CurrentItem = vm1; foreach (var l2 in l1.SubRecords) { var vm2 = new IndexTime(l2.Hours, l2.ParentHours, l2.Text); vm1.SubItems.Add(vm2); } this.DefectionTime.SubItems.Add(vm1); } }; StoppageTime.Selected += item => { data.LoadStoppageDetails(); this.StoppageTime.SubItems.Clear(); foreach (var l1 in data.StoppageDetails) { var vm1 = new IndexTime(l1.Hours, l1.ParentHours, l1.Text); vm1.Selected += i => StoppageTime.CurrentItem = vm1; foreach (var l2 in l1.SubRecords) { var vm2 = new IndexTime(l2.Hours, l2.ParentHours, l2.Text); vm2.Selected += i => { if (StoppageTime.CurrentItem != null) StoppageTime.CurrentItem.CurrentItem = vm2; }; foreach (var l3 in l2.SubRecords) { var vm3 = new IndexTime(l3.Hours, l3.ParentHours, l3.Text); //vm3.Selected += i => vm2.CurrentItem = vm3; vm2.SubItems.Add(vm3); } vm1.SubItems.Add(vm2); } this.StoppageTime.SubItems.Add(vm1); } }; }
public void Load(OeeRecord data) { _data = data; refresh(data); }