Commit 2a5e6692 authored by duwei's avatar duwei

空放时长接口开发

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