コード例 #1
0
        private ChartViewModel GetKpisOptions(MachineInfoModel machine, PeriodModel period)
        {
            var options = new ChartViewModel();
            var data    = _stateService.GetAggregationStates(machine, period, enDataType.Dashboard);


            var stateProd = data.FirstOrDefault(w => w.enState == enState.Production);

            var stateManual = data.FirstOrDefault(w => w.enState == enState.Manual);


            var totalValue = machine.MachineTypeId == (int)enMachineType.Troncatrice || machine.MachineTypeId == (int)enMachineType.CentroLavoro ?
                             stateProd?.ElapsedTime + stateManual?.ElapsedTime : stateProd?.ElapsedTime;
            var totalOn = data.Where(w => w.enState != enState.Offline).Select(s => s.ElapsedTime).Sum();

            decimal?percProd = Common.GetPercentage(totalValue, totalOn);

            options.series = new List <SerieViewModel>()
            {
                new SerieViewModel {
                    stateProductivityGreenThreshold  = machine.StateProductivityGreenThreshold ?? 0,
                    stateProductivityYellowThreshold = machine.StateProductivityYellowThreshold ?? 0,
                    y = CommonViewService.getKpiViewModel(percProd, machine.StateProductivityGreenThreshold, machine.StateProductivityYellowThreshold).value ?? (decimal)0
                }
            };
            return(options);
        }
コード例 #2
0
        private ProductivityVueModel GetVueModel(List <EfficiencyStateMachineModel> operatorActivities, MachineInfoModel machine, PeriodModel period)
        {
            var result = new ProductivityVueModel();

            if (machine.MachineTypeId == (int)enMachineType.CentroLavoro || machine.MachineTypeId == (int)enMachineType.LineaTaglio ||
                (machine.MachineTypeId == (int)enMachineType.LineaTaglioLavoro))
            {
                result.currentState = GetCurrentState(machine.Id);
            }

            var data = _pieceService.GetAggregationPieces(machine, period, enDataType.Dashboard);

            //var operatorActivities =_stateService.GetOperatorsActivity(machine, period.StartDate, period.EndDate);
            if (data.Count == 0)
            {
                return(result);
            }

            // tempo lordo: devo andare sulla tabella degli stati perchè non ce l'ho sui pezzi
            var grossTime      = operatorActivities.Sum(m => m.TotalTime);
            var netTime        = operatorActivities.Sum(m => m.ProducingTime);
            var productionTime = operatorActivities.Sum(m => m.ProducionModeTime ?? 0);
            //var grossTime = data.Select(s => s.ElapsedTime).Sum();
            var doneCount   = data.Select(s => s.CompletedCount).Sum() ?? 0;
            var redoneCount = data.Select(s => s.RedoneCount).Sum() ?? 0;

            // kpi pezzi all'ora
            var ratio = Common.GetRatioProductivity(doneCount, grossTime);

            result.kpi = CommonViewService.getKpiViewModel(ratio, machine.PiecesProductivityGreenThreshold, machine.PiecesProductivityYellowThreshold);

            // pieces
            var piece = new PieceViewModel();

            piece.total = doneCount + redoneCount;

            var done = new ProdDataModel();

            done.perc   = Common.GetPercentage(doneCount, piece.total);
            done.number = doneCount;
            piece.done  = done;

            var redone = new ProdDataModel();

            redone.perc   = Common.GetPercentage(redoneCount, piece.total);
            redone.number = redoneCount;
            piece.redone  = redone;

            result.piece = piece;

            // materials
            var dataBars = _barService.GetAggregationBar(machine, period);

            if (dataBars.Count > 0)
            {
                var    barLength    = dataBars.Select(s => s.Length ?? 0).Sum().RoundToInt();
                double cutoffLength = dataBars.Select(s => s.OffcutLength ?? 0).Sum();
                var    totalLength  = barLength + cutoffLength;

                var material = new MaterialViewModel();
                material.total = (totalLength / 1000);

                var bar = new ProdDataModel();
                bar.perc     = Common.GetPercentage(barLength, totalLength);
                bar.number   = ((double)barLength / 1000);
                material.bar = bar;

                //Nelle troncatrici questi dati sono nascosti, non ci sono,
                //per le altre è da verificare cosa prendono
                var cutoff = new ProdDataModel();
                cutoff.perc     = Common.GetPercentage(cutoffLength, totalLength);
                cutoff.number   = ((double)cutoffLength / 1000);
                material.cutoff = cutoff;

                result.material = material;
            }


            // phases
            var phases = new List <ProdDataModel>();

            switch (machine.MachineTypeId)
            {
            case (int)enMachineType.Troncatrice:
            case (int)enMachineType.LineaTaglio:
                var cut = new ProdDataModel();
                cut.text = Resource.Cut;
                cut.perc = Common.GetPercentage(netTime, grossTime);
                phases.Add(cut);
                break;

            case (int)enMachineType.CentroLavoro:
                var working = new ProdDataModel();
                working.text = Resource.Working;
                working.perc = Common.GetPercentage(productionTime, grossTime);
                phases.Add(working);
                break;

            default:
                working      = new ProdDataModel();
                working.text = Resource.Working;
                working.perc = Common.GetPercentage(data.Select(s => s.ElapsedTimeWorking ?? 0).Sum(), grossTime);
                phases.Add(working);

                var trim = new ProdDataModel();
                trim.text = Resource.Trim;
                trim.perc = Common.GetPercentage(data.Select(s => s.ElapsedTimeTrim ?? 0).Sum(), grossTime);
                phases.Add(trim);

                cut      = new ProdDataModel();
                cut.text = Resource.Cut;
                cut.perc = Common.GetPercentage(data.Select(s => s.ElapsedTimeCut ?? 0).Sum(), grossTime);
                phases.Add(cut);

                break;
            }

            result.phases = phases.OrderByDescending(o => o.perc).ToList();

            // operators
            //var dataOperators = _pieceService.GetAggregationPieces(machine, period, enDataType.Operators);

            var dataOperators = operatorActivities;

            if (dataOperators.Count > 0)
            {
                var groupOperator = dataOperators.GroupBy(g => new { g.Operator, g.TotalTime }).OrderByDescending(x => x.Key.TotalTime).ToList();

                if (groupOperator.Count <= 3)
                {
                    result.operators = groupOperator.Select(o => new ProdDataModel()
                    {
                        text = o.Key.Operator,
                        perc = Common.GetPercentage(o.Key.TotalTime ?? 0, grossTime)
                    }).OrderByDescending(p => p.perc).ToList();
                }
                else
                {
                    var firstGroup  = groupOperator.GetRange(0, 2);
                    var secondGroup = groupOperator.GetRange(2, groupOperator.Count - 2);

                    if (firstGroup.Count > 0)
                    {
                        result.operators = firstGroup.Select(o => new ProdDataModel()
                        {
                            text = o.Key.Operator,
                            perc = Common.GetPercentage(o.Key.TotalTime ?? 0, grossTime)
                        }).OrderByDescending(p => p.perc).ToList();
                    }

                    if (secondGroup.Count > 0)
                    {
                        var elpasedTimeTotal = secondGroup.Select(s => s.Key.TotalTime ?? 0).Sum();

                        result.operators.Add(new ProdDataModel()
                        {
                            text = Resource.Others,
                            perc = Common.GetPercentage(elpasedTimeTotal, grossTime)
                        });
                    }
                }
            }

            // gross time
            result.time = CommonViewService.getTimeViewModel(grossTime);

            return(result);
        }
