88import no .nav .dolly .consumer .brukerservice .dto .BrukerDTO ;
99import no .nav .dolly .consumer .teamkatalog .TeamkatalogConsumer ;
1010import no .nav .dolly .consumer .teamkatalog .dto .TeamkatalogDTO ;
11+ import no .nav .dolly .domain .dto .DashboardDollyTeamsDTO ;
1112import no .nav .dolly .domain .dto .DashboardOrganisasjonerDTO ;
1213import no .nav .dolly .domain .dto .DashboardPersonerDTO ;
1314import no .nav .dolly .domain .dto .DashboardTeamsDTO ;
1415import no .nav .dolly .domain .jpa .Bruker ;
1516import no .nav .dolly .domain .projection .BestillingerFragment ;
17+ import no .nav .dolly .domain .projection .DollyTeamFragment ;
1618import no .nav .dolly .domain .projection .OrganisasjonFragment ;
1719import no .nav .dolly .domain .projection .TeamFragment ;
1820import no .nav .dolly .repository .BestillingRepository ;
3133import java .util .function .Function ;
3234import java .util .stream .Collectors ;
3335
36+ import static java .lang .Math .toIntExact ;
3437import static org .apache .commons .lang3 .StringUtils .isNotBlank ;
3538
3639@ Slf4j
@@ -94,28 +97,6 @@ public Flux<DashboardTeamsDTO> getTeamsStatus() {
9497 .sort (Comparator .comparing (DashboardTeamsDTO ::getInterval ).reversed ());
9598 }
9699
97- private static long sumByStatus (List <BestillingerFragment > fragments ,
98- Function <BestillingerFragment , String > statusGetter ,
99- String value ) {
100-
101- return fragments .stream ()
102- .filter (f -> value .equals (statusGetter .apply (f )))
103- .mapToLong (BestillingerFragment ::getPersoner )
104- .sum ();
105- }
106-
107- private static Map <String , Set <String >> groupFragmentsByTeam (List <TeamFragment > fragments ,
108- Map <String , List <String >> teams ) {
109-
110- var grouped = new HashMap <String , Set <String >>();
111- fragments .forEach (fragment -> {
112- var teamNames = teams .getOrDefault (fragment .getEpost (), List .of (INGEN_TEAM ));
113- teamNames .forEach (team ->
114- grouped .computeIfAbsent (team , _ -> new HashSet <>()).add (fragment .getEpost ()));
115- });
116- return grouped ;
117- }
118-
119100 public Flux <DashboardOrganisasjonerDTO > getOrganisasjonerStatus () {
120101
121102 return Mono .zip (altinn3TilgangServiceConsumer .getOrganisasjoner ()
@@ -142,6 +123,28 @@ public Flux<DashboardOrganisasjonerDTO> getOrganisasjonerStatus() {
142123 .sort (Comparator .comparing (DashboardOrganisasjonerDTO ::getInterval ).reversed ());
143124 }
144125
126+ private static long sumByStatus (List <BestillingerFragment > fragments ,
127+ Function <BestillingerFragment , String > statusGetter ,
128+ String value ) {
129+
130+ return fragments .stream ()
131+ .filter (f -> value .equals (statusGetter .apply (f )))
132+ .mapToLong (BestillingerFragment ::getPersoner )
133+ .sum ();
134+ }
135+
136+ private static Map <String , Set <String >> groupFragmentsByTeam (List <TeamFragment > fragments ,
137+ Map <String , List <String >> teams ) {
138+
139+ var grouped = new HashMap <String , Set <String >>();
140+ fragments .forEach (fragment -> {
141+ var teamNames = teams .getOrDefault (fragment .getEpost (), List .of (INGEN_TEAM ));
142+ teamNames .forEach (team ->
143+ grouped .computeIfAbsent (team , _ -> new HashSet <>()).add (fragment .getEpost ()));
144+ });
145+ return grouped ;
146+ }
147+
145148 private static Map <String , Set <String >> groupFragmentsByOrganisasjon (List <OrganisasjonFragment > fragments ,
146149 Map <String , String > brukerToOrgnummer ) {
147150
@@ -163,4 +166,27 @@ private static DashboardOrganisasjonerDTO.Entry toOrganisasjonEntry(String orgNu
163166 .build ());
164167 return new DashboardOrganisasjonerDTO .Entry (orgNummer , info .getNavn (), info .getOrganisasjonsform (), brukere .size ());
165168 }
169+
170+ public Flux <DashboardDollyTeamsDTO > getDollyTeamsStatus () {
171+
172+ return bestillingRepository .findBestillingerForDollyTeamsOrderBySistOppdatert ()
173+ .groupBy (DollyTeamFragment ::getInterval )
174+ .flatMap (Flux ::collectList )
175+ .map (fragments -> DashboardDollyTeamsDTO .builder ()
176+ .interval (fragments .getFirst ().getInterval ())
177+ .teams (fragments .stream ()
178+ .map (fragment -> {
179+ var info = fragment .getInformasjon ().split ("," , 2 );
180+ return new DashboardDollyTeamsDTO .Entry (info [0 ], info [1 ], toIntExact (fragment .getAntall ()));
181+ })
182+ .sorted (Comparator .comparing (DashboardDollyTeamsDTO .Entry ::getNavn ))
183+ .toList ())
184+ .totaltAntallTeams (fragments .size ())
185+ .totaltUnikeBrukere (fragments .stream ()
186+ .map (DollyTeamFragment ::getAntall )
187+ .map (Long ::intValue )
188+ .reduce (0 , Integer ::sum ))
189+ .build ())
190+ .sort (Comparator .comparing (DashboardDollyTeamsDTO ::getInterval ).reversed ());
191+ }
166192}
0 commit comments