济菏高速数据中心代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

167 lines
5.1 KiB

package com.zc.business.enums;
import lombok.Getter;
/**
* 通道拥挤度等级枚举
* @author xiepufeng
*/
@Getter
public enum ChannelCongestionLevelEnum {
/**
* 表示通道畅通,速度阈值为70 km/h
*/
FLOWING(70, 0, "畅通"),
/**
* 表示通道基本畅通,速度阈值为50 km/h
*/
BASIC_FLOWING(50, 0, "基本畅通"),
/**
* 表示通道轻度拥堵,速度阈值为40 km/h
*/
LIGHT_CONGESTION(40, 1000, "轻度拥堵"),
/**
* 表示通道中度拥堵,速度阈值为20 km/h
*/
MEDIUM_CONGESTION(20, 2000, "中度拥堵"),
/**
* 使用负数作为默认值,表示无限小,始终小于其他速度阈值,表示通道严重拥堵
*/
SEVERE_CONGESTION(-1, 4000, "严重拥堵");
/**
* 速度阈值,用于判断通道拥挤程度
*/
private final int speedThreshold;
/**
* 默认的拥堵里程数
*/
private final int defaultCongestionDistance;
/**
* 对拥挤度等级的描述
*/
private final String description;
/**
* 构造函数,初始化通道拥挤度等级。
*
* @param speedThreshold 速度阈值
* @param description 等级描述
*/
ChannelCongestionLevelEnum(int speedThreshold, int defaultCongestionDistance, String description) {
this.speedThreshold = speedThreshold;
this.defaultCongestionDistance = defaultCongestionDistance;
this.description = description;
}
/**
* 根据给定速度,返回对应的通道拥挤度等级。
*
* @param speed 速度(单位:km/h)
* @return 对应的通道拥挤度等级
*/
public static ChannelCongestionLevelEnum fromSpeed(int speed) {
for (ChannelCongestionLevelEnum level : values()) {
if (speed >= level.speedThreshold) {
return level;
}
}
return SEVERE_CONGESTION; // 若速度小于等于所有等级阈值,则视为严重拥堵
}
/**
* 根据给定速度,返回对应的通道拥挤度等级。
*
* @param speed 速度(单位:km/h)
* @param trafficVolume 车流量
* @return 对应的通道拥挤度等级
*/
public static ChannelCongestionLevelEnum fromSpeed(int speed, int trafficVolume) {
if (trafficVolume == 0) {
return FLOWING;
}
for (ChannelCongestionLevelEnum level : values()) {
if (speed >= level.speedThreshold) {
return level;
}
}
return SEVERE_CONGESTION; // 若速度小于等于所有等级阈值,则视为严重拥堵
}
/**
* 判断速度是否是是中度拥堵或者严重拥堵
*/
public static boolean isMediumOrSevereCongestion(int speed) {
ChannelCongestionLevelEnum level = fromSpeed(speed);
return level == MEDIUM_CONGESTION || level == SEVERE_CONGESTION;
}
/**
* 判断当前交通状况是否为中度或严重拥堵。
*
* @param speed 当前道路的车速,单位为任意测量单位,取决于具体应用。
* @param trafficVolume 当前道路的交通流量,单位为任意测量单位,取决于具体应用。
* @return boolean 返回 true 如果当前交通状况被判断为中度或严重拥堵,否则返回 false。
*/
public static boolean isMediumOrSevereCongestion(int speed, int trafficVolume) {
// 当交通流量为0时,不考虑拥堵问题,直接返回false
if (trafficVolume == 0) {
return false;
}
// 根据车速判断拥堵级别
ChannelCongestionLevelEnum level = fromSpeed(speed);
// 判断拥堵级别是否为中度或严重拥堵
return level == MEDIUM_CONGESTION || level == SEVERE_CONGESTION;
}
/**
* 判断给定速度是否属于拥堵状态。
*
* @param speed 速度(单位:km/h)
* @param trafficVolume 车流量
* @return 如果速度小于等于基本畅通的阈值,则返回true;否则返回false。
*/
public static boolean isCongestion(int speed, int trafficVolume) {
if (trafficVolume == 0) {
return false;
}
return speed < BASIC_FLOWING.getSpeedThreshold();
}
/**
* 判断给定速度是否属于拥堵状态。
*
* @param speed 速度(单位:km/h)
* @return 如果速度小于等于基本畅通的阈值,则返回true;否则返回false。
*/
public static boolean isCongestion(int speed) {
return speed < BASIC_FLOWING.getSpeedThreshold();
}
/**
* 判断给定速度是否属于指定的拥挤度等级。
*
* @param speed 速度(单位:km/h)
* @param level 拥挤度等级
* @return 如果速度属于该等级,返回true;否则返回false。
*/
public static boolean isWithinLevel(int speed, ChannelCongestionLevelEnum level) {
if (level == null) return false;
ChannelCongestionLevelEnum currentLevel = fromSpeed(speed);
return currentLevel == level;
}
}