-
Notifications
You must be signed in to change notification settings - Fork 2
/
AvstemmingService.kt
50 lines (45 loc) · 2.27 KB
/
AvstemmingService.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package no.nav.familie.ef.sak.avstemming
import no.nav.familie.ef.sak.iverksett.IverksettClient
import no.nav.familie.ef.sak.tilkjentytelse.TilkjentYtelseService
import no.nav.familie.kontrakter.ef.iverksett.AndelTilkjentYtelseDto
import no.nav.familie.kontrakter.ef.iverksett.KonsistensavstemmingDto
import no.nav.familie.kontrakter.ef.iverksett.KonsistensavstemmingTilkjentYtelseDto
import no.nav.familie.kontrakter.felles.ef.StønadType
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import java.time.LocalDateTime
import java.util.UUID
@Service
class AvstemmingService(
private val iverksettClient: IverksettClient,
private val tilkjentYtelseService: TilkjentYtelseService,
) {
private val logger = LoggerFactory.getLogger(javaClass)
fun konsistensavstemOppdrag(stønadstype: StønadType, avstemmingstidspunkt: LocalDateTime) {
val emptyDto = KonsistensavstemmingDto(stønadstype, emptyList(), avstemmingstidspunkt)
val datoForAvstemming = avstemmingstidspunkt.toLocalDate()
val tilkjenteYtelser = tilkjentYtelseService
.finnTilkjentYtelserTilKonsistensavstemming(datoForAvstemming = datoForAvstemming, stønadstype = stønadstype)
val transaksjonId = UUID.randomUUID()
val chunks = tilkjenteYtelser.chunked(1000)
loggKonsistensavstemming(stønadstype, tilkjenteYtelser, transaksjonId, chunks.size)
iverksettClient.sendStartmeldingKonsistensavstemming(emptyDto, transaksjonId)
chunks.forEach {
val request = KonsistensavstemmingDto(stønadstype, it, avstemmingstidspunkt)
iverksettClient.sendKonsistensavstemming(request, transaksjonId)
}
iverksettClient.sendSluttmeldingKonsistensavstemming(emptyDto, transaksjonId)
}
private fun loggKonsistensavstemming(
stønadstype: StønadType,
konsistensavstemming: List<KonsistensavstemmingTilkjentYtelseDto>,
transaksjon: UUID,
chunks: Int,
) {
val beløp = konsistensavstemming.sumOf { it.andelerTilkjentYtelse.sumOf(AndelTilkjentYtelseDto::beløp) }
logger.info(
"Konsistensavstemming stønad=$stønadstype transaksjon=$transaksjon antall=${konsistensavstemming.size} " +
"beløp=$beløp chunks=$chunks",
)
}
}