Skip to content

Commit ea41837

Browse files
authored
Merge branch 'master' into feature/kdi-institusjonsopphold
2 parents 672debc + fbeb417 commit ea41837

49 files changed

Lines changed: 400 additions & 322 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,3 @@ public static void main(String[] args) {
1212
.run(args);
1313
}
1414
}
15-

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/skattekort/SkattekortClient.java

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Collection;
2626
import java.util.List;
2727
import java.util.Objects;
28+
import java.util.Set;
2829
import java.util.stream.Collectors;
2930

3031
import static java.util.Objects.isNull;
@@ -45,6 +46,9 @@
4546
@RequiredArgsConstructor
4647
public class SkattekortClient implements ClientRegister {
4748

49+
public static final Set<String> MILJOER_SUPPORTED = Set.of("q1", "q2");
50+
private static final Set<String> DEFAULT_MILJOER = Set.of("q2");
51+
4852
private final SkattekortConsumer skattekortConsumer;
4953
private final MapperFacade mapperFacade;
5054
private final TransactionHelperService transactionHelperService;
@@ -60,9 +64,19 @@ public Mono<BestillingProgress> gjenopprett(RsDollyUtvidetBestilling bestilling,
6064
return oppdaterStatus(progress, "Avvik: Validering feilet: Trekkode er ikke gyldig");
6165
}
6266

63-
return oppdaterStatus(progress, getInfoVenter(SKATTEKORT.name()))
64-
.flatMap(updatedProgress -> Flux.fromIterable(bestilling.getSkattekort().getArbeidsgiverSkatt())
65-
.flatMap(arbeidsgiver -> sendSkattekortForArbeidstaker(arbeidsgiver, dollyPerson))
67+
var filteredMiljoer = bestilling.getEnvironments().stream()
68+
.filter(MILJOER_SUPPORTED::contains)
69+
.collect(Collectors.toSet());
70+
71+
var miljoer = filteredMiljoer.isEmpty() ? DEFAULT_MILJOER : filteredMiljoer;
72+
73+
return oppdaterStatus(progress, miljoer.stream()
74+
.map(miljo -> "%s:%s".formatted(miljo, getInfoVenter(SKATTEKORT.name())))
75+
.collect(Collectors.joining(",")))
76+
.flatMap(updatedProgress -> Flux.fromIterable(miljoer)
77+
.flatMap(miljoe -> Flux.fromIterable(bestilling.getSkattekort().getArbeidsgiverSkatt())
78+
.flatMap(arbeidsgiver -> sendSkattekortForArbeidstaker(arbeidsgiver, dollyPerson, miljoe))
79+
.collect(Collectors.joining(",")))
6680
.collect(Collectors.joining(","))
6781
.flatMap(resultat -> {
6882
if (isNotBlank(resultat)) {
@@ -76,32 +90,33 @@ public Mono<BestillingProgress> gjenopprett(RsDollyUtvidetBestilling bestilling,
7690
@Override
7791
public void release(List<String> identer) {
7892

79-
Flux.fromIterable(identer)
80-
.flatMap(ident -> skattekortConsumer.hentSkattekort(SkattekortHentRequest.builder().fnr(ident).build())
81-
.flatMapMany(skattekort -> Flux.fromIterable(skattekort.getSkattekort()))
82-
.flatMap(skattekort -> {
83-
val context = MappingContextUtils.getMappingContext();
84-
context.setProperty("ident", ident);
85-
86-
val request = mapperFacade.map(skattekort, SkattekortRequest.class, context);
87-
return skattekortConsumer.sendSkattekort(request);
88-
}))
93+
Flux.fromIterable(MILJOER_SUPPORTED)
94+
.flatMap(miljoe -> Flux.fromIterable(identer)
95+
.flatMap(ident -> skattekortConsumer.hentSkattekort(SkattekortHentRequest.builder().fnr(ident).build(), miljoe)
96+
.flatMapMany(skattekort -> Flux.fromIterable(skattekort.getSkattekort()))
97+
.flatMap(skattekort -> {
98+
val context = MappingContextUtils.getMappingContext();
99+
context.setProperty("ident", ident);
100+
101+
val request = mapperFacade.map(skattekort, SkattekortRequest.class, context);
102+
return skattekortConsumer.sendSkattekort(request, miljoe);
103+
})))
89104
.collectList()
90105
.subscribe(skattekorts -> log.info("Slettet skattekort for identer: {}", identer));
91106
}
92107

93-
private Mono<String> sendSkattekortForArbeidstaker(ArbeidstakerSkatt arbeidstaker, DollyPerson dollyPerson) {
108+
private Mono<String> sendSkattekortForArbeidstaker(ArbeidstakerSkatt arbeidstaker, DollyPerson dollyPerson, String miljoe) {
94109

95110
val context = MappingContextUtils.getMappingContext();
96111
context.setProperty("ident", dollyPerson.getIdent());
97112

98113
return Flux.fromIterable(arbeidstaker.getArbeidstaker())
99114
.map(skattekortmelding ->
100115
mapperFacade.map(skattekortmelding, SkattekortRequest.class, context))
101-
.flatMap(request -> skattekortConsumer.sendSkattekort(request)
116+
.flatMap(request -> skattekortConsumer.sendSkattekort(request, miljoe)
102117
.map(response -> formatStatus(response, request.getSkattekort().getInntektsaar(),
103-
dollyPerson.getIdent())))
104-
.onErrorResume(throwable -> Mono.just("xxxx|%s".formatted(throwable.getMessage())))
118+
dollyPerson.getIdent(), miljoe)))
119+
.onErrorResume(throwable -> Mono.just("%s:%s".formatted(miljoe, throwable.getMessage())))
105120
.collect(Collectors.joining(","));
106121
}
107122

@@ -147,15 +162,14 @@ private static boolean isGyldigTrekkode(Trekkode trekkode) {
147162
UFOERETRYGD_FRA_NAV.equals(trekkode);
148163
}
149164

150-
private String formatStatus(SkattekortResponse response, Integer year, String ident) {
165+
private String formatStatus(SkattekortResponse response, Integer year, String ident, String miljoe) {
151166

152-
val prefix = year + "|";
153167
if (response.getStatus().is2xxSuccessful()) {
154-
return prefix + "Skattekort lagret";
168+
return "%s:OK".formatted(miljoe);
155169
} else {
156-
log.error("Feil ved innsending av skattekort for person: {}, inntektsaar: {}: {}",
157-
ident, year, response.getFeilmelding());
158-
return prefix + errorStatusDecoder.getStatusMessage(response.getFeilmelding());
170+
log.error("Feil ved innsending av skattekort for person: {}, miljoe: {}, inntektsaar: {}: {}",
171+
ident, miljoe, year, response.getFeilmelding());
172+
return "%s:%s".formatted(miljoe, errorStatusDecoder.getStatusMessage(response.getFeilmelding()));
159173
}
160174
}
161175

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/skattekort/SkattekortConsumer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ public SkattekortConsumer(
3535
this.tokenExchange = tokenExchange;
3636
}
3737

38-
public Mono<SkattekortResponse> sendSkattekort(SkattekortRequest skattekortRequest) {
38+
public Mono<SkattekortResponse> sendSkattekort(SkattekortRequest skattekortRequest, String miljoe) {
3939

4040
return tokenExchange.exchange(serverProperties)
41-
.flatMap(token -> new SkattekortOpprettCommand(webClient, skattekortRequest, token.getTokenValue()).call())
42-
.doOnNext(response -> log.info("Skattekort sendt med response: {}", response));
41+
.flatMap(token -> new SkattekortOpprettCommand(webClient, skattekortRequest, miljoe, token.getTokenValue()).call())
42+
.doOnNext(response -> log.info("Skattekort sendt til miljoe {} med response: {}", miljoe, response));
4343
}
4444

45-
public Mono<SkattekortResponse> hentSkattekort(SkattekortHentRequest request) {
45+
public Mono<SkattekortResponse> hentSkattekort(SkattekortHentRequest request, String miljoe) {
4646

4747
return tokenExchange.exchange(serverProperties)
48-
.flatMap(token -> new SkattekortHentCommand(webClient, request, token.getTokenValue()).call())
49-
.doOnNext(response -> log.info("Skattekort hentet med response: {}", response));
48+
.flatMap(token -> new SkattekortHentCommand(webClient, request, miljoe, token.getTokenValue()).call())
49+
.doOnNext(response -> log.info("Skattekort hentet fra miljoe {} med response: {}", miljoe, response));
5050
}
5151

5252
@Override

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/skattekort/command/SkattekortHentCommand.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,21 @@
2424
@Slf4j
2525
public class SkattekortHentCommand implements Callable<Mono<SkattekortResponse>> {
2626

27-
private static final String HENT_SKATTEKORT_URL = "/skattekort/api/v1/person/hent-skattekort";
27+
private static final String HENT_SKATTEKORT_URL = "/skattekort/{miljoe}/api/v1/person/hent-skattekort";
2828

2929
private final WebClient webClient;
3030
private final SkattekortHentRequest request;
31+
private final String miljoe;
3132
private final String token;
3233

3334
@Override
3435
public Mono<SkattekortResponse> call() {
3536

36-
log.info("Henter skattekort fra Sokos: {}", Json.pretty(request));
37+
log.info("Henter skattekort fra Sokos miljoe {}: {}", miljoe, Json.pretty(request));
3738

3839
return webClient
3940
.post()
40-
.uri(uriBuilder -> uriBuilder.path(HENT_SKATTEKORT_URL).build())
41+
.uri(uriBuilder -> uriBuilder.path(HENT_SKATTEKORT_URL).build(miljoe))
4142
.headers(WebClientHeader.bearer(token))
4243
.bodyValue(request)
4344
.retrieve()
@@ -54,9 +55,10 @@ public Mono<SkattekortResponse> call() {
5455
new RuntimeException("Retries exhausted: %s".formatted(lastSignal.failure().getMessage()))))
5556
.onErrorResume(throwable -> {
5657
WebClientError.Description description = WebClientError.describe(throwable);
57-
log.error("Feil ved Henting av skattekort for ident: {}, Inntektsår: {}, Status: {}, Message: {}",
58+
log.error("Feil ved Henting av skattekort for ident: {}, Inntektsår: {}, Miljoe: {}, Status: {}, Message: {}",
5859
request.getFnr(),
5960
nonNull(request.getInntektsaar()) ? request.getInntektsaar() : null,
61+
miljoe,
6062
description.getStatus(),
6163
description.getMessage());
6264
return SkattekortResponse.of(description);

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/skattekort/command/SkattekortOpprettCommand.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,21 @@
2121
@Slf4j
2222
public class SkattekortOpprettCommand implements Callable<Mono<SkattekortResponse>> {
2323

24-
private static final String OPPRETT_SKATTEKORT_URL = "/skattekort/api/v1/person/opprett";
24+
private static final String OPPRETT_SKATTEKORT_URL = "/skattekort/{miljoe}/api/v1/person/opprett";
2525

2626
private final WebClient webClient;
2727
private final SkattekortRequest request;
28+
private final String miljoe;
2829
private final String token;
2930

3031
@Override
3132
public Mono<SkattekortResponse> call() {
3233

33-
log.info("Sender skattekort til Sokos: {}", Json.pretty(request));
34+
log.info("Sender skattekort til Sokos miljoe {}: {}", miljoe, Json.pretty(request));
3435

3536
return webClient
3637
.post()
37-
.uri(uriBuilder -> uriBuilder.path(OPPRETT_SKATTEKORT_URL).build())
38+
.uri(uriBuilder -> uriBuilder.path(OPPRETT_SKATTEKORT_URL).build(miljoe))
3839
.headers(WebClientHeader.bearer(token))
3940
.bodyValue(request)
4041
.retrieve()

apps/dolly-backend/src/main/java/no/nav/dolly/mapper/BestillingSkattekortStatusMapper.java

Lines changed: 24 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
import no.nav.dolly.domain.resultset.RsStatusRapport;
77

88
import java.util.HashMap;
9-
import java.util.HashSet;
109
import java.util.List;
1110
import java.util.Map;
1211
import java.util.Set;
1312

1413
import static java.util.Collections.emptyList;
14+
import static java.util.Collections.singletonList;
1515
import static no.nav.dolly.domain.resultset.SystemTyper.SKATTEKORT;
16+
import static no.nav.dolly.mapper.AbstractRsStatusMiljoeIdentForhold.checkAndUpdateStatus;
1617
import static no.nav.dolly.mapper.AbstractRsStatusMiljoeIdentForhold.decodeMsg;
1718
import static org.apache.commons.lang3.StringUtils.isNotBlank;
1819

@@ -21,72 +22,33 @@ public final class BestillingSkattekortStatusMapper {
2122

2223
public static List<RsStatusRapport> buildSkattekortStatusMap(List<BestillingProgress> progressList) {
2324

24-
boolean hasSkattekortStatus = progressList.stream()
25-
.anyMatch(p -> isNotBlank(p.getSkattekortStatus()));
26-
27-
if (!hasSkattekortStatus) {
28-
return emptyList();
29-
}
30-
31-
Map<String, Set<String>> statusIdents = new HashMap<>();
25+
// status miljø ident
26+
Map<String, Map<String, Set<String>>> statusEnvIdents = new HashMap<>();
3227

3328
progressList.forEach(progress -> {
34-
if (isNotBlank(progress.getSkattekortStatus()) && isNotBlank(progress.getIdent())) {
35-
var entries = progress.getSkattekortStatus().split(",");
36-
for (var entry : entries) {
37-
if (isNotBlank(entry)) {
38-
if (statusIdents.containsKey(entry)) {
39-
statusIdents.get(entry).add(progress.getIdent());
40-
} else {
41-
statusIdents.put(entry, new HashSet<>(Set.of(progress.getIdent())));
42-
}
43-
}
44-
}
45-
}
46-
});
47-
48-
var statusMap = new HashMap<String, Set<String>>();
49-
statusIdents.forEach((key, identsSet) -> {
50-
String melding = key;
51-
52-
if (melding.contains("|")) {
53-
var parts = melding.split("\\|", 2);
54-
var orgYear = parts[0];
55-
var status = parts[1];
56-
57-
if (status.equals("Skattekort lagret")) {
58-
melding = "OK";
59-
} else {
60-
var orgYearParts = orgYear.split("\\+");
61-
if (orgYearParts.length >= 2) {
62-
melding = "FEIL: organisasjon:" + orgYearParts[0] + ", inntektsår:" + orgYearParts[1] + ", melding:" + decodeMsg(status);
63-
} else {
64-
melding = "FEIL: " + decodeMsg(status);
29+
if (isNotBlank(progress.getSkattekortStatus())) {
30+
List.of(progress.getSkattekortStatus().split(",")).forEach(status -> {
31+
var environErrMsg = status.split(":", 2);
32+
var environ = environErrMsg[0];
33+
if (environErrMsg.length > 1 && isNotBlank(environErrMsg[1]) && isNotBlank(progress.getIdent())) {
34+
var errMsg = decodeMsg(environErrMsg[1]);
35+
checkAndUpdateStatus(statusEnvIdents, progress.getIdent(), environ, errMsg);
6536
}
66-
}
67-
} else {
68-
melding = decodeMsg(melding);
69-
}
70-
71-
if (statusMap.containsKey(melding)) {
72-
statusMap.get(melding).addAll(identsSet);
73-
} else {
74-
statusMap.put(melding, new HashSet<>(identsSet));
37+
});
7538
}
7639
});
7740

78-
var statuser = statusMap.entrySet().stream()
79-
.map(entry -> RsStatusRapport.Status.builder()
80-
.melding(entry.getKey())
81-
.identer(entry.getValue().stream().toList())
82-
.build())
83-
.toList();
84-
85-
86-
return List.of(RsStatusRapport.builder()
87-
.id(SKATTEKORT)
88-
.navn(SKATTEKORT.getBeskrivelse())
89-
.statuser(statuser)
90-
.build());
41+
return statusEnvIdents.isEmpty() ? emptyList() :
42+
singletonList(RsStatusRapport.builder().id(SKATTEKORT).navn(SKATTEKORT.getBeskrivelse())
43+
.statuser(statusEnvIdents.entrySet().stream().map(status -> RsStatusRapport.Status.builder()
44+
.melding(status.getKey())
45+
.detaljert(status.getValue().entrySet().stream().map(envIdent -> RsStatusRapport.Detaljert.builder()
46+
.miljo(envIdent.getKey())
47+
.identer(envIdent.getValue())
48+
.build())
49+
.toList())
50+
.build())
51+
.toList())
52+
.build());
9153
}
9254
}

0 commit comments

Comments
 (0)