Проверяла программу, случайно нажала проверку и приняло задачу :) Но по сути не работает функция directorTablet.printCookWorkloading(). Раньше все работало. Подскажите, где искать ошибку. Restaurant
public class Restaurant {

    private static final int ORDER_CREATING_INTERVAL = 100;
    private final static LinkedBlockingQueue<Order> orderQueue = new LinkedBlockingQueue<>(  );

    public static void main(String[] args) {
        //официант у нас один
        Waiter waitor = new Waiter();

        //2 повара привязываем к официанту и регистрируем в хралище статистики
        List<Cook> cookLists = new ArrayList<>(  );
        for (int i = 0; i < 2; i++) {
            Cook cook = new Cook( "Amigo" + i );
            cook.setQueue( orderQueue );
            cook.addObserver( waitor );
            cookLists.add( cook );
        }

        //у нас 5 платшетов, привязываем к очереди
        List<Tablet> tabletList = new ArrayList<>(  );
        for (int i = 0; i < 5; i++ ) {
            Tablet tablet = new Tablet( i );
            tablet.setQueue( orderQueue );
            tabletList.add( tablet );

        }

        //рандосные заказы
        Thread thread = new Thread( new RandomOrderGeneratorTask( tabletList, ORDER_CREATING_INTERVAL ) );
        thread.start();
        try {
            Thread.sleep( 1000 );
        }
        catch (InterruptedException e) {
            ConsoleHelper.writeMessage(e.getMessage());
        }
        thread.interrupt();

        //планшет директора
        DirectorTablet directorTablet= new DirectorTablet();
        directorTablet.printAdvertisementProfit();
        directorTablet.printCookWorkloading();
        directorTablet.printActiveVideoSet();
        directorTablet.printArchivedVideoSet();

    }
}

DirectorTablet

public class DirectorTablet {

    /**
     * какую сумму заработали на рекламе, сгруппировать по дням;
     */
    public void printAdvertisementProfit(){

        Map<Date, Double> mapProfit = StatisticManager.getInstance().calculateProfit();
        double amount = 0.00;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "dd-MMM-yyyy", Locale.ENGLISH );
        for (Map.Entry<Date, Double> map : mapProfit.entrySet()) {
            System.out.println(simpleDateFormat.format(map.getKey()) + " - " + String.format(Locale.ENGLISH, "%(.2f", map.getValue()));
            amount += map.getValue();
        }
        ConsoleHelper.writeMessage( "Total - " + String.format(Locale.ENGLISH, "%(.2f", amount) );
    }
    /**
     * загрузка (рабочее время) повара, сгруппировать по дням
     */
    public void printCookWorkloading(){
        Map<Date, TreeMap<String, Integer>> mapCookWork = StatisticManager.getInstance().calculateTimeOfWork();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "dd-MMM-yyyy", Locale.ENGLISH );
        List<Date> list = new ArrayList<>( mapCookWork.keySet() );
        Collections.sort( list );
        Collections.reverse( list );
        for (Date date : list) {
            ConsoleHelper.writeMessage( simpleDateFormat.format( date ) );
            Map<String, Integer> mapSI = mapCookWork.get( date );
            List<String> listOfNames = new ArrayList<>( mapSI.keySet() );
            Collections.sort( listOfNames );
            for (String name : listOfNames) {
                ConsoleHelper.writeMessage(name + " - " + (int) Math.ceil(mapSI.get(name)) + " min");
            }
            ConsoleHelper.writeMessage("");
        }
    }

    //список активных роликов и оставшееся количество показов по каждому;
    public void printActiveVideoSet() {
        List<Advertisement> list = StatisticAdvertisementManager.getInstance().getListOfActiveAD();
        Collections.sort( list, new Comparator<Advertisement>() {
            @Override
            public int compare(Advertisement o1, Advertisement o2) {
                return o1.getName().compareToIgnoreCase( o2.getName() );
            }
        } );
        for (Advertisement ad : list) {
            ConsoleHelper.writeMessage( ad.getName() + " - " + ad.getHits() );
        }
    }

    //список неактивных роликов (с оставшемся количеством показов равным нулю).
    public void printArchivedVideoSet() {
        List<Advertisement> list = StatisticAdvertisementManager.getInstance().getListOfPassAD();
        Collections.sort( list, new Comparator<Advertisement>() {
            @Override
            public int compare(Advertisement o1, Advertisement o2) {
                return o1.getName().compareToIgnoreCase( o2.getName() );
            }
        } );
        for (Advertisement ad : list) {
            ConsoleHelper.writeMessage( ad.getName() );
        }
    }

}

Cook

public class Cook extends Observable implements Runnable {
    private String name; //имя повара
    private boolean busy; //занятость повара
    private LinkedBlockingQueue<Order> queue;
    private boolean stopped = false;
    private boolean cathced = false;

    public void setQueue(LinkedBlockingQueue<Order> queue) {
        this.queue = queue;
    }

    public Cook (String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

//повар начинает готовить (приготовление занимает 10-кратный размер от времени приготовления заказа)
    public void startCookingOrder(Order order) {
        busy = true;
        ConsoleHelper.writeMessage("Start cooking - " + order + ", cooking time " + order.getTotalCookingTime() + "min");
        StatisticManager.getInstance().register( new CookedOrderEventDataRow( order.getTablet().toString(), name, order.getTotalCookingTime() * 60, order.getDishes() ) );
        try {
            Thread.sleep( order.getTotalCookingTime() * 10 );
        }
        catch (InterruptedException e) {ConsoleHelper.writeMessage(e.getMessage());}
        setChanged();
        notifyObservers(order);
        busy = false;
    }

    public boolean isBusy() {
        return busy;
    }
//каждые 10 миллисекунд проверять очередь. Если в очереди есть заказы, то найти свободных поваров и передать им заказы (метод startCookingOrder), если нет свободных поваров или нет заказов в очереди, то ждать дальше.
    @Override
    public void run() {
        while (!stopped) {
            try {
                Thread.sleep( 10 );
            }
            catch (InterruptedException e) {}
            if (queue.peek()!=null) {
                if (!this.isBusy()) {
                    try {
                        Order order = queue.take();
                        if (order != null) {
                            startCookingOrder( order );
                        }
                    }
                    catch (InterruptedException e) {
                        cathced= true;
                    }
                }
                if (cathced&&queue.isEmpty()) stopped=true;
            }
        }

    }
}