Commit beaf2b3c authored by duanruiming's avatar duanruiming

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

parent a973e6d8
...@@ -114,12 +114,22 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService { ...@@ -114,12 +114,22 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime); LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime);
// 绿波优化数据 // 绿波优化数据
List<StrategyGreenOptHistEntity> entities = new ArrayList<>();
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId); queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, startOfDay); 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)) { if (!CollectionUtils.isEmpty(entities)) {
for (StrategyGreenOptHistEntity entity : entities) { for (StrategyGreenOptHistEntity entity : entities) {
GreenBeltKeyCrossFlowTimeVO vo = new GreenBeltKeyCrossFlowTimeVO(); GreenBeltKeyCrossFlowTimeVO vo = new GreenBeltKeyCrossFlowTimeVO();
...@@ -130,12 +140,13 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService { ...@@ -130,12 +140,13 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
vo.setStartTime(controlTime); vo.setStartTime(controlTime);
String crossGreenDetail = entity.getCrossGreenDetail(); String crossGreenDetail = entity.getCrossGreenDetail();
Integer cycle = entity.getCycle(); Integer cycle = entity.getCycle();
keyCrossId = entity.getKeyCross();
keyGreenDir = entity.getDir();
List<GreenBeltInfoVO.CrossGreenDetail> crossGreenDetails = mapper.readValue(crossGreenDetail, new TypeReference<List<GreenBeltInfoVO.CrossGreenDetail>>() {}); List<GreenBeltInfoVO.CrossGreenDetail> crossGreenDetails = mapper.readValue(crossGreenDetail, new TypeReference<List<GreenBeltInfoVO.CrossGreenDetail>>() {});
if (!CollectionUtils.isEmpty(crossGreenDetails)) { if (!CollectionUtils.isEmpty(crossGreenDetails)) {
List<GreenBeltInfoVO.CrossGreenDetail> keyCrossDetail = crossGreenDetails.stream().filter(details -> StringUtils.equalsIgnoreCase(keyCross, details.getCrossId())).collect(Collectors.toList()); List<GreenBeltInfoVO.CrossGreenDetail> keyCrossDetail = crossGreenDetails.stream().filter(details -> StringUtils.equalsIgnoreCase(keyCross, details.getCrossId())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(keyCrossDetail)) { if (!CollectionUtils.isEmpty(keyCrossDetail)) {
GreenBeltInfoVO.CrossGreenDetail curKeyCross = keyCrossDetail.get(0); GreenBeltInfoVO.CrossGreenDetail curKeyCross = keyCrossDetail.get(0);
tempCrossId = curKeyCross.getCrossId();
Double phaseStartTime = curKeyCross.getPhaseStartTime(); Double phaseStartTime = curKeyCross.getPhaseStartTime();
Double phaseEndTime = curKeyCross.getPhaseEndTime(); Double phaseEndTime = curKeyCross.getPhaseEndTime();
Double greenTimeRatio = Double.parseDouble(df.format(phaseEndTime - phaseStartTime / cycle)); Double greenTimeRatio = Double.parseDouble(df.format(phaseEndTime - phaseStartTime / cycle));
...@@ -144,35 +155,34 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService { ...@@ -144,35 +155,34 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
} }
tempResult.add(vo); tempResult.add(vo);
} }
}
// 关键路口历史数据 // 关键路口历史数据
LambdaQueryWrapper<CrossDataHistPO> histQuery = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CrossDataHistPO> histQuery = new LambdaQueryWrapper<>();
histQuery.eq(CrossDataHistPO::getCrossId, tempCrossId); histQuery.eq(CrossDataHistPO::getCrossId, keyCrossId);
histQuery.ge(CrossDataHistPO::getStartTime, startOfDay); histQuery.ge(CrossDataHistPO::getStartTime, startOfDay);
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectList(histQuery); List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectList(histQuery);
if (!CollectionUtils.isEmpty(crossDataHistPOS)) { if (!CollectionUtils.isEmpty(crossDataHistPOS)) {
for (CrossDataHistPO crossDataHistPO : crossDataHistPOS) { for (CrossDataHistPO crossDataHistPO : crossDataHistPOS) {
Date crossStartTime = crossDataHistPO.getStartTime(); Date crossStartTime = crossDataHistPO.getStartTime();
String format = DateUtil.format(crossStartTime, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND); String format = DateUtil.format(crossStartTime, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND);
Date minuteDate = get5MinuteDate(format); Date minuteDate = get5MinuteDate(format);
Integer flow = crossDataHistPO.getFlow(); Integer flow = crossDataHistPO.getFlow();
GreenBeltKeyCrossFlowTimeVO resultVO = new GreenBeltKeyCrossFlowTimeVO(); GreenBeltKeyCrossFlowTimeVO resultVO = new GreenBeltKeyCrossFlowTimeVO();
resultVO.setStartTime(minuteDate); resultVO.setStartTime(minuteDate);
resultVO.setFlow(flow); resultVO.setFlow(flow);
resultVO.setGreenTimeRatio(0.0); resultVO.setGreenTimeRatio(0.0);
resultVO.setCrossId(tempCrossId); resultVO.setCrossId(keyCrossId);
resultVO.setDirName("未执行"); resultVO.setDirName(GreenBeltDirEnum.getDesc(keyGreenDir));
String crossName = baseCrossInfoCache.getCrossName(tempCrossId); String crossName = baseCrossInfoCache.getCrossName(keyCrossId);
resultVO.setCrossName(crossName); resultVO.setCrossName(crossName);
for (GreenBeltKeyCrossFlowTimeVO result : tempResult) { for (GreenBeltKeyCrossFlowTimeVO result : tempResult) {
if (StringUtils.equalsIgnoreCase(tempCrossId, result.getCrossId()) if (StringUtils.equalsIgnoreCase(keyCrossId, result.getCrossId())
&& minuteDate.getTime() == result.getStartTime().getTime()) { && minuteDate.getTime() == result.getStartTime().getTime()) {
resultVO.setFlow(flow); resultVO.setFlow(flow);
resultVO.setGreenTimeRatio(result.getGreenTimeRatio()); resultVO.setGreenTimeRatio(result.getGreenTimeRatio());
}
} }
results.add(resultVO);
} }
results.add(resultVO);
} }
} }
Map<String, List<GreenBeltKeyCrossFlowTimeVO>> map = results.stream().collect(Collectors.groupingBy(GreenBeltKeyCrossFlowTimeVO::getDirName)); Map<String, List<GreenBeltKeyCrossFlowTimeVO>> map = results.stream().collect(Collectors.groupingBy(GreenBeltKeyCrossFlowTimeVO::getDirName));
......
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