Commit 9aba4f89 authored by zhoushiguang's avatar zhoushiguang

Merge remote-tracking branch 'origin/master'

parents 93d8273b b073e72b
package net.wanji.opt.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.entity.GreenChartSchemeHist;
/**
* @author duanruiming
* @date 2025/04/10 11:32
*/
public interface GreenChartSchemeHistMapper extends BaseMapper<GreenChartSchemeHist> {
}
...@@ -24,5 +24,5 @@ public class GreenBeltChartDTO { ...@@ -24,5 +24,5 @@ public class GreenBeltChartDTO {
private Map<String, List<List<Double>>> backCrossRedTimesMap; private Map<String, List<List<Double>>> backCrossRedTimesMap;
private Map<String, List<List<Double>>> crossGreenTimesMap; private Map<String, List<List<Double>>> crossGreenTimesMap;
private Map<String, List<List<Double>>> backCrossGreenTimesMap; private Map<String, List<List<Double>>> backCrossGreenTimesMap;
private List<Map<String, List<Double>>> greenwaveStartGroup; private List<Map<String, List<List<Double>>>> greenwaveStartGroup;
} }
package net.wanji.opt.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author duanruiming
* @date 2025/04/10 11:28
*/
@Data
@TableName("t_green_chart_scheme_hist")
public class GreenChartSchemeHist {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField("green_id")
private Integer greenId;
@TableField("green_chart")
private String greenChart;
@TableField("scheme_detail")
private String schemeDetail;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("gmt_create")
private Date gmtCreate;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField("gmt_modified")
private Date gmtModified;
}
...@@ -8,6 +8,7 @@ import java.util.List; ...@@ -8,6 +8,7 @@ import java.util.List;
public interface AnalysisGreenCongestionPeriodService { public interface AnalysisGreenCongestionPeriodService {
public void selectCountByCongestionPeriod() throws ParseException; public void selectCountByCongestionPeriod() throws ParseException;
public void selectCountByLandData() throws ParseException;
GreenReportProblemOverallAnalysisResult selectListByWeek(Integer year, Integer week, String ids); GreenReportProblemOverallAnalysisResult selectListByWeek(Integer year, Integer week, String ids);
......
package net.wanji.opt.servicev2.judgeanalysis.impl; 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.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper; import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.common.enums.*; import net.wanji.opt.common.enums.*;
...@@ -8,6 +10,7 @@ import net.wanji.opt.controllerv2.report.vo.*; ...@@ -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.judgeanalysis.AnalysisGreenCongestionPeriodMapper;
import net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper; import net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper;
import net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod; 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.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService; import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
...@@ -487,6 +490,13 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo ...@@ -487,6 +490,13 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
queue.offer(temp); 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 { public Integer isMoning(String date) throws ParseException {
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date temp = fmt.parse(date); Date temp = fmt.parse(date);
...@@ -497,4 +507,130 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo ...@@ -497,4 +507,130 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
return 2; 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);
}
}
//计算平峰
}
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.GreenChartSchemeHistMapper">
</mapper>
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