예제 #1
0
        public async Task <(Report, string)> GetReportPerProductionOrderId(int productionOrderId, int thingId)
        {
            long startDate = 0;
            long endDate   = 0;
            //Verifica a data inicio e data fim da ordem de produção
            var histState = await _otherAPIService.GetHistState(productionOrderId);

            if (histState == null)
            {
                return(null, "Historian State not found");
            }

            var histStateStartDate = histState.Where(x => x.state == "active").FirstOrDefault();

            var histStateEndDate = histState.Where(x => x.state == "ended").FirstOrDefault();

            if (histStateStartDate == null)
            {
                return(null, "Start date null");
            }

            if (histStateEndDate == null)
            {
                endDate = 999999999999999999;
            }
            else
            {
                endDate = histStateEndDate.date;
            }

            startDate = histStateStartDate.date;

            var report = await _otherAPIService.GetReportAPI(thingId, startDate, endDate);

            if (report == null)
            {
                return(null, "Not found report");
            }

            return(report, string.Empty);
        }
        public async Task <(RelatorioAlarm, HttpStatusCode)> getAlarms()
        {
            try{
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                string     query   = "?thingId=" + this.thingId + "&startDate=" + this.startDate + "&endDate=" + this.endDate + "&startat=0&quantity=500";
                UriBuilder builder = new UriBuilder(this.configuration["historianAlarm"]);
                Console.WriteLine("Conectando api historianAlarm" + this.configuration["historianAlarm"]);
                var json = JObject.Parse(await client.GetStringAsync(builder.ToString() + query))["values"].ToString();
                this.listaAlarm = JsonConvert.DeserializeObject <List <Alarm> >(json);
                Console.WriteLine("Conectou o retorno foi = " + JsonConvert.SerializeObject(listaAlarm));
                Console.WriteLine("Ordenando lista");
                Console.WriteLine("Ordenou retorno = " + JsonConvert.SerializeObject(this.listaAlarm));
                int i = 0;

                var reportBigTable = await _otherAPIService.GetReportAPI(this.thingId, this.startDate, this.endDate);

                foreach (Alarm a in this.listaAlarm)
                {
                    nomes.Add(a.alarmName);
                }

                foreach (string item in nomes)
                {
                    var g = (from t in listaAlarm where t.alarmName == item select t).ToList();
                    g           = g.OrderBy(c => c.alarmDescription).ToList();
                    tabela      = new TabelaFront(thingId, item);
                    tabela.data = new List <Dictionary <string, string> >();
                    foreach (var s in g)
                    {
                        var    rolos = reportBigTable.tags.Where(x => x.name.ToLower() == "rolo");
                        string rolo  = "";
                        if (rolos != null && rolos.Count() > 0)
                        {
                            var roloIndex = rolos.FirstOrDefault().timestamp.IndexOf(rolos.FirstOrDefault().timestamp.FirstOrDefault(a => a >= s.startDate));
                            if (roloIndex < 0)
                            {
                                roloIndex = rolos.FirstOrDefault().timestamp.IndexOf(rolos.FirstOrDefault().timestamp.OrderByDescending(a => a).FirstOrDefault(a => a <= s.startDate));
                            }

                            if (roloIndex >= 0)
                            {
                                rolo = rolos.FirstOrDefault().value.ElementAt(roloIndex);
                            }
                        }

                        var    ordens = reportBigTable.tags.Where(x => x.name.ToLower() == "ordem");
                        string ordem  = "";
                        if (rolos != null && rolos.Count() > 0)
                        {
                            var ordemIndex = ordens.FirstOrDefault().timestamp.IndexOf(ordens.FirstOrDefault().timestamp.FirstOrDefault(a => a >= s.startDate));
                            if (ordemIndex < 0)
                            {
                                ordemIndex = ordens.FirstOrDefault().timestamp.IndexOf(ordens.FirstOrDefault().timestamp.OrderByDescending(a => a).FirstOrDefault(a => a <= s.startDate));
                            }

                            if (ordemIndex >= 0)
                            {
                                ordem = ordens.FirstOrDefault().value.ElementAt(ordemIndex);
                            }
                        }

                        tabela.data.Add(new Dictionary <string, string> {
                            ["dateIni"] = s.startDate.ToString(),
                            ["dateEnd"] = s.endDate.ToString(),
                            ["type"]    = s.alarmDescription,
                            ["Ordem"]   = ordem,
                            ["rolo"]    = rolo
                        });
                    }
                    tabelas.Add(tabela);
                    var group = g.GroupBy(x => new DateTime(x.startDate).Date);
                    alarm      = new AlarmFront(thingId.ToString(), item);
                    alarm.data = new List <Dictionary <string, string> >();
                    Console.WriteLine("Inicio do Loop de grupos por data");
                    foreach (var s in group)
                    {
                        Console.WriteLine("Contando alarmes");
                        alarm.data.Add(new Dictionary <string, string> {
                            ["category"]    = s.First().startDate.ToString(),
                            ["muito alto"]  = s.Where(x => x.alarmDescription.ToLower() == "muito alto").Count().ToString(),
                            ["alto"]        = s.Where(x => x.alarmDescription.ToLower() == "alto").Count().ToString(),
                            ["baixo"]       = s.Where(x => x.alarmDescription.ToLower() == "baixa").Count().ToString(),
                            ["muito baixo"] = s.Where(x => x.alarmDescription.ToLower() == "muito alto").Count().ToString(),
                            ["offline"]     = s.Where(x => x.alarmDescription.ToLower() == "offline").Count().ToString()
                        });
                    }
                    i++;
                    Console.WriteLine("Adicionou " + i + "elemento na lista de dictionary");
                    alarms.Add(alarm);
                }
                relatorio = new RelatorioAlarm(alarms, tabelas);
                return(relatorio, HttpStatusCode.OK);
            }catch (Exception e) {
                Console.WriteLine(); Console.WriteLine();
                Console.Write("Erro : ");
                Console.Write(e);
                Console.WriteLine(); Console.WriteLine();
                return(null, HttpStatusCode.BadRequest);
            }
        }