Commit fe04dd77 authored by hanbing's avatar hanbing

[add] 信号评价,评价指标-溢流率

parent e2b2a4e6
...@@ -14,4 +14,6 @@ public class CrossDirDataHistAvgBO { ...@@ -14,4 +14,6 @@ public class CrossDirDataHistAvgBO {
private Double avgQueueLength; private Double avgQueueLength;
// 平均拥堵指数 // 平均拥堵指数
private Double avgIndex; private Double avgIndex;
// 平均溢流时长
private Double avgEffusionTime;
} }
...@@ -75,6 +75,7 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -75,6 +75,7 @@ public class EvaluateServiceImpl implements EvaluateService {
String crossId = crossIdAndMinutesDTO.getCrossId(); String crossId = crossIdAndMinutesDTO.getCrossId();
Integer minutes = crossIdAndMinutesDTO.getMinutes(); Integer minutes = crossIdAndMinutesDTO.getMinutes();
EvaluateMetricsVO evaluateMetricsVO = new EvaluateMetricsVO(); EvaluateMetricsVO evaluateMetricsVO = new EvaluateMetricsVO();
// 路口流量 // 路口流量
List<EvaluateMetricsVO.CrossFlowElement> crossFlow = buildCrossFlow(crossId, minutes); List<EvaluateMetricsVO.CrossFlowElement> crossFlow = buildCrossFlow(crossId, minutes);
evaluateMetricsVO.setCrossFlow(crossFlow); evaluateMetricsVO.setCrossFlow(crossFlow);
...@@ -84,11 +85,43 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -84,11 +85,43 @@ public class EvaluateServiceImpl implements EvaluateService {
// 拥堵指数 // 拥堵指数
List<EvaluateMetricsVO.TrafficIndexElement> trafficIndex = buildTrafficIndex(crossId, minutes); List<EvaluateMetricsVO.TrafficIndexElement> trafficIndex = buildTrafficIndex(crossId, minutes);
evaluateMetricsVO.setTrafficIndex(trafficIndex); evaluateMetricsVO.setTrafficIndex(trafficIndex);
// // todo 溢流率 // 溢流率
// evaluateMetricsVO.setOverFlowRate(null); List<EvaluateMetricsVO.EffusionRateElement> effusionRate = buildEffusionRate(crossId, minutes);
evaluateMetricsVO.setEffusionRate(effusionRate);
return evaluateMetricsVO; return evaluateMetricsVO;
} }
private List<EvaluateMetricsVO.EffusionRateElement> buildEffusionRate(String crossId, Integer minutes) {
List<EvaluateMetricsVO.EffusionRateElement> res = new ArrayList<>();
// 实时数据
Map<Integer, List<CrossDirDataRealtimePO>> dirObjMapRealtime = getRealTimeData(crossId);
// 历史数据
Map<Integer, List<CrossDirDataHistAvgBO>> dirObjMapHist = getHistData(crossId, minutes);
for (Integer dir : dirObjMapRealtime.keySet()) {
EvaluateMetricsVO.EffusionRateElement effusionRateElement = new EvaluateMetricsVO.EffusionRateElement();
effusionRateElement.setDir(dir);
List<CrossDirDataRealtimePO> realtimeObj = dirObjMapRealtime.get(dir);
if (CollectionUtil.isNotEmpty(realtimeObj)) {
CrossDirDataRealtimePO crossDirDataRealtimePO = realtimeObj.get(0);
Double effusionTime = crossDirDataRealtimePO.getEffusionTime();
Double effusionRate = effusionTime / minutes;
effusionRateElement.setCurrentRate(effusionRate);
}
List<CrossDirDataHistAvgBO> histObj = dirObjMapHist.get(dir);
if (CollectionUtil.isNotEmpty(histObj)) {
CrossDirDataHistAvgBO crossDirDataHistAvgBO = histObj.get(0);
Double avgEffusionTime = crossDirDataHistAvgBO.getAvgEffusionTime();
Double avgEffusionRate = avgEffusionTime / minutes;
effusionRateElement.setCompareRate(avgEffusionRate);
}
res.add(effusionRateElement);
}
return res;
}
private List<EvaluateMetricsVO.TrafficIndexElement> buildTrafficIndex(String crossId, Integer minutes) { private List<EvaluateMetricsVO.TrafficIndexElement> buildTrafficIndex(String crossId, Integer minutes) {
List<EvaluateMetricsVO.TrafficIndexElement> res = new ArrayList<>(); List<EvaluateMetricsVO.TrafficIndexElement> res = new ArrayList<>();
// 实时数据 // 实时数据
...@@ -112,7 +145,6 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -112,7 +145,6 @@ public class EvaluateServiceImpl implements EvaluateService {
res.add(trafficIndexElement); res.add(trafficIndexElement);
} }
return res; return res;
} }
......
...@@ -23,7 +23,7 @@ public class EvaluateMetricsVO { ...@@ -23,7 +23,7 @@ public class EvaluateMetricsVO {
@ApiModelProperty(value = "拥堵指数") @ApiModelProperty(value = "拥堵指数")
private List<TrafficIndexElement> trafficIndex; private List<TrafficIndexElement> trafficIndex;
@ApiModelProperty(value = "溢流率") @ApiModelProperty(value = "溢流率")
private List<OverFlowRateElement> overFlowRate; private List<EffusionRateElement> effusionRate;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
...@@ -68,7 +68,7 @@ public class EvaluateMetricsVO { ...@@ -68,7 +68,7 @@ public class EvaluateMetricsVO {
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class OverFlowRateElement { public static class EffusionRateElement {
@ApiModelProperty(value = "方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北") @ApiModelProperty(value = "方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北")
private Integer dir; private Integer dir;
@ApiModelProperty(value = "当前时段溢流率") @ApiModelProperty(value = "当前时段溢流率")
......
...@@ -27,7 +27,8 @@ ...@@ -27,7 +27,8 @@
<select id="selectByCrossIdInOutTimestamp" resultType="net.wanji.opt.bo.CrossDirDataHistAvgBO"> <select id="selectByCrossIdInOutTimestamp" resultType="net.wanji.opt.bo.CrossDirDataHistAvgBO">
SELECT dir_type as dirType, avg(capacity) as avgCapacity, avg(flow) as avgFlow, SELECT dir_type as dirType, avg(capacity) as avgCapacity, avg(flow) as avgFlow,
avg(queue_length) as avgQueueLength, avg(traffic_index) as avgIndex avg(queue_length) as avgQueueLength, avg(traffic_index) as avgIndex,
avg(effusion_time) as avgEffusionTime
FROM t_cross_dir_data_hist FROM t_cross_dir_data_hist
WHERE cross_id = #{crossId} WHERE cross_id = #{crossId}
AND in_out_type = #{inOutType} AND in_out_type = #{inOutType}
......
...@@ -16,7 +16,7 @@ import java.text.DecimalFormat; ...@@ -16,7 +16,7 @@ import java.text.DecimalFormat;
*/ */
public class DoubleSerialize extends JsonSerializer<Double> { public class DoubleSerialize extends JsonSerializer<Double> {
private DecimalFormat df = new DecimalFormat("##.00"); private DecimalFormat df = new DecimalFormat("#0.00");
@Override @Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers)
......
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