Commit 2a5e6692 authored by duwei's avatar duwei

空放时长接口开发

parent c5aa8951
...@@ -49,7 +49,7 @@ public class RunningEvaluateController { ...@@ -49,7 +49,7 @@ public class RunningEvaluateController {
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
@ApiOperation(value = "路口评价", notes = "路口评价", response = JsonViewObject.class, @ApiOperation(value = "路口评价(拥堵、溢出、失衡、空放)", notes = "路口评价", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/crossEvaluate", @PostMapping(value = "/crossEvaluate",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
...@@ -100,6 +100,19 @@ public class RunningEvaluateController { ...@@ -100,6 +100,19 @@ public class RunningEvaluateController {
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
//TODO 空放指数
@ApiOperation(value = "空放情况", notes = "空放情况", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/emptyReleaseStatus",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = RunningEvaluateStatusVO.class),
})
public JsonViewObject emptyReleaseStatus(@RequestBody CrossIdAndStartEndDateBO bo) {
RunningEvaluateStatusVO res = runningEvaluateService.emptyReleaseStatus(bo);
return JsonViewObject.newInstance().success(res);
}
@ApiOperation(value = "方案问题", notes = "方案问题", response = JsonViewObject.class, @ApiOperation(value = "方案问题", notes = "方案问题", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/schemeProblems", @PostMapping(value = "/schemeProblems",
......
...@@ -21,6 +21,8 @@ public interface RunningEvaluateService { ...@@ -21,6 +21,8 @@ public interface RunningEvaluateService {
RunningEvaluateStatusVO spilloverStatus(CrossIdAndStartEndDateBO bo); RunningEvaluateStatusVO spilloverStatus(CrossIdAndStartEndDateBO bo);
RunningEvaluateStatusVO emptyReleaseStatus(CrossIdAndStartEndDateBO bo);
List<RunningEvaluateSchemeProblemsVO> schemeProblems(CrossIdAndStartEndDateBO bo); List<RunningEvaluateSchemeProblemsVO> schemeProblems(CrossIdAndStartEndDateBO bo);
RunningEvaluateMetricsDetailVO metricsDetail(MetricsDetailBO bo); RunningEvaluateMetricsDetailVO metricsDetail(MetricsDetailBO bo);
......
...@@ -168,7 +168,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -168,7 +168,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.filter(Objects::nonNull) .filter(Objects::nonNull)
.mapToInt(Integer::intValue) .mapToInt(Integer::intValue)
.sum(); .sum();
vo.setCongestionSum(congestionSum);//拥堵时长 vo.setCongestionSum(congestionSum/60);//拥堵时长, 产品在表中用秒,我改成分钟
List<CrossDataHistPO> unbalanceEventList = buildUnbalanceEvents(crossDataHistPOList); // 获取失衡事件集合 List<CrossDataHistPO> unbalanceEventList = buildUnbalanceEvents(crossDataHistPOList); // 获取失衡事件集合
vo.setUnbalanceTimes(unbalanceEventList.size());//失衡次数 vo.setUnbalanceTimes(unbalanceEventList.size());//失衡次数
...@@ -178,7 +178,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -178,7 +178,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.filter(Objects::nonNull) .filter(Objects::nonNull)
.mapToInt(Integer::intValue) .mapToInt(Integer::intValue)
.sum(); .sum();
vo.setUnbalanceSum(unbalanceSum);//失衡时长 vo.setUnbalanceSum(unbalanceSum/60);//失衡时长
List<CrossDataHistPO> spilloverEventList = buildSpilloverEvents(crossDataHistPOList); // 获取溢出事件集合 List<CrossDataHistPO> spilloverEventList = buildSpilloverEvents(crossDataHistPOList); // 获取溢出事件集合
vo.setSpilloverTimes(spilloverEventList.size());//溢出次数 vo.setSpilloverTimes(spilloverEventList.size());//溢出次数
...@@ -188,7 +188,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -188,7 +188,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.filter(Objects::nonNull) .filter(Objects::nonNull)
.mapToInt(Integer::intValue) .mapToInt(Integer::intValue)
.sum(); .sum();
vo.setSpilloverSum(spilloverSum);//溢出时长 vo.setSpilloverSum(spilloverSum/60);//溢出时长
// 相位空放指标 // 相位空放指标
Date startDate = bo.getStartDate(); Date startDate = bo.getStartDate();
...@@ -212,7 +212,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -212,7 +212,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.mapToInt(Integer::intValue) .mapToInt(Integer::intValue)
.sum(); .sum();
vo.setEmptyPhaseTimes(emptyPhaseCount); vo.setEmptyPhaseTimes(emptyPhaseCount);
vo.setEmptyPhaseSum(emptyPhaseSum); vo.setEmptyPhaseSum(emptyPhaseSum/60);//空放时长
Integer schemeProblems = calcSchemeProblems( Integer schemeProblems = calcSchemeProblems(
congestionEventList, unbalanceEventList, spilloverEventList, crossId); // 计算方案问题 congestionEventList, unbalanceEventList, spilloverEventList, crossId); // 计算方案问题
...@@ -238,6 +238,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -238,6 +238,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
} }
int startStamp = (int) (startDate.getTime() / 1000); // 10位时间戳 int startStamp = (int) (startDate.getTime() / 1000); // 10位时间戳
int endStamp = (int) (endDate.getTime() / 1000); int endStamp = (int) (endDate.getTime() / 1000);
List<CrossDataHistPO> crossDataHistPOList = crossDataHistMapper.selectByCrossIdAndStartEnd( List<CrossDataHistPO> crossDataHistPOList = crossDataHistMapper.selectByCrossIdAndStartEnd(
crossId, startStamp, endStamp); crossId, startStamp, endStamp);
return crossDataHistPOList; return crossDataHistPOList;
...@@ -267,6 +268,11 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -267,6 +268,11 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return evaluateStatus(bo, CrossStatusEnum.SPILLOVER); return evaluateStatus(bo, CrossStatusEnum.SPILLOVER);
} }
@Override
public RunningEvaluateStatusVO emptyReleaseStatus(CrossIdAndStartEndDateBO bo) {
return evaluateStatus(bo, CrossStatusEnum.EMPTY_RELEASE);
}
public RunningEvaluateStatusVO evaluateStatus(CrossIdAndStartEndDateBO bo, CrossStatusEnum statusEnum) { public RunningEvaluateStatusVO evaluateStatus(CrossIdAndStartEndDateBO bo, CrossStatusEnum statusEnum) {
RunningEvaluateStatusVO runningEvaluateStatusVO = new RunningEvaluateStatusVO(); RunningEvaluateStatusVO runningEvaluateStatusVO = new RunningEvaluateStatusVO();
String crossId = bo.getCrossId(); String crossId = bo.getCrossId();
...@@ -278,7 +284,10 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -278,7 +284,10 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
int startStamp = (int) (startDate.getTime() / 1000); // 10位时间戳 int startStamp = (int) (startDate.getTime() / 1000); // 10位时间戳
int endStamp = (int) (endDate.getTime() / 1000); int endStamp = (int) (endDate.getTime() / 1000);
runningEvaluateStatusVO.setRunningEvaluateIndexStatusVOList(buildRes(bo, crossId, status)); //查询路口统计表 t_cross_data_hist
List<RunningEvaluateIndexStatusVO> runningEvaluateIndexStatusVOS = buildRes(bo, crossId, status);
runningEvaluateStatusVO.setRunningEvaluateIndexStatusVOList(runningEvaluateIndexStatusVOS);
// 获取问题列表 // 获取问题列表
// 路口级别全量数据 // 路口级别全量数据
List<MetricHistDTO> crossDTOList = crossDataHistMapper.selectMetricHistDTO( List<MetricHistDTO> crossDTOList = crossDataHistMapper.selectMetricHistDTO(
...@@ -605,7 +614,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -605,7 +614,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
Integer duration1 = metricHistDTO.getDuration(); Integer duration1 = metricHistDTO.getDuration();
DateTime endTime = DateUtil.offsetMinute(startTime1, duration1); DateTime endTime = DateUtil.offsetMinute(startTime1, duration1);
problemStatus.setEndTime(endTime); problemStatus.setEndTime(endTime);
problemStatus.setDurationMinutes(duration1); problemStatus.setDurationMinutes(duration1/60);// 计算持续时间(分钟)
res.add(problemStatus); res.add(problemStatus);
} }
...@@ -861,6 +870,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -861,6 +870,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
vo.setTime(time); vo.setTime(time);
List<CrossDataHistPO> subList = timePOMap.get(time.substring(0, 2)); // 保留小时字符串 List<CrossDataHistPO> subList = timePOMap.get(time.substring(0, 2)); // 保留小时字符串
if (subList != null) { if (subList != null) {
//根据状态计算平均值(拥堵、溢出、失衡、空放)
Double avgCongestionIndex = calcAvgIndex(subList, status); Double avgCongestionIndex = calcAvgIndex(subList, status);
vo.setIndex(avgCongestionIndex); vo.setIndex(avgCongestionIndex);
} }
...@@ -888,6 +898,11 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -888,6 +898,11 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.mapToDouble(CrossDataHistPO::getSpilloverIndex) .mapToDouble(CrossDataHistPO::getSpilloverIndex)
.average() .average()
.orElse(0.0); .orElse(0.0);
}else if (status == CrossStatusEnum.EMPTY_RELEASE.getCode()) {
average = subList.stream()
.mapToDouble(CrossDataHistPO::getEmptyReleaseIndex)
.average()
.orElse(0.0);
} }
DecimalFormat df = new DecimalFormat("#.00"); DecimalFormat df = new DecimalFormat("#.00");
......
...@@ -12,7 +12,9 @@ public class RunningEvaluateIndexStatusVO { ...@@ -12,7 +12,9 @@ public class RunningEvaluateIndexStatusVO {
@ApiModelProperty(value = "时间") @ApiModelProperty(value = "时间")
private String time; private String time;
/**
* 各个指标的数值(拥堵,失衡,溢出,空放)
*/
@ApiModelProperty(value = "纵坐标数值") @ApiModelProperty(value = "纵坐标数值")
private Double index = 0.0; private Double index = 0.0;
......
...@@ -30,7 +30,7 @@ public class RunningEvaluateMetricsDetailVO { ...@@ -30,7 +30,7 @@ public class RunningEvaluateMetricsDetailVO {
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class ProblemStatus { public static class ProblemStatus {
@ApiModelProperty(value = "路口状态 0正常 1 失衡 2 拥堵 3 溢出") @ApiModelProperty(value = "路口状态 0正常 1 失衡 2 拥堵 3 溢出 4 空放")
private Integer status; private Integer status;
@ApiModelProperty(value = "开始时间") @ApiModelProperty(value = "开始时间")
......
...@@ -7,7 +7,8 @@ public enum CrossStatusEnum { ...@@ -7,7 +7,8 @@ public enum CrossStatusEnum {
UNBALANCE(1, "失衡"), UNBALANCE(1, "失衡"),
CONGESTION(2, "拥堵"), CONGESTION(2, "拥堵"),
SPILLOVER(3, "溢出"), SPILLOVER(3, "溢出"),
DEADLOCK(4, "死锁"); DEADLOCK(4, "死锁"),
EMPTY_RELEASE(5, "空放");
private Integer code; private Integer code;
private String name; private String name;
......
...@@ -61,6 +61,11 @@ public class CrossDataRealtimePO { ...@@ -61,6 +61,11 @@ public class CrossDataRealtimePO {
*/ */
@ApiModelProperty(value = "是否拥堵:0否;1是", notes = "") @ApiModelProperty(value = "是否拥堵:0否;1是", notes = "")
private Integer isCongestion; private Integer isCongestion;
/**
* 是否空放:0否;1是
*/
@ApiModelProperty(value = "是否空放:0否;1是", notes = "")
private Integer isEmptyRelease;
/** /**
* 失衡指数 * 失衡指数
*/ */
...@@ -76,6 +81,11 @@ public class CrossDataRealtimePO { ...@@ -76,6 +81,11 @@ public class CrossDataRealtimePO {
*/ */
@ApiModelProperty(value = "拥堵指数", notes = "") @ApiModelProperty(value = "拥堵指数", notes = "")
private Double congestionIndex; private Double congestionIndex;
/**
* 空放指数
*/
@ApiModelProperty(value = "空放指数", notes = "")
private Double emptyReleaseIndex;
/** /**
* 路口失衡方向:1,2,3... * 路口失衡方向:1,2,3...
*/ */
......
...@@ -48,8 +48,8 @@ ...@@ -48,8 +48,8 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
cross_id, status, type, traffic_index, start_time, end_time, duration, is_unbalance, is_spillover, is_congestion, cross_id, status, type, traffic_index, start_time, end_time, duration, is_unbalance, is_spillover, is_congestion,is_emptyrelease,
unbalance_index, spillover_index, congestion_index, unbalance_dirs, spillover_dirs, congestion_dirs, unbalance_index, spillover_index, congestion_index,emptyrelease_index, unbalance_dirs, spillover_dirs, congestion_dirs,
flow, flow_rate, speed, queue_length, stop_times, delay_time, sturation, batch_time, gmt_create, gmt_modified, flow, flow_rate, speed, queue_length, stop_times, delay_time, sturation, batch_time, gmt_create, gmt_modified,
clear_rate,load_balance,not_clear_car_nums,green_light_efficiency,effusion_rate, clear_rate,load_balance,not_clear_car_nums,green_light_efficiency,effusion_rate,
no_stop_rate,one_stop_rate,two_stop_rate,three_stop_rate,non_motor_flow,v_85, no_stop_rate,one_stop_rate,two_stop_rate,three_stop_rate,non_motor_flow,v_85,
......
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