Código CadastrarPedido:
package br.com.alura.teste;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import br.com.alura.Categoria;
import br.com.alura.Cliente;
import br.com.alura.ItemPedido;
import br.com.alura.Pedido;
import br.com.alura.Produto;
import br.com.alura.dao.CategoriaDao;
import br.com.alura.dao.ClienteDao;
import br.com.alura.dao.PedidoDao;
import br.com.alura.dao.ProdutoDao;
import br.com.alura.util.JPAUtil;
public class CadastrarPedido {
public static void main(String[] args) {
popularBancoDeDados();
EntityManager eManager = JPAUtil.getEntityManager();
ProdutoDao produtoDao = new ProdutoDao(eManager);
ClienteDao clienteDao = new ClienteDao(eManager);
Produto produto = produtoDao.bucarPorId(1l);
Produto produto2 = produtoDao.bucarPorId(2l);
Produto produto3 = produtoDao.bucarPorId(3l);
Cliente cliente = clienteDao.bucarPorId(1l);;
eManager.getTransaction().begin();
Pedido pedido = new Pedido(cliente);
pedido.adicionarItem(new ItemPedido(10, pedido, produto));
pedido.adicionarItem(new ItemPedido(40, pedido, produto2));
Pedido pedido2 = new Pedido(cliente);
pedido.adicionarItem(new ItemPedido(2, pedido, produto3));
PedidoDao pedidoDao = new PedidoDao(eManager);
pedidoDao.cadastrar(pedido);
pedidoDao.cadastrar(pedido2);
BigDecimal totalVendido = pedidoDao.valorTotalVendido();
System.out.println("Valor total: "+totalVendido);
List<Object[]>relatorio = pedidoDao.relatorioDeVendas();
for (Object[] objects : relatorio) {
System.out.println(objects[0]);
System.out.println(objects[1]);
System.out.println(objects[2]);
}
}
private static void popularBancoDeDados() {
Categoria celulares = new Categoria("CELULARES");
Categoria videogames = new Categoria("VIDEOGAMES");
Categoria informatica = new Categoria("INFORMATICA");
Produto celular = new Produto("Xiaomi Redmi", "Muito Legal", new BigDecimal("800"), celulares);
Produto videogame = new Produto("PS5", "Da Hora", new BigDecimal("5000"), videogames);
Produto macbook = new Produto("MacBook", "Muito Bom", new BigDecimal("3000"), informatica);
Cliente cliente = new Cliente("Rodrigo", "123456");
EntityManager eManager = JPAUtil.getEntityManager();
ProdutoDao produtoDao = new ProdutoDao(eManager);
CategoriaDao categoriaDao = new CategoriaDao(eManager);
ClienteDao clienteDao = new ClienteDao(eManager);
eManager.getTransaction().begin();
categoriaDao.cadastrar(celulares);
categoriaDao.cadastrar(videogames);
categoriaDao.cadastrar(informatica);
produtoDao.cadastrar(celular);
produtoDao.cadastrar(videogame);
produtoDao.cadastrar(macbook);
clienteDao.cadastrar(cliente);
eManager.getTransaction().commit();
eManager.close();
}
}
Código PedidoDao
package br.com.alura.dao;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import br.com.alura.Pedido;
public class PedidoDao {
private EntityManager eManager;
public PedidoDao(EntityManager eManager) {
this.eManager = eManager;
}
public void cadastrar(Pedido pedido) {
this.eManager.persist(pedido);
}
public BigDecimal valorTotalVendido() {
String jpql = "SELECT SUM(p.valorTotal) FROM Pedido p";
return eManager.createQuery(jpql,BigDecimal.class).getSingleResult();
}
public List<Object[]> relatorioDeVendas() {
String jpql = "SELECT produto.nome, "
+ "SUM(item.quantidade), "
+ "MAX(pedido.data) "
+ "FROM Pedido pedido "
+ "JOIN pedido.itens item "
+ "JOIN item.produto produto "
+ "GROUP BY produto.nome "
+ "ORDER BY item.quantidade DESC";
return eManager.createQuery(jpql, Object[].class).getResultList();
}
}