Commit beaf2b3c authored by duanruiming's avatar duanruiming

[add] 优化监测-AI干线优化

parent a973e6d8
......@@ -114,12 +114,22 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime);
// 绿波优化数据
List<StrategyGreenOptHistEntity> entities = new ArrayList<>();
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, startOfDay);
List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.selectList(queryWrapper);
queryWrapper.ge(StrategyGreenOptHistEntity::getControlMethod, 1);
entities = strategyGreenOptHistMapper.selectList(queryWrapper);
// 如果路口没有绿波,获取当前绿波最大的一条数据
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapperMaxId = new LambdaQueryWrapper<>();
queryWrapperMaxId.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapperMaxId.ge(StrategyGreenOptHistEntity::getControlMethod, 1);
queryWrapperMaxId.orderByDesc(StrategyGreenOptHistEntity::getControlTime);
queryWrapperMaxId.last("limit 1");
entities = strategyGreenOptHistMapper.selectList(queryWrapperMaxId);
// 随机路口编号,通过路口编号查询时间轴
String tempCrossId = "";
String keyCrossId = "";
String keyGreenDir = "";
if (!CollectionUtils.isEmpty(entities)) {
for (StrategyGreenOptHistEntity entity : entities) {
GreenBeltKeyCrossFlowTimeVO vo = new GreenBeltKeyCrossFlowTimeVO();
......@@ -130,12 +140,13 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
vo.setStartTime(controlTime);
String crossGreenDetail = entity.getCrossGreenDetail();
Integer cycle = entity.getCycle();
keyCrossId = entity.getKeyCross();
keyGreenDir = entity.getDir();
List<GreenBeltInfoVO.CrossGreenDetail> crossGreenDetails = mapper.readValue(crossGreenDetail, new TypeReference<List<GreenBeltInfoVO.CrossGreenDetail>>() {});
if (!CollectionUtils.isEmpty(crossGreenDetails)) {
List<GreenBeltInfoVO.CrossGreenDetail> keyCrossDetail = crossGreenDetails.stream().filter(details -> StringUtils.equalsIgnoreCase(keyCross, details.getCrossId())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(keyCrossDetail)) {
GreenBeltInfoVO.CrossGreenDetail curKeyCross = keyCrossDetail.get(0);
tempCrossId = curKeyCross.getCrossId();
Double phaseStartTime = curKeyCross.getPhaseStartTime();
Double phaseEndTime = curKeyCross.getPhaseEndTime();
Double greenTimeRatio = Double.parseDouble(df.format(phaseEndTime - phaseStartTime / cycle));
......@@ -144,10 +155,10 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
}
tempResult.add(vo);
}
}
// 关键路口历史数据
LambdaQueryWrapper<CrossDataHistPO> histQuery = new LambdaQueryWrapper<>();
histQuery.eq(CrossDataHistPO::getCrossId, tempCrossId);
histQuery.eq(CrossDataHistPO::getCrossId, keyCrossId);
histQuery.ge(CrossDataHistPO::getStartTime, startOfDay);
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectList(histQuery);
if (!CollectionUtils.isEmpty(crossDataHistPOS)) {
......@@ -160,12 +171,12 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
resultVO.setStartTime(minuteDate);
resultVO.setFlow(flow);
resultVO.setGreenTimeRatio(0.0);
resultVO.setCrossId(tempCrossId);
resultVO.setDirName("未执行");
String crossName = baseCrossInfoCache.getCrossName(tempCrossId);
resultVO.setCrossId(keyCrossId);
resultVO.setDirName(GreenBeltDirEnum.getDesc(keyGreenDir));
String crossName = baseCrossInfoCache.getCrossName(keyCrossId);
resultVO.setCrossName(crossName);
for (GreenBeltKeyCrossFlowTimeVO result : tempResult) {
if (StringUtils.equalsIgnoreCase(tempCrossId, result.getCrossId())
if (StringUtils.equalsIgnoreCase(keyCrossId, result.getCrossId())
&& minuteDate.getTime() == result.getStartTime().getTime()) {
resultVO.setFlow(flow);
resultVO.setGreenTimeRatio(result.getGreenTimeRatio());
......@@ -174,7 +185,6 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
results.add(resultVO);
}
}
}
Map<String, List<GreenBeltKeyCrossFlowTimeVO>> map = results.stream().collect(Collectors.groupingBy(GreenBeltKeyCrossFlowTimeVO::getDirName));
return map;
} catch (Exception e) {
......
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