@@ -40,12 +40,18 @@ import no.nav.syfo.sykmelding.db.SykmeldtDbModel
40
40
import no.nav.syfo.sykmelding.model.sykmelding.arbeidsgiver.BehandlerAGDTO
41
41
import no.nav.syfo.sykmelding.model.sykmelding.arbeidsgiver.SykmeldingsperiodeAGDTO
42
42
import no.nav.syfo.sykmelding.model.sykmelding.model.PeriodetypeDTO
43
+ import no.nav.syfo.synchendelse.SyncHendelse
44
+ import no.nav.syfo.synchendelse.SyncHendelseType
43
45
import no.nav.syfo.util.logger
44
46
import no.nav.syfo.util.securelog
45
47
import no.nav.syfo.util.toFormattedNameString
48
+ import org.apache.kafka.clients.producer.KafkaProducer
49
+ import org.apache.kafka.clients.producer.ProducerRecord
46
50
47
51
class MineSykmeldteService (
48
52
private val mineSykmeldteDb : MineSykmeldteDb ,
53
+ private val kafkaProducer : KafkaProducer <String , SyncHendelse >,
54
+ private val syncTopic : String ,
49
55
) {
50
56
private val log = logger()
51
57
@@ -118,7 +124,7 @@ class MineSykmeldteService(
118
124
Dialogmote (
119
125
hendelseId = it.hendelseId,
120
126
tekst = it.tekst
121
- ? : throw IllegalStateException (" Dialogmøte uten tekst: ${it.id} " ),
127
+ ? : throw IllegalStateException (" Dialogmøte uten tekst: ${it.id} " ),
122
128
mottatt = it.mottatt,
123
129
)
124
130
}
@@ -151,7 +157,7 @@ class MineSykmeldteService(
151
157
.mapNotNull { sykmeldt ->
152
158
mapNullableSoknad(
153
159
sykmeldt,
154
- getHendlersforSoknad(hendelserMap, sykmeldtEntry, sykmeldt)
160
+ getHendlersforSoknad(hendelserMap, sykmeldtEntry, sykmeldt),
155
161
)
156
162
}
157
163
}
@@ -171,19 +177,54 @@ class MineSykmeldteService(
171
177
}
172
178
173
179
suspend fun markSykmeldingRead (sykmeldingId : String , lederFnr : String ): Boolean {
174
- return mineSykmeldteDb.markSykmeldingRead(sykmeldingId, lederFnr)
180
+ val ids = mineSykmeldteDb.markSykmeldingRead(sykmeldingId, lederFnr)
181
+ kafkaProducer
182
+ .send(ProducerRecord (syncTopic, SyncHendelse (ids, type = SyncHendelseType .SYKMELDING )))
183
+ .get()
184
+ return ids.isNotEmpty()
175
185
}
176
186
177
187
suspend fun markSoknadRead (soknadId : String , lederFnr : String ): Boolean {
178
- return mineSykmeldteDb.markSoknadRead(soknadId, lederFnr)
188
+ val ids = mineSykmeldteDb.markSoknadRead(soknadId, lederFnr)
189
+ kafkaProducer
190
+ .send(ProducerRecord (syncTopic, SyncHendelse (ids, type = SyncHendelseType .SOKNAD )))
191
+ .get()
192
+ return ids.isNotEmpty()
179
193
}
180
194
181
195
suspend fun markHendelseRead (hendelseId : UUID , lederFnr : String ): Boolean {
182
- return mineSykmeldteDb.markHendelseRead(hendelseId, lederFnr)
196
+ val ids = mineSykmeldteDb.markHendelseRead(hendelseId, lederFnr)
197
+ kafkaProducer
198
+ .send(ProducerRecord (syncTopic, SyncHendelse (ids, type = SyncHendelseType .HENDELSE )))
199
+ .get()
200
+ return ids.isNotEmpty()
183
201
}
184
202
185
203
suspend fun markAllSykmeldingerAndSoknaderRead (lederFnr : String ) {
186
- mineSykmeldteDb.markAllSykmeldingAndSoknadAsRead(lederFnr)
204
+ val sykmeldingIdsAndSoknadIds = mineSykmeldteDb.markAllSykmeldingAndSoknadAsRead(lederFnr)
205
+ val sykmeldingJob =
206
+ kafkaProducer.send(
207
+ ProducerRecord (
208
+ syncTopic,
209
+ SyncHendelse (
210
+ sykmeldingIdsAndSoknadIds.sykmeldingIds,
211
+ type = SyncHendelseType .SYKMELDING ,
212
+ ),
213
+ ),
214
+ )
215
+ val soknadJob =
216
+ kafkaProducer.send(
217
+ ProducerRecord (
218
+ syncTopic,
219
+ SyncHendelse (
220
+ sykmeldingIdsAndSoknadIds.soknadIds,
221
+ type = SyncHendelseType .SOKNAD ,
222
+ ),
223
+ ),
224
+ )
225
+
226
+ sykmeldingJob.get()
227
+ soknadJob.get()
187
228
}
188
229
}
189
230
@@ -223,7 +264,7 @@ private fun Pair<SykmeldtDbModel, SoknadDbModel>.toSoknad(): Soknad {
223
264
tom = soknadDb.tom,
224
265
lest = soknadDb.lest,
225
266
sendtDato = soknadDb.sykepengesoknad.sendtArbeidsgiver
226
- ? : throw IllegalStateException (" Søknad uten sendt dato: ${soknadDb.soknadId} " ),
267
+ ? : throw IllegalStateException (" Søknad uten sendt dato: ${soknadDb.soknadId} " ),
227
268
sendtTilNavDato = soknadDb.sykepengesoknad.sendtNav,
228
269
korrigererSoknadId = soknadDb.sykepengesoknad.korrigerer,
229
270
korrigertBySoknadId = soknadDb.sykepengesoknad.korrigertAv,
@@ -238,7 +279,7 @@ private fun Pair<SykmeldtDbModel, SoknadDbModel>.toSoknad(): Soknad {
238
279
sp.tag != " TIL_SLUTT" &&
239
280
sp.tag != " VAER_KLAR_OVER_AT"
240
281
}
241
- .map { it.toSporsmal() }
282
+ .map { it.toSporsmal() },
242
283
)
243
284
}
244
285
@@ -330,19 +371,22 @@ private fun SykmeldingsperiodeAGDTO.toSykmeldingPeriode(): Periode =
330
371
)
331
372
},
332
373
)
374
+
333
375
PeriodetypeDTO .AVVENTENDE ->
334
376
Avventende (
335
377
this .fom,
336
378
this .tom,
337
379
tilrettelegging = this .innspillTilArbeidsgiver,
338
380
)
381
+
339
382
PeriodetypeDTO .BEHANDLINGSDAGER ->
340
383
Behandlingsdager (
341
384
this .fom,
342
385
this .tom,
343
386
this .behandlingsdager
344
387
? : throw IllegalStateException (" Behandlingsdager without behandlingsdager" ),
345
388
)
389
+
346
390
PeriodetypeDTO .GRADERT -> {
347
391
val gradering = this .gradert
348
392
requireNotNull(gradering) { " Gradert periode uten gradert-data burde ikke eksistere" }
@@ -354,6 +398,7 @@ private fun SykmeldingsperiodeAGDTO.toSykmeldingPeriode(): Periode =
354
398
gradering.reisetilskudd,
355
399
)
356
400
}
401
+
357
402
PeriodetypeDTO .REISETILSKUDD ->
358
403
Reisetilskudd (
359
404
this .fom,
@@ -380,7 +425,7 @@ fun safeParseHendelseEnum(oppgavetype: String): HendelseType {
380
425
HendelseType .valueOf(oppgavetype)
381
426
} catch (e: Exception ) {
382
427
securelog.error(
383
- " Ukjent oppgave av type $oppgavetype er ikke håndtert i applikasjonen. Mangler vi implementasjon?"
428
+ " Ukjent oppgave av type $oppgavetype er ikke håndtert i applikasjonen. Mangler vi implementasjon?" ,
384
429
)
385
430
HendelseType .UNKNOWN
386
431
}
0 commit comments