Commit 0bbed52f authored by duanruiming's avatar duanruiming

[add] 绿波图异常逻辑优化

parent 72528379
......@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
*/
@Component
@Slf4j
@Profile("docker")
@Profile("test")
public class HisenseGreenChartTask {
@Resource
......@@ -47,7 +47,7 @@ public class HisenseGreenChartTask {
private GreenChartSchemeHistMapper greenChartSchemeHistMapper;
@Scheduled(fixedRate = 10 * 60 * 1000, initialDelay = 1 * 60 * 1000)
@Scheduled(fixedRate = 1 * 60 * 1000, initialDelay = 1 * 60 * 1000)
public void getGreenChart() {
try {
ObjectMapper mapper = JacksonUtils.getInstance();
......@@ -83,9 +83,7 @@ public class HisenseGreenChartTask {
// 1.根据绿波带长度和速度计算行程时间
// 2.根据相位差,行程时间,海信环图计算绿灯红灯点位 正向 crossRedTimesMap 反向backCrossRedTimesMap
//Map<Integer, List<GreenCrossDirDTO>> greenMap = greenCrossDirCache.stream().collect(Collectors.groupingBy(GreenCrossDirDTO::getGreenId));
// todo 测试只需要绿波编号1
Map<Integer, List<GreenCrossDirDTO>> greenMap = greenCrossDirCache.stream().filter(po -> Objects.equals(1, po.getGreenId())).collect(Collectors.groupingBy(GreenCrossDirDTO::getGreenId));
Map<Integer, List<GreenCrossDirDTO>> greenMap = greenCrossDirCache.stream().collect(Collectors.groupingBy(GreenCrossDirDTO::getGreenId));
List<GreenBeltChartDTO> greenBeltChartDTOS = new ArrayList<>();
for (Map.Entry<Integer, List<GreenCrossDirDTO>> entry : greenMap.entrySet()) {
GreenBeltChartDTO greenBeltChartDTO = new GreenBeltChartDTO();
......@@ -184,8 +182,8 @@ public class HisenseGreenChartTask {
greenChartSchemeHist.setQueryDate(date);
greenChartSchemeHistMapper.insert(greenChartSchemeHist);
}
log.info("绿波图实体参数:{}", mapper.writeValueAsString(results));
log.info("绿波路口方案环图信息:{}", mapper.writeValueAsString(greenSchemeRingPhaseMap));
log.debug("绿波图实体参数:{}", mapper.writeValueAsString(results));
log.debug("绿波路口方案环图信息:{}", mapper.writeValueAsString(greenSchemeRingPhaseMap));
}
} catch (Exception e) {
log.error("通过海信方案处理绿波波定时任务失败:{}", e);
......@@ -234,40 +232,42 @@ public class HisenseGreenChartTask {
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);
Double greenStart = greenStartEnd.get(0);
Double greenEnd = greenStartEnd.get(1);
int index = 0;
Double start = 0.0;
Double end = 0.0;
Double start2 = 0.0;
Double end2 = 0.0;
for (int j = greenStart.intValue(); j <= greenEnd.intValue(); j++) {
int firstStartPoint = j + travelTime.intValue();
for (int i3 = 0; i3 < secondList.size(); i3++) {
List<Double> greenStartEnd2 = secondList.get(i3);
Double greenStart2 = greenStartEnd2.get(0);
Double greenEnd2 = greenStartEnd2.get(1);
if (!CollectionUtils.isEmpty(firstList) && !CollectionUtils.isEmpty(secondList)) {
for (int i1 = 0; i1 < firstList.size(); i1++) {
List<Double> greenStartEnd = firstList.get(i1);
Double greenStart = greenStartEnd.get(0);
Double greenEnd = greenStartEnd.get(1);
int index = 0;
Double start = 0.0;
Double end = 0.0;
Double start2 = 0.0;
Double end2 = 0.0;
for (int j = greenStart.intValue(); j <= greenEnd.intValue(); j++) {
int firstStartPoint = j + travelTime.intValue();
for (int i3 = 0; i3 < secondList.size(); i3++) {
List<Double> greenStartEnd2 = secondList.get(i3);
Double greenStart2 = greenStartEnd2.get(0);
Double greenEnd2 = greenStartEnd2.get(1);
if (greenStart <= j && j <= greenEnd
&& greenStart2 <= firstStartPoint && firstStartPoint <= greenEnd2) {
if (greenStart <= j && j <= greenEnd
&& greenStart2 <= firstStartPoint && firstStartPoint <= greenEnd2) {
if (index == 0) {
start = j * 1.0;
start2 = firstStartPoint * 1.0;
} else {
Double tempEnd = j * 1.0;
end = end > tempEnd ? end : tempEnd;
Double tempEnd2 = firstStartPoint * 1.0;
end2 = end2 > tempEnd2 ? end2 : tempEnd2;
if (index == 0) {
start = j * 1.0;
start2 = firstStartPoint * 1.0;
} else {
Double tempEnd = j * 1.0;
end = end > tempEnd ? end : tempEnd;
Double tempEnd2 = firstStartPoint * 1.0;
end2 = end2 > tempEnd2 ? end2 : tempEnd2;
}
++index;
}
++index;
}
}
firstGreenStartList.add(Arrays.asList(start, end));
secondGreenStartList.add(Arrays.asList(start2, end2));
}
firstGreenStartList.add(Arrays.asList(start, end));
secondGreenStartList.add(Arrays.asList(start2, end2));
}
}
greenStartMap.put(firstCrossId, firstGreenStartList);
......@@ -311,6 +311,10 @@ public class HisenseGreenChartTask {
String crossKey = CommonUtils.getStrJoin(String.valueOf(crossId), String.valueOf(indexDir));
// 获取海信环相位信息
SchemeGreenDirGreenTimeDTO firstGreenTimeDTO = greenDirGreenTimeMap.get(crossKey);
if (Objects.isNull(firstGreenTimeDTO)) {
log.error("当前路口:{}, 没有环相位信息异常", crossKey);
continue;
}
Integer cycleLen = firstGreenTimeDTO.getCycleLen();
// * 1.0转Double
Double offset = firstGreenTimeDTO.getOffset() * 1.0;
......@@ -375,8 +379,6 @@ public class HisenseGreenChartTask {
private Map<String, GreenwaveRealtimePO> getGreenRealTimeMap() {
Map<String, GreenwaveRealtimePO> realTimeMap = new HashMap<>();
LambdaQueryWrapper<GreenwaveRealtimePO> queryWrapper = new LambdaQueryWrapper<>();
// todo 测试绿波1
queryWrapper.eq(GreenwaveRealtimePO::getGreenId, 1);
List<GreenwaveRealtimePO> greenwaveRealtimePOList = greenwaveRealtimeMapper.selectList(queryWrapper);
for (GreenwaveRealtimePO greenwaveRealtimePO : greenwaveRealtimePOList) {
Integer greenId = greenwaveRealtimePO.getGreenId();
......
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