Skip to content

Commit

Permalink
Merge pull request #627 from navikt/bigquery-skriv-til-tabell_KMH
Browse files Browse the repository at this point in the history
Bigquery skriv utkast til tabell
  • Loading branch information
klaramargrethehelgemo authored Dec 18, 2024
2 parents 27d6bc3 + 5245018 commit 8d32881
Show file tree
Hide file tree
Showing 10 changed files with 366 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import no.nav.common.client.aktoroppslag.PdlAktorOppslagClient
import no.nav.common.client.pdl.PdlClientImpl
import no.nav.common.job.leader_election.LeaderElectionClient
import no.nav.common.job.leader_election.LeaderElectionHttpClient
import no.nav.common.metrics.InfluxClient
import no.nav.common.metrics.MetricsClient
import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient
import no.nav.common.token_client.client.AzureAdOnBehalfOfTokenClient
import no.nav.common.utils.AuthUtils
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package no.nav.veilarbvedtaksstotte.domain.statistikk

import java.math.BigInteger
import java.time.LocalDateTime
import java.util.*


data class SakStatistikk(
val behandlingId: BigInteger,
val aktorId: String,
val oppfolgingPeriodeUUID: UUID? = null,
val behandlingUuid: UUID? = null,
val relatertBehandlingId: BigInteger? = null,
val relatertFagsystem: String? = null,
val sakId: String? = null,
val mottattTid: LocalDateTime,
val registrertTid: LocalDateTime? = null,
val ferdigbehandletTid: LocalDateTime? = null,
val endretTid: LocalDateTime? = null,
val tekniskTid: LocalDateTime? = null,
val sakYtelse: String? = null,
val behandlingType: String? = null,
val behandlingStatus: String? = null,
val behandlingResultat: String? = null,
val behandlingMetode: String? = null,
val innsatsgruppe: String? = null,
val hovedmal: String? = null,
val opprettetAv: String? = null,
val saksbehandler: String? = null,
val ansvarligBeslutter: String? = null,
val ansvarligEnhet: String? = null,
val avsender: String? = null,
val versjon: String? = null,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package no.nav.veilarbvedtaksstotte.repository

import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk
import org.springframework.jdbc.core.JdbcTemplate
import org.springframework.jdbc.core.RowMapper
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
import org.springframework.stereotype.Repository
import java.math.BigInteger
import java.util.*

@Repository
class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) {

val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate)

val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK"
val AKTOR_ID = "AKTOR_ID"
val OPPFOLGING_PERIODE_UUID = "OPPFOLGING_PERIODE_UUID"
val BEHANDLING_ID = "BEHANDLING_ID"
val BEHANDLING_UUID = "BEHANDLING_UUID"
val RELATERT_BEHANDLING_ID = "RELATERT_BEHANDLING_ID"
val RELATERT_FAGSYSTEM = "RELATERT_FAGSYSTEM"
val SAK_ID = "SAK_ID"
val MOTTATT_TID = "MOTTATT_TID"
val REGISTRERT_TID = "REGISTRERT_TID"
val FERDIGBEHANDLET_TID = "FERDIGBEHANDLET_TID"
val ENDRET_TID = "ENDRET_TID"
val TEKNISK_TID = "TEKNISK_TID"
val SAK_YTELSE = "SAK_YTELSE"
val BEHANDLING_TYPE = "BEHANDLING_TYPE"
val BEHANDLING_STATUS = "BEHANDLING_STATUS"
val BEHANDLING_RESULTAT = "BEHANDLING_RESULTAT"
val BEHANDLING_METODE = "BEHANDLING_METODE"
val INNSATSGRUPPE = "INNSATSGRUPPE"
val HOVEDMAL = "HOVEDMAL"
val OPPRETTET_AV = "OPPRETTET_AV"
val SAKSBEHANDLER = "SAKSBEHANDLER"
val ANSVARLIG_BESLUTTER = "ANSVARLIG_BESLUTTER"
val ANSVARLIG_ENHET = "ANSVARLIG_ENHET"
val AVSENDER = "AVSENDER"
val VERSJON = "VERSJON"

