Commit 46f4ab12 authored by duanruiming's avatar duanruiming

[update] 添加路口信息缓存

parent 976d75e1
package net.wanji.opt.cache;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.vo.CrossInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author duanruiming
* @date 2023/03/14 10:42
*/
@Component
@Slf4j
public class CrossInfoCache implements CommandLineRunner {
@Autowired
private CrossInfoMapper crossInfoMapper;
private static final List<CrossInfoPO> crossInfoList = new ArrayList<>();
/**
* 获取所有路口信息
*
* @return
*/
public List<CrossInfoPO> getCrossInfoCache() {
return crossInfoList;
}
/**
* 获取所有信控路口的路口编号
*
* @return
*/
public List<String> getIsSignalCrossIdList() {
List<String> isSignalCrossIdList = crossInfoList.stream().filter(crossInfoPO -> crossInfoPO.getIsSignal() == 1).map(CrossInfoPO::getId).collect(Collectors.toList());
return isSignalCrossIdList;
}
@Override
public void run(String... args) throws Exception {
init();
}
public void init () {
List<CrossInfoPO> crossInfoPOS = crossInfoMapper.selectAll(new CrossInfoVO());
if (!CollectionUtils.isEmpty(crossInfoPOS)) {
crossInfoList.addAll(crossInfoPOS);
}
}
}
......@@ -20,6 +20,7 @@ import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.databus.vo.SignalStatusVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.opt.cache.CrossDirTurnPhaseCache;
import net.wanji.opt.cache.CrossInfoCache;
import net.wanji.opt.cache.CrossRidInfoCache;
import net.wanji.opt.common.exception.OptServiceException;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
......@@ -63,6 +64,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
private final SceneService sceneService;
private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper;
private final CrossDirDataRealtimeMapper crossDirDataRealtimeMapper;
private final CrossInfoCache crossInfoCache;
@Value("${crossOptParam.maxVehheadDist}")
private Double maxVehheadDist;
......@@ -84,8 +86,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
public String realtimeOptimize(List<CrossDataRealtimePO> abnormalCrossList, List<CrossDataRealtimePO> crossDataRealtimePOList) {
try {
// todo 当前路口不是信控路口,需要跳过
// utcFeignClients.listCrossInfo()
// todo 系统管理,路口管理,信控标志关闭,优化下发也要关闭
// 相位配时信息,key: 路口编号_方向类型_转向类型,value: 相位配时信息
......@@ -144,6 +144,10 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
for (CrossDataRealtimePO cross : abnormalCrossList) {
crossId = cross.getCrossId();
// 不是信控路口跳过
if (!isSignalCross(crossId)) {
continue;
}
// 判断信号机是否在线 todo 是否某些故障也不需要优化
// 判断当前路口是否存在特殊控制操作
if (isOffLineOrSpecialControlMode(crossId)) {
......@@ -206,6 +210,20 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
}
}
/**
* 是否是信控路口
*
* @param crossId
* @return
*/
private boolean isSignalCross(String crossId) {
List<String> isSignalCrossIdList = crossInfoCache.getIsSignalCrossIdList();
if (isSignalCrossIdList.contains(crossId)) {
return true;
}
return false;
}
/**
* 路口拥堵优化
*
......@@ -226,6 +244,11 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
for (CrossDataRealtimePO cross : abnormalCrossList) {
crossId = cross.getCrossId();
// 不是信控路口跳过
if (!isSignalCross(crossId)) {
continue;
}
// 判断信号机是否在线 todo 是否某些故障也不需要优化
// 判断当前路口是否存在特殊控制操作
if (isOffLineOrSpecialControlMode(crossId)) {
......@@ -304,6 +327,12 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
for (CrossDataRealtimePO cross : abnormalCrossList) {
crossId = cross.getCrossId();
// 不是信控路口跳过
if (!isSignalCross(crossId)) {
continue;
}
// 判断信号机是否在线 todo 是否某些故障也不需要优化
// 判断当前路口是否存在特殊控制操作
if (isOffLineOrSpecialControlMode(crossId)) {
......
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