Commit 3e945aa3 authored by duanruiming's avatar duanruiming

[update] 数据中心编译优化

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