Commit 09caeedf authored by 黄伟铭's avatar 黄伟铭

新增干线早晚高峰分析

parent 28ad6ef9
......@@ -8,6 +8,7 @@ import java.util.List;
public interface AnalysisGreenCongestionPeriodService {
public void selectCountByCongestionPeriod() throws ParseException;
public void selectCountByLandData() throws ParseException;
GreenReportProblemOverallAnalysisResult selectListByWeek(Integer year, Integer week, String ids);
......
package net.wanji.opt.servicev2.judgeanalysis.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.github.pagehelper.util.StringUtil;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.common.enums.*;
......@@ -8,6 +10,7 @@ import net.wanji.opt.controllerv2.report.vo.*;
import net.wanji.opt.dao.mapper.judgeanalysis.AnalysisGreenCongestionPeriodMapper;
import net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper;
import net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod;
import net.wanji.opt.entity.judgeanalysis.laneDataHist;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService;
import org.apache.commons.collections.CollectionUtils;
......@@ -487,6 +490,13 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
queue.offer(temp);
}
public void enqueue(LinkedList<laneDataHist> queue, laneDataHist temp) {
if (queue.size() >= 2) {
queue.poll();
}
queue.offer(temp);
}
public Integer isMoning(String date) throws ParseException {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date temp = fmt.parse(date);
......@@ -497,4 +507,130 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
return 2;
}
}
public void selectCountByLandData() throws ParseException {
LocalDate currentDate = LocalDate.now();
// 获取本周一的日期
LocalDate mondayOfThisWeek = currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 获取上周一的日期
LocalDate todayOfWeek = mondayOfThisWeek.plusDays(-7);
//获取上周日的日期
LocalDate endOfWeek = mondayOfThisWeek.plusDays(-1);
WeekFields weekFields = WeekFields.of(Locale.getDefault());
//获取上周的周数
int Number = todayOfWeek.get(weekFields.weekOfYear());
int year = currentDate.getYear();
String weekNumber = String.valueOf(year) + String.valueOf(Number);
//循环7天处理数据
for (int i = 0; i < 7; i++) {
LocalDate date = todayOfWeek.plusDays(i);
//获取干线数据
List<laneDataHist> laneList = analysisGreenCongestionPeriodMapper.selectGreenTrafficHist(date.toString().replaceAll("-",""));
LinkedList<laneDataHist> queue = new LinkedList<>();
LinkedList<laneDataHist> queueCorss = new LinkedList<>();
List<laneDataHist> list = new ArrayList<>();
String greenId = "";
String roadDirection = "";
String startTime = "";
String endTime = "";
Double trafficThreshold = 0.0;
for(laneDataHist temp : laneList){
if(temp.getGreenId().equals(greenId)){
if(queue.size() == 2){
//判断流量是否大于阀值
if(trafficThreshold < temp.getTrafficIndex() && com.github.pagehelper.util.StringUtil.isEmpty(startTime)){
startTime = temp.getStartTime();
list.add(temp);
} else if( temp.getTrafficIndex() < trafficThreshold &&
queue.getFirst().getTrafficIndex() < trafficThreshold &&
queue.getLast().getTrafficIndex() < trafficThreshold &&
!com.github.pagehelper.util.StringUtil.isEmpty(startTime) ){
if(list.size() < 10){
startTime = "";
list.clear();
enqueue(queue,temp);
continue;
}
endTime = queue.getFirst().getStartTime();
//查询流量数据,循环处理list中的数据找出最大值,并算出平均值
List<laneDataHist> crossFlowList = analysisGreenCongestionPeriodMapper.selectCrossFlow(date.toString().replaceAll("-",""),
temp.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",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("maxFlow",maxFlow);
map.put("avgFlow",avgFlow);
map.put("greenId",temp.getGreenId());
map.put("trafficThreshold",trafficThreshold);
analysisGreenCongestionPeriodMapper.insertLaneDataHist(map);
//清空数据
startTime = "";
endTime = "";
list.clear();
}else {
if(!StringUtil.isEmpty(startTime)) {
list.add(temp);
}
}
}
enqueue(queue,temp);
}else {
queue.clear();
list.clear();
greenId = temp.getGreenId();
roadDirection = temp.getRoadDirection();
//计算该干线交通指数阈值,取一天的9点至16点30之间交通指数倒序的90%的数值为动态阈值
List<laneDataHist> greenTrafficList = analysisGreenCongestionPeriodMapper.selectGreenTrafficThreshold(date.toString().replaceAll("-",""),greenId,roadDirection);
if(greenTrafficList.get(9).getTrafficIndex() <= 1.5) {
trafficThreshold = 1.5;
}else {
trafficThreshold = greenTrafficList.get(9).getTrafficIndex();
}
startTime = "";
endTime = "";
enqueue(queue,temp);
}
}
//计算平峰
}
}
}
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