fun insertSakStatistikkRad(sakStatistikkRad: SakStatistikk) {
val sql =
"""
INSERT INTO $SAK_STATISTIKK_TABLE ($AKTOR_ID, $OPPFOLGING_PERIODE_UUID, $BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID,
$RELATERT_FAGSYSTEM, $SAK_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID,
$ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS,
$BEHANDLING_RESULTAT, $BEHANDLING_METODE, $INNSATSGRUPPE, $HOVEDMAL, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER,
$ANSVARLIG_ENHET, $AVSENDER, $VERSJON)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""

jdbcTemplate.update(
sql,
sakStatistikkRad.aktorId,
sakStatistikkRad.oppfolgingPeriodeUUID,
sakStatistikkRad.behandlingId,
sakStatistikkRad.behandlingUuid,
sakStatistikkRad.relatertBehandlingId,
sakStatistikkRad.relatertFagsystem,
sakStatistikkRad.sakId,
sakStatistikkRad.mottattTid,
sakStatistikkRad.registrertTid,
sakStatistikkRad.ferdigbehandletTid,
sakStatistikkRad.endretTid,
sakStatistikkRad.tekniskTid,
sakStatistikkRad.sakYtelse,
sakStatistikkRad.behandlingType,
sakStatistikkRad.behandlingStatus,
sakStatistikkRad.behandlingResultat,
sakStatistikkRad.behandlingMetode,
sakStatistikkRad.innsatsgruppe,
sakStatistikkRad.hovedmal,
sakStatistikkRad.opprettetAv,
sakStatistikkRad.saksbehandler,
sakStatistikkRad.ansvarligBeslutter,
sakStatistikkRad.ansvarligEnhet,
sakStatistikkRad.avsender,
sakStatistikkRad.versjon
)
}

fun hentSakStatistikkListeAlt(behandlingId: BigInteger): List<SakStatistikk> {
val parameters = MapSqlParameterSource("behandlingId", behandlingId)
val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $BEHANDLING_ID = :behandlingId"

return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper)
}

fun hentSakStatistikkListe(aktorId: String): List<SakStatistikk> {
val parameters = MapSqlParameterSource("aktorId", aktorId)

val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $AKTOR_ID = :aktorId"

return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper)
}
fun hentSakStatistikkListeInnenforOppfolgingsperiode(oppfolgingsperiodeUuid: UUID): List<SakStatistikk> {
val parameters = MapSqlParameterSource("oppfolgingPeriodeUuid", oppfolgingsperiodeUuid)

val sql = "SELECT * FROM $SAK_STATISTIKK_TABLE WHERE $OPPFOLGING_PERIODE_UUID = :oppfolgingPeriodeUuid"

return namedParameterJdbcTemplate.query(sql, parameters, sakStatistikkRowMapper)
}

private val sakStatistikkRowMapper: RowMapper<SakStatistikk> = RowMapper { rs, _ ->
SakStatistikk(
aktorId = rs.getString(AKTOR_ID),
oppfolgingPeriodeUUID = rs.getString(OPPFOLGING_PERIODE_UUID)?.let { UUID.fromString(it) },
behandlingId = rs.getBigDecimal(BEHANDLING_ID).toBigInteger(),
behandlingUuid = rs.getString(BEHANDLING_UUID)?.let { UUID.fromString(it) },
relatertBehandlingId = rs.getBigDecimal(RELATERT_BEHANDLING_ID)?.toBigInteger(),
relatertFagsystem = rs.getString(RELATERT_FAGSYSTEM),
sakId = rs.getString(SAK_ID),
mottattTid = rs.getTimestamp(MOTTATT_TID).toLocalDateTime(),
registrertTid = rs.getTimestamp(REGISTRERT_TID).toLocalDateTime(),
ferdigbehandletTid = rs.getTimestamp(FERDIGBEHANDLET_TID)?.toLocalDateTime(),
endretTid = rs.getTimestamp(ENDRET_TID)?.toLocalDateTime(),
tekniskTid = rs.getTimestamp(TEKNISK_TID)?.toLocalDateTime(),
sakYtelse = rs.getString(SAK_YTELSE),
behandlingType = rs.getString(BEHANDLING_TYPE),
behandlingStatus = rs.getString(BEHANDLING_STATUS),
behandlingResultat = rs.getString(BEHANDLING_RESULTAT),
behandlingMetode = rs.getString(BEHANDLING_METODE),
innsatsgruppe = rs.getString(INNSATSGRUPPE),
hovedmal = rs.getString(HOVEDMAL),
opprettetAv = rs.getString(OPPRETTET_AV),
saksbehandler = rs.getString(SAKSBEHANDLER),
ansvarligBeslutter = rs.getString(ANSVARLIG_BESLUTTER),
ansvarligEnhet = rs.getString(ANSVARLIG_ENHET),
avsender = rs.getString(AVSENDER),
versjon = rs.getString(VERSJON)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package no.nav.veilarbvedtaksstotte.service

import no.nav.common.types.identer.Fnr
import no.nav.veilarbvedtaksstotte.client.veilarboppfolging.VeilarboppfolgingClient
import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk
import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.time.LocalDateTime
import io.getunleash.DefaultUnleash
import no.nav.veilarbvedtaksstotte.utils.SAK_STATISTIKK_PAA
import java.util.UUID

private const val AVSENDER = "Oppfølgingsvedtak § 14 a"

@Service
class SakStatistikkService @Autowired constructor(
private val sakStatistikkRepository: SakStatistikkRepository,
private val veilarboppfolgingClient: VeilarboppfolgingClient,
private val unleashClient: DefaultUnleash
) {

fun hentStatistikkRader(oppfolgingsperiodeUuid: UUID): Boolean {
val statistikkListe =
sakStatistikkRepository.hentSakStatistikkListeInnenforOppfolgingsperiode(oppfolgingsperiodeUuid)
val antallUtkast =
statistikkListe.stream().filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" }.toList().size
return antallUtkast == 0
}

fun leggTilStatistikkRadUtkast(
behandlingId: Long, aktorId: String, fnr: Fnr, veilederIdent: String, oppfolgingsenhetId: String
) {
//TODO: Hent mottattTid (som er start oppfølgingsperiode på første vedtak, vi må komme tilbake til hva det er ved seinere vedtak i samme periode.
//TODO: Avsender er en konstant, versjon må hentes fra Docker-image
val statistikkPaa = unleashClient.isEnabled(SAK_STATISTIKK_PAA)

if (statistikkPaa) {

val oppfolgingsperiode = veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr)
oppfolgingsperiode.ifPresent {
val mottattTid = if (hentStatistikkRader(oppfolgingsperiode.get().uuid)) {
LocalDateTime.now()
} else {
veilarboppfolgingClient.hentGjeldendeOppfolgingsperiode(fnr).get().startDato.toLocalDateTime()
}


val sakId = veilarboppfolgingClient.hentOppfolgingsperiodeSak(oppfolgingsperiode.get().uuid).sakId
val sakStatistikk = SakStatistikk(
aktorId = aktorId,
oppfolgingPeriodeUUID = oppfolgingsperiode.get().uuid,
behandlingId = behandlingId.toBigInteger(),
sakId = sakId.toString(),
mottattTid = mottattTid,
endretTid = LocalDateTime.now(),
tekniskTid = LocalDateTime.now(),
opprettetAv = veilederIdent,
ansvarligEnhet = oppfolgingsenhetId,
avsender = AVSENDER,
versjon = "Dockerimage_tag_1"
)
sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk)
}
}
}
}

Loading

0 comments on commit 8d32881

Please sign in to comment.