diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java index 6af8668f777..f0ef428e58d 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java @@ -10,4 +10,4 @@ public static void main(String[] args) { SpringApplication.run(DollyBackendApplicationStarter.class, args); } -} \ No newline at end of file +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/AaregClient.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/AaregClient.java index 7e7b9949089..2d1f778f561 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/AaregClient.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/AaregClient.java @@ -68,6 +68,7 @@ public Flux gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly var initStatus = miljoer.stream() .map(miljo -> String.format("%s:%s", miljo, getInfoVenter(SYSTEM))) .collect(Collectors.joining(",")); + transactionHelperService.persister(progress, BestillingProgress::getAaregStatus, BestillingProgress::setAaregStatus, initStatus); @@ -79,7 +80,7 @@ public Flux gjenopprett(RsDollyUtvidetBestilling bestilling, Dolly return sendArbeidsforhold(bestilling, dollyPerson, miljoerTrygg.get(), isOpprettEndre); } else { - return ameldingService.sendAmelding(bestilling, dollyPerson, miljoerTrygg.get()); + return ameldingService.sendAmelding(bestilling, dollyPerson, miljoerTrygg.get(), progress); } }) .map(status -> futurePersist(progress, status)); diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingConsumer.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingConsumer.java index 764d7cecd77..a967466d8b0 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingConsumer.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingConsumer.java @@ -5,18 +5,24 @@ import lombok.extern.slf4j.Slf4j; import no.nav.dolly.bestilling.aareg.command.AmeldingPutCommand; import no.nav.dolly.config.Consumers; +import no.nav.dolly.domain.jpa.BestillingProgress; import no.nav.dolly.errorhandling.ErrorStatusDecoder; import no.nav.dolly.metrics.Timed; import no.nav.testnav.libs.dto.ameldingservice.v1.AMeldingDTO; import no.nav.testnav.libs.dto.ameldingservice.v1.VirksomhetDTO; import no.nav.testnav.libs.securitycore.domain.ServerProperties; import no.nav.testnav.libs.standalone.servletsecurity.exchange.TokenExchange; +import org.slf4j.event.Level; import org.springframework.http.HttpStatus; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import reactor.netty.http.client.HttpClient; +import reactor.netty.resources.ConnectionProvider; +import java.time.Duration; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.stream.Collectors; @@ -30,7 +36,6 @@ public class AmeldingConsumer { private static final String JURIDISK_ENHET_IKKE_FUNNET = "Feil= Juridisk enhet for organisasjon(ene): %s ble ikke funnet i miljø"; private static final DateTimeFormatter YEAR_MONTH = DateTimeFormatter.ofPattern("yyyy-MM"); - private final TokenExchange tokenService; private final WebClient webClient; private final ServerProperties serverProperties; @@ -41,19 +46,29 @@ public AmeldingConsumer( Consumers consumers, ObjectMapper objectMapper, ErrorStatusDecoder errorStatusDecoder, - WebClient.Builder webClientBuilder - ) { + WebClient.Builder webClientBuilder) { + this.tokenService = tokenService; serverProperties = consumers.getTestnavAmeldingService(); this.webClient = webClientBuilder .baseUrl(serverProperties.getUrl()) .exchangeStrategies(getJacksonStrategy(objectMapper)) + .clientConnector( + new ReactorClientHttpConnector( + HttpClient + .create(ConnectionProvider.builder("Testnorge connection pool") + .maxConnections(5) + .pendingAcquireMaxCount(10000) + .pendingAcquireTimeout(Duration.ofMinutes(30)) + .build()) + .responseTimeout(Duration.ofSeconds(3)) + )) .build(); this.errorStatusDecoder = errorStatusDecoder; } - @Timed(name = "providers", tags = { "operation", "amelding_put" }) - public Flux sendAmeldinger(List ameldinger, String miljoe) { + @Timed(name = "providers", tags = {"operation", "amelding_put"}) + public Flux sendAmeldinger(List ameldinger, String miljoe, BestillingProgress progress) { return tokenService.exchange(serverProperties) .flatMapMany(token -> Flux.fromIterable(ameldinger) @@ -67,9 +82,13 @@ public Flux sendAmeldinger(List ameldinger, String miljoe) log.info("Sender Amelding {} til miljø {}: {}", amelding.getKalendermaaned().format(YEAR_MONTH), miljoe, Json.pretty(amelding)); return new AmeldingPutCommand(webClient, amelding, miljoe, token.getTokenValue()).call() - .doOnNext(status -> log.info("Ameldingstatus: {}", status.getStatusCode())) .map(status -> status.getStatusCode().is2xxSuccessful() ? "OK" : - errorStatusDecoder.getErrorText(HttpStatus.valueOf(status.getStatusCode().value()), status.getBody())); + errorStatusDecoder.getErrorText(HttpStatus.valueOf(status.getStatusCode().value()), status.getBody())) + .doOnNext(status -> + log.atLevel("OK".equals(status) ? Level.INFO : Level.ERROR) + .log("Ameldingstatus: {}, miljoe: {}, kalendermåned: {}, organisasjon: {}", + status, miljoe, amelding.getKalendermaaned(), + amelding.getOpplysningspliktigOrganisajonsnummer())); } })); } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingService.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingService.java index 388baf613bc..95b766dcb39 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingService.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/AmeldingService.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import ma.glasnost.orika.MapperFacade; import ma.glasnost.orika.MappingContext; +import no.nav.dolly.domain.jpa.BestillingProgress; import no.nav.dolly.domain.resultset.RsDollyUtvidetBestilling; import no.nav.dolly.domain.resultset.aareg.RsAareg; import no.nav.dolly.domain.resultset.aareg.RsAmeldingRequest; @@ -16,6 +17,7 @@ import reactor.core.publisher.Mono; import java.util.Collection; +import java.util.Comparator; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -25,16 +27,16 @@ @Slf4j public class AmeldingService { - private static final String STATUS_ELEMENT = "%s: arbforhold=1$%s"; + private static final String STATUS_ELEMENT = "%s:Amelding$%s"; private final AmeldingConsumer ameldingConsumer; private final MapperFacade mapperFacade; private final OrganisasjonServiceConsumer organisasjonServiceConsumer; public Mono sendAmelding(RsDollyUtvidetBestilling bestilling, DollyPerson dollyPerson, - Set miljoer) { + Set miljoer, BestillingProgress progress) { - var orgnumre = bestilling.getAareg().get(0).getAmelding().stream() + var orgnumre = bestilling.getAareg().getFirst().getAmelding().stream() .map(RsAmeldingRequest::getArbeidsforhold) .flatMap(Collection::stream) .map(RsArbeidsforholdAareg::getArbeidsgiver) @@ -46,14 +48,15 @@ public Mono sendAmelding(RsDollyUtvidetBestilling bestilling, DollyPerso .filter(OrganisasjonDTO::isFunnet) .collect(Collectors.toMap(OrganisasjonDTO::getOrgnummer, OrganisasjonDTO::getJuridiskEnhet)) .flatMapMany(organisasjon -> - prepareAmeldinger(bestilling.getAareg().get(0), dollyPerson.getIdent(), - organisasjon, miljoe)) + prepareAmeldinger(bestilling.getAareg().getFirst(), dollyPerson.getIdent(), + organisasjon, miljoe, progress)) .collect(Collectors.joining(","))) .flatMap(Flux::from) .collect(Collectors.joining(",")); } - private Flux prepareAmeldinger(RsAareg aareg, String ident, Map organisasjon, String miljoe) { + private Flux prepareAmeldinger(RsAareg aareg, String ident, Map organisasjon, + String miljoe, BestillingProgress progress) { var context = new MappingContext.Factory().getContext(); context.setProperty("personIdent", ident); @@ -62,9 +65,10 @@ private Flux prepareAmeldinger(RsAareg aareg, String ident, Map mapperFacade.map(aamelding, AMeldingDTO.class, context)) + .sort(Comparator.comparing(AMeldingDTO::getKalendermaaned)) .collectList() - .flatMapMany(reultat -> ameldingConsumer.sendAmeldinger(reultat, miljoe) + .flatMapMany(ameldinger -> ameldingConsumer.sendAmeldinger(ameldinger, miljoe, progress) .distinct() - .map(status -> String.format(STATUS_ELEMENT, miljoe, status))); + .map(status -> STATUS_ELEMENT.formatted(miljoe, status))); } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/mapper/AmeldingRequestMappingStrategy.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/mapper/AmeldingRequestMappingStrategy.java index 9d0d11df1b2..89ad49345d5 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/mapper/AmeldingRequestMappingStrategy.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/aareg/amelding/mapper/AmeldingRequestMappingStrategy.java @@ -24,6 +24,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; @@ -54,16 +55,21 @@ public void mapAtoB(RsAmeldingRequest rsAmelding, amelding.setKalendermaaned(LocalDate.of(Integer.parseInt(date[0]), Integer.parseInt(date[1]), 1)); var opplysningsPliktig = (Map) context.getProperty("opplysningspliktig"); - amelding.setOpplysningspliktigOrganisajonsnummer(opplysningsPliktig.get(rsAmelding.getArbeidsforhold().get(0).getArbeidsgiver().getOrgnummer())); + amelding.setOpplysningspliktigOrganisajonsnummer(opplysningsPliktig.get(rsAmelding.getArbeidsforhold() + .getFirst().getArbeidsgiver().getOrgnummer())); var virksomheter = mapperFacade.mapAsList(rsAmelding.getArbeidsforhold(), Virksomhet.class, context); - virksomheter.forEach(virksomhet -> { - var arbForholdId = new AtomicInteger(0); - virksomhet.getPersoner() - .forEach(person -> person.getArbeidsforhold() - .forEach(arbeidsforhold -> arbeidsforhold - .setArbeidsforholdId(Integer.toString(arbForholdId.incrementAndGet())))); - }); + var arbeidsForholdIder = new HashMap(); + virksomheter + .forEach(virksomhet -> virksomhet.getPersoner().forEach(person -> + arbeidsForholdIder.put(virksomhet.getOrganisajonsnummer()+person.getIdent(), + new AtomicInteger(0)))); + virksomheter.forEach(virksomhet -> virksomhet.getPersoner() + .forEach(person -> person.getArbeidsforhold() + .forEach(arbeidsforhold -> arbeidsforhold + .setArbeidsforholdId(Integer.toString( + arbeidsForholdIder.get(virksomhet.getOrganisajonsnummer()+person.getIdent()) + .incrementAndGet()))))); var ameldingVirksomheter = virksomheter.stream().map(virksomhet -> VirksomhetDTO.builder() .organisajonsnummer(virksomhet.getOrganisajonsnummer()) @@ -94,12 +100,14 @@ public void mapAtoB(RsArbeidsforholdAareg rsArbeidsforholdAareg, Virksomhet virk getDate(rsArbeidsforholdAareg.getAnsettelsesPeriode().getTom()) : null) .antallTimerPerUke( !rsArbeidsforholdAareg.getAntallTimerForTimeloennet().isEmpty() ? - rsArbeidsforholdAareg.getAntallTimerForTimeloennet().get(0).getAntallTimer().floatValue() : + rsArbeidsforholdAareg.getAntallTimerForTimeloennet() + .getFirst().getAntallTimer().floatValue() : getAvtaltArbeidstidPerUke(rsArbeidsforholdAareg)) .arbeidsforholdType((String) context.getProperty("arbeidsforholdstype")) .arbeidstidsordning(rsArbeidsforholdAareg.getArbeidsavtale().getArbeidstidsordning()) .fartoey(nonNull(rsArbeidsforholdAareg.getFartoy()) && !rsArbeidsforholdAareg.getFartoy().isEmpty() ? - mapperFacade.map(rsArbeidsforholdAareg.getFartoy().get(0), FartoeyDTO.class) : null) + mapperFacade.map(rsArbeidsforholdAareg.getFartoy() + .getFirst(), FartoeyDTO.class) : null) .inntekter( (nonNull(rsArbeidsforholdAareg.getUtenlandsopphold()) && !rsArbeidsforholdAareg.getUtenlandsopphold().isEmpty()) || diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingAaregStatusMapper.java b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingAaregStatusMapper.java index 65cde2d4305..b648b8b13cb 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingAaregStatusMapper.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingAaregStatusMapper.java @@ -8,12 +8,12 @@ import no.nav.dolly.domain.resultset.RsStatusRapport; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static no.nav.dolly.domain.resultset.SystemTyper.AAREG; import static no.nav.dolly.mapper.AbstractRsStatusMiljoeIdentForhold.checkAndUpdateStatus; @@ -43,23 +43,26 @@ public static List buildAaregStatusMap(List } }); - return errorEnvIdents.isEmpty() ? emptyList() : - singletonList(RsStatusRapport.builder().id(AAREG).navn(AAREG.getBeskrivelse()) - .statuser(errorEnvIdents.entrySet().stream().map(status -> - RsStatusRapport.Status.builder() - .melding(status.getKey().replace(";", ",")) - .detaljert(status.getValue().entrySet().stream().map(miljo -> - RsStatusRapport.Detaljert.builder() - .miljo(miljo.getKey()) - .identer(miljo.getValue()) - .build()) - .toList()) - .build()) - .toList()) + var statuser = errorEnvIdents.entrySet().stream().map(status -> + RsStatusRapport.Status.builder() + .melding(status.getKey().replace(";", ",")) + .detaljert(status.getValue().entrySet().stream().map(miljo -> + RsStatusRapport.Detaljert.builder() + .miljo(miljo.getKey()) + .identer(miljo.getValue()) + .build()) + .toList()) + .build()) + .toList(); + + return statuser.isEmpty() ? Collections.emptyList() : + singletonList(RsStatusRapport.builder() + .navn(AAREG.getBeskrivelse()) + .id(AAREG) + .statuser(statuser) .build()); } - public static String konverterBAfeilkodeTilFeilmelding(String baKode) { var baFeilkode = getBaFeilkodeFromFeilmelding(baKode); try { diff --git a/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/repository/OppsummeringsdokumentRepository.java b/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/repository/OppsummeringsdokumentRepository.java index 9e22e797374..a744f3ab626 100644 --- a/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/repository/OppsummeringsdokumentRepository.java +++ b/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/repository/OppsummeringsdokumentRepository.java @@ -1,14 +1,9 @@ package no.nav.testnav.apps.oppsummeringsdokumentservice.repository; import no.nav.testnav.apps.oppsummeringsdokumentservice.repository.model.OppsummeringsdokumentModel; -import no.nav.testnav.libs.dto.oppsummeringsdokumentservice.v2.Populasjon; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface OppsummeringsdokumentRepository extends ElasticsearchRepository { - void deleteAllByMiljoAndPopulasjon(String miljo, Populasjon populasjon); - - void deleteAllByMiljo(String miljo); - } diff --git a/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/service/SearchQueryUtility.java b/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/service/SearchQueryUtility.java index a596653e8bc..4331755b721 100644 --- a/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/service/SearchQueryUtility.java +++ b/apps/oppsummeringsdokument-service/src/main/java/no/nav/testnav/apps/oppsummeringsdokumentservice/service/SearchQueryUtility.java @@ -23,8 +23,8 @@ public static QueryBuilder prepareQuery(QueryRequest request) { matchString(query, "_id", request.getId()); matchString(query, "miljo", request.getMiljo()); + matchString(query, "opplysningspliktigOrganisajonsnummer", request.getOrgnummer()); matchString(query, "virksomheter.personer.ident", request.getIdent()); - matchString(query, "virksomheter.organisajonsnummer", request.getOrgnummer()); matchString(query, "virksomheter.personer.arbeidsforhold.typeArbeidsforhold", request.getTypeArbeidsforhold()); if (nonNull(request.getFom())) {