Rodrigues Gustavo escreveu (#note-2):
Lilia 王莉君 escreveu (#note-1):
Olá Gustavo,
tudo bem?
Primeiro, precisamos entender qual é o objetivo desse design. É para acompanhar relatórios do fluxo de pagamento diário ou para saber o fluxo exato de cada operador durante os três turnos? Se você deseja acompanhar o fluxo diário, basta registrar o horário exato de término do trabalho do último operador como o horário final para gerar o relatório.
Na verdade, como um padrão de exibição no Shop back-end, atualmente não conseguimos realizar a associação que você mencionou, ligando ao operador e, em seguida, atribuindo automaticamente os pagamentos gerados após as 24h do último operador ao dia anterior.
Agurdamos a sua resposta
Bom dia a todos,
Fiz uma pesquisa rápida e encontrei este exemplo para nosso chamado:
Java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
// ... (Suponha uma classe Transacao com atributos dataHora e valor)
public class RelatorioCaixa {
public static Map<String, Double> gerarRelatorio(List<Transacao> transacoes, LocalDateTime dataInicio, LocalDateTime dataFim) {
// Formatador para exibir a data no formato desejado (ex: dd/MM/yyyy)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
// Função para determinar o "dia de trabalho"
return transacoes.stream()
.collect(Collectors.groupingBy(
t -> formatter.format(t.getDataHora().withHour(0).withMinute(0).withSecond(0)),
Collectors.summingDouble(Transacao::getValor)
));
}
public static void main(String[] args) {
// ... (Exemplo de uso)
List<Transacao> transacoes = ...; // Carregar as transações
LocalDateTime dataInicio = LocalDateTime.of(2023, 11, 1, 0, 0);
LocalDateTime dataFim = LocalDateTime.of(2023, 11, 30, 23, 59);
Map<String, Double> relatorio = gerarRelatorio(transacoes, dataInicio, dataFim);
// Imprimir o relatório
relatorio.forEach((data, valorTotal) -> {
System.out.println("Data: " + data + ", Valor Total: " + valorTotal);
});
}
}
LocalDateTime : Utilizada para representar data e hora com alta precisão.
DateTimeFormatter : Formata a data de acordo com o padrão desejado.
groupingBy : Agrupa as transações por "dia de trabalho", definido como a data com a hora zerada.
summingDouble : Calcula a soma dos valores para cada grupo.
Dia de Trabalho : Ao zerar as horas, minutos e segundos da data da transação, estamos essencialmente definindo o "dia de trabalho" como o dia em que a transação ocorreu, independentemente da hora.
Essa abordagem permite definir diferentes critérios para determinar o "dia de trabalho" se necessário.
Formatação: O DateTimeFormatter oferece controle sobre como a data é apresentada no relatório.
A classe LocalDateTime oferece diversas outras funções para manipulação de datas e horas, como adição de dias, horas, etc.
Com base no exemplo a dica é determinar o dia de trabalho para gerar nossos relatórios.
@Lucas Lisboa @Cissy 崔敬仪 @henry 吴健
Me sinalize se este exemplo esclareceu as dúvidas.
Obrigado