Skip to content

Commit

Permalink
WIP: Lage endepunkt for vikrsomhetsstatistikk
Browse files Browse the repository at this point in the history
Co-authored-by: Per-Christian Nielsen <per-christian.nielsen@nav.no>
  • Loading branch information
nimajimale and perchrnie committed Sep 25, 2023
1 parent 3b5192f commit 12c530b
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,12 @@ import no.nav.lydia.sykefraversstatistikk.api.KvartalDto.Companion.toDto
import no.nav.lydia.sykefraversstatistikk.api.KvartalerFraTilDto
import no.nav.lydia.sykefraversstatistikk.api.Periode
import no.nav.lydia.sykefraversstatistikk.api.Søkeparametere
import no.nav.lydia.sykefraversstatistikk.domene.BransjeSykefraværsstatistikk
import no.nav.lydia.sykefraversstatistikk.domene.NæringSykefraværsstatistikk
import no.nav.lydia.sykefraversstatistikk.domene.VirksomhetsstatistikkSiste4Kvartal
import no.nav.lydia.sykefraversstatistikk.domene.Virksomhetsoversikt
import no.nav.lydia.sykefraversstatistikk.domene.VirksomhetsstatistikkSisteKvartal
import no.nav.lydia.sykefraversstatistikk.domene.*
import no.nav.lydia.sykefraversstatistikk.import.*
import no.nav.lydia.sykefraversstatistikk.import.Kategori.*
import org.slf4j.LoggerFactory
import java.time.LocalDate.now
import kotlin.system.measureTimeMillis

