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<String, List<TimeWindow>> TIME_WINDOW_MAP = new ConcurrentHashMap<>();
|
|
// 预定时间窗口
|
public synchronized boolean reserve(String key, TimeWindow window, String vehicle) {
|
|
List<TimeWindow> 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<TimeWindow> windows = TIME_WINDOW_MAP.get(key);
|
if (windows != null) {
|
windows.remove(window);
|
if (windows.isEmpty()) {
|
TIME_WINDOW_MAP.remove(key);
|
}
|
}
|
}
|
|
}
|