Skip to content

Commit

Permalink
Første versjon insert av saksstatistikkrader på utkast.
Browse files Browse the repository at this point in the history
Co-authored-by: Julie Hill Roa <[email protected]>
  • Loading branch information
klaramargrethehelgemo and JulieHillRoa committed Dec 16, 2024
1 parent 08f345c commit 645ca1c
Show file tree
Hide file tree
Showing 8 changed files with 362 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package no.nav.veilarbvedtaksstotte.domain.statistikk

import no.nav.common.types.identer.AktorId
import java.math.BigInteger
import java.time.LocalDateTime
import java.util.*


data class SakStatistikk(
val behandlingId: BigInteger,
val behandlingUuid: UUID? = null,
val relatertBehandlingId: BigInteger? = null,
val relatertFagsystem: String? = null,
val sakId: String? = null,
val aktorId: String,
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 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,135 @@
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.sql.Types
import java.util.*

@Repository
class SakStatistikkRepository(val jdbcTemplate: JdbcTemplate) {

val namedParameterJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate)

val SAK_STATISTIKK_TABLE = "SAK_STATISTIKK"
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 AKTOR_ID = "AKTOR_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 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 ($BEHANDLING_ID, $BEHANDLING_UUID, $RELATERT_BEHANDLING_ID,
$RELATERT_FAGSYSTEM, $SAK_ID, $AKTOR_ID, $MOTTATT_TID, $REGISTRERT_TID, $FERDIGBEHANDLET_TID,
$ENDRET_TID, $TEKNISK_TID, $SAK_YTELSE, $BEHANDLING_TYPE, $BEHANDLING_STATUS,
$BEHANDLING_RESULTAT, $BEHANDLING_METODE, $OPPRETTET_AV, $SAKSBEHANDLER, $ANSVARLIG_BESLUTTER,
$ANSVARLIG_ENHET, $AVSENDER, $VERSJON)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""

