Commit 3e945aa3 authored by duanruiming's avatar duanruiming

[update] 数据中心编译优化

parent f5c470c0
......@@ -11,9 +11,9 @@
</parent>
<groupId>net.wanji</groupId>
<artifactId>signal-datacenter-service</artifactId>
<artifactId>signal-dataCenter-service</artifactId>
<version>0.2.1</version>
<name>signal-datacenter-service</name>
<name>signal-dataCenter-service</name>
<description>signal-datacenter-service</description>
<properties>
......
package net.wanji.datacenter.mapper;
import net.wanji.opt.po.trend.CrossDataRealtimePO;
import net.wanji.opt.vo.AbnormalCrossListVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 态势监测-问题路口基础信息
*
* @author Kent HAN
* @date 2023/2/8 9:22
*/
@Repository
public interface CrossDataRealtimeMapper {
List<AbnormalCrossListVO> selectAbnormalCross(Integer status, String name, Integer type);
CrossDataRealtimePO selectByCrossId(String crossId);
}
package net.wanji.datacenter.mapper;
import net.wanji.opt.po.trend.CrossDirDataHistPO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 路口方向历史数据
*
* @author Kent HAN
* @date 2023/2/8 9:22
*/
@Repository
public interface CrossDirDataHistMapper {
List<CrossDirDataHistPO> selectByCrossIdAndTimestamp(String crossId, long preSeconds);
List<CrossDirDataHistPO> selectByCrossIdDirAndTimestamp(String crossId, Integer dir, long preSeconds);
}
package net.wanji.datacenter.mapper;
import net.wanji.opt.po.trend.CrossTurnDataRealtimePO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 路口转向实时数据
*
* @author Kent HAN
* @date 2023/2/8 9:22
*/
@Repository
public interface CrossTurnDataRealtimeMapper {
List<CrossTurnDataRealtimePO> selectByCrossId(String crossId);
}
......@@ -18,7 +18,7 @@ public class LanePeriodicDataDTO {
/**
* 车道数量
*/
private int laneNum;
private Integer laneNum;
/**
* 全域编号
*/
......@@ -38,11 +38,11 @@ public class LanePeriodicDataDTO {
/**
* 最小动态排队长度
*/
private int dynamicQueueLengthMin;
private Integer dynamicQueueLengthMin;
/**
* 绿灯有效利用率
*/
private int greenLightEfficiency;
private Integer greenLightEfficiency;
/**
* 车道号(路网数据)
*/
......@@ -50,19 +50,19 @@ public class LanePeriodicDataDTO {
/**
* 车道通行能力
*/
private int laneCapacity;
private Integer laneCapacity;
/**
* 车道流率
*/
private int laneFlowRate;
private Integer laneFlowRate;
/**
* 不停车率
*/
private int laneNoStopRate;
private Integer laneNoStopRate;
/**
* 一次停车率
*/
private int laneOneStopRate;
private Integer laneOneStopRate;
/**
* 车道饱和度
*/
......@@ -70,15 +70,15 @@ public class LanePeriodicDataDTO {
/**
* 车道饱和流率
*/
private int laneSaturationFlowRate;
private Integer laneSaturationFlowRate;
/**
* 三次停车率
*/
private int laneThreeStopRate;
private Integer laneThreeStopRate;
/**
* 二次停车率
*/
private int laneTwoStopRate;
private Integer laneTwoStopRate;
/**
* 绿灯结束排队长度
*/
......@@ -86,15 +86,15 @@ public class LanePeriodicDataDTO {
/**
* 绿灯起亮排队长度
*/
private int lightGreenStartQueueLength;
private Integer lightGreenStartQueueLength;
/**
* 平均延误
*/
private int meanDelay;
private Integer meanDelay;
/**
* 平均停车次数
*/
private int meanStopsNumber;
private Integer meanStopsNumber;
/**
* 平均点速度
*/
......@@ -102,11 +102,11 @@ public class LanePeriodicDataDTO {
/**
* 最大静态排队长度
*/
private int staticQueueLengthMax;
private Integer staticQueueLengthMax;
/**
* 最小静态排队长度
*/
private int staticQueueLengthMin;
private Integer staticQueueLengthMin;
/**
* 时间占有率
*/
......@@ -114,11 +114,11 @@ public class LanePeriodicDataDTO {
/**
* 自然流量
*/
private int trafficFlow;
private Integer trafficFlow;
/**
* 小车当量
*/
private int trolleyEquivalent;
private Integer trolleyEquivalent;
/**
* 平均空间密度(长度占比)
*/
......
......@@ -15,7 +15,7 @@ import java.util.Date;
@TableName("t_cross_data_realtime")
@ApiModel(value = "CrossDataRealTimePO", description = "路口实时数据")
public class CrossDataRealTimePO {
@ApiModelProperty(name = "修改时间",notes = "")
@ApiModelProperty(name = "路口编号",notes = "")
private String crossId;
@ApiModelProperty(name = "路口状态:0正常 1失衡 2拥堵 3溢出 4死锁",notes = "")
private Integer status;
......
......@@ -13,6 +13,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -76,21 +77,58 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
for (LanePeriodicDataDTO.EventList laneRealTimeItem : eventLists) {
String laneId = laneRealTimeItem.getLaneId();
Date now = new Date();
for (CrossBaseLaneInfoPO laneInfoPO : crossBaseLaneInfoPOS) {
String id = laneInfoPO.getId();
String crossId = laneInfoPO.getCrossId();
// todo 路口状态
Double trafficFlow = Double.valueOf(laneRealTimeItem.getTrafficFlow());
String dir = String.valueOf(laneInfoPO.getDir());
String turn = String.valueOf(laneInfoPO.getTurn());
if (StringUtils.endsWithIgnoreCase(laneId, id)) {
CrossDataRealTimePO crossDataRealTimePO = new CrossDataRealTimePO();
crossDataRealTimePO.setCrossId(crossId);
crossDataRealTimePO.setStatus(0000);
crossDataRealTimePO.setType(1); // 1常规 2异常
crossDataRealTimePO.setStartTime(now);
crossDataRealTimePO.setDuration(5); // todo 通过第二批次判断
crossDataRealTimePO.setUnbalanceStatus(0);
crossDataRealTimePO.setUnbalanceIndex(1.0);
crossDataRealTimePO.setUnbalanceDirs(dir);
crossDataRealTimePO.setCongestionStatus(0);
crossDataRealTimePO.setCongestionIndex(1.0);
crossDataRealTimePO.setCongestionDirs(dir);
crossDataRealTimePO.setSpilloverStatus(0);
crossDataRealTimePO.setSpilloverIndex(1.0);
crossDataRealTimePO.setSpilloverDirs(dir);
crossDataRealTimePO.setTrafficIndex(trafficFlow);
crossDataRealTimePOS.add(crossDataRealTimePO);
CrossDirDataRealTimePO crossDirDataRealTimePO = new CrossDirDataRealTimePO();
crossDirDataRealTimePO.setCrossId(crossId);
crossDirDataRealTimePO.setStatus(0000);
crossDirDataRealTimePO.setTrafficIndex(trafficFlow);
crossDirDataRealTimePOS.add(crossDirDataRealTimePO);
CrossTurnDataRealtimePO crossTurnDataRealtimePO = new CrossTurnDataRealtimePO();
crossTurnDataRealtimePO.setCrossId(crossId);
crossTurnDataRealtimePO.setStatus(0000);
crossTurnDataRealtimePOS.add(crossTurnDataRealtimePO);
CrossLaneDataRealTimePO crossLaneDataRealTimePO = new CrossLaneDataRealTimePO();
crossLaneDataRealTimePO.setCrossId(crossId);
crossLaneDataRealTimePO.setId(id);
crossLaneDataRealTimePOS.add(crossLaneDataRealTimePO);
}
......
......@@ -11,37 +11,121 @@ import java.util.List;
@Data
public class LanePeriodicDataPO {
/**
* 车道事件集合
*/
private List<Eventlist> eventList;
/**
* 车道数量
*/
private int laneNum;
/**
* 全域编号
*/
private String orgCode;
/**
* 数据生成时间: yyyy-MM-dd HH:mm:ss:SSS
*/
private String timeStamp;
@Data
public class Eventlist {
/**
* 最大动态排队长度
*/
private double dynamicQueueLengthMax;
/**
* 最小动态排队长度
*/
private int dynamicQueueLengthMin;
/**
* 绿灯有效利用率
*/
private int greenLightEfficiency;
/**
* 车道号(路网数据)
*/
private String laneId;
/**
* 车道通行能力
*/
private int laneCapacity;
/**
* 车道流率
*/
private int laneFlowRate;
/**
* 不停车率
*/
private int laneNoStopRate;
/**
* 一次停车率
*/
private int laneOneStopRate;
/**
* 车道饱和度
*/
private double laneSaturation;
/**
* 车道饱和流率
*/
private int laneSaturationFlowRate;
/**
* 三次停车率
*/
private int laneThreeStopRate;
/**
* 二次停车率
*/
private int laneTwoStopRate;
/**
* 绿灯结束排队长度
*/
private double lightGreenFinishQueueLength;
/**
* 绿灯起亮排队长度
*/
private int lightGreenStartQueueLength;
/**
* 平均延误
*/
private int meanDelay;
/**
* 平均停车次数
*/
private int meanStopsNumber;
/**
* 平均点速度
*/
private double meanV;
/**
* 最大静态排队长度
*/
private int staticQueueLengthMax;
/**
* 最小静态排队长度
*/
private int staticQueueLengthMin;
/**
* 时间占有率
*/
private double timeOccupancy;
/**
* 自然流量
*/
private int trafficFlow;
/**
* 小车当量
*/
private int trolleyEquivalent;
/**
* 平均空间密度(长度占比)
*/
private double vehicleLengthRatioMean;
/**
* 平均空间密度(车辆负荷比)
*/
private double vehicleNumsRatioMean;
}
}
......@@ -80,6 +80,9 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
public String realtimeOptimize(List<CrossDataRealtimePO> abnormalCrossList, List<CrossDataRealtimePO> crossDataRealtimePOList) {
try {
// todo 当前路口不是信控路口,需要跳过
// todo 系统管理,路口管理,信控标志关闭,优化下发也要关闭
// 相位配时信息,key: 路口编号_方向类型_转向类型,value: 相位配时信息
crossDirTurnPhaseCache.refresh();
Map<String, CrossPhaseDTO> phaseMap = crossDirTurnPhaseCache.getPhaseDirTurnMap();
......
......@@ -7,10 +7,13 @@ import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.common.framework.Constants;
import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dto.CrossTurnDataRealtimeDTO;
import net.wanji.opt.dto.LaneInfoDTO;
import net.wanji.opt.kafka.ConsumerHandler;
import net.wanji.opt.po.kafka.LanePeriodicDataPO;
import net.wanji.opt.po.trend.CrossDataRealtimePO;
import net.wanji.opt.query.LaneQuery;
import net.wanji.opt.service.CrossOptimizeService;
import net.wanji.opt.service.impl.LaneInfoServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......@@ -32,12 +35,13 @@ public class CrossMonitorTask {
private final CrossOptimizeService crossOptimizeService;
private final ConsumerHandler consumerHandler;
private final CrossDataRealtimeMapper crossDataRealtimeMapper;
private final LaneInfoServiceImpl laneInfoService;
/**
* 路口实时监测
*
*/
@Scheduled(fixedRate = 1 * 60 *1000)
@Scheduled(fixedRate = 1 * 60 * 1000)
public void realtimeMonitor() {
log.info("路口实时监测任务...");
// 获取路口实时监测数据
......@@ -115,6 +119,12 @@ public class CrossMonitorTask {
// todo 对数据进行处理,可能主要是CrossTurnDataRealtimeDTO中的车间距,车时距等配置修改
CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO = new CrossTurnDataRealtimeDTO();
// 查询车道信息表
LaneQuery laneQuery = new LaneQuery();
List<LaneInfoDTO> laneInfoDTOS = laneInfoService.listLaneInfo(laneQuery);
// 将车道信息表转存路口实时数据CrossDataRealtimePO,转向数据CrossTurnDataRealtimeDTO,方向数据CrossDirDataHistPO
// 通过数据进行优化
return crossDataRealtimePOList;
}
......
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