Commit 28daef5b authored by duanruiming's avatar duanruiming

[update] 态势监测-入参优化

parent 5c4624a2
...@@ -226,8 +226,8 @@ public class TrendController { ...@@ -226,8 +226,8 @@ public class TrendController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = List.class), @ApiResponse(code = 200, message = "OK", response = List.class),
}) })
public JsonViewObject hotspotCross(@RequestBody String crossId) throws Exception { public JsonViewObject hotspotCross(@RequestBody CommonCrossIdVO commonCrossIdVO) throws Exception {
List<HotspotCrossVO> hotspotCrossVOS = trendService.hotspotCross(crossId); List<HotspotCrossVO> hotspotCrossVOS = trendService.hotspotCross(commonCrossIdVO);
return JsonViewObject.newInstance().success(hotspotCrossVOS); return JsonViewObject.newInstance().success(hotspotCrossVOS);
} }
...@@ -238,8 +238,8 @@ public class TrendController { ...@@ -238,8 +238,8 @@ public class TrendController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = List.class), @ApiResponse(code = 200, message = "OK", response = List.class),
}) })
public JsonViewObject crossTurnData(@RequestBody String crossId) throws Exception { public JsonViewObject crossTurnData(@RequestBody CommonCrossIdVO commonCrossIdVO) throws Exception {
List<HotspotCrossTurnVO> hotspotCrossVOS = trendService.crossTurnData(crossId); List<HotspotCrossTurnVO> hotspotCrossVOS = trendService.crossTurnData(commonCrossIdVO);
return JsonViewObject.newInstance().success(hotspotCrossVOS); return JsonViewObject.newInstance().success(hotspotCrossVOS);
} }
...@@ -250,8 +250,8 @@ public class TrendController { ...@@ -250,8 +250,8 @@ public class TrendController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = List.class), @ApiResponse(code = 200, message = "OK", response = List.class),
}) })
public JsonViewObject crossLaneData(@RequestBody String crossId) throws Exception { public JsonViewObject crossLaneData(@RequestBody CommonCrossIdVO commonCrossIdVO) throws Exception {
List<HotspotCrossLaneVO> hotspotCrossVOS = trendService.crossLaneData(crossId); List<HotspotCrossLaneVO> hotspotCrossVOS = trendService.crossLaneData(commonCrossIdVO);
return JsonViewObject.newInstance().success(hotspotCrossVOS); return JsonViewObject.newInstance().success(hotspotCrossVOS);
} }
...@@ -262,4 +262,16 @@ public class TrendController { ...@@ -262,4 +262,16 @@ public class TrendController {
List<RunningEvaluateMetricsDetailVO> hotspotCrossVOS = trendService.top5Flow(); List<RunningEvaluateMetricsDetailVO> hotspotCrossVOS = trendService.top5Flow();
return JsonViewObject.newInstance().success(hotspotCrossVOS); return JsonViewObject.newInstance().success(hotspotCrossVOS);
} }
@ApiOperation(value = "路口交通状态", notes = "路口交通状态时长比例", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/crossStatusTimeRate",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossStatusTimeRateVO.class),
})
public JsonViewObject crossStatusTimeRate(@RequestBody CommonCrossIdVO commonCrossIdVO) throws Exception {
CrossStatusTimeRateVO crossStatusTimeRateVO = trendService.crossStatusTimeRate(commonCrossIdVO);
return JsonViewObject.newInstance().success(crossStatusTimeRateVO);
}
} }
\ No newline at end of file
...@@ -47,11 +47,13 @@ public interface TrendService { ...@@ -47,11 +47,13 @@ public interface TrendService {
OptTypeVO optType(CrossIdBO crossIdBO); OptTypeVO optType(CrossIdBO crossIdBO);
List<HotspotCrossVO> hotspotCross(String crossId) throws Exception; List<HotspotCrossVO> hotspotCross(CommonCrossIdVO commonCrossIdVO) throws Exception;
List<HotspotCrossTurnVO> crossTurnData(String crossId) throws Exception; List<HotspotCrossTurnVO> crossTurnData(CommonCrossIdVO commonCrossIdVO) throws Exception;
List<HotspotCrossLaneVO> crossLaneData(String crossId) throws Exception; List<HotspotCrossLaneVO> crossLaneData(CommonCrossIdVO commonCrossIdVO) throws Exception;
List<RunningEvaluateMetricsDetailVO> top5Flow() throws Exception; List<RunningEvaluateMetricsDetailVO> top5Flow() throws Exception;
CrossStatusTimeRateVO crossStatusTimeRate(CommonCrossIdVO commonCrossIdVO) throws Exception;
} }
...@@ -1680,8 +1680,9 @@ public class TrendServiceImpl implements TrendService { ...@@ -1680,8 +1680,9 @@ public class TrendServiceImpl implements TrendService {
@Override @Override
public List<HotspotCrossVO> hotspotCross(String crossId) throws Exception { public List<HotspotCrossVO> hotspotCross(CommonCrossIdVO commonCrossIdVO) throws Exception {
try { try {
String crossId = commonCrossIdVO.getCrossId();
List<HotspotCrossVO> hotspotCrossVOS = new ArrayList<>(); List<HotspotCrossVO> hotspotCrossVOS = new ArrayList<>();
List<AbnormalCrossListVO> signalCrossRealTimeList = List<AbnormalCrossListVO> signalCrossRealTimeList =
crossDataRealtimeMapper.selectAbnormalCross(null, null, null); crossDataRealtimeMapper.selectAbnormalCross(null, null, null);
...@@ -1704,7 +1705,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -1704,7 +1705,7 @@ public class TrendServiceImpl implements TrendService {
histQuery.eq(CrossDirDataHistPO::getCrossId, abnormalCrossListVO.getId()) histQuery.eq(CrossDirDataHistPO::getCrossId, abnormalCrossListVO.getId())
.between(CrossDirDataHistPO::getBatchTime, abnormalCrossListVO.getBatchTime() - 3600, abnormalCrossListVO.getBatchTime()); .between(CrossDirDataHistPO::getBatchTime, abnormalCrossListVO.getBatchTime() - 3600, abnormalCrossListVO.getBatchTime());
List<CrossDirDataHistPO> histPOS = crossDirDataHistMapper.selectList(histQuery); List<CrossDirDataHistPO> histPOS = crossDirDataHistMapper.selectList(histQuery);
if (!CollectionUtils.isEmpty(histPOS) ) { if (!CollectionUtils.isEmpty(histPOS)) {
Map<Date, List<CrossDirDataHistPO>> map = histPOS.stream().collect(Collectors.groupingBy(CrossDirDataHistPO::getStartTime)); Map<Date, List<CrossDirDataHistPO>> map = histPOS.stream().collect(Collectors.groupingBy(CrossDirDataHistPO::getStartTime));
if (!map.isEmpty()) { if (!map.isEmpty()) {
for (Map.Entry<Date, List<CrossDirDataHistPO>> entry : map.entrySet()) { for (Map.Entry<Date, List<CrossDirDataHistPO>> entry : map.entrySet()) {
...@@ -1738,9 +1739,10 @@ public class TrendServiceImpl implements TrendService { ...@@ -1738,9 +1739,10 @@ public class TrendServiceImpl implements TrendService {
} }
@Override @Override
public List<HotspotCrossTurnVO> crossTurnData(String crossId) throws Exception { public List<HotspotCrossTurnVO> crossTurnData(CommonCrossIdVO commonCrossIdVO) throws Exception {
List<HotspotCrossTurnVO> results = new ArrayList<>(); List<HotspotCrossTurnVO> results = new ArrayList<>();
try { try {
String crossId = commonCrossIdVO.getCrossId();
Date date = new Date(1705456500000L); Date date = new Date(1705456500000L);
long dateTime = date.getTime() / 1000; long dateTime = date.getTime() / 1000;
LambdaQueryWrapper<CrossTurnDataHistPO> turnQuery = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CrossTurnDataHistPO> turnQuery = new LambdaQueryWrapper<>();
...@@ -1776,13 +1778,14 @@ public class TrendServiceImpl implements TrendService { ...@@ -1776,13 +1778,14 @@ public class TrendServiceImpl implements TrendService {
} }
@Override @Override
public List<HotspotCrossLaneVO> crossLaneData(String crossId) throws Exception { public List<HotspotCrossLaneVO> crossLaneData(CommonCrossIdVO commonCrossIdVO) throws Exception {
List<HotspotCrossLaneVO> results = new ArrayList<>(); List<HotspotCrossLaneVO> results = new ArrayList<>();
try { try {
String crossId = commonCrossIdVO.getCrossId();
Date date = new Date(1705456500000L); Date date = new Date(1705456500000L);
long dateTime = date.getTime() / 1000; long dateTime = date.getTime() / 1000;
List<CrossLaneDataHistPOExt> crossLaneDataHistPOS = List<CrossLaneDataHistPOExt> crossLaneDataHistPOS =
crossLaneDataHistMapper.selectByCrossIdAndTimeSpan(crossId, (int)(dateTime - 3600), (int)dateTime); crossLaneDataHistMapper.selectByCrossIdAndTimeSpan(crossId, (int) (dateTime - 3600), (int) dateTime);
if (!CollectionUtils.isEmpty(crossLaneDataHistPOS)) { if (!CollectionUtils.isEmpty(crossLaneDataHistPOS)) {
Map<Date, List<CrossLaneDataHistPOExt>> collect = crossLaneDataHistPOS.stream().collect(Collectors.groupingBy(CrossLaneDataHistPOExt::getStartTime)); Map<Date, List<CrossLaneDataHistPOExt>> collect = crossLaneDataHistPOS.stream().collect(Collectors.groupingBy(CrossLaneDataHistPOExt::getStartTime));
for (Map.Entry<Date, List<CrossLaneDataHistPOExt>> entry : collect.entrySet()) { for (Map.Entry<Date, List<CrossLaneDataHistPOExt>> entry : collect.entrySet()) {
...@@ -1847,4 +1850,53 @@ public class TrendServiceImpl implements TrendService { ...@@ -1847,4 +1850,53 @@ public class TrendServiceImpl implements TrendService {
} }
return hotspotCrossVOS; return hotspotCrossVOS;
} }
@Override
public CrossStatusTimeRateVO crossStatusTimeRate(CommonCrossIdVO commonCrossIdVO) throws Exception {
CrossStatusTimeRateVO crossStatusTimeRateVO = new CrossStatusTimeRateVO();
try {
String crossId = commonCrossIdVO.getCrossId();
Instant instant = Instant.ofEpochSecond(1705456500L);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("+8"));
// 00:00
LocalDateTime startOfDay = localDateTime.withHour(0).withMinute(0).withSecond(0);
int startBatchTime = Long.valueOf(Date.from(startOfDay.atZone(ZoneId.of("+8")).toInstant()).getTime() / 1000).intValue();
// 23:59
LocalDateTime endOfDay = startOfDay.plus(1, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS);
int endBatchTime = Long.valueOf(Date.from(endOfDay.atZone(ZoneId.of("+8")).toInstant()).getTime() / 1000).intValue();
List<CrossDataHistPO> crossDataHistPOS = crossDataHistMapper.selectByCrossIdAndStartEnd(crossId, startBatchTime, endBatchTime);
if (!CollectionUtils.isEmpty(crossDataHistPOS)) {
Map<Integer, List<CrossDataHistPO>> statusMap = crossDataHistPOS.stream().collect(Collectors.groupingBy(CrossDataHistPO::getStatus));
crossStatusTimeRateVO.setCrossId(crossId);
for (Map.Entry<Integer, List<CrossDataHistPO>> entry : statusMap.entrySet()) {
Integer status = entry.getKey();
List<CrossDataHistPO> value = entry.getValue();
float temp = value.size() / (float) crossDataHistPOS.size() * 100;
temp = temp < 1 ? 0 : temp;
int rate = Math.round(temp);
if (status == 0) {
crossStatusTimeRateVO.setUnblockedTimeRate(rate);
}
if (status == 1) {
crossStatusTimeRateVO.setUnbalanceTimeRate(rate);
}
if (status == 2) {
crossStatusTimeRateVO.setCongestionTimeRate(rate);
}
if (status == 3) {
crossStatusTimeRateVO.setSpilloverTimeRate(rate);
}
if (status == 5) {
crossStatusTimeRateVO.setPhaseEmptyTimeRate(rate);
}
}
}
} catch (Exception e) {
log.error("交通状态时间比例异常:", e);
throw new RuntimeException(e);
}
return crossStatusTimeRateVO;
}
} }
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author duanruiming
* @date 2024/05/08 15:06
*/
@Data
@NoArgsConstructor
@ApiModel(value = "CommonCrossIdVO")
public class CommonCrossIdVO {
@ApiModelProperty(value = "路口ID")
private String crossId;
}
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author duanruiming
* @date 2024/05/08 10:13
*/
@Data
@NoArgsConstructor
@ApiModel(value = "crossStatusTimeRateVO")
public class CrossStatusTimeRateVO {
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "溢出时长比例")
private int spilloverTimeRate;
@ApiModelProperty(value = "拥堵时长比例")
private int congestionTimeRate;
@ApiModelProperty(value = "失衡时长比例")
private int unbalanceTimeRate;
@ApiModelProperty(value = "相位空放时长比例")
private int phaseEmptyTimeRate;
@ApiModelProperty(value = "畅通时长比例")
private int unblockedTimeRate;
}
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