Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Duvida em gerar gráfico

Olá pessoal,

Estou tentando montar um gráfico de 'Tickets' resolvido por cliente, no caso eu estou conseguindo fazer mas ta uma gambiarra e não está gerenciavel, alguém pode me dar uma luz?

Segue meu código:

JPA

   public List<Ticket> getGrafico() {
        List<Ticket> grafico;
        grafico = em.createQuery("select t from Ticket t where t.status='Resolved'")
                .getResultList();
        return grafico;
    }
@PostConstruct
    public void init() {
        this.ticketLista = repository.getGrafico();
    }

    public PieChartModel getGraph() {

        PieChartModel pizzaGraph = new PieChartModel();

        int form = 0, gdy = 0, po = 0;
        for (Ticket ticket : ticketLista) {
            if (ticket.getFornecedor().getId() == 9) {
                form++;
            } else if (ticket.getFornecedor().getId() == 10) {
                gdy++;
            } else if (ticket.getFornecedor().getId() == 12) {
                po++;
            }
            pizzaGraph.set("Form",form);
            pizzaGraph.set("Gdy",gdy);
            pizzaGraph.set("P.O",po);
        }
        return pizzaGraph;

    }

Gostaria de fazer sem ter que passar esse valor estatico pro Java, jogar algum sql assim:

select count(idfornecedor) from ticket group by idfornecedor

E jogar isso no grafico, porém não estou conseguindo.

Se alguem puder me ajudar ai, agradeço :D

Valeuuu!

7 respostas

Isaque, tudo bem ?

O que você pode fazer é criar a query de maneira dinâmica recebendo esse fornecedor ai.

Nisso vai te dar uma lista, contudo você teria que abrir 3 conexões no banco.

Outra coisa que você pode fazer é tentar usar java 8 e os lances de lambda para tentar te auxiliar que também daria certo.

Fiz algo parecido em um projeto :

https://github.com/MathBrandino/CRMPap/blob/master/src/main/java/br/com/alphatechnology/crmpap/grafico/GeradorGrafico.java

Eai Matheus, tudo certo.

Desculpe nao entendi direito, como assim uma query dinamica recebendo o fornecedor?

Tipo eu posso ter N fornecedores sacas, isso que nao entendo como vou ter q fazer, primeira vez utilizando JPA :/

Alguém pra dar uma força?

Oi Isaque,

Algo parecido com isso :

https://github.com/MathBrandino/CRMPap/blob/master/src/main/java/br/com/alphatechnology/crmpap/dao/ChamadoDao.java

Não é bem isso, tipo eu preciso que o gráfico pegue registros do banco de dados sem ter que passar parâmetros.

Do jeito que ta meu código, eu vou ter que ir direto no fonte adicionar mais um if a cada novo fornecedor, estou tentando de um jeito que nao precise sacas

solução

Olá Matheus,

Ainda não consegui resolver, mas acho que está quase encaminhado hehe.

Segue o que eu fiz:

  public List<Object[]> listaFornecedor() {
        List<Object[]> resultados
                = em.createQuery("SELECT f.nome as nome ,COUNT(t) as total FROM Ticket t "
                        + "inner join t.fornecedor f "
                        + "GROUP BY t.fornecedor").
                        getResultList();

        return resultados;
    }
private List<Object[]> fornecedores = new ArrayList<>();
fornecedores = repository.listaFornecedor();
  public BarChartModel getGraphForn() {
        BarChartModel model = new BarChartModel();
        BarChartSeries series = new BarChartSeries();

        for (Object[] result : fornecedores) {
            String nome = (String) result[0];
            int count = ((Number) result[1]).intValue();

            System.out.println(nome+ "   " + count);
            series.set(nome, count);
        }
        return model;
    }
Resultado do  System.out.println(nome+ "   " + count);

[EL Fine]: sql: 2018-02-05 21:02:43.322--ServerSession(94264142)--Connection(1889983036)--Thread(Thread[http-nio-8084-exec-70,5,main])--SELECT t0.nome, COUNT(t1.ID) FROM FORNECEDOR t0, TICKET t1 WHERE (t0.ID = t1.idfornecedor) GROUP BY t0.ID, t0.contato, t0.email, t0.nome, t0.telefone, t0.idplanta, t0.idprojeto
TESTE   2
TESTE2   1
TEST3   1
TESTE   2
TESTE2   1
TEST3   1
TESTE   2
TESTE2   1
TEST3   1
TESTE   2
TESTE2   1
TEST3   1
 <p:chart type="bar" model="#{graficoController.graphForn}" style="height: 30% ; width: 100%" />

O fornecedor TESTE tem 2 tickets cadastrados e os outros 2 apenas 1, porém não está aparecendo no meu gráfico.. Ele nao carrega no front e nem aparece mensagem de erro ai nao sei onde to errando kkk.

Valeuu!

Esquece, sou retardado esqueci de adicionar a serie ao model KKKKKKKKKKKKKKKKKKKKKK por isso nao tava aparecendo. Isso ali resolveu!!!!