Olá estou precisando de ajuda para utilizar os novos recursos do Java8 para ordenar pelos LocalDateTimes e Fazer a soma do total das vendas de cada dia, após isso, preciso ordenar novamente para selecionar as datas com maior venda.
Sera utilizado para criar um relatório dos períodos de maior venda.
Segue abaixo um pouco do código feito até o momento, estamos utilizando JOOQ para o banco com Postgresql.
import static br.com.mark1softwares.alkimya.table.public_.tables.Categoria.CATEGORIA;
import static br.com.mark1softwares.alkimya.table.public_.tables.ItemPedido.ITEM_PEDIDO;
import static br.com.mark1softwares.alkimya.table.public_.tables.Pedido.PEDIDO;
import static br.com.mark1softwares.alkimya.table.public_.tables.Pessoa.PESSOA;
import static br.com.mark1softwares.alkimya.table.public_.tables.Produto.PRODUTO;
import static java.util.Objects.requireNonNull;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import javax.swing.plaf.basic.BasicSliderUI.TrackListener;
import org.jooq.DSLContext;
import org.jooq.Record3;
import org.jooq.Record4;
import org.jooq.Record5;
import org.jooq.Record6;
import org.jooq.Record7;
import org.jooq.Record8;
import org.jooq.Result;
import org.jooq.Transaction;
import br.com.mark1softwares.alkimya.model.po.ItemPedido;
import br.com.mark1softwares.alkimya.model.po.Pedido;
import br.com.mark1softwares.alkimya.model.po.Pessoa;
import br.com.mark1softwares.alkimya.model.po.Produto;
/**
* @author Christopher N. Mauricio
* @author George A. da Silveira
*/
public class RelatorioDAO {
private static final br.com.mark1softwares.alkimya.table.public_.tables.Pedido PED = PEDIDO;
private static final br.com.mark1softwares.alkimya.table.public_.tables.Produto PRO = PRODUTO;
private static final br.com.mark1softwares.alkimya.table.public_.tables.Pessoa PES = PESSOA;
private static final br.com.mark1softwares.alkimya.table.public_.tables.ItemPedido ITEM_PED = ITEM_PEDIDO;
private static final br.com.mark1softwares.alkimya.table.public_.tables.Categoria CAT = CATEGORIA;
private static final String NOME = "nome";
private static final String DATA = "data";
private static final String TOTAL = "total";
private static final String CUSTO = "custo";
private static final String LUCRO = "lucro";
private static final String ID_PESSOA = "pessoa";
private static final String ID_PEDIDO = "pedido";
private final DSLContext create;
private Timestamp dataInicial;
private Timestamp dataFinal;
private PedidoDAO daoPedido;
private ProdutoDAO daoProduto;
// private ItemPedidoDao daoItemPedido;
public RelatorioDAO(DSLContext create) {
this.create = requireNonNull(create);
this.daoPedido = new PedidoDAO(create);
}
public List<Pedido> vendaPorPeriodoCustoLucro(LocalDateTime dataInicial, LocalDateTime dataFinal) {
this.dataInicial = Timestamp.valueOf(dataInicial);
this.dataFinal = Timestamp.valueOf(dataFinal);
Result<Record3<Integer, Integer, Timestamp>> result = create.select(PED.ID, PED.ID_PESSOA, PED.DATA_FINALIZADO)
.from(PEDIDO)
.where(PED.EXCLUIDO.isFalse().and(PED.DATA_FINALIZADO.between(this.dataInicial).and(this.dataFinal)))
.orderBy(PED.DATA_FINALIZADO.asc()).fetch();
return getPedidos(result);
}
private List<Pedido> getPedidos(Result<?> result) {
return result.map(record -> {
Pessoa pessoa = new Pessoa();
pessoa.setId(record.getValue(PED.ID_PESSOA));
Pedido pedido = new Pedido();
pedido.setId(record.getValue(PED.ID))
.setPessoa(pessoa)
.setDataFinalizado(record.getValue(PED.DATA_FINALIZADO).toLocalDateTime());
pedido.addAll(daoPedido.buscaItemPedidoPorIdPedido(pedido.getId()));
return pedido;
});
}
public void estatisticaPeriodoDeMaiorVenda() {
LocalDateTime dataInicial = LocalDateTime.now().minusDays(90);
LocalDateTime dataFinal = LocalDateTime.now();
List<Pedido> vendaPorPeriodoCustoLucro = vendaPorPeriodoCustoLucro(dataInicial, dataFinal);
vendaPorPeriodoCustoLucro.stream()
.sorted()
;
}
}