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()); } } }