Skip to content

Commit

Permalink
Merge branch 'master' into change/local-test-dbs
Browse files Browse the repository at this point in the history
  • Loading branch information
rfc3092 committed Sep 2, 2024
2 parents c5dac67 + a4ce921 commit 18562ad
Show file tree
Hide file tree
Showing 106 changed files with 3,100 additions and 636 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonTpForholdRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonTpYtelseRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonUforetrygdRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonVedtakResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonVedtakResponse.SakType;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonsavtaleRequest;
import no.nav.dolly.bestilling.personservice.PersonServiceConsumer;
Expand Down Expand Up @@ -66,7 +68,6 @@
import static java.util.Objects.nonNull;
import static no.nav.dolly.domain.resultset.SystemTyper.PEN_AP;
import static no.nav.dolly.domain.resultset.SystemTyper.PEN_UT;
import static org.apache.commons.lang3.BooleanUtils.isTrue;
import static org.apache.poi.util.StringUtil.isNotBlank;

@Slf4j
Expand Down Expand Up @@ -177,7 +178,6 @@ public Flux<ClientFuture> gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly
utvidetPersondata,
dollyPerson.getIdent(),
bestilteMiljoer.get(),
isOpprettEndre,
bestillingId)
.map(response -> PEN_ALDERSPENSJON + decodeStatus(response, dollyPerson.getIdent())),

Expand All @@ -186,7 +186,6 @@ public Flux<ClientFuture> gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly
utvidetPersondata.getT2(),
dollyPerson.getIdent(),
bestilteMiljoer.get(),
isOpprettEndre,
bestillingId)
.map(response -> PEN_UFORETRYGD + decodeStatus(response, dollyPerson.getIdent()))
)
Expand Down Expand Up @@ -361,86 +360,93 @@ private Flux<PensjonforvalterResponse> opprettPersoner(String hovedperson, Set<S
private Flux<PensjonforvalterResponse> lagreAlderspensjon(PensjonData pensjonData,
Tuple2<List<PdlPersonBolk.PersonBolk>, String> utvidetPersondata,
String ident, Set<String> miljoer,
boolean isOpprettEndre, Long bestillingId) {
Long bestillingId) {

return Flux.just(pensjonData)
.filter(PensjonData::hasAlderspensjon)
.map(PensjonData::getAlderspensjon)
.flatMap(alderspensjon -> Flux.fromIterable(miljoer)
.flatMap(miljoe -> {

if (isOpprettEndre || !transaksjonMappingService.existAlready(PEN_AP, ident, miljoe, null)) {
.flatMap(miljoe -> pensjonforvalterConsumer.hentVedtak(ident, miljoe)
.collectList()
.map(vedtakResponse -> !hasVedtak(vedtakResponse, SakType.AP))
.map(skalOpprette -> {
if (skalOpprette) {

AlderspensjonRequest pensjonRequest;
var context = new MappingContext.Factory().getContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, List.of(miljoe));

if (alderspensjon.isSoknad()) {
context.setProperty("relasjoner", utvidetPersondata.getT1());
pensjonRequest = mapperFacade.map(alderspensjon, AlderspensjonSoknadRequest.class, context);

} else {
context.setProperty(NAV_ENHET, utvidetPersondata.getT2());
pensjonRequest = mapperFacade.map(alderspensjon, AlderspensjonVedtakRequest.class, context);
}

AlderspensjonRequest pensjonRequest;
var context = new MappingContext.Factory().getContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, List.of(miljoe));
var finalPensjonRequest = new AtomicReference<>(pensjonRequest);
return pensjonforvalterConsumer.lagreAlderspensjon(pensjonRequest)
.map(response -> {
response.getStatus().forEach(status ->
saveAPTransaksjonId(ident, status.getMiljo(), bestillingId,
PEN_AP, finalPensjonRequest));
return response;
});

if (isTrue(alderspensjon.getSoknad())) {
context.setProperty("relasjoner", utvidetPersondata.getT1());
pensjonRequest = mapperFacade.map(alderspensjon, AlderspensjonSoknadRequest.class, context);
} else {
return getStatus(miljoe, 200, "OK");
}
})))
.flatMap(Flux::from);
}

} else {
context.setProperty(NAV_ENHET, utvidetPersondata.getT2());
pensjonRequest = mapperFacade.map(alderspensjon, AlderspensjonVedtakRequest.class, context);
}
private static boolean hasVedtak(List<PensjonVedtakResponse> pensjonsvedtak, SakType type) {

var finalPensjonRequest = new AtomicReference<>(pensjonRequest);
return pensjonforvalterConsumer.lagreAlderspensjon(pensjonRequest)
.map(response -> {
response.getStatus().forEach(status -> {
if (status.getResponse().isResponse2xx()) {
saveAPTransaksjonId(ident, status.getMiljo(), bestillingId,
PEN_AP, finalPensjonRequest);
}
});
return response;
});

} else {
return getStatus(miljoe, 200, "OK");
}
}));
return pensjonsvedtak.stream().anyMatch(entry -> entry.getSakType() == type &&
entry.getSisteOppdatering().contains("opprettet"));
}

