Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obliczenie czasu pracy przy kilku projektach jednocześnie.
Forum PHP.pl > Forum > PHP
grzecho83
Witam, nie wiem czy dobry dział ale nie znalazłem niczego stricte pod algorytmy.
Zrobiłem system do zarządzania produkcją który między innymi oblicza czas pracy poszczególnych podzespołów produktu. Kiedy operator maszyny pobiera konkretne zlecenie w bazie danych zapisuję czas start, kiedy kończy zapisuje czas stop. I w bazie na tej podstawie jest zapisywany czas pracy, który jest sumowany z wszystkich procesów każdego podzespołu produktu.
Przy laserze zaczynają się schody. Na tym stanowisku operator pobiera często po kilka, kilkanaście zleceń, układa wszystko na arkuszu i wycina. Gdyby wszystkie pobierał razem, i kończył razem to dało by się łatwo policzyć. Niestety praca wygląda mniej więcej tak:
Pobieram zlecenie A -1000 szt - 8:00
Pobieram zlecenie B -120 szt - 8:00
Pobieram zlecenie C -500 szt - 10:00
Kończę zlecenie B - 11:00
Pobieram zlecenie D - 10 szt - 12:00
Kończę zlecenie A,C,D - 14:00
(w dużym uproszczeniu)
Czy są macie pomysł na algorytmy, które policzyły by mniej więcej ile czasu zostało poświęcone na konkretne zlecenie? Dokładnie się nie da, ale chodzi tu o oszacowanie obciążenia maszyny przy przyjmowaniu kolejnych zleceń.
Pyton_000
Skoro pobiera A to zapisujesz dane dla A, Jeśli w tym samym czasie weźmie kolejne to znowu wpisujesz coś dla B. Jeśli kończy B to znowu coś wpisujesz do B.

Jakie ma znaczenie czy weźmie 1 czy 10? Żadne. Bierzesz każde zadanie i liczysz ile czasu zajęło.
grzecho83
w powyższym przykładzie czas pracy wygląda tak:
zadanie A - 6 godzin
zadanie B - 3 godziny
zadanie C - 4 godziny
zadanie D - 2 godziny

w sumie 15 godzin, biorąc pod uwagę że operator lasera pracował od 8 do 14 to zwykłe sumowanie nie jest rzetelne. Jeśli handlowiec zleci ponownie zadanie podobne do zadania A to chciałbym wiedzieć ile czasu zarezerwować na maszynę.
Pyton_000
Per zadanie to przecież nie problem. Bo patrzysz ile zadanie A trwało i tyle.
Jeśli chodzi o całość to bierzesz najdłuższe zadanie i masz obłożenie maszyny. Kwestia co aktualnie potrzebujesz.

Chyba że dalej nie rozumiem czego potrezbujesz smile.gif
trueblue
Nie wiadomo jak realnie pracę wykonuje pracownik.
Bo gdyby w przypadku kiedy pojawia się inne zlecenie, poprzednie odkładał na bok, to z tego wynika, że zlecenia A w ogóle nie miał czasu wykonać, bo kiedy zabrał się za nie, to wpadło B, nad B pracował od 8:00 do 10:00, bo o 10:00 wpadło C, które wykonywał do 14:00. Niby są podane czasy zakończeń, ale trochę tak to wygląda.

Możesz podejść, tak, że czasookres, który przypada na zlecenie, dzielić przez tyle i ile zleceń jest w danym momencie. Czyli założenie takie, że jeśli od 10:00 do 11:00 wykonywał 2 zlecenia, to na każde poświęcił 30 minut, a jeśli trzy, to 20 minut. Wtedy średnie czasy możesz sumować.
grzecho83
Cytat(trueblue @ 5.06.2020, 16:45:49 ) *
Możesz podejść, tak, że czasookres, który przypada na zlecenie, dzielić przez tyle i ile zleceń jest w danym momencie. Czyli założenie takie, że jeśli od 10:00 do 11:00 wykonywał 2 zlecenia, to na każde poświęcił 30 minut, a jeśli trzy, to 20 minut. Wtedy średnie czasy możesz sumować.

Tak właśnie myślałem żeby to zrobić. Na wszystkich pozostałych stanowiskach jest tak jak pisałeś, przychodzi zlecenie C wtedy operator odkłada zlecenie A, czas jest zapisywany w bazie podczas odłożenia a potem może znowu je pobrać i licznik pracuje na nowo. To się sprawdza gdy pracownik nie pracuje jednocześnie przy kilku zleceniach. Tu przy laserze jest inaczej. Bo pracownik przygotowuje program pod wszystkie zlecenia jednocześnie. Kiedy puści laser wszystkie są cięte jednocześnie. Jeśli w między czasie dojdzie coś pilnego to nie zawsze przerywa pracę. Podczas pracy lasera przygotowuje program na zadanie D ale licznik z poprzednimi dalej leci.

Myślałem żeby wszystkie pola czas_start i czas_stop z danego dnia wrzucić do jednej tabeli.
[czas][stop/start][id_procesu] - z grubsza taki format
posortować według kolumny [czas] a potem za pomocą pętli przelecieć po całej tabeli. Jeśli mamy czas start to licznik zleceń zwiększamy o 1, jeśli stop to zmniejszamy. W każdej iteracji do aktualnych zleceń dodajemy okres między czasami podzielony przez ilość zleceń.

@Pyton_000 - chyba nie do końca rozumiesz mój problem, może piszę nieprecyzyjnie, ale serio, do zwykłego dodawania nie potrzebuję pomocy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.