Skip to content

Commit

Permalink
Nytt endepunkt for å hente antall åpne oppgaver per avklaringsbehov.
Browse files Browse the repository at this point in the history
  • Loading branch information
frodeli committed Oct 28, 2024
1 parent 47050af commit 3903e59
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package no.nav.aap.oppgave.produksjonsstyring

import no.nav.aap.oppgave.verdityper.Behandlingstype

data class AntallOppgaverDto(val behandlingstype: Behandlingstype?)
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package no.nav.aap.oppgave.produksjonsstyring

import com.papsign.ktor.openapigen.route.path.normal.NormalOpenAPIRoute
import com.papsign.ktor.openapigen.route.path.normal.post
import com.papsign.ktor.openapigen.route.response.respond
import com.papsign.ktor.openapigen.route.route
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
import no.nav.aap.komponenter.dbconnect.transaction
import no.nav.aap.oppgave.metrikker.httpCallCounter
import javax.sql.DataSource

fun NormalOpenAPIRoute.hentAntallOppgaver(dataSource: DataSource, prometheus: PrometheusMeterRegistry) =

route("/produksjonsstyring/antall-oppgaver").post<Unit, Map<String, Int>, AntallOppgaverDto> { _, req ->
prometheus.httpCallCounter("/produksjonsstyring/antall-oppgaver").increment()
val åpneOppgaverForBehandlingstype = dataSource.transaction(readOnly = true) { connection ->
ProduksjonsstyringRepository(connection)
.hentAntallÅpneOppgaver(req.behandlingstype)
.map {it.key.kode to it.value}.toMap()
}
respond(åpneOppgaverForBehandlingstype)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package no.nav.aap.oppgave.produksjonsstyring

import no.nav.aap.komponenter.dbconnect.DBConnection
import no.nav.aap.oppgave.AvklaringsbehovKode
import no.nav.aap.oppgave.verdityper.Behandlingstype


data class AvklaringbehovOgAntall(
val avklaringsbehovtype: AvklaringsbehovKode,
val antall: Int
)

class ProduksjonsstyringRepository(private val connection: DBConnection) {

fun hentAntallÅpneOppgaver(behandlingstype: Behandlingstype? = null): Map<AvklaringsbehovKode, Int> {
val behandlingstypeClause = if (behandlingstype != null) "AND BEHANDLINGSTYPE = ?" else ""

val sql = """
SELECT
AVKLARINGSBEHOV_TYPE, COUNT(*) ANTALL
FROM
OPPGAVE
WHERE
STATUS != 'AVSLUTTET'
$behandlingstypeClause
GROUP BY
AVKLARINGSBEHOV_TYPE
""".trimIndent()

val antallList = connection.queryList<AvklaringbehovOgAntall>(sql) {
setParams {
if (behandlingstype != null) {
setString(1, behandlingstype.name)
}
}
setRowMapper { row ->
AvklaringbehovOgAntall(AvklaringsbehovKode(row.getString("AVKLARINGSBEHOV_TYPE")), row.getInt("ANTALL"))
}
}
return antallList.map {it.avklaringsbehovtype to it.antall}.toMap()
}

}
3 changes: 3 additions & 0 deletions app/src/main/kotlin/no/nav/aap/oppgave/server/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import no.nav.aap.oppgave.mineOppgaverApi
import no.nav.aap.oppgave.oppdater.oppdaterBehandlingOppgaverApi
import no.nav.aap.oppgave.oppdater.oppdaterPostmottakOppgaverApi
import no.nav.aap.oppgave.plukk.plukkApi
import no.nav.aap.oppgave.produksjonsstyring.hentAntallOppgaver
import org.slf4j.LoggerFactory

private val SECURE_LOGGER = LoggerFactory.getLogger("secureLog")
Expand Down Expand Up @@ -87,6 +88,8 @@ internal fun Application.server(dbConfig: DbConfig) {
hentFilterApi(dataSource, prometheus)
opprettEllerOppdaterFilterApi(dataSource, prometheus)
slettFilterApi(dataSource, prometheus)
//Produksjonsstyring
hentAntallOppgaver(dataSource, prometheus)
}
}
actuator(prometheus)
Expand Down
54 changes: 52 additions & 2 deletions app/src/test/kotlin/no/nav/aap/oppgave/OppgaveApiTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import no.nav.aap.oppgave.filter.FilterDto
import no.nav.aap.oppgave.filter.FilterId
import no.nav.aap.oppgave.plukk.FinnNesteOppgaveDto
import no.nav.aap.oppgave.plukk.NesteOppgaveDto
import no.nav.aap.oppgave.produksjonsstyring.AntallOppgaverDto
import no.nav.aap.oppgave.server.DbConfig
import no.nav.aap.oppgave.server.initDatasource
import no.nav.aap.oppgave.server.server
Expand Down Expand Up @@ -250,6 +251,55 @@ class OppgaveApiTest {
assertThat(alleFilterEtterSletting).hasSize(0)
}


