Skip to content

Package: MaschinenTyp

MaschinenTyp

nameinstructionbranchcomplexitylinemethod
MaschinenTyp(String, MaschinenFaehigkeit, int, ComparableQuantity, ComparableQuantity)
M: 0 C: 23
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
berechneBenoetigteZeitOhneBeilagenruestZeit(Dokumentenklasse)
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%
berechneBenoetigteZeitOhneBeilagenruestZeit(ProduktionsAuftrag)
M: 0 C: 15
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
equals(Object)
M: 8 C: 31
79%
M: 3 C: 9
75%
M: 2 C: 5
71%
M: 0 C: 8
100%
M: 0 C: 1
100%
getAnzahlVerarbeitbarerBlaetterOderKuverts(Quantity)
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getBeilagenRuestzeit()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getMaschinenFaehigkeit()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getName()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getRuestzeit()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
hashCode()
M: 0 C: 19
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
toString()
M: 0 C: 14
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package maschine;
2:
3: import auftraege.Dokumentenklasse;
4: import auftraege.ProduktionsAuftrag;
5: import maschine.faehigkeit.Drucken;
6: import maschine.faehigkeit.FaehigkeitVisitor;
7: import maschine.faehigkeit.Kuvertieren;
8: import maschine.faehigkeit.MaschinenFaehigkeit;
9: import maschine.faehigkeit.SimplesDrucken;
10: import maschine.faehigkeit.SimplesKuvertieren;
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:
16: import javax.measure.Quantity;
17: import javax.measure.quantity.Time;
18: import java.util.ArrayList;
19: import java.util.Collection;
20: import java.util.Objects;
21:
22: /**
23: * Maschinen haben einen Typen wie bspw. Bawe Systec Fusion Cross oder pitney bowes Epic Kuvertiersystem. Alle Maschinen eines Typen haben identische Fähigkeiten, die
24: * benötigt werden.
25: */
26: public class MaschinenTyp {
27:
28:         private final String name;
29:
30:         private final MaschinenFaehigkeit maschinenFaehigkeit;
31:         private final Collection<MaschinentypPersonalbindung> personalbindungen;
32:
33:         /**
34:          * Anzahl der A4-blätter, welche innerhalb einer stunde durchschnittlich verarbeitet werden können. hierbei wird nicht von purer laufzeit ausgegangen, sondern es
35:          * handelt sich um einen durchschnittlichen mittelwert, welcher auch Rüstzeiten mit einschließt und im Idealfall über Statistiken,
36:          * die während der Laufzeit geführt werden,
37:          * laufend aktualisiert wird, um bei längerer Verwendung immer präzisere Werte zu erzielen.
38:          * TODO Art: Feature request; Tim: ein anderer Datentyp als <i>int</i> wäre hier nicht
39:          * schlecht, aber zunächst nicht notwendig, um die Funktionalität darzustellen.
40:          */
41:         private final int verarbeitbareBlaetterOderKuvertsProStunde;
42:         /**
43:          * Rüstzeit der Maschine, die benötigt wird, um sie in Betrieb zu nehmen.
44:          */
45:         private final ComparableQuantity<Time> ruestzeit;
46:         /**
47:          * Rüstzeit, welche ggf. berechet wird, wenn ein Produktonsauftrag Beilagen enthält.
48:          * <p>
49:          * Dann fällt diese Rüstzeit für jede Beilagenart (also ggf. mehrfach pro Produktionsauftrag) an.
50:          */
51:         private final ComparableQuantity<Time> beilagenRuestzeit;
52:
53:         /**
54:          * @param name
55:          *                 name des {@link MaschinenTyp}en
56:          * @param maschinenFaehigkeit
57:          *                 {@link MaschinenFaehigkeit} der Maschine.
58:          * @param verarbeitbareBlaetterOderKuvertsProStunde
59:          *                 {@link MaschinenTyp#verarbeitbareBlaetterOderKuvertsProStunde}
60:          * @param ruestzeit
61:          *                 {@link MaschinenTyp#ruestzeit}
62:          * @param beilagenRuestzeit
63:          *                 {@link MaschinenTyp#beilagenRuestzeit}
64:          */
65:         public MaschinenTyp(
66:                         final String name,
67:                         final MaschinenFaehigkeit maschinenFaehigkeit,
68:                         final int verarbeitbareBlaetterOderKuvertsProStunde,
69:                         final ComparableQuantity<Time> ruestzeit,
70:                         final ComparableQuantity<Time> beilagenRuestzeit) {
71:                 this.name = name;
72:                 this.maschinenFaehigkeit = maschinenFaehigkeit;
73:                 this.verarbeitbareBlaetterOderKuvertsProStunde = verarbeitbareBlaetterOderKuvertsProStunde;
74:                 this.ruestzeit = ruestzeit;
75:                 this.beilagenRuestzeit = beilagenRuestzeit;
76:                 this.personalbindungen = new ArrayList<>();
77:         }
78:
79:         /**
80:          * liefert den Namen des Maschinentypen.
81:          *
82:          * @return Name des Maschinentypen
83:          */
84:         public String getName() {
85:                 return this.name;
86:         }
87:
88:         /**
89:          * @return die Fähigkeiten des Maschinentypen.
90:          */
91:         public MaschinenFaehigkeit getMaschinenFaehigkeit() {
92:                 return this.maschinenFaehigkeit;
93:         }
94:
95:         @Override
96:         public boolean equals(final Object o) {
97:•                if (this == o) {
98:                         return true;
99:                 }
100:•                if (o == null || this.getClass() != o.getClass()) {
101:                         return false;
102:                 }
103:                 final MaschinenTyp that = (MaschinenTyp) o;
104:•                return Objects.equals(this.name, that.name)
105:•                                && Objects.equals(this.maschinenFaehigkeit, that.maschinenFaehigkeit)
106:•                                && Objects.equals(this.personalbindungen, that.personalbindungen);
107:         }
108:
109:         @Override
110:         public int hashCode() {
111:                 return Objects.hash(this.name, this.maschinenFaehigkeit, this.personalbindungen);
112:         }
113:
114:         /**
115:          * @param zeitraum
116:          *                 Zeitraum, welcher überprüft werden muss.
117:          *
118:          * @return anzahl der A4-Blätter, welche im spezifizierten Zeitraum verarbeitet werden kann.
119:          */
120:         int getAnzahlVerarbeitbarerBlaetterOderKuverts(final Quantity<Time> zeitraum) {
121:                 return zeitraum.to(Units.HOUR).getValue().intValue() * this.verarbeitbareBlaetterOderKuvertsProStunde;
122:         }
123:
124:         /**
125:          * Berechnet die nötige Zeit, die der Produktionsauftrag zur abarbeitung an einer Maschine benötigt.
126:          *
127:          * @param auftrag
128:          *                 {@link ProduktionsAuftrag}, welcher an dieser Maschine bearbeitet werden soll.
129:          *
130:          * @return Dauer, die diese Maschine für diesen Auftrag insgesamt braucht.
131:          */
132:         public ComparableQuantity<Time> berechneBenoetigteZeitOhneBeilagenruestZeit(final ProduktionsAuftrag auftrag) {
133:                 return auftrag
134:                                 .getDokumentenklassen()
135:                                 .stream()
136:                                 .map(this::berechneBenoetigteZeitOhneBeilagenruestZeit)
137:                                 .reduce(ComparableQuantity::add).orElse(Quantities.getQuantity(0, Units.HOUR));
138:         }
139:
140:         private ComparableQuantity<Time> berechneBenoetigteZeitOhneBeilagenruestZeit(final Dokumentenklasse dokumentenklasse) {
141:                 final Fraction anzahl = this.maschinenFaehigkeit.accept(new FaehigkeitVisitor<Fraction>() {
142:                         @Override
143:                         public Fraction handle(final Drucken drucken) {
144:                                 return Fraction.valueOf(dokumentenklasse.getAnzahlBlaetter());
145:                         }
146:
147:                         @Override
148:                         public Fraction handle(final Kuvertieren kuvertieren) {
149:                                 return Fraction.valueOf(dokumentenklasse.getAnzahlSendungen());
150:                         }
151:
152:                         @Override
153:                         public Fraction handle(final SimplesDrucken simplesDrucken) {
154:                                 // An einem MaschinenTyp sollte kein SimplesDrucken sein!
155:                                 return null;
156:                         }
157:
158:                         @Override
159:                         public Fraction handle(final SimplesKuvertieren simplesKuvertieren) {
160:                                 // An einem MaschinenTyp sollte kein SimplesKuvertieren sein!
161:                                 return null;
162:                         }
163:                 });
164:                 final Fraction verarbeitbareBlaetterProStunde =
165:                                 Fraction.valueOf(this.getAnzahlVerarbeitbarerBlaetterOderKuverts(Quantities.getQuantity(1, Units.HOUR)));
166:
167:                 final ComparableQuantity<Time> verarbeitungsDauer = Quantities.getQuantity(anzahl.divide(verarbeitbareBlaetterProStunde), Units.HOUR);
168:
169:                 //Anmerkung: um Aussagen über den Stand der Beilagen zu treffen, muss man bei der Maschine berechneBenoetigteZeitInklusiveBeilagen aufrufen, da der
170:                 // MaschinenTyp allein keine Aussage über den Stand der Beilagen zulässt, da die aktuelle Konfiguration nicht berücksichtigt werden kann.
171:                 return verarbeitungsDauer.add(this.getRuestzeit());
172:         }
173:
174:         /**
175:          * @return liefert die allgemeine Rüstzeit des Maschinentypen.
176:          */
177:         public ComparableQuantity<Time> getRuestzeit() {
178:                 return this.ruestzeit;
179:         }
180:
181:         /**
182:          * @return liefert ggf. die Beilagenrüstzeit des Maschinentypen, falls es eine Beilagenrüstzeit gibt. Sonst wird eine Zeit von 0 Sekunden zurückgegeben.
183:          */
184:         public ComparableQuantity<Time> getBeilagenRuestzeit() {
185:                 return this.beilagenRuestzeit;
186:         }
187:
188:         @Override
189:         public String toString() {
190:                 return "MaschinenTyp{" + "name='" + this.name + '\'' + '}';
191:         }
192: }