Пример #1
0
        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);
            }
        }
Пример #2
0
        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));
        }