コード例 #3
0
        private List <MesDataViewModel> GetVueModel(PlantModel plant, List <MachineInfoModel> allMachines, bool onlyActive)
        {
            var result = new List <MesDataViewModel>();

            var dataAllMachines = _mesService.GetPlantData(plant);

            if (onlyActive)
            {
                dataAllMachines = dataAllMachines.Where(m => m.Expired == false).ToList();
            }


            foreach (var dataMachine in dataAllMachines)
            {
                var mes = new MesDataViewModel();

                var machine = allMachines.FirstOrDefault(w => w.Id == dataMachine.MachineId);

                if (machine?.Type == null || machine.Model == null)
                {
                    continue;
                }

                mes.info = new MachineInfoViewModel
                {
                    id          = machine.Id,
                    description = machine.Description == string.Empty ? null : machine.Description,
                    model       = machine.Model.Name,
                    machineName = machine.MachineName,
                    icon        = machine.Type.Image,
                    expired     = dataMachine.Expired,
                    id_mtype    = machine.Type?.Id ?? 0,
                    serial      = machine.Serial
                };


                var data = dataAllMachines.FirstOrDefault(w => w.MachineId == machine.Id);

                if (data == null)
                {
                    result.Add(mes);
                    continue;
                }

                if (data.enActualState != null)
                {
                    mes.state = new StateViewModel
                    {
                        code = data.enActualState.GetDescription(),
                        text = LocalizationService.GetResource(data.enActualState.ToString())
                    };

                    mes.error = data.ActualStateCode;
                }

                if (data.ActualJobPerc != null)
                {
                    mes.job = new JobDataModel
                    {
                        code = data.ActualJobCode,
                        perc = (data.ActualJobPerc ?? 0).RoundToInt()
                    };
                }

                mes.@operator = data.ActualOperator;

                if (data.StateEfficiency != null)
                {
                    mes.efficiency          = new EfficiencyVueModel();
                    mes.efficiency.kpi      = CommonViewService.getKpiViewModel((decimal)(data.StateEfficiency ?? 0), machine.StateProductivityGreenThreshold, machine.StateProductivityYellowThreshold);
                    mes.efficiency.overfeed = CommonViewService.getKpiViewModel((decimal)(data.StateOverfeedAvg ?? 0), null, null);
                }

                if (data.PieceCompletedCount != null)
                {
                    mes.productivity     = new ProductivityVueModel();
                    mes.productivity.kpi = CommonViewService.getKpiViewModel(Common.GetRatioProductivity(data.PieceCompletedCount, data.PieceElapsedTime),
                                                                             machine.PiecesProductivityGreenThreshold,
                                                                             machine.PiecesProductivityYellowThreshold);
                    mes.productivity.piece = new PieceViewModel()
                    {
                        total = (data.PieceCompletedCount ?? 0) + (data.PieceRedoneCount ?? 0)
                    };
                }

                if (data.AlarmCount != null)
                {
                    mes.errors          = new ErrorViewModel();
                    mes.errors.quantity = data.AlarmCount;
                }
                result.Add(mes);
            }

            return(result);
        }
