Commit a1e76031 authored by hanbing's avatar hanbing

[update] 修改全息信号评价接口

parent ada82b8f
...@@ -2,7 +2,6 @@ package net.wanji.opt.service.impl; ...@@ -2,7 +2,6 @@ package net.wanji.opt.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -16,8 +15,6 @@ import net.wanji.databus.po.CrossDirDataRealtimePO; ...@@ -16,8 +15,6 @@ import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo; import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper; import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dto.CrossIdAndMinutesDTO; import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.dto.OptDataExtend;
import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.service.EvaluateService; import net.wanji.opt.service.EvaluateService;
import net.wanji.opt.vo.EvaluateCrossDetailVO; import net.wanji.opt.vo.EvaluateCrossDetailVO;
import net.wanji.opt.vo.EvaluateMetricsVO; import net.wanji.opt.vo.EvaluateMetricsVO;
...@@ -63,7 +60,6 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -63,7 +60,6 @@ public class EvaluateServiceImpl implements EvaluateService {
String crossName = crossInfoPO.getName(); String crossName = crossInfoPO.getName();
evaluateCrossDetailVO.setCrossName(crossName); evaluateCrossDetailVO.setCrossName(crossName);
fillOptData(evaluateCrossDetailVO, crossId);
Integer minutes = crossIdAndMinutesDTO.getMinutes(); Integer minutes = crossIdAndMinutesDTO.getMinutes();
fillRealtimeData(evaluateCrossDetailVO, crossId, minutes); fillRealtimeData(evaluateCrossDetailVO, crossId, minutes);
...@@ -245,47 +241,39 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -245,47 +241,39 @@ public class EvaluateServiceImpl implements EvaluateService {
private void fillRealtimeData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId, Integer minutes) { private void fillRealtimeData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId, Integer minutes) {
CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId(crossId); CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId(crossId);
evaluateCrossDetailVO.setSceneStartTime(crossDataRealtimePO.getStartTime());
evaluateCrossDetailVO.setDuration(crossDataRealtimePO.getDuration()); // 服务水平
// 计算服务水平
Double sturation = crossDataRealtimePO.getSturation(); Double sturation = crossDataRealtimePO.getSturation();
String serviceLevel = CrossUtil.getServiceLevel(sturation); String serviceLevel = CrossUtil.getServiceLevel(sturation);
evaluateCrossDetailVO.setServiceLevel(serviceLevel); evaluateCrossDetailVO.setServiceLevel(serviceLevel);
// 计算路口流量
// 获取当前时间之前某分钟的10位时间戳 // 路口流量
// 获取当前时间前 minutes 分钟的10位时间戳
long currentSeconds = DateUtil.currentSeconds(); long currentSeconds = DateUtil.currentSeconds();
// todo 测试用 固定当前时间为1676082800 long preSeconds = currentSeconds - (minutes + 5) * 60L;
currentSeconds = 1676082800;
long preSeconds = currentSeconds - minutes * 60;
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds); List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds);
if (CollectionUtil.isNotEmpty(crossDataHistPOS)) { if (CollectionUtil.isNotEmpty(crossDataHistPOS)) {
// 路口流量
double avg = crossDataHistPOS.stream() double avg = crossDataHistPOS.stream()
.mapToInt(CrossDataHistPO::getFlow) .mapToInt(CrossDataHistPO::getFlow)
.average().orElse(0.0); .average().orElse(0.0);
evaluateCrossDetailVO.setFlow((int)avg); evaluateCrossDetailVO.setFlow((int) Math.round(avg));
// 最大排队长度
double maxQueue = crossDataHistPOS.stream()
.mapToDouble(CrossDataHistPO::getQueueLength)
.max().orElse(0.0);
evaluateCrossDetailVO.setLength((int) Math.round(maxQueue));
// 路口平均延误
double avgDelay = crossDataHistPOS.stream()
.mapToInt(CrossDataHistPO::getDelayTime)
.average().orElse(0.0);
evaluateCrossDetailVO.setDelayTime((int) Math.round(avgDelay));
// 路口平均速度
double avgSpeed = crossDataHistPOS.stream()
.mapToDouble(CrossDataHistPO::getSpeed)
.average().orElse(0.0);
evaluateCrossDetailVO.setSpeed((int) Math.round(avgSpeed));
} }
evaluateCrossDetailVO.setLength(crossDataRealtimePO.getQueueLength());
evaluateCrossDetailVO.setStopTimes(crossDataRealtimePO.getStopTimes());
} }
private void fillOptData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId) {
// 选择数据批次时间最大的记录
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
if (CollectionUtil.isNotEmpty(maxList)) {
CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
// 解析dataExtend
String dataExtend = crossSchemeOptLogPO.getDataExtend();
OptDataExtend optDataExtend = gson.fromJson(dataExtend, OptDataExtend.class);
evaluateCrossDetailVO.setSceneName(optDataExtend.getSceneName());
evaluateCrossDetailVO.setStrategyName(optDataExtend.getStrategyName());
evaluateCrossDetailVO.setIdeaName(optDataExtend.getIdeaName());
evaluateCrossDetailVO.setOptStartTime(crossSchemeOptLogPO.getStartTime());
Date endTime = crossSchemeOptLogPO.getEndTime();
if (ObjectUtil.isEmpty(endTime)) {
evaluateCrossDetailVO.setOptStatus(2);
} else {
evaluateCrossDetailVO.setOptStatus(1);
}
}
}
} }
...@@ -18,30 +18,17 @@ import java.util.Date; ...@@ -18,30 +18,17 @@ import java.util.Date;
public class EvaluateCrossDetailVO { public class EvaluateCrossDetailVO {
@ApiModelProperty(value = "路口名称") @ApiModelProperty(value = "路口名称")
private String crossName; private String crossName;
@ApiModelProperty(value = "当前场景")
private String sceneName;
@ApiModelProperty(value = "优化策略")
private String strategyName;
@ApiModelProperty(value = "优化方法")
private String ideaName;
@ApiModelProperty(value = "场景开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd HH:mm", timezone = "GMT+8")
private Date sceneStartTime;
@ApiModelProperty(value = "持续时间(单位:分钟)")
private Integer duration;
@ApiModelProperty(value = "优化开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd HH:mm", timezone = "GMT+8")
private Date optStartTime;
@ApiModelProperty(value = "优化状态 1已完成 2持续优化")
Integer optStatus;
@ApiModelProperty(value = "服务水平") @ApiModelProperty(value = "服务水平")
String serviceLevel; String serviceLevel;
@ApiModelProperty(value = "路口流量") @ApiModelProperty(value = "路口流量")
private Integer flow ; private Integer flow ;
@ApiModelProperty(value = "排队长度")
private Double length; @ApiModelProperty(value = "最大排队长度")
@ApiModelProperty(value = "停车次数(次)") private Integer length;
private Double stopTimes; @ApiModelProperty(value = "路口平均延误")
private Integer delayTime;
@ApiModelProperty(value = "路口平均速度")
private Integer speed;
@ApiModelProperty(value = "轨迹开始时间") @ApiModelProperty(value = "轨迹开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
......
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