Skip to content

Commit 357d6f0

Browse files
authored
TFP-6036: Sletting av arbeidsforhold informasjon uten referanser. (#2640)
1 parent 11cc808 commit 357d6f0

12 files changed

+389
-120
lines changed

web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java

+1
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ public Response oppdaterAktoerId(@TilpassetAbacAttributt(supplierClass = Forvalt
143143
public Response ryddOppGrunnlagUtenReferanse() {
144144
LOG.info("FORVALTNING ABAKUS ryddOppGrunnlagUtenReferanse");
145145
oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse();
146+
oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse();
146147
return Response.ok().build();
147148
}
148149

web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package no.nav.foreldrepenger.abakus.rydding;
22

3-
import static java.util.Collections.emptyList;
4-
5-
import java.util.List;
6-
import java.util.Objects;
7-
8-
import org.slf4j.Logger;
9-
import org.slf4j.LoggerFactory;
103

114
import jakarta.enterprise.context.ApplicationScoped;
125
import jakarta.inject.Inject;
136
import jakarta.persistence.EntityManager;
147
import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregat;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import java.util.List;
12+
import java.util.Objects;
13+
14+
import static java.util.Collections.emptyList;
1515

1616
@ApplicationScoped
1717
public class OppryddingIAYAggregatRepository {
@@ -51,8 +51,7 @@ public void slettIayAggregat(Long id) {
5151
slettIayAktørIntekt(id);
5252
slettIayAktørArbeid(id);
5353
slettIayAktørYtelse(id);
54-
entityManager.remove(iay);
55-
entityManager.flush(); // Sørger for at endringer er lagret før vi går videre
54+
fjernInntektArbeidYtelseFor(id);
5655
}
5756
}
5857

@@ -257,4 +256,11 @@ private void fjernInntekterFor(List<Long> aktørInntektIdList) {
257256
.executeUpdate();
258257
LOG.info("Fjernet {} aktør inntekter for iay-aggregat: {}", antallFjernet, iayIdForSletting);
259258
}
259+
260+
private void fjernInntektArbeidYtelseFor(Long iayIdForSletting) {
261+
var antallFjernet = entityManager.createNativeQuery("delete from iay_inntekt_arbeid_ytelser where id = :iayId")
262+
.setParameter(PARAM_IAY_ID, iayIdForSletting)
263+
.executeUpdate();
264+
LOG.info("Fjernet {} IAY-aggregat med id: {}", antallFjernet, iayIdForSletting);
265+
}
260266
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package no.nav.foreldrepenger.abakus.rydding;
2+
3+
import static java.util.Collections.emptyList;
4+
5+
import java.util.List;
6+
import java.util.Objects;
7+
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import jakarta.enterprise.context.ApplicationScoped;
12+
import jakarta.inject.Inject;
13+
import jakarta.persistence.EntityManager;
14+
import no.nav.foreldrepenger.abakus.domene.iay.arbeidsforhold.ArbeidsforholdInformasjon;
15+
16+
@ApplicationScoped
17+
public class OppryddingIayInformasjonRepository {
18+
private static final Logger LOG = LoggerFactory.getLogger(OppryddingIayInformasjonRepository.class);
19+
20+
private EntityManager entityManager;
21+
22+
OppryddingIayInformasjonRepository() {
23+
// CDI proxy
24+
}
25+
26+
@Inject
27+
public OppryddingIayInformasjonRepository(EntityManager entityManager) {
28+
Objects.requireNonNull(entityManager, "entityManager");
29+
this.entityManager = entityManager;
30+
}
31+
32+
public List<Long> hentIayInformasjonUtenReferanse(Integer maxResults) {
33+
@SuppressWarnings("unchecked") List<Number> result = entityManager.createNativeQuery("select distinct id from iay_informasjon info where "
34+
+ "not exists (select 1 from gr_arbeid_inntekt gr where info.id = gr.informasjon_id)").setMaxResults(maxResults).getResultList();
35+
if (result.isEmpty()) {
36+
LOG.info("Fant ingen IAY-Informasjon uten grunnlag referanse");
37+
return emptyList();
38+
}
39+
LOG.info("Fant {} IAY-Informasjon uten grunnlag referanse", result.size());
40+
return result.stream().map(Number::longValue).toList();
41+
}
42+
43+
public void slettIayInformasjon(Long id) {
44+
var arbeidsforholdInformasjon = entityManager.find(ArbeidsforholdInformasjon.class, id);
45+
if (arbeidsforholdInformasjon != null) {
46+
slettArbeidsforholdInformasjon(id);
47+
fjernInformasjonFor(id);
48+
}
49+
}
50+
51+
private void slettArbeidsforholdInformasjon(Long informasjonId) {
52+
var overstyrteArbeidsforhold = hentOverstyrteArbeidsforholdFor(informasjonId);
53+
if (!overstyrteArbeidsforhold.isEmpty()) {
54+
fjernOverstyrteArbeidsforholdPerioderFor(overstyrteArbeidsforhold);
55+
fjernOverstyrteArbeidsforholFor(informasjonId);
56+
}
57+
fjernArbeidsforholReferanserFor(informasjonId);
58+
}
59+
60+
private List<Long> hentOverstyrteArbeidsforholdFor(Long informasjonId) {
61+
@SuppressWarnings("unchecked") List<Number> result = entityManager.createNativeQuery(
62+
"select distinct id from iay_arbeidsforhold where informasjon_id = :infoId").setParameter("infoId", informasjonId).getResultList();
63+
return result.stream().map(Number::longValue).toList();
64+
}
65+
66+
private void fjernOverstyrteArbeidsforholdPerioderFor(List<Long> overstyrteArbeidsforholdIdList) {
67+
var antallFjernet = entityManager.createNativeQuery(
68+
"delete from iay_overstyrte_perioder where arbeidsforhold_id in (:overstyrteArbeidsforholdIdList)")
69+
.setParameter("overstyrteArbeidsforholdIdList", overstyrteArbeidsforholdIdList)
70+
.executeUpdate();
71+
LOG.info("Fjernet {} overstyrte arbeidsforhold perioder for arbeidsforhold: {}", antallFjernet, overstyrteArbeidsforholdIdList);
72+
}
73+
74+
private void fjernOverstyrteArbeidsforholFor(Long informasjonId) {
75+
var antallFjernet = entityManager.createNativeQuery("delete from iay_arbeidsforhold where informasjon_id = :informasjonId")
76+
.setParameter("informasjonId", informasjonId)
77+
.executeUpdate();
78+
LOG.info("Fjernet {} overstyrte arbeidsforhold for informasjon: {}", antallFjernet, informasjonId);
79+
}
80+
81+
private void fjernArbeidsforholReferanserFor(Long informasjonId) {
82+
var antallFjernet = entityManager.createNativeQuery("delete from iay_arbeidsforhold_refer where informasjon_id = :informasjonId")
83+
.setParameter("informasjonId", informasjonId)
84+
.executeUpdate();
85+
LOG.info("Fjernet {} arbeidsforhold referanser for informasjon: {}", antallFjernet, informasjonId);
86+
}
87+
88+
private void fjernInformasjonFor(Long informasjonId) {
89+
var antallFjernet = entityManager.createNativeQuery("delete from iay_informasjon where id = :informasjonId")
90+
.setParameter("informasjonId", informasjonId)
91+
.executeUpdate();
92+
LOG.info("Fjernet {} arbeidsforhold informasjon med id: {}", antallFjernet, informasjonId);
93+
}
94+
}
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,46 @@
11
package no.nav.foreldrepenger.abakus.rydding;
22

3-
import java.util.List;
4-
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
7-
83
import jakarta.enterprise.context.ApplicationScoped;
94
import jakarta.inject.Inject;
105
import no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask;
6+
import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInformasjonUtenReferanseTask;
117
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
128
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;
13-
import no.nav.vedtak.mapper.json.DefaultJsonMapper;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
1411

15-
import static no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask.MAX_PARTITION_SIZE;
1612

1713
@ApplicationScoped
1814
public class OppryddingTjeneste {
1915
private static final Logger LOG = LoggerFactory.getLogger(OppryddingTjeneste.class);
20-
private OppryddingIAYAggregatRepository iayOppryddingRepository;
2116
private ProsessTaskTjeneste taskTjeneste;
2217

2318
OppryddingTjeneste() {
2419
// CDI proxy
2520
}
2621

2722
@Inject
28-
public OppryddingTjeneste(OppryddingIAYAggregatRepository iayOppryddingRepository, ProsessTaskTjeneste taskTjeneste) {
29-
this.iayOppryddingRepository = iayOppryddingRepository;
23+
public OppryddingTjeneste(ProsessTaskTjeneste taskTjeneste) {
3024
this.taskTjeneste = taskTjeneste;
3125
}
3226

3327
public void fjernAlleIayAggregatUtenReferanse() {
34-
var iayAggregatUtenReferanse = iayOppryddingRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE);
35-
if (iayAggregatUtenReferanse.isEmpty()) {
36-
LOG.info("Ingen IAY aggregat for sletting.");
37-
return;
38-
}
39-
LOG.info("Fjerner {} IAY-aggregater uten referanse.", iayAggregatUtenReferanse.size());
40-
opprettFjernIayAggregatTask(iayAggregatUtenReferanse);
28+
opprettFjernIayAggregatTask();
4129
}
4230

43-
private void opprettFjernIayAggregatTask(List<Long> iayIdsList) {
44-
LOG.info("Oppretter task for å fjerne {} IAY-aggregater uten referanse.", iayIdsList.size());
31+
public void fjernAlleIayInformasjontUtenReferanse() {
32+
opprettFjernIayInformasjonTask();
33+
}
34+
35+
private void opprettFjernIayAggregatTask() {
36+
LOG.info("Oppretter task for å fjerne IAY-aggregater uten referanse.");
4537
var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class);
46-
prosessTaskData.setPayload(DefaultJsonMapper.toJson(iayIdsList));
38+
taskTjeneste.lagre(prosessTaskData);
39+
}
40+
41+
private void opprettFjernIayInformasjonTask() {
42+
LOG.info("Oppretter task for å fjerne IAY-Informasjon uten referanse.");
43+
var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class);
4744
taskTjeneste.lagre(prosessTaskData);
4845
}
4946
}

web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java

+1
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ public FjernAlleGrunnlagUtenReferanseBatchTask(OppryddingTjeneste oppryddingTjen
2121
@Override
2222
public void doTask(ProsessTaskData prosessTaskData) {
2323
oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse();
24+
oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse();
2425
}
2526
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
package no.nav.foreldrepenger.abakus.rydding.task;
22

3-
import java.util.List;
4-
import java.util.Set;
5-
6-
import org.slf4j.Logger;
7-
import org.slf4j.LoggerFactory;
8-
93
import jakarta.enterprise.context.ApplicationScoped;
104
import jakarta.inject.Inject;
115
import no.nav.foreldrepenger.abakus.rydding.OppryddingIAYAggregatRepository;
126
import no.nav.vedtak.felles.prosesstask.api.ProsessTask;
137
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
148
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler;
159
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;
16-
import no.nav.vedtak.mapper.json.DefaultJsonMapper;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
1712

1813
@ApplicationScoped
1914
@ProsessTask(value = "opprydding.iayGrunnlag.uten.referanse", maxFailedRuns = 2)
2015
public class FjernIAYGrunnlagUtenReferanseTask implements ProsessTaskHandler {
21-
public static final int MAX_PARTITION_SIZE = 250;
16+
17+
public static final int IAY_GRUNNLAG_BATCH_SIZE = 500;
18+
2219
private static final Logger LOG = LoggerFactory.getLogger(FjernIAYGrunnlagUtenReferanseTask.class);
20+
2321
private final OppryddingIAYAggregatRepository iayAggregatRepository;
2422
private final ProsessTaskTjeneste taskTjeneste;
2523

@@ -30,22 +28,20 @@ public FjernIAYGrunnlagUtenReferanseTask(OppryddingIAYAggregatRepository iayAggr
3028
}
3129

3230
@Override
33-
public void doTask(ProsessTaskData prosessTaskData) {
34-
Set<Integer> iayAggregatUtenReferanse = DefaultJsonMapper.fromJson(prosessTaskData.getPayloadAsString(), Set.class);
31+
public void doTask(ProsessTaskData unused) {
32+
var iayAggregatUtenReferanse = iayAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE);
3533
LOG.info("Fjerner {} IAY-aggregater uten referanse.", iayAggregatUtenReferanse.size());
36-
iayAggregatUtenReferanse.forEach(iayId -> iayAggregatRepository.slettIayAggregat(iayId.longValue()));
34+
iayAggregatUtenReferanse.forEach(iayAggregatRepository::slettIayAggregat);
3735
LOG.info("Slettet {} IAY-aggregater uten referanse", iayAggregatUtenReferanse.size());
3836

39-
var nyeAggregaterTilSletting = iayAggregatRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE);
40-
if (!nyeAggregaterTilSletting.isEmpty()) {
41-
opprettFjernIayAggregatTask(nyeAggregaterTilSletting);
37+
if (iayAggregatUtenReferanse.size() >= IAY_GRUNNLAG_BATCH_SIZE) {
38+
opprettFjernIayAggregatTask();
4239
}
4340
}
4441

45-
private void opprettFjernIayAggregatTask(List<Long> iayIdsList) {
46-
LOG.info("Oppretter en ny task for å fjerne {} IAY-aggregater uten referanse.", iayIdsList.size());
42+
private void opprettFjernIayAggregatTask() {
43+
LOG.info("Oppretter en ny task for å fjerne IAY-aggregater uten referanse.");
4744
var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class);
48-
prosessTaskData.setPayload(DefaultJsonMapper.toJson(iayIdsList));
4945
taskTjeneste.lagre(prosessTaskData);
5046
}
5147
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package no.nav.foreldrepenger.abakus.rydding.task;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.inject.Inject;
5+
import no.nav.foreldrepenger.abakus.rydding.OppryddingIayInformasjonRepository;
6+
import no.nav.vedtak.felles.prosesstask.api.ProsessTask;
7+
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
8+
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler;
9+
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
13+
@ApplicationScoped
14+
@ProsessTask(value = "opprydding.iayInformasjon.uten.referanse", maxFailedRuns = 2)
15+
public class FjernIayInformasjonUtenReferanseTask implements ProsessTaskHandler {
16+
public static final int IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE = 750;
17+
18+
private static final Logger LOG = LoggerFactory.getLogger(FjernIayInformasjonUtenReferanseTask.class);
19+
20+
private final OppryddingIayInformasjonRepository oppryddingIayInformasjonRepository;
21+
private final ProsessTaskTjeneste taskTjeneste;
22+
23+
@Inject
24+
public FjernIayInformasjonUtenReferanseTask(OppryddingIayInformasjonRepository oppryddingIayInformasjonRepository, ProsessTaskTjeneste taskTjeneste) {
25+
this.oppryddingIayInformasjonRepository = oppryddingIayInformasjonRepository;
26+
this.taskTjeneste = taskTjeneste;
27+
}
28+
29+
@Override
30+
public void doTask(ProsessTaskData unused) {
31+
var iayInformasjonUtenReferanse = oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE);
32+
LOG.info("Fjerner {} IAY-Informasjon uten referanse.", iayInformasjonUtenReferanse.size());
33+
iayInformasjonUtenReferanse.forEach(oppryddingIayInformasjonRepository::slettIayInformasjon);
34+
LOG.info("Slettet {} IAY-Informasjon uten referanse", iayInformasjonUtenReferanse.size());
35+
36+
if (iayInformasjonUtenReferanse.size() >= IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE) {
37+
opprettFjernInformasjonAggregatTask();
38+
}
39+
}
40+
41+
private void opprettFjernInformasjonAggregatTask() {
42+
LOG.info("Oppretter en ny task for å fjerne IAY-Informasjon uten referanse.");
43+
var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class);
44+
taskTjeneste.lagre(prosessTaskData);
45+
}
46+
}

web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java

-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ void slettIayAggregat_register_ok() {
4141
assertThat(iayAggregater).hasSize(1);
4242

4343
repository.slettIayAggregat(iayAggregater.getFirst());
44-
flushAndClear();
4544

4645
assertThat(repository.hentIayAggregaterUtenReferanse(250)).isEmpty();
4746
}
@@ -54,7 +53,6 @@ void slettIayAggregat_saksbehandlet_ok() {
5453
assertThat(iayAggregater).hasSize(1);
5554

5655
repository.slettIayAggregat(iayAggregater.getFirst());
57-
flushAndClear();
5856

5957
assertThat(repository.hentIayAggregaterUtenReferanse(250)).isEmpty();
6058
}

0 commit comments

Comments
 (0)