private Flux<PensjonforvalterResponse> lagreUforetrygd(PensjonData pensjondata, String navEnhetNr,
String ident, Set<String> miljoer, boolean isOpprettEndre,
Long bestillingId) {
String ident, Set<String> miljoer, Long bestillingId) {

return Flux.just(pensjondata)
.filter(PensjonData::hasUforetrygd)
.map(PensjonData::getUforetrygd)
.flatMap(uforetrygd -> Flux.fromIterable(miljoer)
.flatMap(miljoe -> {

if (isOpprettEndre || !transaksjonMappingService.existAlready(PEN_UT, ident, miljoe, null)) {

var context = MappingContextUtils.getMappingContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, List.of(miljoe));
context.setProperty(NAV_ENHET, navEnhetNr);
return Flux.just(mapperFacade.map(uforetrygd, PensjonUforetrygdRequest.class, context))
.flatMap(request -> pensjonforvalterConsumer.lagreUforetrygd(request)
.map(response -> {
response.getStatus().stream()
.filter(status -> status.getResponse().isResponse2xx())
.forEach(status ->
saveAPTransaksjonId(ident, status.getMiljo(), bestillingId,
PEN_UT, new AtomicReference<>(request)));
return response;
}));

} else {
return getStatus(miljoe, 200, "OK");
}
}));
.flatMap(miljoe -> pensjonforvalterConsumer.hentVedtak(ident, miljoe)
.collectList()
.map(vedtak -> {
if (!hasVedtak(vedtak, SakType.UT)) {

var context = MappingContextUtils.getMappingContext();
context.setProperty(IDENT, ident);
context.setProperty(MILJOER, List.of(miljoe));
context.setProperty(NAV_ENHET, navEnhetNr);
return Flux.just(mapperFacade.map(uforetrygd, PensjonUforetrygdRequest.class, context))
.flatMap(request -> pensjonforvalterConsumer.lagreUforetrygd(request)
.map(response -> {
response.getStatus().stream()
.filter(status -> status.getResponse().isResponse2xx())
.forEach(status ->
saveAPTransaksjonId(ident, status.getMiljo(), bestillingId,
PEN_UT, new AtomicReference<>(request)));
return response;
}));
} else {
return getStatus(miljoe, 200, "OK");
}
})))
.flatMap(Flux::from);
}

