Commit 8afc75d0 authored by duanruiming's avatar duanruiming

[update] 增加相位方向转向缓存

parent 62e1cf9a
package net.wanji.utc.hisense.cache;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dao.entity.CrossLightsPO;
import net.wanji.databus.dao.entity.CrossPhaseLightsPO;
import net.wanji.databus.dao.entity.CrossPhasePO;
import net.wanji.databus.dao.entity.CrossSchemePO;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.utc.hisense.pojo.CrossPhaseDirTurnPojo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author duanruiming
* @date 2023/09/11 17:42
*/
@Slf4j
@Component
@SuppressWarnings("unchecked")
@RequiredArgsConstructor
public class CrossPhaseDirTurnCache implements CommandLineRunner {
private final CrossInfoMapper crossInfoMapper;
private final CrossPhaseMapper crossPhaseMapper;
private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseLightsMapper crossPhaseLightsMapper;
private final CrossLightsMapper crossLightsMapper;
private static final Map<String, List<CrossPhaseDirTurnPojo>> crossInfoMap = new HashMap<>();
public static List<CrossPhaseDirTurnPojo> getCrossPhaseDirTurnCache(String crossId) {
if (!crossInfoMap.isEmpty()) {
return crossInfoMap.get(crossId);
}
return null;
}
@Override
public void run(String... args) throws Exception {
init();
}
public void init() {
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.selectAll();
if (!CollectionUtils.isEmpty(crossInfoPOList)) {
for (CrossInfoPO crossInfoPO : crossInfoPOList) {
String crossId = crossInfoPO.getId();
List<CrossSchemePO> crossSchemePOS = crossSchemeMapper.selectByCrossId(crossId);
Map<Integer, String> schemeIdNoMap = crossSchemePOS.stream().collect(Collectors.toMap(CrossSchemePO::getId, CrossSchemePO::getSchemeNo));
List<CrossPhasePO> crossPhasePOS = crossPhaseMapper.selectByCrossId(crossId);
if (!CollectionUtils.isEmpty(crossPhasePOS)) {
List<CrossPhaseDirTurnPojo> results = new ArrayList<>();
for (CrossPhasePO crossPhasePO : crossPhasePOS) {
CrossPhaseDirTurnPojo crossPhaseDirTurnPojo = new CrossPhaseDirTurnPojo();
String phaseNo = crossPhasePO.getPhaseNo();
crossPhaseDirTurnPojo.setCrossId(crossId);
crossPhaseDirTurnPojo.setPhaseNo(Integer.valueOf(phaseNo));
Integer planId = crossPhasePO.getPlanId();
String schemeNo = schemeIdNoMap.get(planId);
if (StringUtils.isNotBlank(schemeNo)) {
crossPhaseDirTurnPojo.setSchemeNo(Integer.valueOf(schemeNo));
}
Integer phaseId = crossPhasePO.getId();
List<CrossPhaseLightsPO> crossPhaseLightsPOList = crossPhaseLightsMapper.selectByCrossId(crossId);
List<Integer> phaseLightsList = crossPhaseLightsPOList.stream()
.filter(po -> Objects.equals(po.getPhaseId(), phaseId))
.map(CrossPhaseLightsPO::getLightsId).collect(Collectors.toList());
List<CrossLightsPO> crossLightsPOS = crossLightsMapper.selectByCrossId(crossId);
Map<Integer, List<CrossLightsPO>> phaseDirMap = crossLightsPOS.stream().filter(po -> phaseLightsList.contains(po.getId())).collect(Collectors.groupingBy(CrossLightsPO::getDir));
Map<Integer, List<Integer>> dirTurnMap = new HashMap<>();
for (Map.Entry<Integer, List<CrossLightsPO>> entry : phaseDirMap.entrySet()) {
Integer dir = entry.getKey();
List<Integer> turnList = entry.getValue().stream().map(CrossLightsPO::getTurn).collect(Collectors.toList());
dirTurnMap.put(dir, turnList);
crossPhaseDirTurnPojo.setDirTurnMap(dirTurnMap);
}
results.add(crossPhaseDirTurnPojo);
}
crossInfoMap.put(crossId, results);
}
}
}
}
}
......@@ -14,9 +14,9 @@ import java.util.Objects;
@AllArgsConstructor
@RequiredArgsConstructor
public enum DataBrainTurnEnum {
LEFT(12, 1),
RIGHT(13, 2),
STRAIGHT(11, 3),
LEFT(12, 1), // 左转
RIGHT(13, 2), //右转
STRAIGHT(11, 3), // 直行
TURN(31, 4),
OTHER(99, 99);
private Integer hisenseTurn;
......
package net.wanji.utc.hisense.pojo;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* @author duanruiming
* @date 2023/09/12 10:24
*/
@Data
public class CrossPhaseDirTurnPojo {
private String crossId;
private Integer phaseNo;
private Integer schemeNo;
private Map<Integer, List<Integer>> dirTurnMap;
}
......@@ -118,7 +118,6 @@ public class SignalStatusServiceImpl implements SignalStatusService {
if (StringUtils.endsWithIgnoreCase(lampStatus, "23")) {
lightsStatusVO.setPhaseId("0");
lightsStatusVO.setCyclePhaseCountDown(countDown);
break;
}
turnMap.put(String.valueOf(DataBrainTurnEnum.getWjTurn(roadFlowDirection)), DataBrainLampStatusEnum.getWjLampStatus(lampStatus));
}
......
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