Commit f78ab402 authored by hanbing's avatar hanbing

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

parent 8758a221
...@@ -4,7 +4,6 @@ import io.swagger.annotations.Api; ...@@ -4,7 +4,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.CrossIdAndMinutesDTO; import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.service.EvaluateService; import net.wanji.opt.service.EvaluateService;
...@@ -40,8 +39,8 @@ public class EvaluateController { ...@@ -40,8 +39,8 @@ public class EvaluateController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = EvaluateCrossDetailVO.class), @ApiResponse(code = 200, message = "OK", response = EvaluateCrossDetailVO.class),
}) })
public JsonViewObject evaluateCrossDetail(@RequestBody CrossIdDTO crossIdDTO) { public JsonViewObject evaluateCrossDetail(@RequestBody CrossIdAndMinutesDTO crossIdAndMinutesDTO) {
EvaluateCrossDetailVO evaluateCrossDetailVO = evaluateService.evaluateCrossDetail(crossIdDTO); EvaluateCrossDetailVO evaluateCrossDetailVO = evaluateService.evaluateCrossDetail(crossIdAndMinutesDTO);
return JsonViewObject.newInstance().success(evaluateCrossDetailVO); return JsonViewObject.newInstance().success(evaluateCrossDetailVO);
} }
......
package net.wanji.opt.service; package net.wanji.opt.service;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.opt.dto.CrossIdAndMinutesDTO; import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.vo.EvaluateCrossDetailVO; import net.wanji.opt.vo.EvaluateCrossDetailVO;
import net.wanji.opt.vo.EvaluateMetricsVO; import net.wanji.opt.vo.EvaluateMetricsVO;
...@@ -12,7 +11,7 @@ import net.wanji.opt.vo.EvaluateMetricsVO; ...@@ -12,7 +11,7 @@ import net.wanji.opt.vo.EvaluateMetricsVO;
*/ */
public interface EvaluateService { public interface EvaluateService {
EvaluateCrossDetailVO evaluateCrossDetail(CrossIdDTO crossIdDTO); EvaluateCrossDetailVO evaluateCrossDetail(CrossIdAndMinutesDTO crossIdAndMinutesDTO);
EvaluateMetricsVO evaluateMetrics(CrossIdAndMinutesDTO crossIdAndMinutesDTO); EvaluateMetricsVO evaluateMetrics(CrossIdAndMinutesDTO crossIdAndMinutesDTO);
} }
...@@ -10,11 +10,15 @@ import lombok.extern.slf4j.Slf4j; ...@@ -10,11 +10,15 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity; 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.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO; 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.databus.vo.SchemeSendVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper; import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossPhaseMapper; import net.wanji.opt.dao.mapper.CrossPhaseMapper;
...@@ -40,7 +44,15 @@ import net.wanji.opt.vo.SchemeOptSendVO; ...@@ -40,7 +44,15 @@ import net.wanji.opt.vo.SchemeOptSendVO;
import net.wanji.opt.vo.SchemeOptVO; import net.wanji.opt.vo.SchemeOptVO;
import org.springframework.stereotype.Service; 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; import java.util.stream.Collectors;
/** /**
...@@ -118,7 +130,7 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -118,7 +130,7 @@ public class DiagnoServiceImpl implements DiagnoService {
// 关联路口坐标 // 关联路口坐标
String startCrossId = ridInfo.getStartCrossId(); String startCrossId = ridInfo.getStartCrossId();
crossIdAndLocationVO.setId(startCrossId); crossIdAndLocationVO.setId(startCrossId);
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(startCrossId); TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(startCrossId);
if (crossInfoPO != null) { if (crossInfoPO != null) {
crossIdAndLocationVO.setName(crossInfoPO.getName()); crossIdAndLocationVO.setName(crossInfoPO.getName());
String startLocationStr = crossInfoPO.getLocation(); String startLocationStr = crossInfoPO.getLocation();
...@@ -328,7 +340,7 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -328,7 +340,7 @@ public class DiagnoServiceImpl implements DiagnoService {
String crossId = crossIdAndDirDTO.getCrossId(); String crossId = crossIdAndDirDTO.getCrossId();
OptEffectVO optEffectVO = new OptEffectVO(); OptEffectVO optEffectVO = new OptEffectVO();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(crossId); TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
optEffectVO.setCrossName(crossInfoPO.getName()); optEffectVO.setCrossName(crossInfoPO.getName());
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId); List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
if (maxList != null) { if (maxList != null) {
......
...@@ -6,17 +6,18 @@ import cn.hutool.core.util.ObjectUtil; ...@@ -6,17 +6,18 @@ 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;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.enums.CrossInOutEnum; import net.wanji.common.enums.CrossInOutEnum;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.bo.CrossDirDataHistAvgBO; 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.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper; import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper; import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossInfoMapper; import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO; 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.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.dto.OptDataExtend;
...@@ -45,30 +46,33 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -45,30 +46,33 @@ public class EvaluateServiceImpl implements EvaluateService {
private final CrossDataRealtimeMapper crossDataRealtimeMapper; private final CrossDataRealtimeMapper crossDataRealtimeMapper;
private final CrossDirDataRealtimeMapper crossDirDataRealtimeMapper; private final CrossDirDataRealtimeMapper crossDirDataRealtimeMapper;
private final CrossDirDataHistMapper crossDirDataHistMapper; private final CrossDirDataHistMapper crossDirDataHistMapper;
private final CrossDataHistMapper crossDataHistMapper;
private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
public EvaluateServiceImpl(CrossInfoMapper crossInfoMapper, CrossSchemeOptLogMapper crossSchemeOptLogMapper, public EvaluateServiceImpl(CrossInfoMapper crossInfoMapper, CrossSchemeOptLogMapper crossSchemeOptLogMapper,
CrossDataRealtimeMapper crossDataRealtimeMapper, CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossDirDataRealtimeMapper crossDirDataRealtimeMapper, CrossDirDataRealtimeMapper crossDirDataRealtimeMapper,
CrossDirDataHistMapper crossDirDataHistMapper) { CrossDirDataHistMapper crossDirDataHistMapper, CrossDataHistMapper crossDataHistMapper) {
this.crossInfoMapper = crossInfoMapper; this.crossInfoMapper = crossInfoMapper;
this.crossSchemeOptLogMapper = crossSchemeOptLogMapper; this.crossSchemeOptLogMapper = crossSchemeOptLogMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossDirDataRealtimeMapper = crossDirDataRealtimeMapper; this.crossDirDataRealtimeMapper = crossDirDataRealtimeMapper;
this.crossDirDataHistMapper = crossDirDataHistMapper; this.crossDirDataHistMapper = crossDirDataHistMapper;
this.crossDataHistMapper = crossDataHistMapper;
} }
@Override @Override
public EvaluateCrossDetailVO evaluateCrossDetail(CrossIdDTO crossIdDTO) { public EvaluateCrossDetailVO evaluateCrossDetail(CrossIdAndMinutesDTO crossIdAndMinutesDTO) {
EvaluateCrossDetailVO evaluateCrossDetailVO = new EvaluateCrossDetailVO(); EvaluateCrossDetailVO evaluateCrossDetailVO = new EvaluateCrossDetailVO();
String crossId = crossIdDTO.getCrossId(); String crossId = crossIdAndMinutesDTO.getCrossId();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(crossId); TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
String crossName = crossInfoPO.getName(); String crossName = crossInfoPO.getName();
evaluateCrossDetailVO.setCrossName(crossName); evaluateCrossDetailVO.setCrossName(crossName);
fillOptData(evaluateCrossDetailVO, crossId); fillOptData(evaluateCrossDetailVO, crossId);
fillRealtimeData(evaluateCrossDetailVO, crossId); Integer minutes = crossIdAndMinutesDTO.getMinutes();
fillRealtimeData(evaluateCrossDetailVO, crossId, minutes);
return evaluateCrossDetailVO; return evaluateCrossDetailVO;
} }
...@@ -228,7 +232,7 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -228,7 +232,7 @@ public class EvaluateServiceImpl implements EvaluateService {
return dirObjMapRealtime; return dirObjMapRealtime;
} }
private void fillRealtimeData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId) { private void fillRealtimeData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId, Integer minutes) {
CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId(crossId); CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId(crossId);
evaluateCrossDetailVO.setSceneStartTime(crossDataRealtimePO.getStartTime()); evaluateCrossDetailVO.setSceneStartTime(crossDataRealtimePO.getStartTime());
evaluateCrossDetailVO.setDuration(crossDataRealtimePO.getDuration()); evaluateCrossDetailVO.setDuration(crossDataRealtimePO.getDuration());
...@@ -236,7 +240,19 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -236,7 +240,19 @@ public class EvaluateServiceImpl implements EvaluateService {
Double sturation = crossDataRealtimePO.getSturation(); Double sturation = crossDataRealtimePO.getSturation();
String serviceLevel = CrossUtil.getServiceLevel(sturation); String serviceLevel = CrossUtil.getServiceLevel(sturation);
evaluateCrossDetailVO.setServiceLevel(serviceLevel); 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.setLength(crossDataRealtimePO.getQueueLength());
evaluateCrossDetailVO.setStopTimes(crossDataRealtimePO.getStopTimes()); evaluateCrossDetailVO.setStopTimes(crossDataRealtimePO.getStopTimes());
} }
......
...@@ -14,6 +14,7 @@ import net.wanji.databus.po.CrossDataRealtimePO; ...@@ -14,6 +14,7 @@ import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO; import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossInfoPO; import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.CrossTurnDataRealtimePO; import net.wanji.databus.po.CrossTurnDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.vo.AbnormalCrossListVO; import net.wanji.databus.vo.AbnormalCrossListVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper; import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.trend.EventAlarmMapper; import net.wanji.opt.dao.mapper.trend.EventAlarmMapper;
...@@ -180,7 +181,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -180,7 +181,7 @@ public class TrendServiceImpl implements TrendService {
if (ridInfo != null) { if (ridInfo != null) {
// 关联路口坐标 // 关联路口坐标
String startCrossId = ridInfo.getStartCrossId(); String startCrossId = ridInfo.getStartCrossId();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(startCrossId); TBaseCrossInfo crossInfoPO = crossInfoMapper.selectByPrimaryKey(startCrossId);
if (crossInfoPO != null) { if (crossInfoPO != null) {
String startLocationStr = crossInfoPO.getLocation(); String startLocationStr = crossInfoPO.getLocation();
double[] startLonLat = CrossUtil.getLonLat(startLocationStr); double[] startLonLat = CrossUtil.getLonLat(startLocationStr);
......
...@@ -24,7 +24,7 @@ public interface CrossInfoMapper extends BaseMapper<TBaseCrossInfo> { ...@@ -24,7 +24,7 @@ public interface CrossInfoMapper extends BaseMapper<TBaseCrossInfo> {
*/ */
// List<CrossInfoPO> listCrossInfo(CrossQuery query); // List<CrossInfoPO> listCrossInfo(CrossQuery query);
List<CrossInfoPO> selectByCrossIds(List<String> crossIdList); List<CrossInfoPO> selectByCrossIds(List<String> ids);
CrossInfoPO selectById(String crossId); CrossInfoPO selectById(String crossId);
......
...@@ -248,4 +248,13 @@ ...@@ -248,4 +248,13 @@
where c.is_signal = 1 where c.is_signal = 1
and d.type = 1 and d.type = 1
</select> </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> </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