12
12
import no .nav .dolly .bestilling .dokarkiv .domain .DokarkivResponse ;
13
13
import no .nav .dolly .bestilling .dokarkiv .domain .JoarkTransaksjon ;
14
14
import no .nav .dolly .bestilling .personservice .PersonServiceConsumer ;
15
+ import no .nav .dolly .config .ApplicationConfig ;
15
16
import no .nav .dolly .domain .PdlPersonBolk ;
16
17
import no .nav .dolly .domain .jpa .BestillingProgress ;
17
18
import no .nav .dolly .domain .jpa .TransaksjonMapping ;
21
22
import no .nav .dolly .errorhandling .ErrorStatusDecoder ;
22
23
import no .nav .dolly .service .TransaksjonMappingService ;
23
24
import no .nav .dolly .util .TransactionHelperService ;
25
+ import no .nav .testnav .libs .reactivecore .utils .WebClientFilter ;
24
26
import org .springframework .stereotype .Service ;
25
27
import reactor .core .publisher .Flux ;
26
28
import reactor .core .publisher .Mono ;
27
29
30
+ import java .time .Duration ;
28
31
import java .time .LocalDateTime ;
29
32
import java .util .List ;
33
+ import java .util .Set ;
30
34
import java .util .stream .Collectors ;
31
35
32
36
import static java .util .Objects .isNull ;
33
37
import static java .util .Objects .nonNull ;
34
38
import static no .nav .dolly .domain .resultset .SystemTyper .DOKARKIV ;
39
+ import static no .nav .dolly .errorhandling .ErrorStatusDecoder .encodeStatus ;
35
40
import static org .apache .commons .lang3 .StringUtils .isBlank ;
36
41
import static org .apache .commons .lang3 .StringUtils .isNotBlank ;
37
42
40
45
@ RequiredArgsConstructor
41
46
public class DokarkivClient implements ClientRegister {
42
47
48
+ private final ApplicationConfig applicationConfig ;
43
49
private final DokarkivConsumer dokarkivConsumer ;
50
+ private final ErrorStatusDecoder errorStatusDecoder ;
44
51
private final MapperFacade mapperFacade ;
45
- private final TransaksjonMappingService transaksjonMappingService ;
46
52
private final ObjectMapper objectMapper ;
47
- private final TransactionHelperService transactionHelperService ;
48
53
private final PersonServiceConsumer personServiceConsumer ;
49
- private final ErrorStatusDecoder errorStatusDecoder ;
54
+ private final TransactionHelperService transactionHelperService ;
55
+ private final TransaksjonMappingService transaksjonMappingService ;
50
56
51
57
@ Override
52
58
public Flux <ClientFuture > gjenopprett (RsDollyUtvidetBestilling bestilling , DollyPerson dollyPerson , BestillingProgress progress , boolean isOpprettEndre ) {
53
59
54
60
return Flux .just (bestilling )
55
61
.filter (bestilling1 -> nonNull (bestilling1 .getDokarkiv ()))
56
62
.map (RsDollyUtvidetBestilling ::getDokarkiv )
57
- .flatMap (dokarkiv -> Flux .from (getPersonData (List . of ( dollyPerson .getIdent () ))
58
- .map (person -> buildRequest ( dokarkiv , person ))
59
- . flatMap ( request -> dokarkivConsumer . getEnvironments ( )
60
- . flatMapIterable (env -> env )
61
- . filter ( env -> bestilling . getEnvironments (). contains ( env ))
62
- . flatMap ( env ->
63
- ! transaksjonMappingService . existAlready ( DOKARKIV ,
64
- dollyPerson . getIdent (), env , bestilling . getId ()) || isOpprettEndre ?
65
-
66
- dokarkivConsumer . postDokarkiv ( env , request )
67
- . map ( status ->
68
- getStatus ( dollyPerson . getIdent (),
69
- bestilling . getId (), status )) :
70
-
71
- Mono . just ( env + ":OK" )
72
- ))
73
- .collect (Collectors .joining ("," ) ))
63
+ .flatMap (dokarkiv -> Flux .from (getPersonData (dollyPerson .getIdent ())
64
+ .flatMap (person -> getFilteredMiljoer ( bestilling . getEnvironments ( ))
65
+ . flatMapMany ( miljoer -> Flux . fromIterable ( miljoer )
66
+ . flatMap (env -> buildRequest ( dokarkiv , person )
67
+ . flatMap ( request ->
68
+ ! transaksjonMappingService . existAlready ( DOKARKIV ,
69
+ dollyPerson . getIdent (), env , bestilling . getId ()) || isOpprettEndre ?
70
+ dokarkivConsumer . postDokarkiv ( env , request )
71
+ . map ( status ->
72
+ getStatus ( dollyPerson . getIdent (),
73
+ bestilling . getId (), status )) :
74
+ Mono . just ( env + ":OK" )
75
+ ))
76
+ . timeout ( Duration . ofSeconds ( applicationConfig . getClientTimeout ()))
77
+ . onErrorResume ( error -> getErrors ( error , miljoer ) )
78
+ )))
79
+ .collect (Collectors .joining ("," ))
74
80
.map (status -> futurePersist (progress , status )));
75
81
}
76
82
83
+ private Flux <String > getErrors (Throwable error , List <String > miljoer ) {
84
+
85
+ return Flux .fromIterable (miljoer )
86
+ .map (miljoe -> "%s:%s" .formatted (miljoe , encodeStatus (WebClientFilter .getMessage (error ))));
87
+ }
88
+
77
89
private ClientFuture futurePersist (BestillingProgress progress , String status ) {
78
90
79
91
return () -> {
@@ -84,12 +96,20 @@ private ClientFuture futurePersist(BestillingProgress progress, String status) {
84
96
};
85
97
}
86
98
99
+ private Mono <List <String >> getFilteredMiljoer (Set <String > miljoer ) {
100
+
101
+ return dokarkivConsumer .getEnvironments ()
102
+ .flatMapMany (Flux ::fromIterable )
103
+ .filter (miljoer ::contains )
104
+ .collectList ();
105
+ }
106
+
87
107
private String getStatus (String ident , Long bestillingId , DokarkivResponse response ) {
88
108
89
109
log .info ("Dokarkiv response {} for ident {}" , response , ident );
90
110
91
111
if (isNull (response )) {
92
- return null ;
112
+ return "UKJENT:Intet svar" ;
93
113
}
94
114
95
115
if (isBlank (response .getFeilmelding ())) {
@@ -101,7 +121,7 @@ private String getStatus(String ident, Long bestillingId, DokarkivResponse respo
101
121
102
122
return String .format ("%s:FEIL=Teknisk feil se logg! %s" , response .getMiljoe (),
103
123
isNotBlank (response .getFeilmelding ()) ?
104
- ErrorStatusDecoder . encodeStatus (errorStatusDecoder .getStatusMessage (response .getFeilmelding ())) :
124
+ encodeStatus (errorStatusDecoder .getStatusMessage (response .getFeilmelding ())) :
105
125
"UKJENT" );
106
126
}
107
127
}
@@ -112,22 +132,22 @@ public void release(List<String> identer) {
112
132
// Sletting er ikke støttet
113
133
}
114
134
115
- private Flux <PdlPersonBolk .PersonBolk > getPersonData (List < String > identer ) {
135
+ private Flux <PdlPersonBolk .PersonBolk > getPersonData (String ident ) {
116
136
117
- return personServiceConsumer .getPdlPersoner (identer )
137
+ return personServiceConsumer .getPdlPersoner (List . of ( ident ) )
118
138
.filter (pdlPersonBolk -> nonNull (pdlPersonBolk .getData ()))
119
139
.map (PdlPersonBolk ::getData )
120
140
.map (PdlPersonBolk .Data ::getHentPersonBolk )
121
141
.flatMap (Flux ::fromIterable )
122
142
.filter (personBolk -> nonNull (personBolk .getPerson ()));
123
143
}
124
144
125
- private DokarkivRequest buildRequest (RsDokarkiv rsDokarkiv , PdlPersonBolk .PersonBolk personBolk ) {
145
+ private Mono < DokarkivRequest > buildRequest (RsDokarkiv rsDokarkiv , PdlPersonBolk .PersonBolk personBolk ) {
126
146
127
147
var context = new MappingContext .Factory ().getContext ();
128
148
context .setProperty ("personBolk" , personBolk );
129
149
130
- return mapperFacade .map (rsDokarkiv , DokarkivRequest .class , context );
150
+ return Mono . just ( mapperFacade .map (rsDokarkiv , DokarkivRequest .class , context ) );
131
151
}
132
152
133
153
private void saveTransaksjonId (DokarkivResponse response , String ident , Long bestillingId , String miljoe ) {
@@ -140,7 +160,7 @@ private void saveTransaksjonId(DokarkivResponse response, String ident, Long bes
140
160
.bestillingId (bestillingId )
141
161
.transaksjonId (toJson (JoarkTransaksjon .builder ()
142
162
.journalpostId (response .getJournalpostId ())
143
- .dokumentInfoId (response .getDokumenter ().get ( 0 ).getDokumentInfoId ())
163
+ .dokumentInfoId (response .getDokumenter ().getFirst ( ).getDokumentInfoId ())
144
164
.build ()))
145
165
.datoEndret (LocalDateTime .now ())
146
166
.miljoe (miljoe )
0 commit comments