Commit 0f4a62a6 authored by 黄伟铭's avatar 黄伟铭

新增干线平峰分析

parent a8a4aaf9
......@@ -15,6 +15,6 @@ public interface AnalysisGreenCongestionPeriodMapper {
List<laneDataHist> selectGreenTrafficThreshold(@Param("date") String date,@Param("greenId") String greenId,@Param("roadDirection") String roadDirection);
List<laneDataHist> selectCrossFlow(@Param("date") String date,@Param("crossId") String crossId,@Param("startTime") String startTime,@Param("endTime") String endTime);
void insertLaneDataHist(Map<String, Object> map);
List<laneDataHist> selectPeakDetail(@Param("date") String date);
List<AnalysisGreenCongestionPeriodVO> selectListByWeek(@Param("yearWeek") Integer yearWeek);
}
......@@ -29,4 +29,8 @@ public class laneDataHist {
private Integer flowHour;
@ApiModelProperty(value = "干线道路方向")
private String roadDirection;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "高峰类型")
private String peakType;
}
......@@ -525,7 +525,7 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
for (int i = 0; i < 7; i++) {
LocalDate date = todayOfWeek.plusDays(i);
//获取干线数据
List<laneDataHist> laneList = analysisGreenCongestionPeriodMapper.selectGreenTrafficHist(date.toString().replaceAll("-",""));
List<laneDataHist> laneList = analysisGreenCongestionPeriodMapper.selectGreenTrafficHist(date.toString());
LinkedList<laneDataHist> queue = new LinkedList<>();
LinkedList<laneDataHist> queueCorss = new LinkedList<>();
List<laneDataHist> list = new ArrayList<>();
......@@ -628,9 +628,269 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
enqueue(queue,temp);
}
}
queue.clear();
greenId = "";
roadDirection = "";
startTime = "";
endTime = "";
trafficThreshold = 0.0;
//计算平峰
List<laneDataHist> peakDetailList = analysisGreenCongestionPeriodMapper.selectPeakDetail(date.toString());
for(int b = 0 ; b < peakDetailList.size() ; b++){
if(b == peakDetailList.size() - 1 ){
if(queue.size() > 0){
if(queue.getFirst().getGreenId().equals(peakDetailList.get(b).getGreenId())){
if(!queue.getFirst().getPeakType().equals(peakDetailList.get(b).getPeakType())){
startTime = queue.getFirst().getEndTime();
endTime = peakDetailList.get(b).getStartTime();
}else {
startTime = queue.getFirst().getEndTime();
endTime = date.toString() + " 20:00:00";
}
}else {
startTime = queue.getFirst().getEndTime();
endTime = date.toString() + " 20:00:00";
List<laneDataHist> crossFlowList = analysisGreenCongestionPeriodMapper.selectCrossFlow(date.toString().replaceAll("-",""),
queue.getFirst().getCrossId(),startTime,endTime);
List<laneDataHist> list1 = new ArrayList<>();
Integer maxFlow = 0;
Integer sumFlow = 0;
if(CollectionUtils.isNotEmpty(crossFlowList)) {
for (laneDataHist temp1 : crossFlowList) {
if (queueCorss.size() < 2) {
enqueue(queueCorss, temp1);
} else {
Integer flow = (temp1.getFlow() + queueCorss.getFirst().getFlow() + queueCorss.getLast().getFlow()) * 4 ;
temp1.setFlowHour(flow);
list1.add(temp1);
enqueue(queueCorss, temp1);
}
}
maxFlow = list1.get(0).getFlowHour();
sumFlow = list1.get(0).getFlowHour();
}
Integer avgFlow = 0;
for(int a = 0 ; a < list1.size(); a ++){
if(a == list1.size() - 1){
Double avg = Math.ceil((double) sumFlow / list1.size());
avgFlow = Integer.valueOf(avg.intValue()) ;
continue;
}
if(list1.get(a + 1).getFlowHour() > maxFlow){
maxFlow = list1.get(a + 1).getFlowHour();
}
sumFlow = sumFlow + list1.get(a + 1).getFlowHour();
}
//写入数据
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",3);
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("maxFlow",maxFlow);
map.put("avgFlow",avgFlow);
map.put("greenId",queue.getFirst().getGreenId());
map.put("trafficThreshold",trafficThreshold);
analysisGreenCongestionPeriodMapper.insertLaneDataHist(map);
if(peakDetailList.get(b).getPeakType().equals("2")) {
startTime = date.toString() + " 08:00:00";
endTime = peakDetailList.get(b).getStartTime();
}else {
startTime = peakDetailList.get(b).getEndTime();
endTime = date.toString() + " 20:00:00";
}
}
}else {
if(peakDetailList.get(b).getPeakType().equals("2")) {
startTime = date.toString() + " 08:00:00";
endTime = peakDetailList.get(b).getStartTime();
}else {
startTime = peakDetailList.get(b).getEndTime();
endTime = date.toString() + " 20:00:00";
}
}
List<laneDataHist> crossFlowList = analysisGreenCongestionPeriodMapper.selectCrossFlow(date.toString().replaceAll("-",""),
peakDetailList.get(b).getCrossId(),startTime,endTime);
List<laneDataHist> list1 = new ArrayList<>();
Integer maxFlow = 0;
Integer sumFlow = 0;
if(CollectionUtils.isNotEmpty(crossFlowList)) {
for (laneDataHist temp1 : crossFlowList) {
if (queueCorss.size() < 2) {
enqueue(queueCorss, temp1);
} else {
Integer flow = (temp1.getFlow() + queueCorss.getFirst().getFlow() + queueCorss.getLast().getFlow()) * 4 ;
temp1.setFlowHour(flow);
list1.add(temp1);
enqueue(queueCorss, temp1);
}
}
maxFlow = list1.get(0).getFlowHour();
sumFlow = list1.get(0).getFlowHour();
}
Integer avgFlow = 0;
for(int a = 0 ; a < list1.size(); a ++){
if(a == list1.size() - 1){
Double avg = Math.ceil((double) sumFlow / list1.size());
avgFlow = Integer.valueOf(avg.intValue()) ;
continue;
}
if(list1.get(a + 1).getFlowHour() > maxFlow){
maxFlow = list1.get(a + 1).getFlowHour();
}
sumFlow = sumFlow + list1.get(a + 1).getFlowHour();
}
//写入数据
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",3);
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("maxFlow",maxFlow);
map.put("avgFlow",avgFlow);
map.put("greenId",peakDetailList.get(b).getGreenId());
map.put("trafficThreshold",trafficThreshold);
analysisGreenCongestionPeriodMapper.insertLaneDataHist(map);
startTime = "";
endTime = "";
queue.clear();
continue;
}
if(peakDetailList.get(b).getGreenId().equals(greenId)){
if(queue.size() > 0) {
if (peakDetailList.get(b).getPeakType().equals("2") && queue.getFirst().getPeakType().equals("1")) {
startTime = queue.getFirst().getEndTime();
endTime = peakDetailList.get(b).getStartTime();
List<laneDataHist> crossFlowList = analysisGreenCongestionPeriodMapper.selectCrossFlow(date.toString().replaceAll("-", ""),
peakDetailList.get(b).getCrossId(), startTime, endTime);
List<laneDataHist> list1 = new ArrayList<>();
Integer maxFlow = 0;
Integer sumFlow = 0;
if (CollectionUtils.isNotEmpty(crossFlowList)) {
for (laneDataHist temp1 : crossFlowList) {
if (queueCorss.size() < 2) {
enqueue(queueCorss, temp1);
} else {
Integer flow = (temp1.getFlow() + queueCorss.getFirst().getFlow() + queueCorss.getLast().getFlow()) * 4;
temp1.setFlowHour(flow);
list1.add(temp1);
enqueue(queueCorss, temp1);
}
}
maxFlow = list1.get(0).getFlowHour();
sumFlow = list1.get(0).getFlowHour();
}
Integer avgFlow = 0;
for (int a = 0; a < list1.size(); a++) {
if (a == list1.size() - 1) {
Double avg = Math.ceil((double) sumFlow / list1.size());
avgFlow = Integer.valueOf(avg.intValue());
continue;
}
if (list1.get(a + 1).getFlowHour() > maxFlow) {
maxFlow = list1.get(a + 1).getFlowHour();
}
sumFlow = sumFlow + list1.get(a + 1).getFlowHour();
}
//写入数据
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("weekNumber", weekNumber);
map.put("weekDay", i + 1);
map.put("roadDirection", roadDirection);
map.put("peakType", 3);
map.put("weekStartTime", todayOfWeek);
map.put("weekEndTime", endOfWeek);
map.put("maxFlow", maxFlow);
map.put("avgFlow", avgFlow);
map.put("greenId", peakDetailList.get(b).getGreenId());
map.put("trafficThreshold", trafficThreshold);
analysisGreenCongestionPeriodMapper.insertLaneDataHist(map);
startTime = "";
endTime = "";
queue.clear();
}
}
}else {
if(queue.size() == 1){
if(queue.getFirst().getPeakType().equals("1")) {
startTime = queue.getFirst().getEndTime();
endTime = date.toString() + " 20:00:00";
}else {
startTime = date.toString() + " 08:00:00";
endTime = queue.getFirst().getStartTime();
}
List<laneDataHist> crossFlowList = analysisGreenCongestionPeriodMapper.selectCrossFlow(date.toString().replaceAll("-",""),
queue.getFirst().getCrossId(),startTime,endTime);
List<laneDataHist> list1 = new ArrayList<>();
Integer maxFlow = 0;
Integer sumFlow = 0;
if(CollectionUtils.isNotEmpty(crossFlowList)) {
for (laneDataHist temp1 : crossFlowList) {
if (queueCorss.size() < 2) {
enqueue(queueCorss, temp1);
} else {
Integer flow = (temp1.getFlow() + queueCorss.getFirst().getFlow() + queueCorss.getLast().getFlow()) * 4 ;
temp1.setFlowHour(flow);
list1.add(temp1);
enqueue(queueCorss, temp1);
}
}
maxFlow = list1.get(0).getFlowHour();
sumFlow = list1.get(0).getFlowHour();
}
Integer avgFlow = 0;
for(int a = 0 ; a < list1.size(); a ++){
if(a == list1.size() - 1){
Double avg = Math.ceil((double) sumFlow / list1.size());
avgFlow = Integer.valueOf(avg.intValue()) ;
continue;
}
if(list1.get(a + 1).getFlowHour() > maxFlow){
maxFlow = list1.get(a + 1).getFlowHour();
}
sumFlow = sumFlow + list1.get(a + 1).getFlowHour();
}
//写入数据
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",3);
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("maxFlow",maxFlow);
map.put("avgFlow",avgFlow);
map.put("greenId",queue.getFirst().getGreenId());
map.put("trafficThreshold",trafficThreshold);
analysisGreenCongestionPeriodMapper.insertLaneDataHist(map);
startTime = "";
endTime = "";
}
queue.clear();
greenId = peakDetailList.get(b).getGreenId();
roadDirection = peakDetailList.get(b).getRoadDirection();
enqueue(queue,peakDetailList.get(b));
}
}
}
}
}
......@@ -23,5 +23,7 @@ public class AnalysisGreenCongestionPeriodWeekTask {
@Scheduled(cron = "0 0 2 ? * 1")
public void task() throws ParseException {
analysisGreenCongestionPeriodService.selectCountByCongestionPeriod();
analysisGreenCongestionPeriodService.selectCountByLandData();
}
}
......@@ -18,6 +18,8 @@
<result column="turn" property="turn"/>
<result column="traffic_index" property="trafficIndex"/>
<result column="flow" property="flow"/>
<result column="endTime" property="endTime"/>
<result column="peak_type" property="peakType"/>
</resultMap>
<select id="selectGreenDataHist" parameterType="String" resultMap="AnalysisGreenCongestionPeriodMap">
......@@ -85,7 +87,14 @@
where DATE_FORMAT(a.start_time,'%Y-%m-%d %H:%i:00') between DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i:%s') and DATE_FORMAT(DATE_SUB(#{endTime},INTERVAL 5 MINUTE),'%Y-%m-%d %H:%i:%s')
and a.green_id = #{greenId}
and a.road_direction = #{roadDirection}
</insert>
<select id="selectPeakDetail" parameterType="String" resultMap="AnalysisLaneDataHistMap">
select t.green_id,t1.key_cross_id as cross_id, t.road_direction,t.peak_start_time as start_time,t.peak_end_time as endTime ,t.traffic_index,t.peak_type
from t_analysis_green_wave_peak_detail t
left join t_greenwave_key_cross_lane t1 on t1.green_id = t.green_id
where t.peak_start_time BETWEEN DATE_FORMAT(#{date},'%Y-%m-%d 00:00:00') and DATE_FORMAT(#{date},'%Y-%m-%d 23:59:59')
order by t.green_id,t1.key_cross_id ,t.road_direction,t.peak_type,t.traffic_index desc
</select>
</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