Commit f78ab402 authored by hanbing's avatar hanbing

[update] 信号评价,路口流量根据时长加总

parent 8758a221
......@@ -4,7 +4,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.service.EvaluateService;
......@@ -40,8 +39,8 @@ public class EvaluateController {
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = EvaluateCrossDetailVO.class),
})
public JsonViewObject evaluateCrossDetail(@RequestBody CrossIdDTO crossIdDTO) {
EvaluateCrossDetailVO evaluateCrossDetailVO = evaluateService.evaluateCrossDetail(crossIdDTO);
public JsonViewObject evaluateCrossDetail(@RequestBody CrossIdAndMinutesDTO crossIdAndMinutesDTO) {
EvaluateCrossDetailVO evaluateCrossDetailVO = evaluateService.evaluateCrossDetail(crossIdAndMinutesDTO);
return JsonViewObject.newInstance().success(evaluateCrossDetailVO);
}
......
package net.wanji.opt.service;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.vo.EvaluateCrossDetailVO;
import net.wanji.opt.vo.EvaluateMetricsVO;
......@@ -12,7 +11,7 @@ import net.wanji.opt.vo.EvaluateMetricsVO;
*/
public interface EvaluateService {
EvaluateCrossDetailVO evaluateCrossDetail(CrossIdDTO crossIdDTO);
EvaluateCrossDetailVO evaluateCrossDetail(CrossIdAndMinutesDTO crossIdAndMinutesDTO);
EvaluateMetricsVO evaluateMetrics(CrossIdAndMinutesDTO crossIdAndMinutesDTO);
}
......@@ -10,11 +10,15 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossPhaseMapper;
......@@ -40,7 +44,15 @@ import net.wanji.opt.vo.SchemeOptSendVO;
import net.wanji.opt.vo.SchemeOptVO;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
......@@ -118,7 +130,7 @@ public class DiagnoServiceImpl implements DiagnoService {
// 关联路口坐标
String startCrossId = ridInfo.getStartCrossId();
crossIdAndLocationVO.setId(startCrossId);
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(startCrossId);
TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(startCrossId);
if (crossInfoPO != null) {
crossIdAndLocationVO.setName(crossInfoPO.getName());
String startLocationStr = crossInfoPO.getLocation();
......@@ -328,7 +340,7 @@ public class DiagnoServiceImpl implements DiagnoService {
String crossId = crossIdAndDirDTO.getCrossId();
OptEffectVO optEffectVO = new OptEffectVO();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(crossId);
TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
optEffectVO.setCrossName(crossInfoPO.getName());
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
if (maxList != null) {
......
......@@ -6,17 +6,18 @@ import cn.hutool.core.util.ObjectUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.enums.CrossInOutEnum;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.bo.CrossDirDataHistAvgBO;
import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.dto.OptDataExtend;
......@@ -45,30 +46,33 @@ public class EvaluateServiceImpl implements EvaluateService {
private final CrossDataRealtimeMapper crossDataRealtimeMapper;
private final CrossDirDataRealtimeMapper crossDirDataRealtimeMapper;
private final CrossDirDataHistMapper crossDirDataHistMapper;
private final CrossDataHistMapper crossDataHistMapper;
private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
public EvaluateServiceImpl(CrossInfoMapper crossInfoMapper, CrossSchemeOptLogMapper crossSchemeOptLogMapper,
CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossDirDataRealtimeMapper crossDirDataRealtimeMapper,
CrossDirDataHistMapper crossDirDataHistMapper) {
CrossDirDataHistMapper crossDirDataHistMapper, CrossDataHistMapper crossDataHistMapper) {
this.crossInfoMapper = crossInfoMapper;
this.crossSchemeOptLogMapper = crossSchemeOptLogMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossDirDataRealtimeMapper = crossDirDataRealtimeMapper;
this.crossDirDataHistMapper = crossDirDataHistMapper;
this.crossDataHistMapper = crossDataHistMapper;
}
@Override
public EvaluateCrossDetailVO evaluateCrossDetail(CrossIdDTO crossIdDTO) {
public EvaluateCrossDetailVO evaluateCrossDetail(CrossIdAndMinutesDTO crossIdAndMinutesDTO) {
EvaluateCrossDetailVO evaluateCrossDetailVO = new EvaluateCrossDetailVO();
String crossId = crossIdDTO.getCrossId();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(crossId);
String crossId = crossIdAndMinutesDTO.getCrossId();
TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
String crossName = crossInfoPO.getName();
evaluateCrossDetailVO.setCrossName(crossName);
fillOptData(evaluateCrossDetailVO, crossId);
fillRealtimeData(evaluateCrossDetailVO, crossId);
Integer minutes = crossIdAndMinutesDTO.getMinutes();
fillRealtimeData(evaluateCrossDetailVO, crossId, minutes);
return evaluateCrossDetailVO;
}
......@@ -228,7 +232,7 @@ public class EvaluateServiceImpl implements EvaluateService {
return dirObjMapRealtime;
}
private void fillRealtimeData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId) {
private void fillRealtimeData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId, Integer minutes) {
CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId(crossId);
evaluateCrossDetailVO.setSceneStartTime(crossDataRealtimePO.getStartTime());
evaluateCrossDetailVO.setDuration(crossDataRealtimePO.getDuration());
......@@ -236,7 +240,19 @@ public class EvaluateServiceImpl implements EvaluateService {
Double sturation = crossDataRealtimePO.getSturation();
String serviceLevel = CrossUtil.getServiceLevel(sturation);
evaluateCrossDetailVO.setServiceLevel(serviceLevel);
evaluateCrossDetailVO.setFlow(crossDataRealtimePO.getFlow());
// 计算路口流量
// 获取当前时间之前某分钟的10位时间戳
long currentSeconds = DateUtil.currentSeconds();
// todo 测试用 固定当前时间为1676082800
currentSeconds = 1676082800;
long preSeconds = currentSeconds - minutes * 60;
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds);
if (CollectionUtil.isNotEmpty(crossDataHistPOS)) {
int sum = crossDataHistPOS.stream()
.mapToInt(CrossDataHistPO::getFlow)
.sum();
evaluateCrossDetailVO.setFlow(sum);
}
evaluateCrossDetailVO.setLength(crossDataRealtimePO.getQueueLength());
evaluateCrossDetailVO.setStopTimes(crossDataRealtimePO.getStopTimes());
}
......
......@@ -14,6 +14,7 @@ import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.CrossTurnDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.vo.AbnormalCrossListVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.trend.EventAlarmMapper;
......@@ -180,7 +181,7 @@ public class TrendServiceImpl implements TrendService {
if (ridInfo != null) {
// 关联路口坐标
String startCrossId = ridInfo.getStartCrossId();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(startCrossId);
TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(startCrossId);
if (crossInfoPO != null) {
String startLocationStr = crossInfoPO.getLocation();
double[] startLonLat = CrossUtil.getLonLat(startLocationStr);
......
......@@ -24,7 +24,7 @@ public interface CrossInfoMapper extends BaseMapper<TBaseCrossInfo> {
*/
// List<CrossInfoPO> listCrossInfo(CrossQuery query);
List<CrossInfoPO> selectByCrossIds(List<String> crossIdList);
List<CrossInfoPO> selectByCrossIds(List<String> ids);
CrossInfoPO selectById(String crossId);
......
......@@ -248,4 +248,13 @@
where c.is_signal = 1
and d.type = 1
</select>
<select id="selectByCrossIds" resultType="net.wanji.databus.po.CrossInfoPO">
select <include refid="baseColumn"/>
from t_base_cross_info
where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
</mapper>
\ No newline at end of file
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