Skip to content

Package: StatCalc

StatCalc

nameinstructionbranchcomplexitylinemethod
getAnzahlUeberschreitungenSLA(List)
M: 0 C: 48
100%
M: 0 C: 8
100%
M: 0 C: 5
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
getAuslastungMaschine(Maschine, Zeitraum)
M: 0 C: 46
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
getAuslastungMaschinenpark(List, Zeitraum)
M: 0 C: 70
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 12
100%
M: 0 C: 1
100%
getAuslastungMitarbeiter(Mitarbeiter, Zeitraum)
M: 0 C: 48
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
getAuslastungPersonal(List, Zeitraum)
M: 0 C: 68
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 12
100%
M: 0 C: 1
100%
getUeberschneidungZeitraeume(KalenderEintrag, Zeitraum)
M: 0 C: 30
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getVerbrauchteZeitInsgesamt(List, Zeitraum)
M: 0 C: 49
100%
M: 0 C: 8
100%
M: 0 C: 5
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
getVerbrauchteZeitMaschine(Maschine, Zeitraum)
M: 0 C: 32
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getVerbrauchteZeitMaschinenpark(List, Zeitraum)
M: 0 C: 24
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getVerbrauchteZeitMitarbeiter(Mitarbeiter, Zeitraum)
M: 0 C: 32
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getVerbrauchteZeitPersonal(List, Zeitraum)
M: 0 C: 24
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%

Coverage

