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)

Problema no grafico

Eu implementei a funcionalidade para adicionar o livro, quantidade e ano da venda na tabela e exibir no grafico, porém quando adiciono um segundo livro com o ano que nao seja 2016, ele adiciona no primeiro livro.

Ex: - Adiciono livro1, ano 2016, quantidade 50. Exibe no grafico corretamente.

- Adiciono livro2, ano 2017, quantidade 100.
ao inves de ele criar a nova coluna para o livro 2 com o ano 2017 preenchido, ele preenche a segunda coluna no livro1. Igual mostra na imagem a baixo. Gostaria que ele adicionasse corretamente, mas não sei o que fazer.

Imagem da tela mostrando o grafico

http://pt-br.tinypic.com/r/2j4t2tt/9

public class VendasBean implements Serializable{

//demais atributos

private BarChartModel vendasModel;

    @PostConstruct
    public void init() {
        createVendasModel();
    }

    private void createVendasModel() {
        vendasModel = initVendasModel();

//        vendasModel.setTitle("Vendas");
        vendasModel.setLegendPosition("ne");

        Axis xAxis = vendasModel.getAxis(AxisType.X);
        xAxis.setLabel("Título");
        Axis yAxis = vendasModel.getAxis(AxisType.Y);
        yAxis.setLabel("Quantidade");
        yAxis.setMin(0);
        yAxis.setMax(1000);
    }

    private BarChartModel initVendasModel() {

        BarChartModel model = new BarChartModel();

        Set<Integer> buscaAno = buscaAno();

        for (Integer ano : buscaAno) {

                ChartSeries vendaSeries = new ChartSeries();

                List<Venda> vendas = buscaVendas(ano);
                vendaSeries.setLabel(Integer.toString(ano));

                for (Venda venda : vendas) {
                    vendaSeries.set(venda.getLivro().getTitulo(), venda.getQuantidade());
                }
                model.addSeries(vendaSeries);
        }
        return model;
    }

    @Transacional
    public List<Venda> buscaVendas(Integer ano) {
        List<Venda> buscaVendas = this.vendaDao.buscaVendas(ano);
        return buscaVendas;
    }

    @Transacional
    public Set<Integer> buscaAno(){
        List<Integer> anos = vendaDao.buscaAno();
        Set<Integer> anosSet = new TreeSet<Integer>(anos);
        return anosSet;
    }
    //demais metodos 
}    

No meu banco


mysql> select * from venda;
+----+------+------------+----------+
| id | ano  | quantidade | livro_id |
+----+------+------------+----------+
| 86 | 2016 |        123 |        1 |
| 87 | 2017 |        123 |        2 |
+----+------+------------+----------+
2 rows in set (0.00 sec)
4 respostas

Thiago, tudo bem ?

Parece que tá tudo certo, no seu banco de dados a quantidade está igual, o que faz o seu gráfico estar mostrando dados certos.

O problema está no nome do livro, o livro de ID 2 não é MEAN. Ele deveria criar uma nova coluna para o livro de ID 2 e embaixo mostrar o seu nome

Pode ser, que ele tenha se perdido, tenta fazer o seguinte, crie novas compras, com os mesmos ids, mas anos diferentes:

 | 2016 |        123 |        1 |
 | 2016 |        123 |        2|

 | 2017 |        123 |        1 |
 | 2017 |        123 |        2 |
solução

Matheus, o jeito que conseguir fazer funcionar do jeito que eu gostaria foi assim. Peguei todos os livros do banco, setei todos eles no ChartSeries. Agora meu grafico já carrega com todos os livros que possuo no banco, so aguardando a adicionar as quantidades e o ano. Desse modo ele nao se perde mais, ao adicionar um livro com venda em um ano e outro livro de outro ano.

http://pt-br.tinypic.com/r/9fqiib/9

    private BarChartModel initVendasModel() {

        BarChartModel model = new BarChartModel();

        Set<Integer> buscaAno = buscaAno();
        //peguei todos os livros no banco
        List<Livro> todosLivros = getLivros();

        for (Integer ano : buscaAno) {

            ChartSeries vendaSeries = new ChartSeries();

            List<Venda> vendas = buscaVendas(ano);
            vendaSeries.setLabel(Integer.toString(ano));

            //setei todos os livros no ChartSeries 
            for (Livro livro : todosLivros) {
                vendaSeries.set(livro.getTitulo(), null);
            }

            for (Venda venda : vendas) {
                vendaSeries.set(venda.getLivro().getTitulo(), venda.getQuantidade());
            }

            model.addSeries(vendaSeries);
        }
        return model;
    }