Commit e4540ad6 authored by duanruiming's avatar duanruiming

[update] 优化异常,设置默认值

parent 0cf88a56
......@@ -80,7 +80,7 @@ public class SchemeEvaluateController {
@ApiResponse(code = 200, message = "OK", response = SchemeEvaluateSchemeDetailOverallVO.class),
})
public JsonViewObject schemeDetailOverall(@RequestBody SchemeDetailOverallBO schemeDetailOverallBO)
throws ParseException {
throws Exception {
SchemeEvaluateSchemeDetailOverallVO res = schemeEvaluateService.schemeDetailOverall(schemeDetailOverallBO);
return JsonViewObject.newInstance().success(res);
}
......
......@@ -17,9 +17,9 @@ public interface SchemeEvaluateService {
List<SchemeEvaluateCrossSchemeListVO> crossSchemeList(CrossSchemeListBO crossSchemeListBO);
SchemeEvaluateSchemeDetailOverallVO schemeDetailOverall(SchemeDetailOverallBO schemeDetailOverallBO) throws ParseException;
SchemeEvaluateSchemeDetailOverallVO schemeDetailOverall(SchemeDetailOverallBO schemeDetailOverallBO) throws Exception;
SchemeEvaluateSchemeDetailedProblemVO detailedProblem(SchemeDetailOverallBO schemeDetailOverallBO) throws ParseException;
SchemeEvaluateSchemeDetailedProblemVO detailedProblem(SchemeDetailOverallBO schemeDetailOverallBO) throws Exception;
List<SchemeEvaluateCurveChartVO> curveChart(CurveChartBO curveChartBO) throws ParseException, NoSuchFieldException, IllegalAccessException;
}
......@@ -953,22 +953,30 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
.mapToDouble(CrossDirDataHistPO::getEffusionRate)
.max();
if (effusionMax.isPresent()) {
int intMax = (int) Math.round(effusionMax.getAsDouble() * 100);
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildEffusionOverallMetrics(effusionMax);
buildEffusionOverallMetrics(intMax);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无溢流率数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildEffusionOverallMetrics(0);
overallMetricsList.add(overallMetrics);
// throw new RuntimeException("该时段无溢流率数据");
}
// 绿灯间隔清空率取最大
OptionalDouble clearRateMax = crossDataHistPOList.stream()
.mapToDouble(CrossDataHistPO::getClearRate)
.max();
if (clearRateMax.isPresent()) {
int intMax = (int) Math.round(clearRateMax.getAsDouble());
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildClearRateOverallMetrics(clearRateMax);
buildClearRateOverallMetrics(intMax);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无绿灯间隔清空率数据");
// throw new RuntimeException("该时段无绿灯间隔清空率数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildClearRateOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
// 路口级别三急一速数量
Integer emergencyCount = crossDataHistMapper.selectCrossEmergencyCount(crossId, startTimeStamp, endTimeStamp);
......@@ -1026,11 +1034,15 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
.filter(Objects::nonNull)
.max();
if (greenLightEfficiencyMax.isPresent()) {
int intGreenLightEfficiencyMax = (int) Math.round(greenLightEfficiencyMax.getAsDouble() * 100);
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildGreenLightUseOverallMetrics(greenLightEfficiencyMax);
buildGreenLightUseOverallMetrics(intGreenLightEfficiencyMax);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无绿灯有效利用率数据");
// throw new RuntimeException("该时段无绿灯有效利用率数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildGreenLightUseOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
// 饱和度取最大
OptionalDouble saturationMax = crossDataHistPOList.stream()
......@@ -1038,11 +1050,15 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
.filter(Objects::nonNull)
.max();
if (saturationMax.isPresent()) {
int intMax = (int) Math.round(saturationMax.getAsDouble());
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildSaturationMaxOverallMetrics(saturationMax);
buildSaturationMaxOverallMetrics(intMax);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无饱和度数据");
// throw new RuntimeException("该时段无饱和度数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildSaturationMaxOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
// 负载均衡度取最大
OptionalDouble loadBalanceMax = crossDataHistPOList.stream()
......@@ -1051,11 +1067,15 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
.mapToDouble(Double::doubleValue) // 将Double转换为double
.max();
if (loadBalanceMax.isPresent()) {
int intMax = (int) Math.round(loadBalanceMax.getAsDouble());
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildLoadBalanceOverallMetrics(loadBalanceMax);
buildLoadBalanceOverallMetrics(intMax);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无负载均衡度数据");
// throw new RuntimeException("该时段无负载均衡度数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildLoadBalanceOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
vo.setOverallMetricsList(overallMetricsList);
// 查询方向指标数值(都取最大),并与评价标准比较:如果饱和度<0.8,则需绿灯利用率大于50%;如果饱和度>0.8,则需绿灯利用率大于80%
......@@ -1079,8 +1099,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
vo.setStrategyEvaluateList(strategyEvaluateList);
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildClearRateOverallMetrics(OptionalDouble clearRateMax) {
int intMax = (int) Math.round(clearRateMax.getAsDouble());
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildClearRateOverallMetrics(int intMax) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.CLEAR_RATE.getCode());
......@@ -1090,8 +1109,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
return overallMetrics;
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildEffusionOverallMetrics(OptionalDouble effusionMax) {
int intMax = (int) Math.round(effusionMax.getAsDouble() * 100);
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildEffusionOverallMetrics(int intMax) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.EFFUSION_RATE.getCode());
......@@ -1114,8 +1132,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildLoadBalanceOverallMetrics(
OptionalDouble loadBalanceMax) {
int intMax = (int) Math.round(loadBalanceMax.getAsDouble());
int intMax) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.LOAD_BALANCE.getCode());
......@@ -1126,8 +1143,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildSaturationMaxOverallMetrics(
OptionalDouble saturationMax) {
int intMax = (int) Math.round(saturationMax.getAsDouble());
int intMax) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.SATURATION.getCode());
......@@ -1138,8 +1154,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildGreenLightUseOverallMetrics(
OptionalDouble greenLightEfficiencyMax) {
int intGreenLightEfficiencyMax = (int) Math.round(greenLightEfficiencyMax.getAsDouble() * 100);
int intGreenLightEfficiencyMax) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.GREEN_LIGHT_EFFICIENCY.getCode());
......@@ -1159,44 +1174,64 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
.mapToDouble(CrossDataHistPO::getQueueLength)
.max();
if (queueLengthMax.isPresent()) {
// 四舍五入并转换为 int 类型
int intQueueLengthAverage = (int) Math.round(queueLengthMax.getAsDouble());
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildQueueLengthOverallMetrics(queueLengthMax);
buildQueueLengthOverallMetrics(intQueueLengthAverage);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无最大排队数据");
// throw new RuntimeException("该时段无最大排队数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildQueueLengthOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
// 延误取最大
OptionalInt delayTimeMax = crossDataHistPOList.stream()
.mapToInt(CrossDataHistPO::getDelayTime)
.max();
if (delayTimeMax.isPresent()) {
int intDelayTimeAverage = delayTimeMax.getAsInt();
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildDelayTimeOverallMetrics(delayTimeMax);
buildDelayTimeOverallMetrics(intDelayTimeAverage);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无延误数据");
// throw new RuntimeException("该时段无延误数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildDelayTimeOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
// 停车次数取最大
OptionalDouble stopTimesMax = crossDataHistPOList.stream()
.mapToDouble(CrossDataHistPO::getStopTimes)
.max();
if (stopTimesMax.isPresent()) {
// 四舍五入并转换为 int 类型
int intStopTimesAverage = (int) Math.round(stopTimesMax.getAsDouble());
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildStopTimesOverallMetrics(stopTimesMax);
buildStopTimesOverallMetrics(intStopTimesAverage);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无停车次数数据");
// throw new RuntimeException("该时段无停车次数数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildStopTimesOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
// 不停车通过率取最大
OptionalDouble noStopRateMax = crossDirDataHistPOList.stream()
.mapToDouble(CrossDirDataHistPO::getNoStopRate)
.max();
if (noStopRateMax.isPresent()) {
// 先乘以100,再四舍五入并转换为 int 类型
int intStopTimesAverage = (int) Math.round(noStopRateMax.getAsDouble() * 100);
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildNoStopRateOverallMetrics(noStopRateMax);
buildNoStopRateOverallMetrics(intStopTimesAverage);
overallMetricsList.add(overallMetrics);
} else {
throw new RuntimeException("该时段无不停车通过率数据");
// throw new RuntimeException("该时段无不停车通过率数据");
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
buildNoStopRateOverallMetrics(0);
overallMetricsList.add(overallMetrics);
}
vo.setOverallMetricsList(overallMetricsList);
// 查询方向指标数值(都取最大),并与评价标准比较
......@@ -1242,9 +1277,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildNoStopRateOverallMetrics(
OptionalDouble noStopRateAverage) {
// 先乘以100,再四舍五入并转换为 int 类型
int intStopTimesAverage = (int) Math.round(noStopRateAverage.getAsDouble() * 100);
int intStopTimesAverage) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.NO_STOP_RATE.getCode());
......@@ -1255,9 +1288,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildStopTimesOverallMetrics(
OptionalDouble stopTimesAverage) {
// 四舍五入并转换为 int 类型
int intStopTimesAverage = (int) Math.round(stopTimesAverage.getAsDouble());
int intStopTimesAverage) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.STOP_TIMES.getCode());
......@@ -1268,8 +1299,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildDelayTimeOverallMetrics(
OptionalInt delayTimeAverage) {
int intDelayTimeAverage = delayTimeAverage.getAsInt();
int intDelayTimeAverage) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.AVERAGE_DELAY.getCode());
......@@ -1281,9 +1311,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
@NotNull
private static SchemeEvaluateSchemeDetailOverallVO.OverallMetrics buildQueueLengthOverallMetrics(
OptionalDouble queueLengthAverage) {
// 四舍五入并转换为 int 类型
int intQueueLengthAverage = (int) Math.round(queueLengthAverage.getAsDouble());
int intQueueLengthAverage) {
SchemeEvaluateSchemeDetailOverallVO.OverallMetrics overallMetrics =
new SchemeEvaluateSchemeDetailOverallVO.OverallMetrics();
overallMetrics.setMetricCode(StrategyAndMetricsEnum.Metrics.MAX_QUEUE_LENGTH.getCode());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment