package com.zy.acs.manager.core.service; import com.zy.acs.manager.core.domain.TimeWindow; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * dynamic time window * Created by vincent on 11/1/2024 */ @Service public class TimeWindowService { public static final Map> TIME_WINDOW_MAP = new ConcurrentHashMap<>(); // 预定时间窗口 public synchronized boolean reserve(String key, TimeWindow window, String vehicle) { List windows = TIME_WINDOW_MAP.getOrDefault(key, new ArrayList<>()); for (TimeWindow reservedWindow : windows) { if (reservedWindow.isConflict(window)) { return false; } } windows.add(window); TIME_WINDOW_MAP.put(key, windows); return true; } // 释放时间窗口 public synchronized void release(String key, TimeWindow window, String vehicle) { List windows = TIME_WINDOW_MAP.get(key); if (windows != null) { windows.remove(window); if (windows.isEmpty()) { TIME_WINDOW_MAP.remove(key); } } } }