Commit c5b78da3 authored by duanruiming's avatar duanruiming

[add] 绿波绿信比流量优化

parent 9ebadf1a
......@@ -336,12 +336,12 @@ public class TrendServiceImpl implements TrendService {
double roundedTrafficIndex = Math.round(abnormalCrossListVO.getCongestionIndex() * 100.0) / 100.0;
abnormalCrossListVO.setCongestionIndex(roundedTrafficIndex);
Double congestionIndex = abnormalCrossListVO.getCongestionIndex();
double lastWeekIndex = getIndex(congestionIndex, crossId, batchTime - 604800);
double lastPeriodIndex = getIndex(congestionIndex, crossId, batchTime - 300);
abnormalCrossListVO.setLastWeekIndex(Math.floor(lastWeekIndex));
abnormalCrossListVO.setLastPeriodIndex(Math.floor(lastPeriodIndex));
// todo
//Double congestionIndex = abnormalCrossListVO.getCongestionIndex();
//double lastWeekIndex = getIndex(congestionIndex, crossId, batchTime - 604800);
//double lastPeriodIndex = getIndex(congestionIndex, crossId, batchTime - 300);
//abnormalCrossListVO.setLastWeekIndex(Math.floor(lastWeekIndex));
//abnormalCrossListVO.setLastPeriodIndex(Math.floor(lastPeriodIndex));
// 常发性偶发性 一个月内超过三次
int frequent = getFrequent(crossId, batchTime);
......
package net.wanji.opt.service.signalopt.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
......@@ -91,6 +92,7 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
Map<Integer, GreenwaveInfoPO> greenWaveMap = GreenWaveInfoCache.greenWaveMap;
GreenwaveInfoPO greenwaveInfoPO = greenWaveMap.get(greenId);
greenBeltCrossDetailVO.setGreenName(greenwaveInfoPO.getName());
greenBeltCrossDetailVO.setCrossNum(detailList.size());
}
return greenBeltCrossDetailVO;
......@@ -98,76 +100,83 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
@Override
public Map<String, List<GreenBeltKeyCrossFlowTimeVO>> greenBeltKeyCrossFlowTime(Integer greenId) throws Exception {
ObjectMapper mapper = JacksonUtils.getInstance();
DecimalFormat df = new DecimalFormat("#.00");
List<GreenBeltKeyCrossFlowTimeVO> tempResult = new ArrayList<>();
List<GreenBeltKeyCrossFlowTimeVO> results = new ArrayList<>();
LocalDate currentDate = LocalDate.now();
LocalTime startTime = LocalTime.MIDNIGHT;
LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime);
try {
ObjectMapper mapper = JacksonUtils.getInstance();
DecimalFormat df = new DecimalFormat("#0.00");
List<GreenBeltKeyCrossFlowTimeVO> tempResult = new ArrayList<>();
List<GreenBeltKeyCrossFlowTimeVO> results = new ArrayList<>();
LocalDate currentDate = LocalDate.now();
LocalDate localDate = currentDate.minusDays(1);
LocalTime startTime = LocalTime.MIDNIGHT;
LocalDateTime startOfDay = LocalDateTime.of(localDate, startTime);
// 绿波优化数据
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, startOfDay);
List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.selectList(queryWrapper);
// 随机路口编号,通过路口编号查询时间轴
String tempCrossId = "";
if (!CollectionUtils.isEmpty(entities)) {
for (StrategyGreenOptHistEntity entity : entities) {
GreenBeltKeyCrossFlowTimeVO vo = new GreenBeltKeyCrossFlowTimeVO();
String keyCross = entity.getKeyCross();
vo.setCrossId(keyCross);
vo.setDirName(entity.getDir());
Date controlTime = get5MinuteDate(entity.getControlTime());
vo.setStartTime(controlTime);
String crossGreenDetail = entity.getCrossGreenDetail();
Integer cycle = entity.getCycle();
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));
vo.setGreenTimeRatio(greenTimeRatio);
// 绿波优化数据
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, startOfDay);
List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.selectList(queryWrapper);
// 随机路口编号,通过路口编号查询时间轴
String tempCrossId = "";
if (!CollectionUtils.isEmpty(entities)) {
for (StrategyGreenOptHistEntity entity : entities) {
GreenBeltKeyCrossFlowTimeVO vo = new GreenBeltKeyCrossFlowTimeVO();
String keyCross = entity.getKeyCross();
vo.setCrossId(keyCross);
vo.setDirName(GreenBeltDirEnum.getDesc(entity.getDir()));
Date controlTime = get5MinuteDate(entity.getControlTime());
vo.setStartTime(controlTime);
String crossGreenDetail = entity.getCrossGreenDetail();
Integer cycle = entity.getCycle();
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));
vo.setGreenTimeRatio(greenTimeRatio);
}
}
tempResult.add(vo);
}
tempResult.add(vo);
}
// 关键路口历史数据
LambdaQueryWrapper<CrossDataHistPO> histQuery = new LambdaQueryWrapper<>();
histQuery.eq(CrossDataHistPO::getCrossId, tempCrossId);
histQuery.ge(CrossDataHistPO::getStartTime, startOfDay);
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectList(histQuery);
if (!CollectionUtils.isEmpty(crossDataHistPOS)) {
for (CrossDataHistPO crossDataHistPO : crossDataHistPOS) {
Date crossStartTime = crossDataHistPO.getStartTime();
String format = DateUtil.format(crossStartTime, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND);
Date minuteDate = get5MinuteDate(format);
Integer flow = crossDataHistPO.getFlow();
GreenBeltKeyCrossFlowTimeVO resultVO = new GreenBeltKeyCrossFlowTimeVO();
resultVO.setStartTime(minuteDate);
resultVO.setFlow(0);
resultVO.setGreenTimeRatio(0.0);
resultVO.setCrossId(tempCrossId);
for (GreenBeltKeyCrossFlowTimeVO result : tempResult) {
if (StringUtils.equalsIgnoreCase(tempCrossId, result.getCrossId())
&& minuteDate.getTime() == result.getStartTime().getTime()) {
resultVO.setFlow(flow);
resultVO.setGreenTimeRatio(result.getGreenTimeRatio());
// 关键路口历史数据
LambdaQueryWrapper<CrossDataHistPO> histQuery = new LambdaQueryWrapper<>();
histQuery.eq(CrossDataHistPO::getCrossId, tempCrossId);
histQuery.ge(CrossDataHistPO::getStartTime, startOfDay);
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectList(histQuery);
if (!CollectionUtils.isEmpty(crossDataHistPOS)) {
for (CrossDataHistPO crossDataHistPO : crossDataHistPOS) {
Date crossStartTime = crossDataHistPO.getStartTime();
String format = DateUtil.format(crossStartTime, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND);
Date minuteDate = get5MinuteDate(format);
Integer flow = crossDataHistPO.getFlow();
GreenBeltKeyCrossFlowTimeVO resultVO = new GreenBeltKeyCrossFlowTimeVO();
resultVO.setStartTime(minuteDate);
resultVO.setFlow(0);
resultVO.setGreenTimeRatio(0.0);
resultVO.setCrossId(tempCrossId);
resultVO.setDirName("未执行");
for (GreenBeltKeyCrossFlowTimeVO result : tempResult) {
if (StringUtils.equalsIgnoreCase(tempCrossId, result.getCrossId())
&& minuteDate.getTime() == result.getStartTime().getTime()) {
resultVO.setFlow(flow);
resultVO.setGreenTimeRatio(result.getGreenTimeRatio());
}
}
results.add(resultVO);
}
results.add(resultVO);
}
}
Map<String, List<GreenBeltKeyCrossFlowTimeVO>> map = results.stream().collect(Collectors.groupingBy(GreenBeltKeyCrossFlowTimeVO::getDirName));
return map;
} catch (Exception e) {
log.error("绿波关键路口流量绿信比查询异常:", e);
throw new RuntimeException(e);
}
Map<String, List<GreenBeltKeyCrossFlowTimeVO>> map = results.stream().collect(Collectors.groupingBy(GreenBeltKeyCrossFlowTimeVO::getDirName));
return map;
}
......
......@@ -17,6 +17,8 @@ import java.util.List;
public class GreenBeltCrossDetailVO {
@ApiModelProperty("干线名称")
private String greenName;
@ApiModelProperty("路口数量")
private Integer crossNum;
@JsonSerialize(using = Double2TwoDecimalPlacesSerializer.class)
@ApiModelProperty("干线指数")
private Double greenIndex;
......
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