Hallo Community,
ich würde gerne mir eine Art Timeline erstellen für die Prüfung des Lagerbestands / Verfügbarkeitsprüfung.
Um es zu veranschaulichen in etwa so:
Ich habe hier ein Produkt (Martin JEM Nebelmaschine). Darunter wird mir der Lagerbestand aufgezeigt.
Ein Artikel kann 1....n Geräten haben. Geräte sind dann die tatsächlichen Gegenstände (incl. Seriennummer).
Der Invantar eines Artikels kann gezählt werden durch:
a) Anzahl an Geräten
b) Einfache Mengenangabe (bsp. bei einer Schraube etc. macht es keinen Sinn diese alle als ein Gerät zu erfassen).
Ein Artikel / Gerät ist nicht verfügbar, wenn es:
a) Bei einem Projekt gebucht wird
b) In Reparatur ist
Mein Vorhaben ist nun wie folgt:
a) Ich frage in der Datenbank ab, ob das bestimmte Produkt während einer bestimmten Zeit (hier 25.12.-03.01) gebucht in einem Projekt ist
-> List<Availability> projectList
b) Ich frage in der Datenbank ab, ob das bestimmte Produkt während einer bestimmten Zeit (hier 25.12.-03.01) in Reparatur ist.
-> List<Availability> repairList
Was ich nun gerne haben möchte:
- Eine Liste an <Availability>, die mir die Verfügbarkeit anzeigt (das ist die obere Linie).
-> In der ersten Hälfte gibt es für den Artikel keine Projektbuchungen oder Reparaturen (= keine Bestandsänderung). Danach kommt dann das Projekt "Soultrain Europatour".
Meine Idee ist es eine Liste an List<AvailabilityStatus> zu haben:
AvailabilityStatus
- Long productId;
- String status;
- LocalDateTime startDate;
- LocalDateTime endDate;
- List<AvailabilityStatus> subAvailabilityStatus;
Woran ich mich gerade schwer tue, ist bei der richtigen Zeitspanne für die jeweiligen AvailabilityStatus - Objekte
Im Moment erzeuge ich 2 Listen von AvailabilityStatus von a) und b), in denen jeweils die Projektbuchungen bzw. Reparaturen sind. Diese sind meine Basis für die Prüfung, ob der Artikel frei ist oder nicht...
Was ich nun noch benötige, ist eine Funktion, die mir die "tatsächliche Verfügbarkeit + Bestand" errechnet. Also mir Objekte von AvailabilityStatus erzeugt, egal ob der Artikel gebucht oder nicht gebucht ist. Der Unterschied ist dann eben der Status.
Meine Problem ist nun, wie ich die Bestandsänderung mitbekomme bzw. die Objekte mit der richtigen Zeit erstelle, denn es kann ja auch Überlappungen geben.
Ich glaube das ist jetzt mehr Text von mir, als die eigentliche Logik
Kann mir hier jemand bitte helfen?
ich würde gerne mir eine Art Timeline erstellen für die Prüfung des Lagerbestands / Verfügbarkeitsprüfung.
Um es zu veranschaulichen in etwa so:
Ich habe hier ein Produkt (Martin JEM Nebelmaschine). Darunter wird mir der Lagerbestand aufgezeigt.
Ein Artikel kann 1....n Geräten haben. Geräte sind dann die tatsächlichen Gegenstände (incl. Seriennummer).
Der Invantar eines Artikels kann gezählt werden durch:
a) Anzahl an Geräten
b) Einfache Mengenangabe (bsp. bei einer Schraube etc. macht es keinen Sinn diese alle als ein Gerät zu erfassen).
Ein Artikel / Gerät ist nicht verfügbar, wenn es:
a) Bei einem Projekt gebucht wird
b) In Reparatur ist
Mein Vorhaben ist nun wie folgt:
a) Ich frage in der Datenbank ab, ob das bestimmte Produkt während einer bestimmten Zeit (hier 25.12.-03.01) gebucht in einem Projekt ist
-> List<Availability> projectList
b) Ich frage in der Datenbank ab, ob das bestimmte Produkt während einer bestimmten Zeit (hier 25.12.-03.01) in Reparatur ist.
-> List<Availability> repairList
Was ich nun gerne haben möchte:
- Eine Liste an <Availability>, die mir die Verfügbarkeit anzeigt (das ist die obere Linie).
-> In der ersten Hälfte gibt es für den Artikel keine Projektbuchungen oder Reparaturen (= keine Bestandsänderung). Danach kommt dann das Projekt "Soultrain Europatour".
Meine Idee ist es eine Liste an List<AvailabilityStatus> zu haben:
AvailabilityStatus
- Long productId;
- String status;
- LocalDateTime startDate;
- LocalDateTime endDate;
- List<AvailabilityStatus> subAvailabilityStatus;
Woran ich mich gerade schwer tue, ist bei der richtigen Zeitspanne für die jeweiligen AvailabilityStatus - Objekte
Im Moment erzeuge ich 2 Listen von AvailabilityStatus von a) und b), in denen jeweils die Projektbuchungen bzw. Reparaturen sind. Diese sind meine Basis für die Prüfung, ob der Artikel frei ist oder nicht...
Was ich nun noch benötige, ist eine Funktion, die mir die "tatsächliche Verfügbarkeit + Bestand" errechnet. Also mir Objekte von AvailabilityStatus erzeugt, egal ob der Artikel gebucht oder nicht gebucht ist. Der Unterschied ist dann eben der Status.
Meine Problem ist nun, wie ich die Bestandsänderung mitbekomme bzw. die Objekte mit der richtigen Zeit erstelle, denn es kann ja auch Überlappungen geben.
Ich glaube das ist jetzt mehr Text von mir, als die eigentliche Logik
Java:
// Result Liste
List<AvailabilityStatus> resultOverall = new ArrayList<>();
// Sortieren der "Result Liste", die Projekte und Reparaturen enthält
result.sort((AvailabilityStatus e1, AvailabilityStatus e2) -> e1.getStartDate().compareTo(e2.getStartDate()));
// Mindestdatum bekommen für den Start
LocalDateTime minDate = result.stream().map(AvailabilityStatus::getStartDate).min(LocalDateTime::compareTo)
.get();
// Wenn Datum gleich ist, dann dort starten
if (startDate.equals(minDate)) {
AvailabilityStatus availabilityStatus = result.get(0);
resultOverall.add(availabilityStatus);
} else {
AvailabilityStatus availabilityStatus = new AvailabilityStatus();
availabilityStatus.setStartDate(startDate);
if (result != null && !result.isEmpty()) {
availabilityStatus.setEndDate(result.get(0).getStartDate());
}
else {
availabilityStatus.setEndDate(endDate);
}
resultOverall.add(availabilityStatus);
}
for (AvailabilityStatus currentAvailabilityStatus : result) {
// Nächste Bestandsänderung ermitteln??????
// Bzw. wie errechne ich das, wenn zB die zweite Bestandsänderung nicht so lange geht, wie die erste? Dann änder sich ja auch das Endedatum. Also Überlappungen
}
Kann mir hier jemand bitte helfen?