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.
141 lines
5.7 KiB
141 lines
5.7 KiB
package com.zc.business.utils;
|
|
import lombok.Getter;
|
|
|
|
public class WeatherTrafficProposeUtil {
|
|
|
|
// 定义天气条件的等级
|
|
@Getter
|
|
public enum WeatherCondition {
|
|
RAIN_LEVEL_1(3, "1"),
|
|
RAIN_LEVEL_2(2, "1"),
|
|
RAIN_LEVEL_3(1, "1"),
|
|
RAIN_LEVEL_4(0, "1"),
|
|
FOG_LEVEL_1(3, "5,11,12"),
|
|
FOG_LEVEL_2(2, "5,11,12"),
|
|
FOG_LEVEL_3(1, "5,11,12"),
|
|
FOG_LEVEL_4(0, "5,11,12"),
|
|
SNOW_LEVEL_1(3, "2,9,10,13"),
|
|
SNOW_LEVEL_2(2, "2,9,10,13"),
|
|
SNOW_LEVEL_3(1, "2,9,10,13"),
|
|
SNOW_LEVEL_4(0, "2,9,10,13");
|
|
|
|
private final int level;
|
|
private final String description;
|
|
|
|
WeatherCondition(int level, String description) {
|
|
this.level = level;
|
|
this.description = description;
|
|
}
|
|
|
|
public static WeatherCondition fromLevelAndDescription(int level, String description) {
|
|
for (WeatherCondition condition : WeatherCondition.values()) {
|
|
if (condition.getLevel() == level && condition.getDescription().contains(description)) {
|
|
return condition;
|
|
}
|
|
}
|
|
return null;
|
|
// throw new IllegalArgumentException("No matching WeatherCondition found for level: " + level + " and description: " + description);
|
|
}
|
|
}
|
|
|
|
// 获取限速建议
|
|
public static int getSpeedLimit(WeatherCondition condition) {
|
|
switch (condition) {
|
|
case RAIN_LEVEL_4:
|
|
case FOG_LEVEL_4:
|
|
case SNOW_LEVEL_4:
|
|
return 80; // 四级
|
|
case RAIN_LEVEL_3:
|
|
case FOG_LEVEL_3:
|
|
case SNOW_LEVEL_3:
|
|
return 60; // 三级
|
|
case RAIN_LEVEL_2:
|
|
case FOG_LEVEL_2:
|
|
case SNOW_LEVEL_2:
|
|
return 40; // 二级
|
|
case RAIN_LEVEL_1:
|
|
case FOG_LEVEL_1:
|
|
case SNOW_LEVEL_1:
|
|
return 20; // 一级(带队通行)
|
|
default:
|
|
throw new IllegalArgumentException("Unknown weather condition: " + condition);
|
|
}
|
|
}
|
|
|
|
// 获取流量控制建议
|
|
public static String getTrafficControlAdvice(WeatherCondition condition) {
|
|
switch (condition) {
|
|
case RAIN_LEVEL_4:
|
|
case FOG_LEVEL_4:
|
|
case SNOW_LEVEL_4:
|
|
case RAIN_LEVEL_3:
|
|
case FOG_LEVEL_3:
|
|
case SNOW_LEVEL_3:
|
|
case RAIN_LEVEL_2:
|
|
case FOG_LEVEL_2:
|
|
case SNOW_LEVEL_2:
|
|
return "局部封闭、间断放行;";
|
|
case RAIN_LEVEL_1:
|
|
case FOG_LEVEL_1:
|
|
case SNOW_LEVEL_1:
|
|
return "全线封闭收费站、必要时可带队通行的控制措施。全线封闭时,正在高速公路通行的车辆应以不大于 20km/h 的速度就近驶出高速公路或驶入服务区。带队通行时,应保障交通有序通行;";
|
|
default:
|
|
throw new IllegalArgumentException("Unknown weather condition: " + condition);
|
|
}
|
|
}
|
|
|
|
// 获取车型控制建议
|
|
public static String getVehicleControlAdvice(WeatherCondition condition) {
|
|
switch (condition) {
|
|
case RAIN_LEVEL_4:
|
|
case FOG_LEVEL_4:
|
|
case SNOW_LEVEL_4:
|
|
return "所有车型均可通行。";
|
|
case RAIN_LEVEL_3:
|
|
case FOG_LEVEL_3:
|
|
return "禁止“两客一危”车辆通行。";
|
|
case RAIN_LEVEL_2:
|
|
case FOG_LEVEL_2:
|
|
return "禁止七座以上(不含七座)客车、危险品运输车辆和黄牌货车通行。";
|
|
case RAIN_LEVEL_1:
|
|
case FOG_LEVEL_1:
|
|
case SNOW_LEVEL_1:
|
|
return "全线封闭;必要时可带队通行。";
|
|
case SNOW_LEVEL_2:
|
|
return "仅间隔放行黄牌货车。";
|
|
case SNOW_LEVEL_3:
|
|
return "禁止七座以上(不含七座)客车、危险品运输车辆通行。";
|
|
default:
|
|
throw new IllegalArgumentException("Unknown weather condition: " + condition);
|
|
}
|
|
}
|
|
|
|
public static String content(int warningLevelStringNumber, String earlyWarningTypeStringNumber){
|
|
WeatherCondition condition = WeatherCondition.fromLevelAndDescription(warningLevelStringNumber, earlyWarningTypeStringNumber);
|
|
if(condition !=null) {
|
|
System.out.println("Weather Condition: " + condition.name() + ", Level: " + condition.getLevel() + ", Description: " + condition.getDescription());
|
|
return "建议速度为" + getSpeedLimit(condition) + " km/h ;\n" + getTrafficControlAdvice(condition) + "\n" + getVehicleControlAdvice(condition);
|
|
}else{
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
int warningLevelStringNumber = 3;
|
|
String earlyWarningTypeStringNumber= "1";
|
|
try {
|
|
WeatherCondition condition = WeatherCondition.fromLevelAndDescription(warningLevelStringNumber, earlyWarningTypeStringNumber);
|
|
System.out.println("Weather Condition: " + condition.name() + ", Level: " + condition.getLevel() + ", Description: " + condition.getDescription());
|
|
|
|
int speedLimit = getSpeedLimit(condition);
|
|
String trafficAdvice = getTrafficControlAdvice(condition);
|
|
String vehicleAdvice = getVehicleControlAdvice(condition);
|
|
|
|
System.out.println("限速建议: " + speedLimit + " km/h");
|
|
System.out.println("流量控制建议: " + trafficAdvice);
|
|
System.out.println("车型控制建议: " + vehicleAdvice);
|
|
} catch (IllegalArgumentException e) {
|
|
System.err.println(e.getMessage());
|
|
}
|
|
}
|
|
}
|
|
|