class SykefraværsstatistikkService(
val sykefraversstatistikkRepository: SykefraversstatistikkRepository,
Expand Down Expand Up @@ -158,6 +155,20 @@ class SykefraværsstatistikkService(
?: SykefraværsstatistikkError.`ingen sykefraværsstatistikk`.left()
}

fun hentVirksomhetsstatistikkSiden2019(orgnummer: String) : Either<Feil, VirksomhetsstatistikkSiden2019> {
var virksomhetsstatistikk : VirksomhetsstatistikkSiden2019
val tidsbruk = measureTimeMillis {
virksomhetsstatistikk = VirksomhetsstatistikkSiden2019 (
orgnr= orgnummer,
kvartalliste = virksomhetsinformasjonRepository.hentVirksomhetsstatistikkPerKvartalSiden2019(orgnr = orgnummer),
årsliste = virksomhetsinformasjonRepository.hentVirksomhetsstatistikkPerÅrSiden2019(orgnr = orgnummer)
)
}
log.info("Brukte ${tidsbruk} ms på å hente statistikk for en virksomhet")
return virksomhetsstatistikk?.right()
?: SykefraværsstatistikkError.`ingen sykefraværsstatistikk`.left()
}

fun hentNæringsstatistikk(næringskode: String): Either<Feil, NæringSykefraværsstatistikk> {
val gjeldendePeriode = sistePubliseringService.hentGjelendePeriode()
val hentNæringSykefraværsstatistikk = sykefraversstatistikkRepository.hentNæringSykefraværsstatistikk(næringskode, gjeldendePeriode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import no.nav.lydia.sykefraversstatistikk.api.Søkeparametere.Companion.filtrerP
import no.nav.lydia.sykefraversstatistikk.api.Søkeparametere.Companion.filtrerPåSnitt
import no.nav.lydia.sykefraversstatistikk.api.Søkeparametere.Companion.filtrerPåStatus
import no.nav.lydia.sykefraversstatistikk.domene.Virksomhetsoversikt
import no.nav.lydia.sykefraversstatistikk.domene.Virksomhetsstatistikk
import no.nav.lydia.sykefraversstatistikk.domene.VirksomhetsstatistikkSiste4Kvartal
import no.nav.lydia.sykefraversstatistikk.domene.VirksomhetsstatistikkSisteKvartal
import no.nav.lydia.sykefraversstatistikk.import.Kvartal
Expand Down Expand Up @@ -182,6 +183,58 @@ class VirksomhetsinformasjonRepository(val dataSource: DataSource) {
session.run(query)
}

fun hentVirksomhetsstatistikkPerKvartalSiden2019(orgnr: String) =
using(sessionOf(dataSource)) { session ->
val query = queryOf(
statement = """
SELECT
orgnr,
arstall,
kvartal,
sykefraversprosent,
maskert
FROM sykefravar_statistikk_virksomhet
WHERE (orgnr = :orgnr)
ORDER BY arstall DESC, kvartal DESC
""".trimIndent(),
paramMap = mapOf(
"orgnr" to orgnr
)
).map { mapRowToVirksomhetsstatistikk(it) }.asList
session.run(query)

}

fun hentVirksomhetsstatistikkPerÅrSiden2019(orgnr: String) =
using(sessionOf(dataSource)) { session ->
val query = queryOf(
statement = """
SELECT
orgnr,
arstall,
kvartal,
sykefraversprosent,
maskert
FROM sykefravar_statistikk_virksomhet_siste_4_kvartal
WHERE (orgnr = :orgnr)
ORDER BY arstall DESC, kvartal DESC
""".trimIndent(),
paramMap = mapOf(
"orgnr" to orgnr
)
).map { mapRowToVirksomhetsstatistikk(it) }.asList
session.run(query)

}

private fun mapRowToVirksomhetsstatistikk(row: Row) = Virksomhetsstatistikk(
orgnr = row.string("orgnr"),
årstall = row.int("arstall"),
kvartal = row.int("kvartal"),
sykefraværsprosent = row.double("sykefraversprosent"),
maskert = row.boolean("maskert"),
)

private fun mapRowToSisteKvartal(row: Row) = VirksomhetsstatistikkSisteKvartal(
orgnr = row.string("orgnr"),
arstall = row.int("arstall"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const val ANTALL_TREFF = "antallTreff"
const val SISTE_4_KVARTALER = "siste4kvartaler"
const val PUBLISERINGSINFO = "publiseringsinfo"
const val SISTE_TILGJENGELIGE_KVARTAL = "sistetilgjengeligekvartal"
const val STATISTIKKDATA = "statistikkdata"

fun Route.sykefraversstatistikk(
sistePubliseringService: SistePubliseringService,
Expand Down Expand Up @@ -95,6 +96,21 @@ fun Route.sykefraversstatistikk(
}
}

get("$SYKEFRAVERSSTATISTIKK_PATH/{orgnummer}/$STATISTIKKDATA") {
val orgnummer =
call.parameters["orgnummer"] ?: return@get call.respond(SykefraværsstatistikkError.`ugyldig orgnummer`)

call.somLesebruker(adGrupper = adGrupper) { _ ->
sykefraværsstatistikkService.hentVirksomhetsstatistikkSiden2019(orgnummer)
}.also {
auditLog.auditloggEither(call = call, either = it, orgnummer = orgnummer, auditType = AuditType.access)
}.map { sykefraværsstatistikk ->
call.respond(sykefraværsstatistikk)
}.mapLeft { feil ->
call.respond(status = feil.httpStatusCode, message = feil.feilmelding)
}
}

get("$SYKEFRAVERSSTATISTIKK_PATH/naring/{næring}") {
val næringskode = call.parameters["næring"] ?: return@get call.respond(SykefraværsstatistikkError.`ugyldig næring`)
call.somLesebruker(adGrupper = adGrupper) { _ ->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package no.nav.lydia.sykefraversstatistikk.domene

import kotlinx.serialization.Serializable

@Serializable
data class VirksomhetsstatistikkSiden2019(
val orgnr: String,
val kvartalliste : List<Virksomhetsstatistikk>,
val årsliste : List<Virksomhetsstatistikk>,
)

@Serializable
data class Virksomhetsstatistikk (
val orgnr: String,
val kvartal : Int,
val årstall : Int,
val sykefraværsprosent : Double,
val maskert : Boolean
)

0 comments on commit 12c530b

Please sign in to comment.