Commit ab52b423 authored by duanruiming's avatar duanruiming

[add] 海信绿波图两个路口绿灯开始时间,准备开始

parent 4ce5e91c
......@@ -22,5 +22,7 @@ public class GreenBeltChartDTO {
private List<Double> backDistances;
private Map<String, List<List<Double>>> crossRedTimesMap;
private Map<String, List<List<Double>>> backCrossRedTimesMap;
private Map<String, List<List<Double>>> crossGreenTimesMap;
private Map<String, List<List<Double>>> backCrossGreenTimesMap;
private List<Map<String, List<Double>>> greenwaveStartGroup;
}
......@@ -78,14 +78,19 @@ public class HisenseGreenChartTask {
List<Double> offsets = new ArrayList<>();
List<Double> distances = new ArrayList<>();
// 正向红灯时间
Map<String, List<List<Double>>> crossRedTimesMap = getCrossRedTimeMap(mapper, greenDirGreenTimeMap, value, indexDir, travelTime, offsets, distances);
Map<String, List<List<Double>>> crossRedTimesMap = new LinkedHashMap<>();
Map<String, List<List<Double>>> crossGreenTimesMap = new LinkedHashMap<>();
getCrossRedTimeMap(mapper, greenDirGreenTimeMap, value, indexDir, travelTime, offsets, distances, crossRedTimesMap, crossGreenTimesMap);
// 反向红灯时间
Integer indexOutDir = indexDTO.getOutDir();
List<GreenCrossDirDTO> backValue = value.stream().sorted(Comparator.comparingInt(GreenCrossDirDTO::getSort).reversed()).collect(Collectors.toList());
List<Double> backOffsets = new ArrayList<>();
List<Double> backDistances = new ArrayList<>();
Double backTravelTime = getTravelTime(realTimeMap, greenId, indexOutDir, totalDistance);
Map<String, List<List<Double>>> backCrossRedTimesMap = getCrossRedTimeMap(mapper, greenDirGreenTimeMap, backValue, indexOutDir, backTravelTime, backOffsets, backDistances);
Map<String, List<List<Double>>> backCrossRedTimesMap = new LinkedHashMap<>();
Map<String, List<List<Double>>> backCrossGreenTimesMap = new LinkedHashMap<>();
getCrossRedTimeMap(mapper, greenDirGreenTimeMap, backValue, indexOutDir, backTravelTime, backOffsets, backDistances, crossGreenTimesMap, backCrossGreenTimesMap);
greenBeltChartDTO.setGreenId(greenId);
greenBeltChartDTO.setDir(indexDir);
greenBeltChartDTO.setBackDir(indexOutDir);
......@@ -97,6 +102,8 @@ public class HisenseGreenChartTask {
greenBeltChartDTO.setBackDistances(backDistances);
greenBeltChartDTO.setCrossRedTimesMap(crossRedTimesMap);
greenBeltChartDTO.setBackCrossRedTimesMap(backCrossRedTimesMap);
greenBeltChartDTO.setCrossGreenTimesMap(crossGreenTimesMap);
greenBeltChartDTO.setBackCrossGreenTimesMap(backCrossGreenTimesMap);
greenBeltChartDTOS.add(greenBeltChartDTO);
}
......@@ -106,6 +113,39 @@ public class HisenseGreenChartTask {
List<GreenCrossDirDTO> value = entry.getValue();
if (!CollectionUtils.isEmpty(value)) {
for (int i = 0; i < value.size(); i++) {
GreenCrossDirDTO firstDto = value.get(i);
String firstCrossId = firstDto.getCrossId();
Integer inDir = firstDto.getInDir();
if (i < value.size()) {
GreenCrossDirDTO secondDto = value.get(i + 1);
String secondCrossId = secondDto.getCrossId();
for (GreenBeltChartDTO greenBeltChartDTO : greenBeltChartDTOS) {
Integer beltGreenId = greenBeltChartDTO.getGreenId();
Integer beltDir = greenBeltChartDTO.getDir();
if (Objects.equals(greenId, beltGreenId) && Objects.equals(inDir, beltDir)) {
Double speed = greenBeltChartDTO.getSpeed();
List<Double> distances = greenBeltChartDTO.getDistances();
Double distance = distances.get(i);
Double travelTime = distance / speed;
Map<String, List<List<Double>>> crossGreenTimesMap = greenBeltChartDTO.getCrossGreenTimesMap();
List<List<Double>> firstList = crossGreenTimesMap.get(firstCrossId);
List<List<Double>> secondList = crossGreenTimesMap.get(secondCrossId);
// 第一个路口循环绿灯开始时间
for (int i1 = 0; i1 < firstList.size(); i1++) {
List<Double> greenStartEnd = firstList.get(i1);
for (int i2 = 0; i2 < greenStartEnd.size(); i2++) {
Double greenStart = greenStartEnd.get(0);
Double greenEnd = greenStartEnd.get(1);
for (int j = greenStart.intValue(); j <= greenEnd.intValue(); j++) {
int firstStartPoint = j + travelTime.intValue();
}
}
}
}
}
}
}
}
......@@ -134,11 +174,12 @@ public class HisenseGreenChartTask {
}
private static Map<String, List<List<Double>>> getCrossRedTimeMap(ObjectMapper mapper, HashMap<String, SchemeGreenDirGreenTimeDTO> greenDirGreenTimeMap,
List<GreenCrossDirDTO> value, Integer indexDir, Double travelTime,
List<Double> offsets, List<Double> distances) throws Exception {
Map<String, List<List<Double>>> crossRedTimesMap = new LinkedHashMap<>();
List<GreenCrossDirDTO> value, Integer indexDir, Double travelTime,
List<Double> offsets, List<Double> distances, Map<String, List<List<Double>>> crossRedTimesMap,
Map<String, List<List<Double>>> crossGreenTimesMap) throws Exception {
for (GreenCrossDirDTO greenCrossDirDTO : value) {
List<List<Double>> crossRedTimes = new ArrayList<>();
List<List<Double>> crossGreenTimes = new ArrayList<>();
String crossId = greenCrossDirDTO.getCrossId();
Integer distance = greenCrossDirDTO.getDistance();
distances.add(distance * 1.0);
......@@ -168,16 +209,21 @@ public class HisenseGreenChartTask {
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex + offset + cycleLen + greenStartTime));
// 两个周期,第二个周期是补充相位差
crossRedTimes.add(Arrays.asList(cycleIndex + offset + cycleLen + greenEndTime, cycleIndex + offset + cycleLen + endCycleExt));
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime + cycleLen, cycleIndex + offset + greenEndTime + cycleLen));
} else { // 红灯结束时间 < 相位差, 相位差包含绿灯,endCycleExt都是红灯
// 相位差中绿灯时间
Double offsetGreen = greenEndTime - endCycleExt;
crossRedTimes.add(Arrays.asList(cycleIndex + offsetGreen, cycleIndex + offset + greenStartTime));
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex + offset + cycleLen + greenStartTime));
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
}
}
crossRedTimesMap.put(crossId, crossRedTimes);
crossGreenTimesMap.put(crossId, crossGreenTimes);
log.debug("当前路口编号:{},当前协调方向:{}, 红灯点位信息:{}", crossId, indexDir, mapper.writeValueAsString(crossRedTimes));
}
return crossRedTimesMap;
......
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