1: package statistik;
2:
3: import java.time.ZoneOffset;
4: import java.util.ArrayList;
5: import java.util.List;
6: import javax.measure.quantity.Time;
7:
8: import auftraege.ProduktionsAuftrag;
9: import maschine.Maschine;
10: import mensch.Mitarbeiter;
11: import tec.uom.se.ComparableQuantity;
12: import tec.uom.se.quantity.Quantities;
13: import tec.uom.se.unit.Units;
14: import util.Fraction;
15: import zeit.eintraege.KalenderEintrag;
16: import zeit.eintraege.KalenderEintragTyp;
17: import zeit.eintraege.MaschinenBelegungEintrag;
18: import zeit.eintraege.Zeitraum;
19:
20: /**
21: * Rechnet Statistiken und so aus, ne.
22: */
23: public final class StatCalc {
24:         
25:         private StatCalc() {
26:         }
27:         
28:         private static final double SEKUNDE_ZU_STUNDE = 3600;
29:         
30:         /**
31:          * @param auftraege
32:          * Liste der auszuwertenden Produktionsaufträge
33:          * @param zeitraum
34:          * der auszuwertende Auftrag
35:          * @return die Summe aller Zeiten, wo Aufträge im Suchzeitraum ausgeführt wurden in Quantity in Stunden
36:          * @throws StatCalcEmptyListException
37:          * bei leerer Liste
38:          */
39:         public static ComparableQuantity<Time> getVerbrauchteZeitInsgesamt(final List<ProduktionsAuftrag> auftraege, final Zeitraum zeitraum)
40:                         throws StatCalcEmptyListException {
41:                 
42:•                if (auftraege.isEmpty()) {
43:                         throw new StatCalcEmptyListException();
44:                 }
45:                 
46:                 ComparableQuantity<Time> result = Quantities.getQuantity(0, Units.HOUR);
47:                 
48:•                for (final ProduktionsAuftrag current : auftraege) {
49:•                        for (final MaschinenBelegungEintrag currentBelegung : current.getMaschinenBelegungen().values()) {
50:•                                if (currentBelegung.getZeitraum().ueberschneidet(zeitraum)) {
51:                                         result = result.add(StatCalc.getUeberschneidungZeitraeume(currentBelegung, zeitraum));
52:                                 }
53:                         }
54:                 }
55:                 
56:                 return result;
57:         }
58:         
59:         /**
60:          * @param currentBelegung
61:          * die Belegung, die überprüft wird, ob sie im zeitraum liegt
62:          * @param zeitraum
63:          * der zeitraum
64:          * @return die anzahl der Stunden, die currentBelegung den zeitraum überschneidet
65:          */
66:         private static ComparableQuantity<Time> getUeberschneidungZeitraeume(final KalenderEintrag currentBelegung, final Zeitraum zeitraum) {
67:                 final long minBis =
68:                                 Math.min(currentBelegung.getBis().toEpochSecond(ZoneOffset.UTC), zeitraum.getBis().toEpochSecond(ZoneOffset.UTC));
69:                 final long maxVon =
70:                                 Math.max(currentBelegung.getVon().toEpochSecond(ZoneOffset.UTC), zeitraum.getVon().toEpochSecond(ZoneOffset.UTC));
71:                 return Quantities.getQuantity((minBis - maxVon) / StatCalc.SEKUNDE_ZU_STUNDE, Units.HOUR);
72:         }
73:         
74:         /**
75:          *
76:          * @param maschine
77:          * die auszuwertende Maschine
78:          * @param zeitraum
79:          * der auszuwertende Zeitraum
80:          * @return die Anzahl der Stunden
81:          */
82:         public static ComparableQuantity<Time> getVerbrauchteZeitMaschine(final Maschine maschine, final Zeitraum zeitraum) {
83:                 
84:                 ComparableQuantity<Time> result = Quantities.getQuantity(0, Units.HOUR);
85:                 
86:•                for (final KalenderEintrag current : maschine.getAlleEintraege(zeitraum, KalenderEintragTyp.BELEGT)) {
87:                         result = result.add(StatCalc.getUeberschneidungZeitraeume(current, zeitraum));
88:                 }
89:                 
90:                 return result;
91:         }
92:         
93:         /**
94:          * @param maschinenpark
95:          * die auszuwertenden Maschinen
96:          * @param zeitraum
97:          * der auszuwertende Zeitraum
98:          * @return die Anzahl der Stunden
99:          */
100:         public static ComparableQuantity<Time> getVerbrauchteZeitMaschinenpark(final List<Maschine> maschinenpark, final Zeitraum zeitraum) {
101:                 
102:                 ComparableQuantity<Time> result = Quantities.getQuantity(0, Units.HOUR);
103:                 
104:•                for (final Maschine current : maschinenpark) {
105:                         result = result.add(StatCalc.getVerbrauchteZeitMaschine(current, zeitraum));
106:                 }
107:                 
108:                 return result;
109:         }
110:         
111:         /**
112:          * @param maschinenpark
113:          * die auszuwertenden Maschinen
114:          * @param zeitraum
115:          * der auszuwertende Zeitraum
116:          * @return die Auslastung als Fraction
117:          * @throws StatCalcEmptyListException
118:          * wenn maschinenpark leer ist
119:          */
120:         public static Fraction getAuslastungMaschinenpark(final List<Maschine> maschinenpark, final Zeitraum zeitraum)
121:                         throws StatCalcEmptyListException {
122:                 
123:•                if (maschinenpark.isEmpty()) {
124:                         throw new StatCalcEmptyListException();
125:                 }
126:                 
127:                 final ComparableQuantity<Time> zeit = StatCalc.getVerbrauchteZeitMaschinenpark(maschinenpark, zeitraum);
128:                 ComparableQuantity<Time> verfuegbareZeit = zeitraum.getDauer().multiply(maschinenpark.size());
129:                 
130:•                for (final Maschine current : maschinenpark) {
131:•                        for (final KalenderEintrag currentBelegung : current
132:                                         .getAlleEintraege(zeitraum, KalenderEintragTyp.WARTUNG)) {
133:                                 verfuegbareZeit = verfuegbareZeit.subtract(getUeberschneidungZeitraeume(currentBelegung, zeitraum));
134:                         }
135:                 }
136:                 return Fraction.valueOf(zeit.to(Units.SECOND).getValue().doubleValue())
137:                                 .divide(Fraction.valueOf(verfuegbareZeit.to(Units.SECOND).getValue().doubleValue()));
138:         }
139:         
140:         /**
141:          * @param maschine
142:          * die auszuwertende Maschine
143:          * @param zeitraum
144:          * der auszuwertende Zeitraum
145:          * @return auslastung in Prozent
146:          */
147:         public static Fraction getAuslastungMaschine(final Maschine maschine, final Zeitraum zeitraum) {
148:                 
149:                 ComparableQuantity<Time> verfuegbareZeit = zeitraum.getDauer();
150:                 
151:•                for (final KalenderEintrag current : maschine.getAlleEintraege(zeitraum, KalenderEintragTyp.WARTUNG)) {
152:                         verfuegbareZeit = verfuegbareZeit.subtract(getUeberschneidungZeitraeume(current, zeitraum));
153:                 }
154:                 
155:                 return Fraction.valueOf(StatCalc.getVerbrauchteZeitMaschine(maschine, zeitraum).to(Units.SECOND).getValue().doubleValue())
156:                                 .divide(Fraction.valueOf(verfuegbareZeit.to(Units.SECOND).getValue().doubleValue()));
157:         }
158:         
159:         /**
160:          * @param mitarbeiter
161:          * der auszuwertende Mitarbeiter
162:          * @param zeitraum
163:          * der auszuwertende Zeitraum
164:          * @return die Anzahl der Stunden
165:          */
166:         public static ComparableQuantity<Time> getVerbrauchteZeitMitarbeiter(final Mitarbeiter mitarbeiter, final Zeitraum zeitraum) {
167:                 
168:                 ComparableQuantity<Time> result = Quantities.getQuantity(0, Units.HOUR);
169:                 
170:•                for (final KalenderEintrag current : mitarbeiter.getAlleEintraege(zeitraum, KalenderEintragTyp.BELEGT)) {
171:                         result = result.add(StatCalc.getUeberschneidungZeitraeume(current, zeitraum));
172:                 }
173:                 
174:                 return result;
175:         }
176:         
177:         /**
178:          * @param personal
179:          * die auszuwertenden Mitarbeiter
180:          * @param zeitraum
181:          * der auszuwertende Zeitraum
182:          * @return die Anzahl der Stunden
183:          */
184:         public static ComparableQuantity<Time> getVerbrauchteZeitPersonal(final List<Mitarbeiter> personal, final Zeitraum zeitraum) {
185:                 
186:                 ComparableQuantity<Time> result = Quantities.getQuantity(0, Units.HOUR);
187:                 
188:•                for (final Mitarbeiter current : personal) {
189:                         result = result.add(StatCalc.getVerbrauchteZeitMitarbeiter(current, zeitraum));
190:                 }
191:                 
192:                 return result;
193:         }
194:         
195:         /**
196:          * @param mitarbeiter
197:          * der auszuwertende Mitarbeiter
198:          * @param zeitraum
199:          * der auszuwertende Zeitraum
200:          * @return auslastung in Prozent
201:          */
202:         public static Fraction getAuslastungMitarbeiter(final Mitarbeiter mitarbeiter, final Zeitraum zeitraum) {
203:                 
204:                 ComparableQuantity<Time> verfuegbareZeit = Quantities.getQuantity(0, Units.HOUR);
205:                 
206:•                for (final KalenderEintrag current : mitarbeiter
207:                                 .getAlleEintraege(zeitraum, KalenderEintragTyp.ANWESEND)) {
208:                         verfuegbareZeit = verfuegbareZeit.add(getUeberschneidungZeitraeume(current, zeitraum));
209:                 }
210:                 return Fraction.valueOf(StatCalc.getVerbrauchteZeitMitarbeiter(mitarbeiter, zeitraum).to(Units.SECOND).getValue().doubleValue())
211:                                 .divide(Fraction.valueOf(verfuegbareZeit.to(Units.SECOND).getValue().doubleValue()));
212:         }
213:         
214:         /**
215:          * @param personal
216:          * die auszuwertenden Mitarbeiter
217:          * @param zeitraum
218:          * der auszuwertende Zeitraum
219:          * @return die Auslastung in Fraction
220:          * @throws StatCalcEmptyListException
221:          * wenn personal leer ist
222:          */
223:         public static Fraction getAuslastungPersonal(final List<Mitarbeiter> personal, final Zeitraum zeitraum)
224:                         throws StatCalcEmptyListException {
225:                 
226:•                if (personal.isEmpty()) {
227:                         throw new StatCalcEmptyListException();
228:                 }
229:                 
230:                 final ComparableQuantity<Time> zeit = StatCalc.getVerbrauchteZeitPersonal(personal, zeitraum);
231:                 ComparableQuantity<Time> verfuegbareZeit = Quantities.getQuantity(0, Units.HOUR);
232:                 
233:                 
234:                 
235:•                for (final Mitarbeiter current : personal) {
236:•                        for (final KalenderEintrag currentBelegung : current
237:                                         .getAlleEintraege(zeitraum, KalenderEintragTyp.ANWESEND)) {
238:                                 verfuegbareZeit = verfuegbareZeit.add(getUeberschneidungZeitraeume(currentBelegung, zeitraum));
239:                         }
240:                 }
241:                 return Fraction.valueOf(zeit.to(Units.SECOND).getValue().doubleValue())
242:                                 .divide(Fraction.valueOf(verfuegbareZeit.to(Units.SECOND).getValue().doubleValue()));
243:         }
244:         
245:         /**
246:          * @param auftraege
247:          * Liste der auszuwertenden Produktionsaufträge
248:          * @return Anzahl der Aufträge, wo SLA nicht eingehalten wird
249:          * @throws StatCalcEmptyListException
250:          * wenn leere Liste
251:          */
252:         public static int getAnzahlUeberschreitungenSLA(final List<ProduktionsAuftrag> auftraege)
253:                         throws StatCalcEmptyListException {
254:                 
255:•                if (auftraege.isEmpty()) {
256:                         throw new StatCalcEmptyListException();
257:                 }
258:                 
259:                 final List<ProduktionsAuftrag> result = new ArrayList<>();
260:                 
261:•                for (final ProduktionsAuftrag current : auftraege) {
262:•                        for (final MaschinenBelegungEintrag currentBelegung : current.getMaschinenBelegungen().values()) {
263:•                                if (currentBelegung.getBis().isAfter(current.getFrist())) {
264:                                         result.add(current);
265:                                 }
266:                         }
267:                 }
268:                 
269:                 return result.size();
270:         }
271:         
272: }