Commit ab70db29 authored by hanbing's avatar hanbing

[update] 绿波时距图速度取平均

parent e5184a14
package net.wanji.opt.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel(value = "GreenwaveDetailBO", description = "绿波详情")
public class GreenwaveDetailBO {
@ApiModelProperty(value = "绿波名称")
private String greenwaveName;
@ApiModelProperty(value = "开始日期 yyyy/MM/dd")
private String startDate;
@ApiModelProperty(value = "结束日期 yyyy/MM/dd")
private String endDate;
}
...@@ -6,10 +6,7 @@ import io.swagger.annotations.ApiResponse; ...@@ -6,10 +6,7 @@ import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.databus.bo.CrossIdBO; import net.wanji.databus.bo.CrossIdBO;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.bo.GreenwaveIdAndTimeStampBO; import net.wanji.opt.bo.*;
import net.wanji.opt.bo.GreenwaveIdBO;
import net.wanji.opt.bo.GreenwaveNameBO;
import net.wanji.opt.bo.SaveGreenwaveStrategyBO;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO; import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.EventAlarmDTO; import net.wanji.opt.dto.trend.EventAlarmDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO; import net.wanji.opt.dto.trend.GreenwaveListDTO;
...@@ -74,7 +71,7 @@ public class TrendController { ...@@ -74,7 +71,7 @@ public class TrendController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenwaveDetailVO.class), @ApiResponse(code = 200, message = "OK", response = GreenwaveDetailVO.class),
}) })
public JsonViewObject greenwaveDetail(@RequestBody GreenwaveNameBO bo) { public JsonViewObject greenwaveDetail(@RequestBody GreenwaveDetailBO bo) {
GreenwaveDetailVO res = trendService.greenwaveDetail(bo); GreenwaveDetailVO res = trendService.greenwaveDetail(bo);
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
......
package net.wanji.opt.service; package net.wanji.opt.service;
import net.wanji.databus.bo.CrossIdBO; import net.wanji.databus.bo.CrossIdBO;
import net.wanji.opt.bo.GreenwaveIdAndTimeStampBO; import net.wanji.opt.bo.*;
import net.wanji.opt.bo.GreenwaveIdBO;
import net.wanji.opt.bo.GreenwaveNameBO;
import net.wanji.opt.bo.SaveGreenwaveStrategyBO;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO; import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO; import net.wanji.opt.dto.trend.GreenwaveListDTO;
import net.wanji.opt.vo.*; import net.wanji.opt.vo.*;
...@@ -33,7 +30,7 @@ public interface TrendService { ...@@ -33,7 +30,7 @@ public interface TrendService {
List<GreenwaveRunMonitorVO> greenwaveRunMonitor(GreenwaveIdBO greenwaveIdBO); List<GreenwaveRunMonitorVO> greenwaveRunMonitor(GreenwaveIdBO greenwaveIdBO);
GreenwaveDetailVO greenwaveDetail(GreenwaveNameBO greenwaveNameBO); GreenwaveDetailVO greenwaveDetail(GreenwaveDetailBO greenwaveDetailBO);
List<GreenwaveCrossMetricsVO> greenwaveCrossMetrics(GreenwaveIdAndTimeStampBO greenwaveIdAndTimeStampBO); List<GreenwaveCrossMetricsVO> greenwaveCrossMetrics(GreenwaveIdAndTimeStampBO greenwaveIdAndTimeStampBO);
......
...@@ -1710,6 +1710,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -1710,6 +1710,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
} }
} }
List<String> res = new ArrayList<>(); List<String> res = new ArrayList<>();
qualifiedSet.removeAll(notQualifiedSet); // 只要有一次不符合,则剔除
res.add("符合控制策略方案数 " + qualifiedSet.size() + "个"); res.add("符合控制策略方案数 " + qualifiedSet.size() + "个");
res.add("不符合控制策略方案数 " + notQualifiedSet.size() + "个"); res.add("不符合控制策略方案数 " + notQualifiedSet.size() + "个");
return res; return res;
......
...@@ -36,8 +36,6 @@ import java.math.BigDecimal; ...@@ -36,8 +36,6 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.regex.Matcher; import java.util.regex.Matcher;
...@@ -379,8 +377,11 @@ public class TrendServiceImpl implements TrendService { ...@@ -379,8 +377,11 @@ public class TrendServiceImpl implements TrendService {
} }
@Override @Override
public GreenwaveDetailVO greenwaveDetail(GreenwaveNameBO greenwaveNameBO) { public GreenwaveDetailVO greenwaveDetail(GreenwaveDetailBO greenwaveDetailBO) {
String greenwaveName = greenwaveNameBO.getGreenwaveName(); String greenwaveName = greenwaveDetailBO.getGreenwaveName();
String startDate = greenwaveDetailBO.getStartDate();
String endDate = greenwaveDetailBO.getEndDate();
LineSchemeDTO lineSchemeDTO = MainlineEvaluateServiceImpl.lineSchemeBuffer.get(greenwaveName); LineSchemeDTO lineSchemeDTO = MainlineEvaluateServiceImpl.lineSchemeBuffer.get(greenwaveName);
Integer greenwaveId = lineSchemeDTO.getGreenwaveId(); Integer greenwaveId = lineSchemeDTO.getGreenwaveId();
...@@ -419,7 +420,8 @@ public class TrendServiceImpl implements TrendService { ...@@ -419,7 +420,8 @@ public class TrendServiceImpl implements TrendService {
.collect(Collectors.toList()); .collect(Collectors.toList());
res.setStrategySelected(collect); res.setStrategySelected(collect);
// 绿波路口信息 // 绿波路口信息
List<GreenwaveDetailVO.GreenwaveCross> greenwaveCrossList = buildGreenwaveCrossList(greenwaveId, greenwaveName); List<GreenwaveDetailVO.GreenwaveCross> greenwaveCrossList = buildGreenwaveCrossList(
greenwaveId, greenwaveName, startDate, endDate);
res.setGreenwaveCrossList(greenwaveCrossList); res.setGreenwaveCrossList(greenwaveCrossList);
// 绿波带 // 绿波带
if (dir == 0) { // 正向 if (dir == 0) { // 正向
...@@ -584,7 +586,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -584,7 +586,7 @@ public class TrendServiceImpl implements TrendService {
return greenwavePoint; return greenwavePoint;
} }
private List<GreenwaveDetailVO.GreenwaveCross> buildGreenwaveCrossList(Integer greenwaveId, String greenwaveName) { private List<GreenwaveDetailVO.GreenwaveCross> buildGreenwaveCrossList(Integer greenwaveId, String greenwaveName, String startDate, String endDate) {
String[] split = greenwaveName.split(" "); // 旅游路 东向西 转山西路至霞景路路段:正向绿波 工作日 19:00-20:00 String[] split = greenwaveName.split(" "); // 旅游路 东向西 转山西路至霞景路路段:正向绿波 工作日 19:00-20:00
String s = split[4]; // 19:00-20:00 String s = split[4]; // 19:00-20:00
String[] split1 = s.split("-"); String[] split1 = s.split("-");
...@@ -637,18 +639,19 @@ public class TrendServiceImpl implements TrendService { ...@@ -637,18 +639,19 @@ public class TrendServiceImpl implements TrendService {
greenwaveCross.setCrossName(baseCrossInfoPO.getName()); greenwaveCross.setCrossName(baseCrossInfoPO.getName());
greenwaveCross.setIsKeyRoute(greenwaveCrossPO.getIsKeyRoute()); greenwaveCross.setIsKeyRoute(greenwaveCrossPO.getIsKeyRoute());
greenwaveCross.setSort(greenwaveCrossPO.getSort()); greenwaveCross.setSort(greenwaveCrossPO.getSort());
// 到下一个路口距离 // 到下一个路口距离和速度
Integer distanceToNextCross = null; Integer distanceToNextCross = null;
Double speed = null;
if (i < size - 1) { // 不是最后一个路口 if (i < size - 1) { // 不是最后一个路口
double nextCrossLen = greenwaveCrossPO.getNextCrossLen(); double nextCrossLen = greenwaveCrossPO.getNextCrossLen();
distanceToNextCross = (int)nextCrossLen; distanceToNextCross = (int)nextCrossLen;
GreenwaveCrossPO nextCrossPO = filteredList.get(i + 1);
String nextCrossId = nextCrossPO.getCrossId();
speed = calcSpeed(greenwaveCrossPO, nextCrossId, startTime, endTime, startDate, endDate);
} }
greenwaveCross.setDistanceToNextCross(distanceToNextCross); greenwaveCross.setDistanceToNextCross(distanceToNextCross);
// 平均速度
Double speed = calcSpeed(greenwaveCrossPO, crossId, startTime, endTime);
if (i != size - 1) {
greenwaveCross.setSpeed(speed); greenwaveCross.setSpeed(speed);
}
// 相位差 // 相位差
greenwaveCross.setOffset(greenwaveCrossPO.getOffset()); greenwaveCross.setOffset(greenwaveCrossPO.getOffset());
...@@ -749,18 +752,18 @@ public class TrendServiceImpl implements TrendService { ...@@ -749,18 +752,18 @@ public class TrendServiceImpl implements TrendService {
return i - 1; return i - 1;
} }
private Double calcSpeed(GreenwaveCrossPO greenwaveCrossPO, String currentCrossId, private Double calcSpeed(GreenwaveCrossPO greenwaveCrossPO, String crossId,
String startTime, String endTime) { String startTime, String endTime, String startDate, String endDate) {
Integer inDir = greenwaveCrossPO.getInDir(); Integer inDir = greenwaveCrossPO.getInDir();
LocalDate today = LocalDate.now(); if (ObjectUtil.isEmpty(startDate)) { // 查询实时数据
LocalDate yesterday = today.minusDays(1); CrossDirDataRealtimePO crossDirDataRealtimePO =
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); crossDirDataRealtimeMapper.selectByCrossIdAndDirType(crossId, inDir);
String formattedDate = yesterday.format(formatter); return crossDirDataRealtimePO.getSpeed();
} else { // 查询历史数据
List<CrossDirDataHistPO> crossDirDataHistPOList = crossDirDataHistMapper.selectByCrossDirAndTimeSection( List<CrossDirDataHistPO> crossDirDataHistPOList = crossDirDataHistMapper.selectByCrossDirAndTimeSection(
currentCrossId, inDir, formattedDate, formattedDate, startTime, endTime); crossId, inDir, startDate, endDate, startTime, endTime);
double v = crossDirDataHistPOList.stream() double v = crossDirDataHistPOList.stream()
.mapToDouble(CrossDirDataHistPO::getSpeed) .mapToDouble(CrossDirDataHistPO::getSpeed)
...@@ -768,6 +771,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -768,6 +771,7 @@ public class TrendServiceImpl implements TrendService {
BigDecimal formattedAverage = new BigDecimal(v).setScale(2, RoundingMode.HALF_UP); BigDecimal formattedAverage = new BigDecimal(v).setScale(2, RoundingMode.HALF_UP);
return formattedAverage.doubleValue(); return formattedAverage.doubleValue();
} }
}
@Override @Override
public List<GreenwaveCrossMetricsVO> greenwaveCrossMetrics(GreenwaveIdAndTimeStampBO greenwaveIdAndTimeStampBO) { public List<GreenwaveCrossMetricsVO> greenwaveCrossMetrics(GreenwaveIdAndTimeStampBO greenwaveIdAndTimeStampBO) {
...@@ -979,9 +983,9 @@ public class TrendServiceImpl implements TrendService { ...@@ -979,9 +983,9 @@ public class TrendServiceImpl implements TrendService {
throw new RuntimeException("无当天绿波历史数据"); throw new RuntimeException("无当天绿波历史数据");
} }
String lineSchemeName = matchingData.getName(); String lineSchemeName = matchingData.getName();
GreenwaveNameBO greenwaveNameBO = new GreenwaveNameBO(); GreenwaveDetailBO greenwaveDetailBO = new GreenwaveDetailBO();
greenwaveNameBO.setGreenwaveName(lineSchemeName); greenwaveDetailBO.setGreenwaveName(lineSchemeName);
GreenwaveDetailVO greenwaveDetailVO = greenwaveDetail(greenwaveNameBO); GreenwaveDetailVO greenwaveDetailVO = greenwaveDetail(greenwaveDetailBO);
return greenwaveDetailVO; return greenwaveDetailVO;
} }
......
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