jdbcTemplate.update(
sql,
sakStatistikkRad.behandlingId,
sakStatistikkRad.behandlingUuid,
sakStatistikkRad.relatertBehandlingId,
sakStatistikkRad.relatertFagsystem,
sakStatistikkRad.sakId,
sakStatistikkRad.aktorId,
sakStatistikkRad.mottattTid,
sakStatistikkRad.registrertTid,
sakStatistikkRad.ferdigbehandletTid,
sakStatistikkRad.endretTid,
sakStatistikkRad.tekniskTid,
sakStatistikkRad.sakYtelse,
sakStatistikkRad.behandlingType,
sakStatistikkRad.behandlingStatus,
sakStatistikkRad.behandlingResultat,
sakStatistikkRad.behandlingMetode,
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 insertSakStatistikkRadUtkast(behandlingId: String, aktorId: String, opprettetAv: String, ansvarligEnhet: String) {
val parameters = MapSqlParameterSource()
.addValue("behandlingId", behandlingId.toBigInteger(), Types.BIGINT)
.addValue("aktorId", aktorId, Types.VARCHAR)
.addValue("opprettetAv", opprettetAv, Types.VARCHAR)
.addValue("ansvarligEnhet", ansvarligEnhet, Types.VARCHAR)
.addValue("avsender", "Oppfølgingsvedtak § 14 a", Types.VARCHAR)
.addValue("versjon", "Dockerimage_tag_1", Types.VARCHAR)
val sql = """INSERT INTO $SAK_STATISTIKK_TABLE ($BEHANDLING_ID, $AKTOR_ID, $OPPRETTET_AV, $ANSVARLIG_ENHET, $AVSENDER, $VERSJON)
VALUES (:behandlingId, :aktorId, :opprettetAv, :ansvarligEnhet, :avsender, :versjon)"""
jdbcTemplate.update(sql, parameters)
}
*/

private val sakStatistikkRowMapper: RowMapper<SakStatistikk> = RowMapper { rs, _ ->
SakStatistikk(
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),
aktorId = rs.getString(AKTOR_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),
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,63 @@
package no.nav.veilarbvedtaksstotte.service

import no.nav.common.client.aktoroppslag.AktorOppslagClient
import org.slf4j.LoggerFactory
import no.nav.common.types.identer.Fnr
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 java.util.Date

private val log = LoggerFactory.getLogger(SakStatistikkService::class.java)
private val AVSENDER = "Oppfølgingsvedtak § 14 a"
@Service
class SakStatistikkService @Autowired constructor(
private val sakStatistikkRepository: SakStatistikkRepository,
private val authService: AuthService,
private val aktorOppslagClient: AktorOppslagClient,
) {
private fun sjekkOmUtkastRadFinnes(statistikkListe: List<SakStatistikk>?): Boolean {
if (statistikkListe == null) {
return false
}
val antallUtkast = statistikkListe.stream()
.filter { item: SakStatistikk -> item.behandlingMetode == "UTKAST" }
.toList()
.size
return antallUtkast == 0
}

fun hentStatistikkRader(fnr: Fnr): List<SakStatistikk> {
val aktorId = aktorOppslagClient.hentAktorId(fnr)
authService.sjekkTilgangTilBrukerOgEnhet(fnr)
return sakStatistikkRepository.hentSakStatistikkListe(aktorId.toString())
}


fun leggTilStatistikkRad(sakStatistikkRad: SakStatistikk): Boolean {
val personFnr = authService.getFnrOrThrow(sakStatistikkRad.aktorId)
val eksisterendeRader = hentStatistikkRader(personFnr)
log.debug("Eksisterende rader: {}", true)
if (sjekkOmUtkastRadFinnes(eksisterendeRader)
) {
log.info("Insert SakStatistikk-rad for bruker: {}", sakStatistikkRad)
sakStatistikkRepository.insertSakStatistikkRad(sakStatistikkRad)
return true
}
return false
}

fun leggTilStatistikkRadUtkast(behandlingId: Long, aktorId: String, veilederIdent: String, oppfolgingsenhetId: String): Boolean {
//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 sakStatistikk = SakStatistikk(behandlingId = behandlingId.toBigInteger(), aktorId = aktorId, mottattTid = LocalDateTime.now(), endretTid = LocalDateTime.now(), tekniskTid = LocalDateTime.now(),
opprettetAv = veilederIdent, ansvarligEnhet = oppfolgingsenhetId, avsender = AVSENDER, versjon = "Dockerimage_tag_1")
sakStatistikkRepository.insertSakStatistikkRad(sakStatistikk)
return true
}


}

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package no.nav.veilarbvedtaksstotte.service;

import io.getunleash.DefaultUnleash;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -16,15 +15,13 @@
import no.nav.veilarbvedtaksstotte.domain.arkiv.BrevKode;
import no.nav.veilarbvedtaksstotte.domain.dialog.SystemMeldingType;
import no.nav.veilarbvedtaksstotte.domain.oyeblikksbilde.OyeblikksbildeType;
import no.nav.veilarbvedtaksstotte.domain.statistikk.SakStatistikk;
import no.nav.veilarbvedtaksstotte.domain.vedtak.BeslutterProsessStatus;
import no.nav.veilarbvedtaksstotte.domain.vedtak.Innsatsgruppe;
import no.nav.veilarbvedtaksstotte.domain.vedtak.Kilde;
import no.nav.veilarbvedtaksstotte.domain.vedtak.Vedtak;
import no.nav.veilarbvedtaksstotte.domain.vedtak.VedtakStatus;
import no.nav.veilarbvedtaksstotte.repository.BeslutteroversiktRepository;
import no.nav.veilarbvedtaksstotte.repository.KilderRepository;
import no.nav.veilarbvedtaksstotte.repository.MeldingRepository;
import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository;
import no.nav.veilarbvedtaksstotte.repository.*;
import no.nav.veilarbvedtaksstotte.utils.VedtakUtils;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
Expand Down Expand Up @@ -67,6 +64,7 @@ public class VedtakService {
private final MetricsService metricsService;

private final LeaderElectionClient leaderElection;
private final SakStatistikkService sakStatistikkService;

@SneakyThrows
public void fattVedtak(long vedtakId) {
Expand Down Expand Up @@ -141,7 +139,7 @@ public void journalforeVedtak(Vedtak vedtak) {
if (journalpost.getDokumenter().isEmpty()) {
log.error("Ingen dokumentInfoId i respons fra journalføring");
} else {
dokumentInfoId = journalpost.getDokumenter().get(0).getDokumentInfoId();
dokumentInfoId = journalpost.getDokumenter().getFirst().getDokumentInfoId();
}
boolean journalpostferdigstilt = journalpost.getJournalpostferdigstilt();

Expand Down Expand Up @@ -197,6 +195,9 @@ public void lagUtkast(Fnr fnr) {
vedtaksstotteRepository.opprettUtkast(aktorId, innloggetVeilederIdent, oppfolgingsenhetId);

Vedtak utkast = vedtaksstotteRepository.hentUtkast(aktorId);
Boolean lagreStatistikk = sakStatistikkService.leggTilStatistikkRadUtkast(utkast.getId(), aktorId, innloggetVeilederIdent, oppfolgingsenhetId);



vedtakStatusEndringService.utkastOpprettet(utkast);
meldingRepository.opprettSystemMelding(utkast.getId(), SystemMeldingType.UTKAST_OPPRETTET, innloggetVeilederIdent);
Expand Down Expand Up @@ -233,9 +234,7 @@ private void oppdatereDokumentIdforJournalfortOyeblikksbilde(long vedtakId, Stri
Arrays.stream(journalpost.getData().getJournalpost().dokumenter)
.filter(journalfortDokument -> OyeblikksbildeType.contains(journalfortDokument.brevkode))
.forEach(
journalfortDokument -> {
oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode)));
}
journalfortDokument -> oyeblikksbildeService.lagreJournalfortDokumentId(vedtakId, journalfortDokument.dokumentInfoId, OyeblikksbildeType.from(BrevKode.valueOf(journalfortDokument.brevkode)))
);
log.info(format(
"Oppdatert dokumentId for oyeblikksbilde for vedtakId: %s",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import no.nav.veilarbvedtaksstotte.metrics.DokumentdistribusjonMeterBinder
import no.nav.veilarbvedtaksstotte.mock.MetricsClientMock
import no.nav.veilarbvedtaksstotte.mock.PoaoTilgangClientMock
import no.nav.veilarbvedtaksstotte.service.PdfService
import no.nav.veilarbvedtaksstotte.service.SakStatistikkService
import no.nav.veilarbvedtaksstotte.utils.JsonUtils.init
import no.nav.veilarbvedtaksstotte.utils.PostgresContainer
import no.nav.veilarbvedtaksstotte.utils.SingletonKafkaContainer
Expand Down Expand Up @@ -53,7 +54,8 @@ import javax.sql.DataSource
KafkaConsumerConfig::class,
DokumentdistribusjonMeterBinder::class,
PdfService::class,
ArbeidssoekerRegisteretService::class
ArbeidssoekerRegisteretService::class,
SakStatistikkService::class
)
class ApplicationTestConfig {
@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import no.nav.veilarbvedtaksstotte.repository.OyeblikksbildeRepository;
import no.nav.veilarbvedtaksstotte.repository.UtrullingRepository;
import no.nav.veilarbvedtaksstotte.repository.VedtaksstotteRepository;
import no.nav.veilarbvedtaksstotte.repository.SakStatistikkRepository;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

Expand All @@ -18,6 +19,7 @@
OyeblikksbildeRepository.class,
VedtaksstotteRepository.class,
UtrullingRepository.class,
ArenaVedtakRepository.class
ArenaVedtakRepository.class,
SakStatistikkRepository.class
})
public class RepositoryTestConfig {}
Loading

0 comments on commit 645ca1c

Please sign in to comment.