@SuppressWarnings("java:S3740")
private void saveAPTransaksjonId(String ident, String miljoe, Long bestillingId, SystemTyper
type, AtomicReference vedtak) {

log.info("Lagrer transaksjon for {} i {} ", ident, miljoe);
transaksjonMappingService.delete(ident, miljoe, type.name());

transaksjonMappingService.save(
TransaksjonMapping.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreTpYtelseCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.LagreUforetrygdCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.OpprettPersonCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.PensjonHentVedtakCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.SlettePensjonsavtaleCommand;
import no.nav.dolly.bestilling.pensjonforvalter.command.SletteTpForholdCommand;
import no.nav.dolly.bestilling.pensjonforvalter.domain.AlderspensjonRequest;
Expand All @@ -26,6 +27,7 @@
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonTpForholdRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonTpYtelseRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonUforetrygdRequest;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonVedtakResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonforvalterResponse;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonsavtaleRequest;
import no.nav.dolly.config.Consumers;
Expand Down Expand Up @@ -171,13 +173,22 @@ public Flux<PensjonforvalterResponse> lagrePensjonsavtale(PensjonsavtaleRequest
@Timed(name = "providers", tags = { "operation", "pen_slettePensjpnsavtale" })
public void slettePensjonsavtale(List<String> identer) {

var test = tokenService.exchange(serverProperties)
tokenService.exchange(serverProperties)
.flatMapMany(token -> Flux.fromIterable(identer)
.flatMap(ident -> new SlettePensjonsavtaleCommand(webClient, ident, token.getTokenValue()).call()))
.collectList()
.subscribe(resultat -> log.info("Slettet pensjonsavtaler (PEN), alle miljøer"));
}

@Timed(name = "providers", tags = { "operation", "pen_hentVedtak" })
public Flux<PensjonVedtakResponse> hentVedtak(String ident, String miljoe) {

return tokenService.exchange(serverProperties)
.flatMapMany(token -> new PensjonHentVedtakCommand(webClient, ident, miljoe, token.getTokenValue()).call())
.doOnNext(response -> log.info("Pensjon vedtak for ident {}, miljoe {} mottatt {}",
ident, miljoe, response));
}

@Override
public String serviceUrl() {
return serverProperties.getUrl();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
@RequiredArgsConstructor
public class LagreAlderspensjonCommand implements Callable<Flux<PensjonforvalterResponse>> {

private static final String PENSJON_AP_VEDTAK_URL = "/api/v3/vedtak/ap";
private static final String PENSJON_AP_SOKNAD_URL = PENSJON_AP_VEDTAK_URL + "/soknad";
private static final String PENSJON_AP_VEDTAK_URL = "/api/v4/vedtak/ap";
private static final String PENSJON_AP_SOKNAD_URL = "/api/v3/vedtak/ap/soknad";

private final WebClient webClient;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
@RequiredArgsConstructor
public class LagreUforetrygdCommand implements Callable<Flux<PensjonforvalterResponse>> {

private static final String PENSJON_UT_URL = "/api/v1/vedtak/ut";
private static final String PENSJON_UT_URL = "/api/v2/vedtak/ut";

private final WebClient webClient;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package no.nav.dolly.bestilling.pensjonforvalter.command;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.dolly.bestilling.pensjonforvalter.domain.PensjonVedtakResponse;
import no.nav.testnav.libs.reactivecore.utils.WebClientFilter;
import no.nav.testnav.libs.securitycore.config.UserConstant;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.util.retry.Retry;

import java.time.Duration;
import java.util.concurrent.Callable;

import static no.nav.dolly.domain.CommonKeysAndUtils.CONSUMER;
import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CALL_ID;
import static no.nav.dolly.domain.CommonKeysAndUtils.HEADER_NAV_CONSUMER_ID;
import static no.nav.dolly.util.CallIdUtil.generateCallId;
import static no.nav.dolly.util.TokenXUtil.getUserJwt;
import static org.springframework.http.HttpHeaders.AUTHORIZATION;

@Slf4j
@RequiredArgsConstructor
public class PensjonHentVedtakCommand implements Callable<Flux<PensjonVedtakResponse>> {

private static final String VEDTAK_URL = "/api/v2/vedtak";

private final WebClient webClient;
private final String ident;
private final String miljoe;
private final String token;

@Override
public Flux<PensjonVedtakResponse> call() {

var callId = generateCallId();
log.info("Pensjon hente vedtak for ident {}, miljoe {}, callId {}", ident, miljoe, callId);

return webClient
.get()
.uri(uriBuilder -> uriBuilder
.path(VEDTAK_URL)
.queryParam("miljo", miljoe)
.build())
.header(AUTHORIZATION, "Bearer " + token)
.header(UserConstant.USER_HEADER_JWT, getUserJwt())
.header(HEADER_NAV_CALL_ID, callId)
.header(HEADER_NAV_CONSUMER_ID, CONSUMER)
.header("fnr", ident)
.retrieve()
.bodyToFlux(PensjonVedtakResponse.class)
.retryWhen(Retry.backoff(3, Duration.ofSeconds(5))
.filter(WebClientFilter::is5xxException))
.doOnError(WebClientFilter::logErrorMessage)
.onErrorResume(Exception.class, error -> Mono.empty());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class PensjonUforetrygdRequest {
private LocalDate onsketVirkningsDato;
private LocalDate uforetidspunkt;
private Integer inntektForUforhet;
private Integer inntektEtterUforhet;
private Integer uforegrad;
private UforeType minimumInntektForUforhetType;
private String saksbehandler;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package no.nav.dolly.bestilling.pensjonforvalter.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PensjonVedtakResponse {

public enum SakType {AP, UT}

private String sakId;
private SakType sakType;
private String vedtakStatus;
private String sisteOppdatering;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
import no.nav.dolly.bestilling.ClientRegister;
import no.nav.dolly.bestilling.aareg.AaregClient;
import no.nav.dolly.bestilling.inntektstub.InntektstubClient;
import no.nav.dolly.bestilling.kontoregisterservice.KontoregisterClient;
import no.nav.dolly.bestilling.pdldata.PdlDataConsumer;
import no.nav.dolly.bestilling.pdldata.dto.PdlResponse;
import no.nav.dolly.bestilling.pensjonforvalter.PensjonforvalterClient;
import no.nav.dolly.bestilling.tagshendelseslager.TagsHendelseslagerClient;
import no.nav.dolly.bestilling.tpsmessagingservice.TpsMessagingClient;
import no.nav.dolly.domain.jpa.Bestilling;
import no.nav.dolly.domain.jpa.BestillingProgress;
import no.nav.dolly.domain.jpa.Bruker;
Expand Down Expand Up @@ -120,6 +122,8 @@ public GjenopprettSteg fase1Klienter() {
public GjenopprettSteg fase2Klienter() {

var klienter = List.of(
KontoregisterClient.class,
TpsMessagingClient.class,
PensjonforvalterClient.class,
AaregClient.class,
InntektstubClient.class);
Expand Down
Loading

0 comments on commit 18562ad

Please sign in to comment.