Ajuda com cálculo em lista para fazer somatório

Preciso de ajuda em um cálculo de total da receita de vendas que estou fazendo aqui.

https://snag.gy/wMVlDJ.jpg

A lógica é a seguinte: enquanto o codigoProduto for igual eu faço a soma . A receita é a soma * produto.getValor e o campo que eu quero é o somatório das receitas…

Fiz assim :

public Long buscaTotalParaDiretor(Long codigo) {
	String codigoProduto = "";
	String codigoProdutoAnterior ="";
	List<Produto> produtos = manager
			.createQuery("select p from Produto p where p.empresa.codigo =:codigo order by trim(p.codigoProduto)",
					Produto.class)
			.setParameter("codigo", codigo).getResultList();
	Long totalReceita = 0L;
	Long receita = 0L;
	Long soma = 0L;

	int i = 0;
	for (Produto p : produtos) {
		if (i == 0) {
			codigoProduto = p.getCodigoProduto().trim();
		}
		if (codigoProduto.equals(p.getCodigoProduto().trim())) {
			soma += p.getQuantidadeRecente();
			 System.out.println("Codigo " + codigoProduto +" Soma + " + soma + "Valor: " + p.getValor());
			receita = soma * p.getValor().longValue();
			System.out.println("Receita + " + receita);
			totalReceita += receita;
			System.out.println("Total + " + totalReceita);
		}
		codigoProduto = p.getCodigoProduto().trim();
		i++;
	}

	System.out.println("Total : " + totalReceita);
	return totalReceita;
}

A saída no console é a seguinte

Codigo 0124940 Soma + 102Valor: 2.30
Receita + 204
Total + 204
Codigo 0124940 Soma + 151Valor: 2.30
Receita + 302
Total + 506
Codigo 0218308 Soma + 203Valor: 15.00
Receita + 3045
Total + 3551
Codigo 0218308 Soma + 259Valor: 15.00
Receita + 3885
Total + 7436
Codigo 0218308 Soma + 299Valor: 15.00
Receita + 4485
Total + 11921
Codigo 0907499 Soma + 465Valor: 18.00
Receita + 8370
Total + 20291
Codigo 0907499 Soma + 540Valor: 18.00
Receita + 9720
Total + 30011
Codigo 0907499 Soma + 581Valor: 18.00
Receita + 10458
Total + 40469
Codigo 1078755 Soma + 691Valor: 45.00
Receita + 31095
Total + 71564
Codigo 1078755 Soma + 809Valor: 45.00
Receita + 36405
Total + 107969
Codigo 1078755 Soma + 926Valor: 45.00
Receita + 41670
Total + 149639
Codigo 2001144 Soma + 997Valor: 20.00
Receita + 19940
Total + 169579
Codigo 2001144 Soma + 1076Valor: 20.00
Receita + 21520
Total + 191099
Codigo 2001144 Soma + 1175Valor: 20.00
Receita + 23500
Total + 214599
Codigo 2001152 Soma + 1357Valor: 54.00
Receita + 73278
Total + 287877
Codigo 2001152 Soma + 1448Valor: 54.00
Receita + 78192
Total + 366069
Codigo 2001152 Soma + 1587Valor: 54.00
Receita + 85698
Total + 451767
Codigo 2001160 Soma + 1785Valor: 46.00
Receita + 82110
Total + 533877
Codigo 2001160 Soma + 1883Valor: 46.00
Receita + 86618
Total + 620495
Codigo 2001160 Soma + 2058Valor: 46.00
Receita + 94668
Total + 715163
Codigo 2001217 Soma + 2122Valor: 51.00
Receita + 108222
Total + 823385
Codigo 2001217 Soma + 2228Valor: 51.00
Receita + 113628
Total + 937013
Codigo 2001217 Soma + 2367Valor: 51.00
Receita + 120717
Total + 1057730
Codigo 2001241 Soma + 2435Valor: 98.00
Receita + 238630
Total + 1296360
Codigo 2001241 Soma + 2553Valor: 98.00
Receita + 250194
Total + 1546554
Codigo 2001241 Soma + 2714Valor: 98.00
Receita + 265972
Total + 1812526
Codigo 2001268 Soma + 2775Valor: 60.00
Receita + 166500
Total + 1979026
Codigo 2001268 Soma + 2883Valor: 60.00
Receita + 172980
Total + 2152006
Codigo 2001268 Soma + 2981Valor: 60.00
Receita + 178860
Total + 2330866
Codigo 2001284 Soma + 3105Valor: 10.00
Receita + 31050
Total + 2361916
Codigo 2001284 Soma + 3224Valor: 10.00
Receita + 32240
Total + 2394156
Codigo 2001284 Soma + 3377Valor: 10.00
Receita + 33770
Total + 2427926
Codigo 2002205 Soma + 3582Valor: 87.00
Receita + 311634
Total + 2739560
Codigo 2002205 Soma + 3698Valor: 87.00
Receita + 321726
Total + 3061286
Codigo 2002205 Soma + 3904Valor: 87.00
Receita + 339648
Total + 3400934
Codigo 2002221 Soma + 4624Valor: 10.00
Receita + 46240
Total + 3447174
Codigo 2002221 Soma + 4744Valor: 10.00
Receita + 47440
Total + 3494614
Codigo 2002221 Soma + 4916Valor: 10.00
Receita + 49160
Total + 3543774
Total : 3543774

Como pode se ver a soma e a receita estão com valores diferentes do que eu quero.

Ola,

Mude o long pra double.
Pelo que entendi voce nao precisa dessa logica no java

Faça tudo no sql:

select p.codigoProduto

     , sum(p.valor * p.quantidadeRecente) as total
         , sum(p.quantidadeRecente) as qtdSolicitada 

  from Produto p 

 where p.empresa.codigo =:codigo 
 group by trim(p.codigoProduto) 
 order by trim(p.codigoProduto) desc
1 curtida

Com isso consegui calcular o total da receita para o Diretor de vendas.