コード例 #4
0
        private EfficiencyVueModel GetVueModel(MachineInfoModel machine, PeriodModel period)
        {
            var result = new EfficiencyVueModel();

            var data = _stateService.GetAggregationStates(machine, period, enDataType.Dashboard);

            if (data.Count == 0)
            {
                return(result);
            }

            var stateProd = data.FirstOrDefault(w => w.enState == enState.Production);

            var totalProd = stateProd?.ElapsedTime;



            var totalOn = data.Where(w => w.enState != enState.Offline).Select(s => s.ElapsedTime).Sum();
            //long? totalOff = data.Where(w => w.enState == enState.Offline).Select(s => s.ElapsedTime).Sum();

            decimal?percProd = Common.GetPercentage(totalProd, totalOn);


            var total = new TotalTimeModel();

            total.on = CommonViewService.getTimeViewModel(totalOn);
            //total.off = CommonViewService.getTimeViewModel(totalOff);
            result.total = total;

            var states = new List <StateViewModel>();

            // state prod
            var prod = new StateViewModel();

            prod.code      = enState.Production.GetDescription();
            prod.text      = enState.Production.ToLocalizedString(_contextService.GetContext().ActualLanguage.InitialsLanguage);
            prod.perc      = percProd;
            prod.time      = CommonViewService.getTimeViewModel(totalProd);
            prod.orderView = _stateService.GetOrderViewState(enState.Production.GetDescription());
            states.Add(prod);

            // state pause
            var pause = new StateViewModel();

            pause.code = enState.Pause.GetDescription();
            pause.text = enState.Pause.ToLocalizedString(_contextService.GetContext().ActualLanguage.InitialsLanguage);

            var statePause = data.FirstOrDefault(w => w.enState == enState.Pause);

            if (statePause != null)
            {
                var totalPause = statePause.ElapsedTime;
                pause.perc = Common.GetPercentage(totalPause, totalOn);
                pause.time = CommonViewService.getTimeViewModel(totalPause);
            }
            pause.orderView = _stateService.GetOrderViewState(enState.Pause.GetDescription());
            states.Add(pause);

            // state manual
            var manual = new StateViewModel();

            manual.code = enState.Manual.GetDescription();
            manual.text = enState.Manual.ToLocalizedString(_contextService.GetContext().ActualLanguage.InitialsLanguage);

            var stateManual = data.FirstOrDefault(w => w.enState == enState.Manual);

            if (stateManual != null)
            {
                var totalManual = stateManual.ElapsedTime;
                manual.perc = Common.GetPercentage(totalManual, totalOn);
                manual.time = CommonViewService.getTimeViewModel(totalManual);
            }
            manual.orderView = _stateService.GetOrderViewState(enState.Manual.GetDescription());
            states.Add(manual);

            // state error
            var error = new StateViewModel();

            error.code = enState.Error.GetDescription();
            error.text = enState.Error.ToLocalizedString(_contextService.GetContext().ActualLanguage.InitialsLanguage);

            var stateError = data.FirstOrDefault(w => w.enState == enState.Error);

            if (stateError != null)
            {
                var totalError = stateError.ElapsedTime;
                error.perc = Common.GetPercentage(totalError, totalOn);
                error.time = CommonViewService.getTimeViewModel(totalError);
            }
            error.orderView = _stateService.GetOrderViewState(enState.Error.GetDescription());
            states.Add(error);

            result.states = states.OrderBy(o => o.orderView).ToList();


            var overfeed = stateProd?.OverfeedAvg;

            decimal percKpi;

            if (machine.MachineTypeId == (int)enMachineType.Troncatrice || machine.MachineTypeId == (int)enMachineType.CentroLavoro)
            {
                percKpi = (decimal)percProd + (manual.perc ?? 0);
            }
            else
            {
                percKpi = (decimal)percProd;
            }

            result.kpi      = CommonViewService.getKpiViewModel(percKpi, machine.StateProductivityGreenThreshold, machine.StateProductivityYellowThreshold);
            result.overfeed = CommonViewService.getKpiViewModel(overfeed, machine.OverfeedGreenThreshold, machine.OverfeedYellowThreshold);


            return(result);
        }