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