Commit 96119270 authored by duanruiming's avatar duanruiming

[update] 优化海信灯态车道灯态问题

parent 02ebb804
...@@ -60,7 +60,9 @@ public class CrossRunSchemeCache implements CommandLineRunner { ...@@ -60,7 +60,9 @@ public class CrossRunSchemeCache implements CommandLineRunner {
Integer currentPlanId = getCurrentPlanId(schedulesMap, date); Integer currentPlanId = getCurrentPlanId(schedulesMap, date);
Integer schemeId = getCurrentSchemeId(crossSectionPOS, currentTime, currentPlanId); Integer schemeId = getCurrentSchemeId(crossSectionPOS, currentTime, currentPlanId);
CrossSchemePO crossSchemePO = crossSchemeMapper.selectSchemePOById(schemeId); CrossSchemePO crossSchemePO = crossSchemeMapper.selectSchemePOById(schemeId);
currentRunSchemeNoCache.put(crossId, crossSchemePO.getSchemeNo()); if (Objects.nonNull(crossSchemePO)) {
currentRunSchemeNoCache.put(crossId, crossSchemePO.getSchemeNo());
}
} }
} }
} }
......
...@@ -24,4 +24,5 @@ public class SignalDataCache { ...@@ -24,4 +24,5 @@ public class SignalDataCache {
public static final Map<String, RunningLightsStatusPojo> runningStateInfoCacheUdp = new HashMap<>(); public static final Map<String, RunningLightsStatusPojo> runningStateInfoCacheUdp = new HashMap<>();
public static final Map<String, LightsStatusVO> runningStateInfoCache = new HashMap<>(); public static final Map<String, LightsStatusVO> runningStateInfoCache = new HashMap<>();
public static final Map<String, Long> runningStatusStampMap = new HashMap<>(); public static final Map<String, Long> runningStatusStampMap = new HashMap<>();
public static final Map<String, Integer> currentCrossPhaseNoRunPhaseTimeMap = new HashMap<>();
} }
...@@ -204,6 +204,7 @@ public class SignalStatusServiceImpl implements SignalStatusService { ...@@ -204,6 +204,7 @@ public class SignalStatusServiceImpl implements SignalStatusService {
Integer changePhaseTime = phaseCountDownDTO.getChangePhaseTime(); Integer changePhaseTime = phaseCountDownDTO.getChangePhaseTime();
if (lastPhaseCountTime <= runTime && runTime < changePhaseTime) { if (lastPhaseCountTime <= runTime && runTime < changePhaseTime) {
phaseTimeCountDown = changePhaseTime - runTime; phaseTimeCountDown = changePhaseTime - runTime;
SignalDataCache.currentCrossPhaseNoRunPhaseTimeMap.put(crossId, phaseTimeCountDown);
break; break;
} }
lastPhaseCountTime = changePhaseTime; lastPhaseCountTime = changePhaseTime;
......
...@@ -44,11 +44,13 @@ public class HisensePhaseCountDownTask { ...@@ -44,11 +44,13 @@ public class HisensePhaseCountDownTask {
String crossId = entry.getKey(); String crossId = entry.getKey();
LightsStatusVO lightsStatusVO = entry.getValue(); LightsStatusVO lightsStatusVO = entry.getValue();
String schemeStartTime = lightsStatusVO.getSchemeStartTime(); String schemeStartTime = lightsStatusVO.getSchemeStartTime();
Long lastPhaseTimeStamp = runningStatusStampMap.get(crossId);
String phaseId = lightsStatusVO.getPhaseId(); String phaseId = lightsStatusVO.getPhaseId();
String schemeId = lightsStatusVO.getSchemeId(); String schemeId = lightsStatusVO.getSchemeId();
if (Objects.nonNull(lastPhaseTimeStamp) && !StringUtils.equalsIgnoreCase(schemeStartTime, String.valueOf(lastPhaseTimeStamp))) { Integer cyclePhaseCountDown = lightsStatusVO.getCyclePhaseCountDown();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, Integer.valueOf(schemeId)); Integer phaseCycleTime = SignalDataCache.currentCrossPhaseNoRunPhaseTimeMap.get(crossId);
CrossSchemePO crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, Integer.valueOf(schemeId));
// 切换相位号或者相位运行第一次
if (cyclePhaseCountDown <= 5 || cyclePhaseCountDown >= phaseCycleTime - 5) {
// 通过时段表,切换方案 凌晨00:00 如果切换下一个日期方案,可能RefreshCacheTask还没执行 // 通过时段表,切换方案 凌晨00:00 如果切换下一个日期方案,可能RefreshCacheTask还没执行
String nextSectionSchemeNo = CrossRunSchemeCache.currentRunSchemeNoCache.get(crossId); String nextSectionSchemeNo = CrossRunSchemeCache.currentRunSchemeNoCache.get(crossId);
String currentTime = String.valueOf(new Date().getTime()); String currentTime = String.valueOf(new Date().getTime());
...@@ -62,6 +64,8 @@ public class HisensePhaseCountDownTask { ...@@ -62,6 +64,8 @@ public class HisensePhaseCountDownTask {
// 当前方案下一周期 // 当前方案下一周期
setDirLampGroupMap(lightsStatusVO); setDirLampGroupMap(lightsStatusVO);
runningStateInfoCache.put(crossId, lightsStatusVO); runningStateInfoCache.put(crossId, lightsStatusVO);
} else { // 如果是相同5秒时间内,直接时间相减,不需要计算灯态相位倒计时
executeNextPeriod(crossId, lightsStatusVO, phaseId, crossSchemePO);
} }
} }
} }
...@@ -154,7 +158,7 @@ public class HisensePhaseCountDownTask { ...@@ -154,7 +158,7 @@ public class HisensePhaseCountDownTask {
continue; continue;
} }
Map<String, String> turnColor = new HashMap<>(); Map<String, String> turnColor = new HashMap<>();
Integer type = 2; // 1 圆饼灯 Integer type = 2; // 灯组类型:1箭头;2圆饼;3行人;
String color = null; String color = null;
for (CrossLightsPO crossLightsPO : lightsList) { for (CrossLightsPO crossLightsPO : lightsList) {
type = crossLightsPO.getType(); type = crossLightsPO.getType();
...@@ -194,7 +198,7 @@ public class HisensePhaseCountDownTask { ...@@ -194,7 +198,7 @@ public class HisensePhaseCountDownTask {
List<String> allTurn = Arrays.asList("1", "2", "3"); List<String> allTurn = Arrays.asList("1", "2", "3");
for (String turn : allTurn) { for (String turn : allTurn) {
if (!turnColor.containsKey(turn)) { if (!turnColor.containsKey(turn)) {
if (Objects.equals(type, 1)) { // 圆饼灯 相同颜色 if (Objects.equals(type, 2)) { // 圆饼灯 相同颜色
turnColor.put(turn, color); turnColor.put(turn, color);
} else { } else {
if ("red".equals(color)) { // 箭头灯 相反 if ("red".equals(color)) { // 箭头灯 相反
......
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