Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Historikkvask skal kunne rydde i rekkefølgefeil fra k9-sak når det er… #1908

Merged
merged 2 commits into from
Feb 20, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,23 @@ class K9KlageTilLosHistorikkvaskTjeneste(
var forrigeOppgave: OppgaveV3? = null
transactionalManager.transaction { tx ->
val behandlingProsessEventer = behandlingProsessEventKlageRepository.hentMedLås(tx, uuid).eventer
behandlingProsessEventer.forEach { event ->
val høyesteInternVersjon =
oppgaveV3Tjeneste.hentHøyesteInternVersjon(uuid.toString(), "k9-klage", "K9", tx)!!
var eventNrForBehandling = 0L
for (event in behandlingProsessEventer) {
if (eventNrForBehandling > høyesteInternVersjon) { break }
val losOpplysningerSomManglerIKlageDto = k9sakBeriker.berikKlage(event.påklagdBehandlingEksternId)!!
val oppgaveDto = EventTilDtoMapper.lagOppgaveDto(event, losOpplysningerSomManglerIKlageDto, forrigeOppgave)

oppgaveV3Tjeneste.oppdaterEkstisterendeOppgaveversjon(oppgaveDto, tx)
oppgaveV3Tjeneste.oppdaterEkstisterendeOppgaveversjon(oppgaveDto, eventNrForBehandling, tx)

eventTeller++
loggFremgangForHver100(eventTeller, "Prosessert $eventTeller eventer")

forrigeOppgave = oppgaveV3Tjeneste.hentOppgaveversjon(
område = "K9", eksternId = oppgaveDto.id, eksternVersjon = oppgaveDto.versjon, tx = tx
)
eventNrForBehandling++
}
forrigeOppgave = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ class K9SakTilLosAdapterTjeneste(
.filter { merknad -> merknad.merknadKoder.contains("HASTESAK") }.isNotEmpty()
val behandlingProsessEventer = behandlingProsessEventK9Repository.hentMedLås(tx, uuid).eventer
val nyeBehandlingsopplysningerFraK9Sak = k9SakBerikerKlient.hentBehandling(uuid)
var eventNrForBehandling = 0L
behandlingProsessEventer.forEach { event ->
var oppgaveDto = EventTilDtoMapper.lagOppgaveDto(event, forrigeOppgave)
.leggTilFeltverdi(
Expand All @@ -141,11 +142,12 @@ class K9SakTilLosAdapterTjeneste(
loggFremgangForHver100(eventTeller, "Prosessert $eventTeller eventer")
}
forrigeOppgave = oppgave
eventNrForBehandling++
}

// Midlertidig påfunn for å sette markør for hastesak. Mer permanent løsning kommer senere, og da kan dette slettes
if (sisteOppgaveDtoTilHastesakvask != null) {
oppgaveV3Tjeneste.oppdaterEkstisterendeOppgaveversjon(sisteOppgaveDtoTilHastesakvask!!, tx)
oppgaveV3Tjeneste.oppdaterEkstisterendeOppgaveversjon(sisteOppgaveDtoTilHastesakvask!!, eventNrForBehandling, tx)
}

forrigeOppgave = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,11 @@ class K9SakTilLosHistorikkvaskTjeneste(
val hastesak = oppgaveRepositoryV2.hentMerknader(uuid.toString(), false)
.filter { merknad -> merknad.merknadKoder.contains("HASTESAK") }.isNotEmpty()
val behandlingProsessEventer = behandlingProsessEventK9Repository.hentMedLås(tx, uuid).eventer
behandlingProsessEventer.forEach { event ->
val høyesteInternVersjon =
oppgaveV3Tjeneste.hentHøyesteInternVersjon(uuid.toString(), "k9-sak", "K9", tx)!!
var eventNrForBehandling = 0L
for (event in behandlingProsessEventer) {
if (eventNrForBehandling > høyesteInternVersjon) { break }
if (event.eldsteDatoMedEndringFraSøker == null && nyeBehandlingsopplysningerFraK9Sak != null && nyeBehandlingsopplysningerFraK9Sak.eldsteDatoMedEndringFraSøker != null) {
event.copy(eldsteDatoMedEndringFraSøker = nyeBehandlingsopplysningerFraK9Sak.eldsteDatoMedEndringFraSøker)
//ser ut som noen gamle mottatte dokumenter kan mangle innsendingstidspunkt.
Expand All @@ -92,15 +96,17 @@ class K9SakTilLosHistorikkvaskTjeneste(

oppgaveDto = k9SakTilLosAdapterTjeneste.ryddOppObsoleteOgResultatfeilFra2020(event, oppgaveDto, nyeBehandlingsopplysningerFraK9Sak)

oppgaveV3Tjeneste.oppdaterEkstisterendeOppgaveversjon(oppgaveDto, tx)
oppgaveV3Tjeneste.oppdaterEkstisterendeOppgaveversjon(oppgaveDto, eventNrForBehandling, tx)

eventTeller++
loggFremgangForHver100(eventTeller, "Prosessert $eventTeller eventer")

forrigeOppgave = oppgaveV3Tjeneste.hentOppgaveversjon(
område = "K9", eksternId = oppgaveDto.id, eksternVersjon = oppgaveDto.versjon, tx = tx
)
eventNrForBehandling++
}

forrigeOppgave = null

behandlingProsessEventK9Repository.markerVasketHistorikk(uuid, tx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ internal fun Route.OppgaveV3Api() {
}

post ( "/{område}/{eksternId}/{eksternVersjon}" ) {
call.respond(HttpStatusCode.NotImplemented)
/*
if (config.nyOppgavestyringRestAktivert()) {

requestContextService.withRequestContext(call) {
val oppgaveDto = call.receive<OppgaveDto>()
transactionalManager.transaction { tx ->
Expand All @@ -70,5 +73,7 @@ internal fun Route.OppgaveV3Api() {
} else {
call.respond(HttpStatusCode.Locked)
}

*/
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class OppgaveV3Repository(
private val log = LoggerFactory.getLogger(OppgaveV3Repository::class.java)

fun nyOppgaveversjon(oppgave: OppgaveV3, tx: TransactionalSession) {
val (eksisterendeId, eksisterendeVersjon) = hentVersjon(tx, oppgave)
val (eksisterendeId, eksisterendeVersjon) = hentOppgaveIdOgHøyesteInternversjon(tx, oppgave.eksternId, oppgave.oppgavetype.eksternId, oppgave.oppgavetype.område.eksternId)

eksisterendeId?.let { deaktiverVersjon(eksisterendeId, oppgave.endretTidspunkt, tx) }

Expand Down Expand Up @@ -81,7 +81,7 @@ class OppgaveV3Repository(

fun hentOppgaveversjonenFør(
eksternId: String,
eksternVersjon: String,
internVersjon: Long,
oppgavetype: Oppgavetype,
tx: TransactionalSession
): OppgaveV3? {
Expand All @@ -91,16 +91,11 @@ class OppgaveV3Repository(
select *
from oppgave_v3 ov
where ekstern_id = :eksternId
and versjon = (
select versjon - 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tipper dette er årsaken til at vaskeevent-testene feiler. Tester som sender flere eventer vil vel forsøke å hente sin egen versjon, som ikke eksisterer enda

from oppgave_v3 ov
where ekstern_id = :eksternId
and ekstern_versjon = :eksternVersjon
)
and versjon = :internVersjon
""".trimIndent(),
mapOf(
"eksternId" to eksternId,
"eksternVersjon" to eksternVersjon
"internVersjon" to internVersjon
)
).map { row ->
OppgaveV3(
Expand Down Expand Up @@ -197,19 +192,20 @@ class OppgaveV3Repository(
return antall > 0
}

fun oppdaterReservasjonsnøkkel(eksternId: String, eksternVersjon: String, reservasjonsnokkel: String, tx: TransactionalSession) {
fun oppdaterReservasjonsnøkkelOgEksternVersjon(eksternId: String, eksternVersjon: String, internVersjon: Long, reservasjonsnokkel: String, tx: TransactionalSession) {
tx.run(
queryOf(
"""
update oppgave_v3
set reservasjonsnokkel = :reservasjonsnokkel
set reservasjonsnokkel = :reservasjonsnokkel, eksternVersjon = :eksternVersjon
where ekstern_id = :eksternId
and ekstern_versjon = :eksternVersjon
and intern_versjon = :internVersjon
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skulle vært versjon?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, det boblet opp en del syntax error greier i sqlene når jeg løste den andre feilen :) kommer fiks straks

""".trimIndent(),
mapOf(
"reservasjonsnokkel" to reservasjonsnokkel,
"eksternVersjon" to eksternVersjon,
"eksternId" to eksternId,
"eksternVersjon" to eksternVersjon
"internVersjon" to internVersjon
)
).asUpdateAndReturnGeneratedKey
)
Expand Down Expand Up @@ -281,7 +277,7 @@ class OppgaveV3Repository(

fun lagreFeltverdier(
eksternId: String,
eksternVersjon: String,
internVersjon: Long,
oppgaveFeltverdier: List<OppgaveFeltverdi>,
tx: TransactionalSession
) {
Expand All @@ -292,7 +288,7 @@ class OppgaveV3Repository(
SELECT id
FROM oppgave_v3
WHERE ekstern_id = :ekstern_id
AND ekstern_versjon = :ekstern_versjon
AND versjon = :intern_versjon
),
:oppgavefelt_id,
:verdi
Expand All @@ -301,7 +297,7 @@ class OppgaveV3Repository(
oppgaveFeltverdier.map { feltverdi ->
mapOf(
"ekstern_id" to eksternId,
"ekstern_versjon" to eksternVersjon,
"intern_versjon" to internVersjon,
"oppgavefelt_id" to feltverdi.oppgavefelt.id,
"verdi" to feltverdi.verdi
)
Expand All @@ -311,7 +307,7 @@ class OppgaveV3Repository(

fun slettFeltverdier(
eksternId: String,
eksternVersjon: String,
internVersjon: Long,
tx: TransactionalSession
) {
tx.update(
Expand All @@ -324,35 +320,38 @@ class OppgaveV3Repository(
from oppgavefelt_verdi ov
inner join oppgave_v3 o on ov.oppgave_id = o.id
where o.ekstern_id = :ekstern_id
and o.ekstern_versjon = :ekstern_versjon
and o.versjon = :intern_versjon
)
""".trimIndent(),
mapOf(
"ekstern_id" to eksternId,
"ekstern_versjon" to eksternVersjon
"intern_versjon" to internVersjon
)
)
)
}

private fun hentVersjon(tx: TransactionalSession, oppgave: OppgaveV3): Pair<Long?, Long?> {
//TODO: konsistenssjekk - skrive om til å hente alle oppgavene for gitt eksternId og sjekke at en og bare en versjon er aktiv = true
fun hentOppgaveIdOgHøyesteInternversjon(tx: TransactionalSession, oppgaveEksternId: String, oppgaveTypeEksternId: String, områdeEksternId: String): Pair<Long?, Long?> {
return tx.run(
queryOf(
"""
select versjon, id
select versjon, o.id
from oppgave_v3 o
where o.ekstern_id = :eksternId
and o.kildeomrade = :omrade
inner join oppgavetype ot on o.oppgavetype_id = ot.id
inner join omrade om on ot.omrade_id = om.id
where o.ekstern_id = :ekstern_id
and ot.ekstern_id = :oppgavetype_ekstern_id
and om.ekstern_id = :omrade_ekstern_id
and versjon =
(select max(versjon)
from oppgave_v3 oi
where oi.ekstern_id = o.ekstern_id
and oi.kildeomrade = o.kildeomrade)
""".trimIndent(),
mapOf(
"eksternId" to oppgave.eksternId,
"omrade" to oppgave.kildeområde
"ekstern_id" to oppgaveEksternId,
"oppgavetype_ekstern_id" to oppgaveTypeEksternId,
"omrade_ekstern_id" to områdeEksternId
)
).map { row -> Pair(row.long("id"), row.long("versjon")) }.asSingle
) ?: Pair(null, null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,16 @@ class OppgaveV3Tjeneste(
)
}

fun oppdaterEkstisterendeOppgaveversjon(oppgaveDto: OppgaveDto, tx: TransactionalSession) {
fun oppdaterEkstisterendeOppgaveversjon(oppgaveDto: OppgaveDto, eventNr: Long, tx: TransactionalSession) {
val oppgavetype = oppgavetypeRepository.hentOppgavetype(
område = oppgaveDto.område,
eksternId = oppgaveDto.type,
tx = tx
)

val forrigeOppgaveversjon =
oppgaveV3Repository.hentOppgaveversjonenFør(oppgaveDto.id, oppgaveDto.versjon, oppgavetype, tx)
val forrigeOppgaveversjon = if (eventNr >= 2) {
oppgaveV3Repository.hentOppgaveversjonenFør(oppgaveDto.id, eventNr, oppgavetype, tx)
} else { null }
var innkommendeOppgave = OppgaveV3(oppgaveDto = oppgaveDto, oppgavetype = oppgavetype)

val utledeteFelter = mutableListOf<OppgaveFeltverdi>()
Expand All @@ -110,20 +111,31 @@ class OppgaveV3Tjeneste(
innkommendeOppgave = OppgaveV3(innkommendeOppgave, innkommendeOppgave.felter.plus(utledeteFelter))
innkommendeOppgave.valider()

//historikkvasktjenesten skal sørge for at oppgaven med internVersjon = eventNr faktisk eksisterer
oppgaveV3Repository.slettFeltverdier(
eksternId = oppgaveDto.id,
eksternVersjon = oppgaveDto.versjon,
eksternId = innkommendeOppgave.eksternId,
internVersjon = eventNr,
tx = tx
)

oppgaveV3Repository.lagreFeltverdier(
eksternId = oppgaveDto.id,
eksternVersjon = oppgaveDto.versjon,
eksternId = innkommendeOppgave.eksternId,
internVersjon = eventNr,
oppgaveFeltverdier = innkommendeOppgave.felter,
tx = tx
)

oppgaveV3Repository.oppdaterReservasjonsnøkkel(oppgaveDto.id, oppgaveDto.versjon, oppgaveDto.reservasjonsnøkkel, tx)
oppgaveV3Repository.oppdaterReservasjonsnøkkelOgEksternVersjon(
eksternId = innkommendeOppgave.eksternId,
eksternVersjon = innkommendeOppgave.eksternVersjon,
internVersjon = eventNr,
reservasjonsnokkel = innkommendeOppgave.reservasjonsnøkkel,
tx = tx)
}

fun hentHøyesteInternVersjon(oppgaveEksternId: String, opppgaveTypeEksternId: String, områdeEksternId: String, tx: TransactionalSession): Long? {
val (_, versjon) = oppgaveV3Repository.hentOppgaveIdOgHøyesteInternversjon(tx, oppgaveEksternId, opppgaveTypeEksternId, områdeEksternId)
return versjon
}

fun nyEksternversjon(oppgaveDto: OppgaveDto, tx: TransactionalSession): Boolean {
Expand Down
Loading