44import lombok .extern .slf4j .Slf4j ;
55import no .nav .dolly .consumer .altinn3 .Altinn3TilgangServiceConsumer ;
66import no .nav .dolly .consumer .altinn3 .dto .Altinn3TilgangDTO ;
7+ import no .nav .dolly .consumer .brukerservice .BrukerServiceConsumer ;
8+ import no .nav .dolly .consumer .brukerservice .dto .BrukerDTO ;
79import no .nav .dolly .consumer .teamkatalog .TeamkatalogConsumer ;
810import no .nav .dolly .consumer .teamkatalog .dto .TeamkatalogDTO ;
911import no .nav .dolly .domain .dto .DashboardOrganisasjonerDTO ;
1012import no .nav .dolly .domain .dto .DashboardPersonerDTO ;
1113import no .nav .dolly .domain .dto .DashboardTeamsDTO ;
1214import no .nav .dolly .domain .jpa .Bruker ;
1315import no .nav .dolly .domain .projection .BestillingerFragment ;
16+ import no .nav .dolly .domain .projection .OrganisasjonFragment ;
1417import no .nav .dolly .domain .projection .TeamFragment ;
1518import no .nav .dolly .repository .BestillingRepository ;
1619import no .nav .dolly .repository .BrukerRepository ;
@@ -37,10 +40,11 @@ public class DashboardService {
3740
3841 private static final String INGEN_TEAM = "Tilhører ikke noe team" ;
3942
43+ private final Altinn3TilgangServiceConsumer altinn3TilgangServiceConsumer ;
4044 private final BestillingRepository bestillingRepository ;
4145 private final BrukerRepository brukerRepository ;
46+ private final BrukerServiceConsumer brukerServiceConsumer ;
4247 private final TeamkatalogConsumer teamkatalogConsumer ;
43- private final Altinn3TilgangServiceConsumer altinn3TilgangServiceConsumer ;
4448
4549 public Flux <DashboardPersonerDTO > getPersonerStatus () {
4650
@@ -100,7 +104,7 @@ private static long sumByStatus(List<BestillingerFragment> fragments,
100104 }
101105
102106 private static Map <String , Set <String >> groupFragmentsByTeam (List <TeamFragment > fragments ,
103- Map <String , List <String >> teams ) {
107+ Map <String , List <String >> teams ) {
104108
105109 var grouped = new HashMap <String , Set <String >>();
106110 fragments .forEach (fragment -> {
@@ -111,9 +115,39 @@ private static Map<String, Set<String>> groupFragmentsByTeam(List<TeamFragment>
111115 return grouped ;
112116 }
113117
114- public Flux <Altinn3TilgangDTO > getOrganisasjonerStatus () {
118+ public Flux <DashboardOrganisasjonerDTO > getOrganisasjonerStatus () {
115119
116-
117- return altinn3TilgangServiceConsumer .getOrganisasjoner ();
120+ return Mono .zip (altinn3TilgangServiceConsumer .getOrganisasjoner ()
121+ .collect (Collectors .toMap (Altinn3TilgangDTO ::getOrganisasjonsnummer , Altinn3TilgangDTO ::getNavn )),
122+ brukerServiceConsumer .getAlleBrukere ()
123+ .collect (Collectors .toMap (BrukerDTO ::getId , BrukerDTO ::getOrganisasjonsnummer )))
124+ .flatMapMany (oppslag -> bestillingRepository .findBestillingerForOrganisasjonerOrderBySistOppdatert ()
125+ .groupBy (OrganisasjonFragment ::getInterval )
126+ .flatMap (Flux ::collectList )
127+ .flatMap (fragments -> {
128+ var organisasjoner = new HashMap <String , Set <String >>();
129+ fragments .forEach (fragment -> {
130+ var orgNummer = oppslag .getT2 ().get (fragment .getBrukerId ());
131+ organisasjoner .computeIfAbsent (orgNummer , _ -> new HashSet <>())
132+ .add (fragment .getBrukerId ());
133+ });
134+ return Mono .just (organisasjoner )
135+ .zipWith (Mono .just (fragments .getFirst ().getInterval ()));
136+ })
137+ .map (organisasjoner -> DashboardOrganisasjonerDTO .builder ()
138+ .interval (organisasjoner .getT2 ())
139+ .organisasjoner (organisasjoner .getT1 ().entrySet ().stream ()
140+ .map (entry -> new DashboardOrganisasjonerDTO .Entry (
141+ entry .getKey (),
142+ oppslag .getT1 ().getOrDefault (entry .getKey (), "Ukjent organisasjon" ),
143+ entry .getValue ().size ()))
144+ .sorted (Comparator .comparing (DashboardOrganisasjonerDTO .Entry ::getNavn ))
145+ .toList ())
146+ .totaltAntallOrganisasjoner (organisasjoner .getT1 ().size ())
147+ .totaltUnikeBrukere ((int ) organisasjoner .getT1 ().values ().stream ()
148+ .distinct ()
149+ .count ())
150+ .build ()))
151+ .sort (Comparator .comparing (DashboardOrganisasjonerDTO ::getInterval ).reversed ());
118152 }
119153}
0 commit comments