Commit dd756b7b authored by duanruiming's avatar duanruiming

[update] 海信代码优化

parent 176a1891
......@@ -38,10 +38,15 @@ public class CrossSchemePhaseTimeCountCache implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
init();
try {
init();
} catch (Exception e) {
log.error("路口方案相位倒计时缓存加载失败", e);
throw new Exception(e);
}
}
public void init() {
public void init() throws Exception {
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.selectAll();
if (!CollectionUtils.isEmpty(crossInfoPOList)) {
for (CrossInfoPO crossInfoPO : crossInfoPOList) {
......
......@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author duanruiming
......@@ -22,6 +23,7 @@ public class SignalDataCache {
public static final Map<String, List<PhaseInfoPojo>> phaseInfoCache = 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 ConcurrentHashMap<>();
public static final Map<String, LightsStatusVO> runningStateInfoCacheNoLamp = new ConcurrentHashMap<>();
public static final Map<String, Long> runningStatusStampMap = new HashMap<>();
}
......@@ -5,11 +5,13 @@ package net.wanji.utc.hisense.controller;
* @date 2022/12/1 15:07
*/
import com.fasterxml.jackson.core.JsonParseException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.annotation.aspect.AspectLog;
import net.wanji.common.enums.BaseEnum;
import net.wanji.common.framework.rest.JsonViewObject;
......@@ -34,6 +36,7 @@ import java.util.List;
@RequestMapping("/signalStatus")
@RestController
@RequiredArgsConstructor
@Slf4j
public class SignalStatusController {
private final SignalStatusService signalStatusService;
......@@ -65,10 +68,13 @@ public class SignalStatusController {
@AspectLog(description = "接收海信灯态", operationType = BaseEnum.OperationTypeEnum.QUERY)
@PostMapping(value = "/receiveLightStatus", produces = MediaType.APPLICATION_JSON)
@ApiOperation(value = "接收海信灯态", notes = "接收海信灯态", response = LightsStatusVO.class, produces = MediaType.APPLICATION_JSON)
public JsonViewObject receiveLightStatus(@RequestBody List<HisenseLightStatusPojo> hisenseLightStatusPojos) throws Exception{
signalStatusService.receiveLightStatus(hisenseLightStatusPojos);
@ApiOperation(value = "接收海信灯态", notes = "接收海信灯态", response = LightsStatusVO.class, produces = MediaType.APPLICATION_JSON)
public JsonViewObject receiveLightStatus(@RequestBody List<HisenseLightStatusPojo> hisenseLightStatusPojos) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
signalStatusService.receiveLightStatus(hisenseLightStatusPojos);
} catch (JsonParseException e) {
}
return jsonViewObject.success("海信灯态接收成功");
}
}
......@@ -174,7 +174,7 @@ public class SignalStatusServiceImpl implements SignalStatusService {
List<CrossSchemePhaseCountDownDTO> crossSchemePhaseCountDownList = CrossSchemePhaseTimeCountCache.crossSchemePhaseCountDownList;
setLightsStatusVOPhaseNoAndCountDown(lightsStatusVO, crossId, runTime, planId, crossSchemePhaseCountDownList);
SignalDataCache.runningStateInfoCache.put(crossId, lightsStatusVO);
SignalDataCache.runningStateInfoCacheNoLamp.put(crossId, lightsStatusVO);
}
}
}
......
......@@ -36,36 +36,38 @@ public class HisensePhaseCountDownTask {
private CrossSchemeMapper crossSchemeMapper;
@Scheduled(fixedRate = 1000, initialDelay = 1000)
public void phaseTimeCountDown() {
Map<String, LightsStatusVO> runningStateInfoCache = SignalDataCache.runningStateInfoCache;
if (!runningStateInfoCache.isEmpty()) {
for (Map.Entry<String, LightsStatusVO> entry : runningStateInfoCache.entrySet()) {
String crossId = entry.getKey();
LightsStatusVO lightsStatusVO = entry.getValue();
String schemeStartTime = lightsStatusVO.getSchemeStartTime();
String phaseId = lightsStatusVO.getPhaseId();
String schemeId = lightsStatusVO.getSchemeId();
Integer cyclePhaseCountDown = lightsStatusVO.getCyclePhaseCountDown();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, Integer.valueOf(schemeId));
public void phaseTimeCountDown() throws Exception {
try {
Map<String, LightsStatusVO> runningStateInfoCacheNoLamp = SignalDataCache.runningStateInfoCacheNoLamp;
if (!runningStateInfoCacheNoLamp.isEmpty()) {
for (Map.Entry<String, LightsStatusVO> entry : runningStateInfoCacheNoLamp.entrySet()) {
String crossId = entry.getKey();
LightsStatusVO lightsStatusVO = entry.getValue();
String schemeStartTime = lightsStatusVO.getSchemeStartTime();
String phaseId = lightsStatusVO.getPhaseId();
String schemeId = lightsStatusVO.getSchemeId();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, Integer.valueOf(schemeId));
// 通过时段表,切换方案 凌晨00:00 如果切换下一个日期方案,可能RefreshCacheTask还没执行
String nextSectionSchemeNo = CrossRunSchemeCache.currentRunSchemeNoCache.get(crossId);
String currentTime = String.valueOf(new Date().getTime());
if (StringUtils.equalsIgnoreCase(schemeStartTime, currentTime)) {
crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, Integer.valueOf(nextSectionSchemeNo));
executeNextSectionScheme(crossId, lightsStatusVO, crossSchemePO);
lightsStatusVO.setCycleLen(crossSchemePO.getCycle());
} else {
executeNextPeriod(crossId, lightsStatusVO, phaseId, crossSchemePO);
}
// 当前方案下一周期
setDirLampGroupMap(lightsStatusVO);
if (Objects.nonNull(lightsStatusVO.getDirLampGroupMap())) {
runningStateInfoCache.put(crossId, lightsStatusVO);
} else {
log.error("当前灯态为空,为啥呢:{}", lightsStatusVO);
// 通过时段表,切换方案 凌晨00:00 如果切换下一个日期方案,可能RefreshCacheTask还没执行
String nextSectionSchemeNo = CrossRunSchemeCache.currentRunSchemeNoCache.get(crossId);
String currentTime = String.valueOf(new Date().getTime());
if (StringUtils.equalsIgnoreCase(schemeStartTime, currentTime)) {
crossSchemePO = crossSchemeMapper.selectByCrossIdAndSchemeNo(crossId, Integer.valueOf(nextSectionSchemeNo));
executeNextSectionScheme(crossId, lightsStatusVO, crossSchemePO);
lightsStatusVO.setCycleLen(crossSchemePO.getCycle());
} else {
executeNextPeriod(crossId, lightsStatusVO, phaseId, crossSchemePO);
}
// 当前方案下一周期
setDirLampGroupMap(lightsStatusVO);
if (Objects.nonNull(lightsStatusVO.getDirLampGroupMap())) {
SignalDataCache.runningStateInfoCache.put(crossId, lightsStatusVO);
}
}
}
} catch (Exception e) {
log.error("定时任务计算路口相位灯态倒计时异常", e);
throw new Exception(e);
}
}
......@@ -75,7 +77,7 @@ public class HisensePhaseCountDownTask {
* @param crossSchemePO
* @description 通过日计划缓存,切换下一个时段方案
*/
private void executeNextSectionScheme(String crossId, LightsStatusVO lightsStatusVO, CrossSchemePO crossSchemePO) {
private void executeNextSectionScheme(String crossId, LightsStatusVO lightsStatusVO, CrossSchemePO crossSchemePO) throws Exception {
if (Objects.nonNull(crossSchemePO)) {
List<CrossPhasePO> nextSchemePhaseList = crossPhaseMapper.selectByCrossIdAndPlanId(crossId, String.valueOf(crossSchemePO.getId()));
Integer phaseTime = 0;
......@@ -100,7 +102,7 @@ public class HisensePhaseCountDownTask {
* @param crossSchemePO
* @description 切换下一方案周期
*/
private void executeNextPeriod(String crossId, LightsStatusVO lightsStatusVO, String phaseId, CrossSchemePO crossSchemePO) {
private void executeNextPeriod(String crossId, LightsStatusVO lightsStatusVO, String phaseId, CrossSchemePO crossSchemePO) throws Exception {
if (lightsStatusVO.getCyclePhaseCountDown() <= 1 && Objects.nonNull(crossSchemePO)) {
List<CrossPhasePO> crossPhasePOS = crossPhaseMapper.selectByCrossIdAndPlanId(crossId, String.valueOf(crossSchemePO.getId()));
Integer nextPhaseTime = 0;
......@@ -129,7 +131,7 @@ public class HisensePhaseCountDownTask {
* @param lightsStatusVO
* @description 通过当前周期倒计时方案相位灯态
*/
public void setDirLampGroupMap(LightsStatusVO lightsStatusVO) {
public void setDirLampGroupMap(LightsStatusVO lightsStatusVO) throws Exception {
String crossId = lightsStatusVO.getCrossId();
String currentSchemeNo = lightsStatusVO.getSchemeId();
String currentPhaseNo = lightsStatusVO.getPhaseId();
......@@ -157,7 +159,9 @@ public class HisensePhaseCountDownTask {
}
}
private static void setDirTurnColor(Integer cyclePhaseCountDown, Map<String, Object> dirLampGroupMap, Integer yellowTime, Integer redTime, Map<Integer, List<CrossLightsPO>> dirTurnMap) {
private static void setDirTurnColor(Integer cyclePhaseCountDown, Map<String, Object> dirLampGroupMap,
Integer yellowTime, Integer redTime, Map<Integer,
List<CrossLightsPO>> dirTurnMap) throws Exception {
for (Map.Entry<Integer, List<CrossLightsPO>> dirEntry : dirTurnMap.entrySet()) {
Integer dir = dirEntry.getKey();
List<CrossLightsPO> lightsList = dirEntry.getValue();
......@@ -174,7 +178,7 @@ public class HisensePhaseCountDownTask {
color = setTurnColor(cyclePhaseCountDown, yellowTime, redTime, turnColor, color, turn, turnStr);
turnColor.put(turnStr, color);
}
if (cyclePhaseCountDown <= 2) {
if (cyclePhaseCountDown <= redTime) {
setAllTurnColorRed(turnColor, type, color);
} else {
setAllTurnColor(turnColor, type, color);
......@@ -183,7 +187,9 @@ public class HisensePhaseCountDownTask {
}
}
private static String setTurnColor(Integer cyclePhaseCountDown, Integer yellowTime, Integer redTime, Map<String, String> turnColor, String color, Integer turn, String turnStr) {
private static String setTurnColor(Integer cyclePhaseCountDown, Integer yellowTime, Integer redTime,
Map<String, String> turnColor, String color,
Integer turn, String turnStr) throws Exception {
if (cyclePhaseCountDown > yellowTime + redTime) {
color = "green";
if (turn == 20) {
......@@ -211,7 +217,7 @@ public class HisensePhaseCountDownTask {
* @param type
* @param color
*/
private static void setAllTurnColorRed(Map<String, String> turnColor, Integer type, String color) {
private static void setAllTurnColorRed(Map<String, String> turnColor, Integer type, String color) throws Exception {
List<String> allTurn = Arrays.asList("1", "2", "3");
for (String turnStr : allTurn) {
if (!turnColor.containsKey(turnStr)) {
......@@ -229,7 +235,7 @@ public class HisensePhaseCountDownTask {
* @param type
* @param color
*/
private static void setAllTurnColor(Map<String, String> turnColor, Integer type, String color) {
private static void setAllTurnColor(Map<String, String> turnColor, Integer type, String color) throws Exception {
List<String> allTurn = Arrays.asList("1", "2", "3");
for (String turn : allTurn) {
if (!turnColor.containsKey(turn)) {
......
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