Witam.
Mam problem w kwestii usługi Windows, która już ma tak dużo rzeczy do zrobienia, że w konkretnym interwale nie wyrabia i zaczyna się zapętlać, czasem robi pewne rzeczy podwójnie. Niestety asynchroniczność i tego typu bajery odpadają, ponieważ to są operacje na Comarch Optima, a ona niestety nie ogarnia. Operacje na obiektach COM Optimy są wolne, zamówień jest ponad 1000 dziennie i czasem się robi z tego powodu taki bałagan, że trudno to posprzątać.
Wpadłem na pomysł, aby rozdzielić to na kilka usług i każda z nich będzie miała swoje zadanie do wykonania. Ale... Żeby kolejna usługa mogła coś robić to poprzednia musi skończyć swoje działanie. Przykład:
Etap 1. Usługa sprawdza zamówienia (RO) i odpytuje Allegro o ilość paczek i z jakiego konta (Allegro) jest zamówienie i dopisuje odpowiednie informacje.
Etap 2. Usługa generuje fakturę/paragon do w pełni zrealizowanego dokumentu WZ
Etap 3. Usługa sprawdza zamówienia (RO) czy towar jest na stanie i generuje WZ + generowanie kompletacji (PWP) dla towarów złożonych
Etap 4. Tracking - dopisywanie statusu przesyłki (odpytywanie o status przesyłki DPD lub INPOST)
Pomiędzy tymi etapami są jeszcze statusy magazynowe (pobrane, przygotowywane, gotowe do wysyłki, wysłane). Faktura/paragon oraz tracking wykonywane są dla statusu "wysłane".
- Czy jedynym rozwiązaniem jest zrobić jakiś wpis w bazie, który będzie decydował o kolejność wykonywania i na podstawie tego wpisu kolejna usługa będzie wiedziała, że ma teraz pracować?
- Czy rozdzielanie tego jest dobrym pomysłem?
- Lepiej będzie ustalić jakiś interwał uruchamiania usług czy nasłuchiwać konkretne pole w bazie na zmiany i wtedy uruchamiać?
W planach jest jeszcze dołożyć kolejny etap, który będzie sprawdzał stany magazynowe oraz ceny i aktualizował je na Allegro. Potrzebne jest to głównie do towarów złożonych, których stan magazynowy jest oparty o ilość składników jakie tworzą dany produkt (towar złożony), a takie produkty są kompletowane na bieżąco pod konkretne zamówienie (Etap 3).