Commit b0526758 authored by hanbing's avatar hanbing

[add] 新信号评价-运行评价-详细指标查询-状态、方案信息

parent cd882d04
...@@ -22,8 +22,8 @@ public class MetricsDetailBO { ...@@ -22,8 +22,8 @@ public class MetricsDetailBO {
private String turn; private String turn;
@ApiModelProperty(name = "车道序号,从左车道开始编号11、12、13...") @ApiModelProperty(name = "车道序号,从左车道开始编号11、12、13...")
private Integer laneSort; private Integer laneSort;
@ApiModelProperty(value = "日期,格式 M/d,如 7/17", required = true) @ApiModelProperty(value = "日期 yyyy-MM-dd", required = true)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "M/d", timezone = "GMT+8") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date date; private Date date;
@ApiModelProperty(value = "对比时间间隔(分钟)", required = true) @ApiModelProperty(value = "对比时间间隔(分钟)", required = true)
private Integer minutes; private Integer minutes;
......
...@@ -128,7 +128,7 @@ public class RunningEvaluateController { ...@@ -128,7 +128,7 @@ public class RunningEvaluateController {
@ApiResponse(code = 200, message = "OK", response = RunningEvaluateMetricsDetailVO.class), @ApiResponse(code = 200, message = "OK", response = RunningEvaluateMetricsDetailVO.class),
}) })
public JsonViewObject schemeProblems(@RequestBody MetricsDetailBO bo) { public JsonViewObject schemeProblems(@RequestBody MetricsDetailBO bo) {
List<RunningEvaluateMetricsDetailVO> res = runningEvaluateService.metricsDetail(bo); RunningEvaluateMetricsDetailVO res = runningEvaluateService.metricsDetail(bo);
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
......
...@@ -22,7 +22,7 @@ public interface RunningEvaluateService { ...@@ -22,7 +22,7 @@ public interface RunningEvaluateService {
List<RunningEvaluateSchemeProblemsVO> schemeProblems(CrossIdAndStartEndDateBO bo); List<RunningEvaluateSchemeProblemsVO> schemeProblems(CrossIdAndStartEndDateBO bo);
List<RunningEvaluateMetricsDetailVO> metricsDetail(MetricsDetailBO bo); RunningEvaluateMetricsDetailVO metricsDetail(MetricsDetailBO bo);
RunningEvaluateScopeTreeVO scopeTree(CrossIdBO bo); RunningEvaluateScopeTreeVO scopeTree(CrossIdBO bo);
} }
package net.wanji.opt.service.impl; package net.wanji.opt.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -12,6 +13,7 @@ import net.wanji.databus.bo.CrossIdAndStartEndDateBO; ...@@ -12,6 +13,7 @@ import net.wanji.databus.bo.CrossIdAndStartEndDateBO;
import net.wanji.databus.bo.CrossIdBO; import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.*; import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.dto.RunningPlanDTO; import net.wanji.databus.dto.RunningPlanDTO;
import net.wanji.databus.po.*; import net.wanji.databus.po.*;
import net.wanji.databus.vo.RunningEvaluateCrossListVO; import net.wanji.databus.vo.RunningEvaluateCrossListVO;
...@@ -50,6 +52,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -50,6 +52,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
private final BaseCrossPlanMapper baseCrossPlanMapper; private final BaseCrossPlanMapper baseCrossPlanMapper;
private final BaseCrossSchedulesMapper baseCrossSchedulesMapper; private final BaseCrossSchedulesMapper baseCrossSchedulesMapper;
private final BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper; private final BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper;
private final CrossDirDataHistMapper crossDirDataHistMapper;
private final CrossTurnDataHistMapper crossTurnDataHistMapper;
private final CrossLaneDataHistMapper crossLaneDataHistMapper;
public RunningEvaluateServiceImpl(CrossDataRealtimeMapper crossDataRealtimeMapper, public RunningEvaluateServiceImpl(CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossDataHistMapper crossDataHistMapper, CrossDataHistMapper crossDataHistMapper,
...@@ -61,7 +66,10 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -61,7 +66,10 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
@Qualifier("baseCrossInfoMapper") BaseCrossInfoMapper baseCrossInfoMapper, @Qualifier("baseCrossInfoMapper") BaseCrossInfoMapper baseCrossInfoMapper,
@Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper, @Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper,
@Qualifier("baseCrossSchedulesMapper") BaseCrossSchedulesMapper baseCrossSchedulesMapper, @Qualifier("baseCrossSchedulesMapper") BaseCrossSchedulesMapper baseCrossSchedulesMapper,
@Qualifier("baseCrossSchedulesPlanMapper") BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper) { @Qualifier("baseCrossSchedulesPlanMapper") BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper,
CrossDirDataHistMapper crossDirDataHistMapper,
CrossTurnDataHistMapper crossTurnDataHistMapper,
CrossLaneDataHistMapper crossLaneDataHistMapper) {
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossDataHistMapper = crossDataHistMapper; this.crossDataHistMapper = crossDataHistMapper;
this.baseCrossSectionMapper = baseCrossSectionMapper; this.baseCrossSectionMapper = baseCrossSectionMapper;
...@@ -73,6 +81,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -73,6 +81,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
this.baseCrossPlanMapper = baseCrossPlanMapper; this.baseCrossPlanMapper = baseCrossPlanMapper;
this.baseCrossSchedulesMapper = baseCrossSchedulesMapper; this.baseCrossSchedulesMapper = baseCrossSchedulesMapper;
this.baseCrossSchedulesPlanMapper = baseCrossSchedulesPlanMapper; this.baseCrossSchedulesPlanMapper = baseCrossSchedulesPlanMapper;
this.crossDirDataHistMapper = crossDirDataHistMapper;
this.crossTurnDataHistMapper = crossTurnDataHistMapper;
this.crossLaneDataHistMapper = crossLaneDataHistMapper;
} }
@Override @Override
...@@ -209,8 +220,149 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -209,8 +220,149 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
} }
@Override @Override
public List<RunningEvaluateMetricsDetailVO> metricsDetail(MetricsDetailBO bo) { public RunningEvaluateMetricsDetailVO metricsDetail(MetricsDetailBO bo) {
return null; String crossId = bo.getCrossId();
Integer dir = bo.getDir();
String turn = bo.getTurn();
Integer laneSort = bo.getLaneSort();
// 构造某一天开始和结束时间戳
Date date = bo.getDate();
Date startDate = date;
Date endDate = DateUtil.offsetDay(date, 1); // 包含最后一天
int startStamp = (int) (startDate.getTime() / 1000); // 10位时间戳
int endStamp = (int) (endDate.getTime() / 1000);
Integer minutes = bo.getMinutes();
List<MetricHistDTO> metricHistDTOList = new ArrayList<>();
if (ObjectUtil.isNotEmpty(laneSort)) {
metricHistDTOList = crossLaneDataHistMapper.selectMetricHistDTO(
crossId, startStamp, endStamp);
} else if (ObjectUtil.isNotEmpty(turn)) {
metricHistDTOList = crossTurnDataHistMapper.selectMetricHistDTO(
crossId, startStamp, endStamp);
} else if (ObjectUtil.isNotEmpty(dir)) {
metricHistDTOList = crossDirDataHistMapper.selectMetricHistDTO(
crossId, startStamp, endStamp);
} else { // 路口级别
metricHistDTOList = crossDataHistMapper.selectMetricHistDTO(
crossId, startStamp, endStamp);
}
RunningEvaluateMetricsDetailVO res = new RunningEvaluateMetricsDetailVO();
if (CollectionUtil.isEmpty(metricHistDTOList)) {
return res;
}
res.setProblemStatusList(buildProblemStatusList(metricHistDTOList));
res.setSchemeList(buildSchemeList(metricHistDTOList, crossId));
// res.setMetricsList(buildMetricsList(metricHistDTOList, minutes));
return res;
}
private List<RunningEvaluateMetricsDetailVO.ProblemScheme> buildSchemeList(
List<MetricHistDTO> metricHistDTOList, String crossId) {
List<RunningEvaluateMetricsDetailVO.ProblemScheme> res = new ArrayList<>();
// 验证数据是否正确
if (!isDataValid(metricHistDTOList)) {
return res;
}
// 根据持续时长去重
List<MetricHistDTO> uniqueList = metricHistDTOList.stream()
.collect(Collectors.groupingBy(
MetricHistDTO::getStartTime, // 按startTime分组
Collectors.collectingAndThen(
// 在每个组中找到duration最大的元素
Collectors.maxBy(Comparator.comparingLong(MetricHistDTO::getDuration)),
Optional::get // 从Optional中获取元素
)
))
.values().stream().collect(Collectors.toList()); // 从Map中获取值并收集到新的列表中
for (MetricHistDTO dto : uniqueList) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date abnormalEventStartTime = dto.getStartTime();
Integer duration = dto.getDuration();
Date abnormalEventEndTime = DateUtil.offsetMinute(abnormalEventStartTime, duration);
String eventStartTime = sdf.format(abnormalEventStartTime);
String eventEndTime = sdf.format(abnormalEventEndTime);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date datetime = new Date();
String dateStr = sdf2.format(datetime);
// 获取当前计划ID
Integer planId = findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
for (CrossSectionPO crossSectionPO : crossSectionPOList) {
String sectionStartTime = crossSectionPO.getStartTime();
String sectionEndTime = crossSectionPO.getEndTime();
// 比较两组时间段是否相交
boolean isIntersecting = isTimeIntersecting(
eventStartTime, eventEndTime, sectionStartTime, sectionEndTime);
if (isIntersecting) {
Integer schemeId = crossSectionPO.getSchemeId();
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectById(schemeId);
String schemeName = baseCrossSchemePO.getName();
RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme =
new RunningEvaluateMetricsDetailVO.ProblemScheme();
problemScheme.setSchemeName(schemeName);
problemScheme.setStartTime(sectionStartTime);
problemScheme.setEndTime(sectionEndTime);
res.add(problemScheme);
}
}
}
// 去除相同方案
List<RunningEvaluateMetricsDetailVO.ProblemScheme> uniqueRes = res.stream()
.distinct()
.collect(Collectors.toList());
return uniqueRes;
}
private List<RunningEvaluateMetricsDetailVO.ProblemStatus> buildProblemStatusList(
List<MetricHistDTO> metricHistDTOList) {
List<RunningEvaluateMetricsDetailVO.ProblemStatus> res = new ArrayList<>();
// 验证数据是否正确
if (!isDataValid(metricHistDTOList)) {
return res;
}
// 根据持续时长去重
List<MetricHistDTO> uniqueList = metricHistDTOList.stream()
.collect(Collectors.groupingBy(
MetricHistDTO::getStartTime, // 按startTime分组
Collectors.collectingAndThen(
// 在每个组中找到duration最大的元素
Collectors.maxBy(Comparator.comparingLong(MetricHistDTO::getDuration)),
Optional::get // 从Optional中获取元素
)
))
.values().stream().collect(Collectors.toList()); // 从Map中获取值并收集到新的列表中
for (MetricHistDTO metricHistDTO : uniqueList) {
RunningEvaluateMetricsDetailVO.ProblemStatus problemStatus =
new RunningEvaluateMetricsDetailVO.ProblemStatus();
Integer status1 = metricHistDTO.getStatus();
problemStatus.setStatus(status1);
Date startTime1 = metricHistDTO.getStartTime();
problemStatus.setStartTime(startTime1);
Integer duration1 = metricHistDTO.getDuration();
DateTime endTime = DateUtil.offsetMinute(startTime1, duration1);
problemStatus.setEndTime(endTime);
problemStatus.setDurationMinutes(duration1);
res.add(problemStatus);
}
return res;
}
private boolean isDataValid(List<MetricHistDTO> metricHistDTOList) {
MetricHistDTO dto = metricHistDTOList.get(0);
Integer status = dto.getStatus();
Date startTime = dto.getStartTime();
Integer duration = dto.getDuration();
if (ObjectUtil.isEmpty(startTime) || ObjectUtil.isEmpty(duration) || ObjectUtil.isEmpty(status)) {
return false;
}
return true;
} }
@Override @Override
......
...@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; ...@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -21,14 +22,14 @@ public class RunningEvaluateMetricsDetailVO { ...@@ -21,14 +22,14 @@ public class RunningEvaluateMetricsDetailVO {
private List<ProblemStatus> problemStatusList; private List<ProblemStatus> problemStatusList;
@ApiModelProperty(value = "问题方案列表") @ApiModelProperty(value = "问题方案列表")
private List<ProblemScheme> schemeList; private List<ProblemScheme> schemeList;
// @ApiModelProperty(value = "指标列表") @ApiModelProperty(value = "指标列表")
// private List<CrossMetrics> metricsList; private List<CrossMetrics> metricsList;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class ProblemStatus { public static class ProblemStatus {
@ApiModelProperty(name = "路口状态 0正常 1 失衡 2 拥堵 3 溢出") @ApiModelProperty(value = "路口状态 0正常 1 失衡 2 拥堵 3 溢出")
private String status; private Integer status;
@ApiModelProperty(value = "开始时间") @ApiModelProperty(value = "开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
...@@ -46,15 +47,53 @@ public class RunningEvaluateMetricsDetailVO { ...@@ -46,15 +47,53 @@ public class RunningEvaluateMetricsDetailVO {
@Data @Data
public static class ProblemScheme { public static class ProblemScheme {
@ApiModelProperty(value = "方案名称") @ApiModelProperty(value = "方案名称")
private String patternName; private String schemeName;
@ApiModelProperty(value = "开始时间") @ApiModelProperty(value = "开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8") private String startTime;
private Date startTime;
@ApiModelProperty(value = "结束时间") @ApiModelProperty(value = "结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8") private String endTime;
private Date endTime;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ProblemScheme that = (ProblemScheme) o;
return Objects.equals(schemeName, that.schemeName) &&
Objects.equals(startTime, that.startTime) &&
Objects.equals(endTime, that.endTime);
} }
@Override
public int hashCode() {
return Objects.hash(schemeName, startTime, endTime);
}
}
@NoArgsConstructor
@Data
public static class CrossMetrics {
@ApiModelProperty(value = "时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
private Date metricTime;
@ApiModelProperty(value = "流量")
private Integer flow;
@ApiModelProperty(value = "平均速度(km/h)")
private Double speed;
@ApiModelProperty(value = "通行能力")
private Integer capacity;
@ApiModelProperty(value = "饱和度")
private Double sturation;
@ApiModelProperty(value = "平均停车次数")
private Double stopNumber;
@ApiModelProperty(value = "平均延误(秒)")
private Integer delayTime ;
}
} }
...@@ -2,6 +2,7 @@ package net.wanji.databus.dao.mapper; ...@@ -2,6 +2,7 @@ package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.po.CrossDataHistPO; import net.wanji.databus.po.CrossDataHistPO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -21,4 +22,6 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> { ...@@ -21,4 +22,6 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
List<CrossDataHistPO> selectByCrossIdAndTimestamp(String crossId, long preSeconds); List<CrossDataHistPO> selectByCrossIdAndTimestamp(String crossId, long preSeconds);
List<CrossDataHistPO> selectByCrossIdAndStartEnd(String crossId, int startStamp, int endStamp); List<CrossDataHistPO> selectByCrossIdAndStartEnd(String crossId, int startStamp, int endStamp);
List<MetricHistDTO> selectMetricHistDTO(String crossId, int startStamp, int endStamp);
} }
...@@ -2,6 +2,7 @@ package net.wanji.databus.dao.mapper; ...@@ -2,6 +2,7 @@ package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.bo.CrossDirDataHistAvgBO; import net.wanji.databus.bo.CrossDirDataHistAvgBO;
import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.po.CrossDirDataHistPO; import net.wanji.databus.po.CrossDirDataHistPO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -31,4 +32,6 @@ public interface CrossDirDataHistMapper extends BaseMapper<CrossDirDataHistPO> { ...@@ -31,4 +32,6 @@ public interface CrossDirDataHistMapper extends BaseMapper<CrossDirDataHistPO> {
List<CrossDirDataHistPO> selectNoParkEnd(String crossId, Integer dir, long currentSeconds, long preSeconds); List<CrossDirDataHistPO> selectNoParkEnd(String crossId, Integer dir, long currentSeconds, long preSeconds);
List<CrossDirDataHistPO> selectPhaseQueueEnd(String crossId, Integer dir, long currentSeconds, long preSeconds); List<CrossDirDataHistPO> selectPhaseQueueEnd(String crossId, Integer dir, long currentSeconds, long preSeconds);
List<MetricHistDTO> selectMetricHistDTO(String crossId, int startStamp, int endStamp);
} }
package net.wanji.databus.dao.mapper; package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.po.CrossLaneDataHistPO; import net.wanji.databus.po.CrossLaneDataHistPO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -16,5 +17,5 @@ import java.util.List; ...@@ -16,5 +17,5 @@ import java.util.List;
public interface CrossLaneDataHistMapper extends BaseMapper<CrossLaneDataHistPO> { public interface CrossLaneDataHistMapper extends BaseMapper<CrossLaneDataHistPO> {
void insertBatch(@Param("list") List<CrossLaneDataHistPO> list); void insertBatch(@Param("list") List<CrossLaneDataHistPO> list);
void deleteBatch(@Param("list") Collection<String> crossIds); void deleteBatch(@Param("list") Collection<String> crossIds);
List<MetricHistDTO> selectMetricHistDTO(String crossId, int startStamp, int endStamp);
} }
package net.wanji.databus.dao.mapper; package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.po.CrossTurnDataHistPO; import net.wanji.databus.po.CrossTurnDataHistPO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -20,4 +21,6 @@ public interface CrossTurnDataHistMapper extends BaseMapper<CrossTurnDataHistPO> ...@@ -20,4 +21,6 @@ public interface CrossTurnDataHistMapper extends BaseMapper<CrossTurnDataHistPO>
CrossTurnDataHistPO selectNoPark(String crossId, Integer dir, String turn, long currentSeconds, long preSeconds); CrossTurnDataHistPO selectNoPark(String crossId, Integer dir, String turn, long currentSeconds, long preSeconds);
List<CrossTurnDataHistPO> selectByCrossId(String crossId, long currentSeconds, long preSeconds); List<CrossTurnDataHistPO> selectByCrossId(String crossId, long currentSeconds, long preSeconds);
List<MetricHistDTO> selectMetricHistDTO(String crossId, int startStamp, int endStamp);
} }
package net.wanji.databus.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@NoArgsConstructor
@Data
public class MetricHistDTO {
@ApiModelProperty(value = "状态:0正常;1失衡;2拥堵;3溢出;4死锁", notes = "")
private Integer status;
@ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss", notes = "")
private Date startTime;
@ApiModelProperty(value = "持续时间(单位:分钟)", notes = "")
private Integer duration;
@ApiModelProperty(value = "交通流量(辆)", notes = "")
private Integer flow;
@ApiModelProperty(value = "平均速度(km/h)", notes = "")
private Double speed;
@ApiModelProperty(value = "通行能力")
private Integer capacity;
@ApiModelProperty(value = "饱和度", notes = "")
private Double sturation;
@ApiModelProperty(value = "停车次数(次)", notes = "")
private Double stopTimes;
@ApiModelProperty(value = "延误时间(秒)", notes = "")
private Integer delayTime;
@ApiModelProperty(value = "采集时间(10位时间戳)", notes = "")
private Integer batchTime;
}
...@@ -74,4 +74,14 @@ ...@@ -74,4 +74,14 @@
and batch_time <![CDATA[ <= ]]> #{endStamp} and batch_time <![CDATA[ <= ]]> #{endStamp}
order by batch_time order by batch_time
</select> </select>
<select id="selectMetricHistDTO" resultType="net.wanji.databus.dto.MetricHistDTO">
select status, start_time, duration, flow, speed, sturation, stop_times, delay_time, batch_time
from t_cross_data_hist
where cross_id = #{crossId} and status != 0
and batch_time <![CDATA[ >= ]]> #{startStamp}
and batch_time <![CDATA[ <= ]]> #{endStamp}
order by batch_time
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -106,4 +106,14 @@ ...@@ -106,4 +106,14 @@
and batch_time <![CDATA[ <= ]]> #{currentSeconds} and batch_time <![CDATA[ <= ]]> #{currentSeconds}
and batch_time <![CDATA[ >= ]]> #{preSeconds} and batch_time <![CDATA[ >= ]]> #{preSeconds}
</select> </select>
<select id="selectMetricHistDTO" resultType="net.wanji.databus.dto.MetricHistDTO">
select status, start_time, duration, flow, speed, sturation, capacity, stop_times, delay_time, batch_time
from t_cross_dir_data_hist
where cross_id = #{crossId} and status != 0
and batch_time <![CDATA[ >= ]]> #{startStamp}
and batch_time <![CDATA[ <= ]]> #{endStamp}
order by batch_time
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -44,4 +44,13 @@ ...@@ -44,4 +44,13 @@
(#{crossId}) (#{crossId})
</foreach> </foreach>
</delete> </delete>
<select id="selectMetricHistDTO" resultType="net.wanji.databus.dto.MetricHistDTO">
select flow, speed, sturation, capacity, stop_times, delay_time, batch_time
from t_lane_data_hist
where cross_id = #{crossId}
and batch_time <![CDATA[ >= ]]> #{startStamp}
and batch_time <![CDATA[ <= ]]> #{endStamp}
order by batch_time
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -66,4 +66,13 @@ ...@@ -66,4 +66,13 @@
and batch_time <![CDATA[ >= ]]> #{preSeconds} and batch_time <![CDATA[ >= ]]> #{preSeconds}
</select> </select>
<select id="selectMetricHistDTO" resultType="net.wanji.databus.dto.MetricHistDTO">
select status, flow, speed, sturation, stop_times, delay_time, batch_time
from t_cross_turn_data_hist
where cross_id = #{crossId} and status != 0
and batch_time <![CDATA[ >= ]]> #{startStamp}
and batch_time <![CDATA[ <= ]]> #{endStamp}
order by batch_time
</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