private BottleNeckViewModel GetBottleNeckViewModel(List <LineBalancingStateViewModel> lineBalancingStateViewModels) { List <double> graphTimes = new List <double>(); BottleNeckViewModel bottleNeckViewModel = new BottleNeckViewModel(); if (lineBalancingStateViewModels.Count != 0) { var firstBottleNeck = lineBalancingStateViewModels.OrderByDescending(r => r.GraphTime).FirstOrDefault(); var secondBottleNeck = lineBalancingStateViewModels.OrderByDescending(r => r.GraphTime).Skip(1).FirstOrDefault(); bottleNeckViewModel.FirstBottleNeckValue = firstBottleNeck.GraphTime; bottleNeckViewModel.FirstBottleNeckName = firstBottleNeck.OperationName; bottleNeckViewModel.SecondBottleNeckValue = secondBottleNeck.GraphTime; bottleNeckViewModel.SecondBottleNeckName = secondBottleNeck.OperationName; return(bottleNeckViewModel); } else { return(bottleNeckViewModel); } }
public async Task <IActionResult> Graph(int?id) { if (id == null) { return(NotFound()); } var particularLineBalancing = await _context.ParticularLineBalancings .Include(m => m.StandardOperationTime) .Where(m => m.Id == id).FirstOrDefaultAsync(); var line = _context.Lines.Find(particularLineBalancing.LineId); if (line == null) { return(NotFound()); } var lineBalancingStates = await _context.LineBalancingStates.Where(m => m.ParticularLineBalancingId == id).ToListAsync(); if (lineBalancingStates.Count == 0) { return(NotFound()); } List <LineBalancingStateViewModel> lineBalancingStateViewModels = GetLineBalancingStateViewModels(lineBalancingStates); BottleNeckViewModel bottleNeckViewModel = GetBottleNeckViewModel(lineBalancingStateViewModels); //double dailyWorkHours = 8; //double allowance = 20; //double firstBottleNeck = GetFirstBottleNeck(lineBalancingStateViewModels); double targetLbRatio = 85; string firstBottleNeckOperationName = bottleNeckViewModel.FirstBottleNeckName; double?firstBottleNeckValue = bottleNeckViewModel.FirstBottleNeckValue; string secondBottleNeckOperationName = bottleNeckViewModel.SecondBottleNeckName; double?secondBottleNeckValue = bottleNeckViewModel.SecondBottleNeckValue; double totalNumberOfOperators = GetTotalNumberOfOperators(lineBalancingStateViewModels); double totalProcessingTime = GetTotalCycleTime(lineBalancingStateViewModels); double bpt = GetBpt(totalProcessingTime, totalNumberOfOperators); double ucl = bpt / 0.85; double lcl = 2 * bpt - ucl; double actualLbRatio = bpt / (double)firstBottleNeckValue; double actualOutput = GetDailyOutput(totalNumberOfOperators, totalProcessingTime, actualLbRatio); double targetOutput = GetDailyOutput(totalNumberOfOperators, totalProcessingTime, targetLbRatio / 100); particularLineBalancing.ActualLineBalancingRatio = actualLbRatio; _context.Update(particularLineBalancing); await _context.SaveChangesAsync(); var sotValue = await _context.SectionStandardOperationTimes .Where(m => m.StandardOperationTimeId == particularLineBalancing.StandardOperationTimeId && m.SectionId == line.SectionId) .FirstOrDefaultAsync(); //ViewData["DailyWorkHours"] = dailyWorkHours; //ViewData["Allowance"] = allowance; ViewData["TotalNumberOfOperators"] = totalNumberOfOperators; ViewData["TotalProcessingTime"] = totalProcessingTime; ViewData["FirstBottleNeckValue"] = firstBottleNeckValue; ViewData["FirstBottleNeckOperationName"] = firstBottleNeckOperationName; ViewData["SecondBottleNeckValue"] = secondBottleNeckValue; ViewData["SecondBottleNeckOperationName"] = secondBottleNeckOperationName; ViewData["Bpt"] = bpt; ViewData["ActualOutput"] = actualOutput; ViewData["TargetOutput"] = targetOutput; ViewData["TargetLbRatio"] = (targetLbRatio).ToString("#.##"); ViewData["ActualLbRatio"] = (actualLbRatio * 100).ToString("#.##"); ViewData["Ucl"] = ucl; ViewData["Lcl"] = lcl; ViewData["Line"] = line; ViewData["TotalSotValue"] = Math.Round(sotValue.SotValue, 3); return(View(lineBalancingStateViewModels)); }