@Test
fun `Hent antall oppgaver uten oppgitt behandlingstype`() {
val saksnummer = "100004"
val referanse = UUID.randomUUID()

oppdaterOppgaver(opprettBehandlingshistorikk(saksnummer= saksnummer, referanse = referanse, behandlingsbehov = listOf(
Behandlingsbehov(definisjon = Definisjon.AVKLAR_SYKDOM, status = no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status.OPPRETTET, endringer = listOf(
Endring(no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status.OPPRETTET)
))
)))

val antallOppgaver = hentAntallOppgaver()
assertThat(antallOppgaver.keys).hasSize(1)
assertThat(antallOppgaver[Definisjon.AVKLAR_SYKDOM.kode]).isEqualTo(1)
}

@Test
fun `Hent antall oppgaver kun for revurdering`() {
val saksnummer1 = "100005"
val referanse1 = UUID.randomUUID()

oppdaterOppgaver(opprettBehandlingshistorikk(saksnummer= saksnummer1, referanse = referanse1, behandlingsbehov = listOf(
Behandlingsbehov(definisjon = Definisjon.AVKLAR_SYKDOM, status = no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status.OPPRETTET, endringer = listOf(
Endring(no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status.OPPRETTET)
))
)))

val saksnummer2 = "100006"
val referanse2 = UUID.randomUUID()

oppdaterOppgaver(opprettBehandlingshistorikk(saksnummer= saksnummer2, referanse = referanse2, typeBehandling = TypeBehandling.Revurdering, behandlingsbehov = listOf(
Behandlingsbehov(definisjon = Definisjon.AVKLAR_STUDENT, status = no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status.OPPRETTET, endringer = listOf(
Endring(no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status.OPPRETTET)
))
)))

val antallOppgaver = hentAntallOppgaver(Behandlingstype.REVURDERING)
assertThat(antallOppgaver.keys).hasSize(1)
assertThat(antallOppgaver[Definisjon.AVKLAR_STUDENT.kode]).isEqualTo(1)
}

private fun hentAntallOppgaver(behandlingstype: Behandlingstype? = null): Map<String, Int> {
return client.post(
URI.create("http://localhost:8080/produksjonsstyring/antall-oppgaver"),
PostRequest(body = AntallOppgaverDto(behandlingstype = behandlingstype))
)!!
}

private fun Definisjon.tilDefinisjonDTO(): DefinisjonDTO {
return DefinisjonDTO(
type = this.kode,
Expand All @@ -268,7 +318,7 @@ class OppgaveApiTest {
val status: no.nav.aap.behandlingsflyt.kontrakt.avklaringsbehov.Status,
val endretAv: String = "Kelvin",
)
private fun opprettBehandlingshistorikk(saksnummer: String, referanse: UUID, behandlingStatus: Status = Status.OPPRETTET, behandlingsbehov: List<Behandlingsbehov>): BehandlingFlytStoppetHendelse {
private fun opprettBehandlingshistorikk(saksnummer: String, referanse: UUID, behandlingStatus: Status = Status.OPPRETTET, behandlingsbehov: List<Behandlingsbehov>, typeBehandling: TypeBehandling = TypeBehandling.Førstegangsbehandling): BehandlingFlytStoppetHendelse {
val= LocalDateTime.now()
val avklaringsbehovHendelseDtoListe = behandlingsbehov.map { avklaringsbehovHendelse ->
val endringer = avklaringsbehovHendelse.endringer.mapIndexed { i, endring ->
Expand All @@ -288,7 +338,7 @@ class OppgaveApiTest {
personIdent = "01010012345",
saksnummer = Saksnummer(saksnummer),
referanse = BehandlingReferanse(referanse),
behandlingType = TypeBehandling.Førstegangsbehandling,
behandlingType = typeBehandling,
status = behandlingStatus,
opprettetTidspunkt = nå,
hendelsesTidspunkt = nå,
Expand Down

0 comments on commit 3903e59

Please sign in to comment.