Commit ab80a42a authored by zhouleilei's avatar zhouleilei

优化 方案配置列表 接口

parent 0ac399b2
...@@ -21,6 +21,7 @@ import net.wanji.web.po.scheme.CrossAccompanyPhasePO; ...@@ -21,6 +21,7 @@ import net.wanji.web.po.scheme.CrossAccompanyPhasePO;
import net.wanji.web.service.scheme.SchemeConfigService; import net.wanji.web.service.scheme.SchemeConfigService;
import net.wanji.web.vo.scheme.LaneIdsVO; import net.wanji.web.vo.scheme.LaneIdsVO;
import net.wanji.web.vo.scheme.LightIdVO; import net.wanji.web.vo.scheme.LightIdVO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -185,7 +186,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -185,7 +186,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
.filter(dto -> { .filter(dto -> {
LocalTime start = LocalTime.parse(dto.getStartTime()); // 将 startTime 转换为 LocalTime LocalTime start = LocalTime.parse(dto.getStartTime()); // 将 startTime 转换为 LocalTime
String endTime = dto.getEndTime(); String endTime = dto.getEndTime();
if ("24:00".equals(endTime)){ if ("24:00".equals(endTime)) {
endTime = "23:59"; endTime = "23:59";
} }
LocalTime end = LocalTime.parse(endTime); // 将 endTime 转换为 LocalTime LocalTime end = LocalTime.parse(endTime); // 将 endTime 转换为 LocalTime
...@@ -207,6 +208,15 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -207,6 +208,15 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private List<SaveSchemeConfigDTO.PhaseScheme> buildPhaseSchemeList(String crossId) { private List<SaveSchemeConfigDTO.PhaseScheme> buildPhaseSchemeList(String crossId) {
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = new ArrayList<>(); List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = new ArrayList<>();
List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.selectByCrossId(crossId); List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.selectByCrossId(crossId);
CrossPhasePO crossPhasePO = new CrossPhasePO();
crossPhasePO.setCrossId(crossId);
List<CrossPhasePO> phasePOList = crossPhaseMapper.listCrossPhasePO(crossPhasePO);
CrossPhaseLightsPO entity = new CrossPhaseLightsPO();
entity.setCrossId(crossId);
List<CrossPhaseLightsPO> crossPhaseLightsList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity);
List<BaseCrossLightsPO> baseCrossLightsPOList = baseCrossLightsMapper.selectByCrossId(crossId);
List<CrossLaneLightsPO> crossLaneLightsPOList = baseCrossLaneLightsMapper.listLightLane().stream().filter(x -> Objects.equals(x.getCrossId(), crossId)).collect(Collectors.toList());
List<LaneInfoPO> laneInfoPOList = laneInfoMapper.selectBycrossIdAll(crossId);
for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) { for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) {
SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme(); SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme();
phaseScheme.setSchemeNo(baseCrossSchemePO.getSchemeNo()); phaseScheme.setSchemeNo(baseCrossSchemePO.getSchemeNo());
...@@ -214,10 +224,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -214,10 +224,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
phaseScheme.setSchemeId(baseCrossSchemePO.getId()); phaseScheme.setSchemeId(baseCrossSchemePO.getId());
// 获取协调相位号 // 获取协调相位号
Integer coordPhaseId = baseCrossSchemePO.getCoordPhase(); Integer coordPhaseId = baseCrossSchemePO.getCoordPhase();
if (coordPhaseId != null) { if (coordPhaseId != null && CollectionUtils.isNotEmpty(phasePOList)) {
CrossPhasePO crossPhasePO = crossPhaseMapper.selectById(coordPhaseId); List<CrossPhasePO> crossPhasePOList = phasePOList.stream().filter(x -> x.getId() == coordPhaseId).collect(Collectors.toList());
if (crossPhasePO != null) { if (CollectionUtils.isNotEmpty(crossPhasePOList)) {
phaseScheme.setCoordPhaseNo(crossPhasePO.getPhaseNo()); CrossPhasePO phasePO = crossPhasePOList.get(0);
phaseScheme.setCoordPhaseNo(phasePO.getPhaseNo());
} }
} }
phaseScheme.setCycle(baseCrossSchemePO.getCycle()); phaseScheme.setCycle(baseCrossSchemePO.getCycle());
...@@ -225,17 +236,25 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -225,17 +236,25 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
phaseScheme.setStatus(baseCrossSchemePO.getStatus()); phaseScheme.setStatus(baseCrossSchemePO.getStatus());
// 构造环列表 // 构造环列表
String schemeNo = phaseScheme.getSchemeNo(); String schemeNo = phaseScheme.getSchemeNo();
Integer schemeId = baseCrossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
Integer schemeId = null;
List<BaseCrossSchemePO> schemePOS = baseCrossSchemePOList.stream().filter(x -> x.getSchemeNo().equals(schemeNo)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(schemePOS)) {
BaseCrossSchemePO schemePO = schemePOS.get(0);
schemeId = schemePO.getId();
}
//TODO
List<SaveSchemeConfigDTO.RingListElement> ringList = buildRingList(crossId, schemeId); List<SaveSchemeConfigDTO.RingListElement> ringList = buildRingList(crossId, schemeId);
phaseScheme.setRingList(ringList); phaseScheme.setRingList(ringList);
// 构造特殊控制列表 // 构造特殊控制列表-(优化后,优化前,调用的是 buildSpecialControlList)
List<SaveSchemeConfigDTO.PhaseListElement> specialControlList = buildSpecialControlList(crossId, schemeId); List<SaveSchemeConfigDTO.PhaseListElement> specialControlList = buildSpecialControlListNew(crossLaneLightsPOList, laneInfoPOList, phasePOList, crossPhaseLightsList, baseCrossLightsPOList, crossId, schemeId);
phaseScheme.setSpecialControlModeList(specialControlList); phaseScheme.setSpecialControlModeList(specialControlList);
phaseSchemeList.add(phaseScheme); phaseSchemeList.add(phaseScheme);
} }
return phaseSchemeList; return phaseSchemeList;
} }
/** /**
* 通过方案号和路口号构造方案列表 * 通过方案号和路口号构造方案列表
* *
...@@ -244,9 +263,9 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -244,9 +263,9 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
* @author Kent HAN * @author Kent HAN
* @date 2023/1/12 9:23 * @date 2023/1/12 9:23
*/ */
public List<SaveSchemeConfigDTO.PhaseScheme> buildPhaseSchemeListByCrossIdAndSchemeNo(String crossId,String schemeNo) { public List<SaveSchemeConfigDTO.PhaseScheme> buildPhaseSchemeListByCrossIdAndSchemeNo(String crossId, String schemeNo) {
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = new ArrayList<>(); List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = new ArrayList<>();
List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.listCrossSchemeInfo(crossId,schemeNo,null); List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.listCrossSchemeInfo(crossId, schemeNo, null);
for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) { for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) {
SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme(); SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme();
phaseScheme.setSchemeNo(baseCrossSchemePO.getSchemeNo()); phaseScheme.setSchemeNo(baseCrossSchemePO.getSchemeNo());
...@@ -276,6 +295,65 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -276,6 +295,65 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
return phaseSchemeList; return phaseSchemeList;
} }
/**
* 构造特殊控制列表
*
* @param crossId
* @param schemeId
* @return java.util.List<net.wanji.web.dto.SaveSchemeConfigDTO.PhaseListElement>
* @author Kent HAN
* @date 2023/1/12 17:53
*/
private List<SaveSchemeConfigDTO.PhaseListElement> buildSpecialControlListNew(List<CrossLaneLightsPO> crossLaneLightsPOList, List<LaneInfoPO> laneInfoPOList, List<CrossPhasePO> phasePOList, List<CrossPhaseLightsPO> crossPhaseLightsList, List<BaseCrossLightsPO> baseCrossLightsPOList, String crossId, Integer schemeId) {
List<SaveSchemeConfigDTO.PhaseListElement> phaseListElementList = new ArrayList<>();
List<CrossPhasePO> crossPhasePOList = phasePOList.stream().filter(x -> x.getPlanId() == schemeId).collect(Collectors.toList());
// List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeId);
for (CrossPhasePO crossPhasePO : crossPhasePOList) {
SaveSchemeConfigDTO.PhaseListElement phaseListElement = new SaveSchemeConfigDTO.PhaseListElement();
Integer controlMode = crossPhasePO.getControlMode();
if (Objects.equals(controlMode, ControlModeConst.IS_GREEN)
|| Objects.equals(controlMode, ControlModeConst.IS_RED)
|| Objects.equals(controlMode, ControlModeConst.GREEN_FLASH)
|| Objects.equals(controlMode, ControlModeConst.YELLOW_FLASH)) {
String phaseNo = crossPhasePO.getPhaseNo();
phaseListElement.setPhaseNo(phaseNo);
phaseListElement.setPhaseType(crossPhasePO.getPhaseType());
phaseListElement.setMinGreenTime(crossPhasePO.getMinGreenTime());
phaseListElement.setMaxGreenTime(crossPhasePO.getMaxGreenTime());
phaseListElement.setGreenTime(crossPhasePO.getGreenTime());
phaseListElement.setGreenFlashTime(crossPhasePO.getGreenFlashTime());
phaseListElement.setYellowFlashTime(crossPhasePO.getYellowFlashTime());
phaseListElement.setRedFlashTime(crossPhasePO.getRedFlashTime());
phaseListElement.setYellowTime(crossPhasePO.getYellowTime());
phaseListElement.setRedTime(crossPhasePO.getRedTime());
phaseListElement.setYellowFlash(crossPhasePO.getYellowFlashTime());
if (controlMode.equals(ControlModeConst.IS_RED)) {
phaseListElement.setIsRed(1);
} else if (controlMode.equals(ControlModeConst.IS_GREEN)) {
phaseListElement.setIsGreen(1);
} else if (controlMode.equals(ControlModeConst.GREEN_FLASH)) {
phaseListElement.setGreenFlash(1);
} else if (controlMode.equals(ControlModeConst.YELLOW_FLASH)) {
phaseListElement.setYellowFlash(1);
}
phaseListElement.setAccompanyPhaseNoList(new ArrayList<>());
// Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, phaseNo);
Integer phaseId = null;
List<CrossPhasePO> phasePOS = phasePOList.stream().filter(x -> x.getPlanId() == schemeId && phaseNo.equals(x.getPhaseNo())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(phasePOS)) {
CrossPhasePO crossPhasePO1 = phasePOS.get(0);
phaseId = crossPhasePO1.getId();
}
// List<SaveSchemeConfigDTO.DirListElement> dirList = buildDirList(crossId, phaseId);
List<SaveSchemeConfigDTO.DirListElement> dirList = buildDirListNew(crossLaneLightsPOList, laneInfoPOList, crossPhaseLightsList, baseCrossLightsPOList, crossId, phaseId);
phaseListElement.setDirList(dirList);
phaseListElementList.add(phaseListElement);
}
}
return phaseListElementList;
}
/** /**
* 构造特殊控制列表 * 构造特殊控制列表
* *
...@@ -289,6 +367,12 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -289,6 +367,12 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
List<SaveSchemeConfigDTO.PhaseListElement> phaseListElementList = new ArrayList<>(); List<SaveSchemeConfigDTO.PhaseListElement> phaseListElementList = new ArrayList<>();
List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeId); List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeId);
CrossPhaseLightsPO entity = new CrossPhaseLightsPO();
entity.setCrossId(crossId);
List<CrossPhaseLightsPO> crossPhaseLightsList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity);
List<BaseCrossLightsPO> baseCrossLightsPOS = baseCrossLightsMapper.selectByCrossId(crossId);
List<CrossLaneLightsPO> crossLaneLightsPOList = baseCrossLaneLightsMapper.selectByCrossId(crossId);
List<LaneInfoPO> laneInfoPOList = laneInfoMapper.selectBycrossIdAll(crossId);
for (CrossPhasePO crossPhasePO : crossPhasePOList) { for (CrossPhasePO crossPhasePO : crossPhasePOList) {
SaveSchemeConfigDTO.PhaseListElement phaseListElement = new SaveSchemeConfigDTO.PhaseListElement(); SaveSchemeConfigDTO.PhaseListElement phaseListElement = new SaveSchemeConfigDTO.PhaseListElement();
Integer controlMode = crossPhasePO.getControlMode(); Integer controlMode = crossPhasePO.getControlMode();
...@@ -319,7 +403,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -319,7 +403,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
} }
phaseListElement.setAccompanyPhaseNoList(new ArrayList<>()); phaseListElement.setAccompanyPhaseNoList(new ArrayList<>());
Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, phaseNo); Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, phaseNo);
List<SaveSchemeConfigDTO.DirListElement> dirList = buildDirList(crossId, phaseId); List<SaveSchemeConfigDTO.DirListElement> dirList = buildDirList(crossPhaseLightsList,baseCrossLightsPOS,crossLaneLightsPOList,laneInfoPOList,crossId, phaseId);
phaseListElement.setDirList(dirList); phaseListElement.setDirList(dirList);
phaseListElementList.add(phaseListElement); phaseListElementList.add(phaseListElement);
...@@ -394,8 +478,28 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -394,8 +478,28 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private List<SaveSchemeConfigDTO.PhaseListElement> buildPhaseList( private List<SaveSchemeConfigDTO.PhaseListElement> buildPhaseList(
String crossId, Integer schemeId, Integer ringNo, Integer groupNumber) { String crossId, Integer schemeId, Integer ringNo, Integer groupNumber) {
List<SaveSchemeConfigDTO.PhaseListElement> phaseList = new ArrayList<>(); List<SaveSchemeConfigDTO.PhaseListElement> phaseList = new ArrayList<>();
List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByGroupNo(crossId, schemeId, ringNo, groupNumber); // List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByGroupNo(crossId, schemeId, ringNo, groupNumber);
for (CrossPhasePO crossPhasePO : crossPhasePOList) { CrossPhasePO entity = new CrossPhasePO();
entity.setCrossId(crossId);
List<CrossPhasePO> phasePOList = crossPhaseMapper.listCrossPhasePO(entity);
CrossPhaseLightsPO crossPhaseLightsPO = new CrossPhaseLightsPO();
crossPhaseLightsPO.setCrossId(crossId);
List<CrossPhaseLightsPO> crossPhaseLightsList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(crossPhaseLightsPO);
List<BaseCrossLightsPO> baseCrossLightsPOS = baseCrossLightsMapper.selectByCrossId(crossId);
List<CrossLaneLightsPO> crossLaneLightsPOList = baseCrossLaneLightsMapper.selectByCrossId(crossId);
List<LaneInfoPO> laneInfoPOList = laneInfoMapper.selectBycrossIdAll(crossId);
if (CollectionUtil.isNotEmpty(phasePOList)) {
phasePOList = phasePOList.stream()
.sorted(Comparator.comparing(CrossPhasePO::getSort))
.collect(Collectors.toList());
List<CrossPhasePO> phasePOS = phasePOList.stream()
.filter(x -> Objects.equals(x.getPlanId(), schemeId) && Objects.equals(x.getRingNo(), ringNo) && Objects.equals(x.getGroupNo(), groupNumber))
.collect(Collectors.toList());
for (CrossPhasePO crossPhasePO : phasePOS) {
SaveSchemeConfigDTO.PhaseListElement phaseListElement = new SaveSchemeConfigDTO.PhaseListElement(); SaveSchemeConfigDTO.PhaseListElement phaseListElement = new SaveSchemeConfigDTO.PhaseListElement();
phaseListElement.setPhaseId(crossPhasePO.getId()); phaseListElement.setPhaseId(crossPhasePO.getId());
String phaseNo = crossPhasePO.getPhaseNo(); String phaseNo = crossPhasePO.getPhaseNo();
...@@ -421,23 +525,39 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -421,23 +525,39 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
} else if (Objects.equals(controlMode, ControlModeConst.GREEN_FLASH)) { } else if (Objects.equals(controlMode, ControlModeConst.GREEN_FLASH)) {
phaseListElement.setGreenFlash(1); phaseListElement.setGreenFlash(1);
} }
// 伴随相位的母相位列表 // 伴随相位的母相位列表
Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, phaseNo); // Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, phaseNo);
List<CrossPhasePO> crossPhasePOS = phasePOS.stream()
.filter(x -> Objects.equals(x.getPlanId(), schemeId) && Objects.equals(x.getPhaseNo(), phaseNo))
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(crossPhasePOS)) {
CrossPhasePO phasePO = crossPhasePOS.get(0);
Integer phaseId = phasePO.getId();
/*
//暂时不考虑伴随相位
if (phaseType == 3) { if (phaseType == 3) {
List<String> superPhaseNoList = new ArrayList<>(); List<String> superPhaseNoList = new ArrayList<>();
//TODO 可以提出来
List<Integer> superIdList = crossAccompanyPhaseMapper.selectByPhaseId(phaseId); List<Integer> superIdList = crossAccompanyPhaseMapper.selectByPhaseId(phaseId);
//TODO 可以提出来
List<CrossPhasePO> superList = crossPhaseMapper.selectByIds(superIdList); List<CrossPhasePO> superList = crossPhaseMapper.selectByIds(superIdList);
for (CrossPhasePO phasePO : superList) { for (CrossPhasePO phasePO : superList) {
superPhaseNoList.add(phasePO.getPhaseNo()); superPhaseNoList.add(phasePO.getPhaseNo());
} }
phaseListElement.setAccompanyPhaseNoList(superPhaseNoList); phaseListElement.setAccompanyPhaseNoList(superPhaseNoList);
} }*/
// 构造方向列表 // 构造方向列表
List<SaveSchemeConfigDTO.DirListElement> dirList = buildDirList(crossId, phaseId); List<SaveSchemeConfigDTO.DirListElement> dirList = buildDirList(crossPhaseLightsList,baseCrossLightsPOS,crossLaneLightsPOList,laneInfoPOList,crossId, phaseId);
phaseListElement.setDirList(dirList); phaseListElement.setDirList(dirList);
phaseList.add(phaseListElement); phaseList.add(phaseListElement);
}
}
} }
return phaseList; return phaseList;
} }
...@@ -450,46 +570,139 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -450,46 +570,139 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
* @author Kent HAN * @author Kent HAN
* @date 2023/1/12 15:02 * @date 2023/1/12 15:02
*/ */
private List<SaveSchemeConfigDTO.DirListElement> buildDirList(String crossId, Integer phaseId) { private List<SaveSchemeConfigDTO.DirListElement> buildDirListNew(List<CrossLaneLightsPO> crossLaneLightsPOList, List<LaneInfoPO> laneInfoPOList, List<CrossPhaseLightsPO> crossPhaseLightsList, List<BaseCrossLightsPO> baseCrossLightsPOList, String crossId, Integer phaseId) {
List<SaveSchemeConfigDTO.DirListElement> dirList = new ArrayList<>(); List<SaveSchemeConfigDTO.DirListElement> dirList = new ArrayList<>();
CrossPhaseLightsPO entity = new CrossPhaseLightsPO(); /*CrossPhaseLightsPO entity = new CrossPhaseLightsPO();
entity.setPhaseId(phaseId); entity.setPhaseId(phaseId);
List<CrossPhaseLightsPO> crossPhaseLightsPOList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity); List<CrossPhaseLightsPO> crossPhaseLightsPOList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity);
*/
if (CollectionUtil.isNotEmpty(crossPhaseLightsList)) {
List<CrossPhaseLightsPO> crossPhaseLightsPOList = crossPhaseLightsList.stream().filter(x -> x.getPhaseId().equals(phaseId)).collect(Collectors.toList());
Set<Integer> dirSet = new HashSet<>(); Set<Integer> dirSet = new HashSet<>();
for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList) { for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList) {
Integer lightsId = crossPhaseLightsPO.getLightsId(); Integer lightsId = crossPhaseLightsPO.getLightsId();
BaseCrossLightsPO crossLightsPO = baseCrossLightsMapper.selectById(lightsId); /*BaseCrossLightsPO crossLightsPO = baseCrossLightsMapper.selectById(lightsId);
if (crossLightsPO != null) { if (crossLightsPO != null) {
Integer dir = crossLightsPO.getDir(); Integer dir = crossLightsPO.getDir();
dirSet.add(dir); dirSet.add(dir);
}*/
if (CollectionUtils.isNotEmpty(baseCrossLightsPOList)) {
List<BaseCrossLightsPO> collect = baseCrossLightsPOList.stream().filter(x -> x.getId().equals(lightsId)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
BaseCrossLightsPO crossLightsPO = collect.get(0);
Integer dir = crossLightsPO.getDir();
dirSet.add(dir);
} }
} }
}
for (Integer dir : dirSet) { for (Integer dir : dirSet) {
SaveSchemeConfigDTO.DirListElement dirListElement = new SaveSchemeConfigDTO.DirListElement(); SaveSchemeConfigDTO.DirListElement dirListElement = new SaveSchemeConfigDTO.DirListElement();
// 前端灯组方向就是车道方向 // 前端灯组方向就是车道方向
// Integer laneDir = CrossLisghtsLaneDirEnum.getLaneDirByLightsDir(dir);
dirListElement.setDir(dir); dirListElement.setDir(dir);
// 是否有行人相位 // 是否有行人相位
List<CrossPhaseLightsPO> crossPhaseLightsPOList1 = baseCrossPhaseLightsMapper.selectByPhaseId(phaseId); // List<CrossPhaseLightsPO> crossPhaseLightsPOList1 = baseCrossPhaseLightsMapper.selectByPhaseId(phaseId);
List<CrossPhaseLightsPO> crossPhaseLightsPOList1 = crossPhaseLightsList.stream().filter(x -> x.getPhaseId().equals(phaseId)).collect(Collectors.toList());
for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList1) { for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList1) {
Integer lightsId = crossPhaseLightsPO.getLightsId(); Integer lightsId = crossPhaseLightsPO.getLightsId();
BaseCrossLightsPO baseCrossLightsPO = baseCrossLightsMapper.selectById(lightsId); // BaseCrossLightsPO baseCrossLightsPO = baseCrossLightsMapper.selectById(lightsId);
List<BaseCrossLightsPO> collect = baseCrossLightsPOList.stream().filter(x -> x.getId().equals(lightsId)).collect(Collectors.toList());
BaseCrossLightsPO baseCrossLightsPO = collect.get(0);
Integer lightsDir = baseCrossLightsPO.getDir(); Integer lightsDir = baseCrossLightsPO.getDir();
Integer type = baseCrossLightsPO.getType(); Integer type = baseCrossLightsPO.getType();
if (type >= 20 && type < 30 && Objects.equals(lightsDir, dir)) { if (type >= 20 && type < 30 && Objects.equals(lightsDir, dir)) {
dirListElement.setHasPersonPhase(1); dirListElement.setHasPersonPhase(1);
} }
} }
List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsMapper.selectByCrossIdAndDir(crossId, dir); /*List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsMapper.selectByCrossIdAndDir(crossId, dir);
for (BaseCrossLightsPO crossLightsPO : crossLightsPOList) { for (BaseCrossLightsPO crossLightsPO : crossLightsPOList) {
Integer type = crossLightsPO.getType(); Integer type = crossLightsPO.getType();
}*/
// 构造车道列表
// List<SaveSchemeConfigDTO.LaneListElement> laneList = buildLaneList(dir, phaseId, crossId);
List<SaveSchemeConfigDTO.LaneListElement> laneList = buildLaneListNew(crossLaneLightsPOList, laneInfoPOList, crossPhaseLightsList, baseCrossLightsPOList, dir, phaseId, crossId);
dirListElement.setLaneList(laneList);
dirList.add(dirListElement);
}
}
return dirList;
}
/**
* 构造方向列表
*
* @param crossId
* @param phaseId
* @return java.util.List<net.wanji.web.dto.SaveSchemeConfigDTO.DirListElement>
* @author Kent HAN
* @date 2023/1/12 15:02
*/
private List<SaveSchemeConfigDTO.DirListElement> buildDirList(List<CrossPhaseLightsPO> crossPhaseLightsList,List<BaseCrossLightsPO> baseCrossLightsPOS,List<CrossLaneLightsPO> crossLaneLightsPOList,List<LaneInfoPO> laneInfoPOList,String crossId, Integer phaseId) {
List<SaveSchemeConfigDTO.DirListElement> dirList = new ArrayList<>();
/*CrossPhaseLightsPO entity = new CrossPhaseLightsPO();
entity.setPhaseId(phaseId);
List<CrossPhaseLightsPO> crossPhaseLightsPOList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity);*/
if (CollectionUtil.isNotEmpty(crossPhaseLightsList)){
List<CrossPhaseLightsPO> crossPhaseLightsPOList = crossPhaseLightsList.stream().filter(x -> Objects.equals(x.getPhaseId(), phaseId)).collect(Collectors.toList());
Set<Integer> dirSet = new HashSet<>();
for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList) {
Integer lightsId = crossPhaseLightsPO.getLightsId();
/*BaseCrossLightsPO crossLightsPO = baseCrossLightsMapper.selectById(lightsId);
if (crossLightsPO != null) {
Integer dir = crossLightsPO.getDir();
dirSet.add(dir);
}*/
List<BaseCrossLightsPO> collected = baseCrossLightsPOS.stream().filter(x -> Objects.equals(x.getId(), lightsId)).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(collected)){
BaseCrossLightsPO lightsPO = collected.get(0);
Integer dir = lightsPO.getDir();
dirSet.add(dir);
}
}
for (Integer dir : dirSet) {
SaveSchemeConfigDTO.DirListElement dirListElement = new SaveSchemeConfigDTO.DirListElement();
// 前端灯组方向就是车道方向
// Integer laneDir = CrossLisghtsLaneDirEnum.getLaneDirByLightsDir(dir);
dirListElement.setDir(dir);
// 是否有行人相位
// List<CrossPhaseLightsPO> crossPhaseLightsPOList1 = baseCrossPhaseLightsMapper.selectByPhaseId(phaseId);
//重复代码,crossPhaseLightsPOList和crossPhaseLightsPOList1 是同一个结果集
for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList) {
Integer lightsId = crossPhaseLightsPO.getLightsId();
/* BaseCrossLightsPO baseCrossLightsPO = baseCrossLightsMapper.selectById(lightsId);
Integer lightsDir = baseCrossLightsPO.getDir();
Integer type = baseCrossLightsPO.getType();
if (type >= 20 && type < 30 && Objects.equals(lightsDir, dir)) {
dirListElement.setHasPersonPhase(1);
}*/
List<BaseCrossLightsPO> collected = baseCrossLightsPOS.stream().filter(x -> Objects.equals(x.getId(), lightsId)).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(collected)){
BaseCrossLightsPO lightsPO = collected.get(0);
Integer lightsDir = lightsPO.getDir();
Integer type = lightsPO.getType();
if (type >= 20 && type < 30 && Objects.equals(lightsDir, dir)) {
dirListElement.setHasPersonPhase(1);
}
dirSet.add(dir);
} }
}
//注释无效代码
/* List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsMapper.selectByCrossIdAndDir(crossId, dir);
for (BaseCrossLightsPO crossLightsPO : crossLightsPOList) {
Integer type = crossLightsPO.getType();
}*/
// 构造车道列表 // 构造车道列表
List<SaveSchemeConfigDTO.LaneListElement> laneList = buildLaneList(dir, phaseId, crossId); List<SaveSchemeConfigDTO.LaneListElement> laneList = buildLaneList(crossPhaseLightsList,baseCrossLightsPOS,crossLaneLightsPOList,laneInfoPOList,dir, phaseId, crossId);
dirListElement.setLaneList(laneList); dirListElement.setLaneList(laneList);
dirList.add(dirListElement); dirList.add(dirListElement);
} }
}
return dirList; return dirList;
} }
...@@ -503,25 +716,45 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -503,25 +716,45 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
* @author Kent HAN * @author Kent HAN
* @date 2023/1/12 15:02 * @date 2023/1/12 15:02
*/ */
private List<SaveSchemeConfigDTO.LaneListElement> buildLaneList(Integer dir, Integer phaseId, String crossId) { private List<SaveSchemeConfigDTO.LaneListElement> buildLaneListNew(List<CrossLaneLightsPO> crossLaneLightsPOList, List<LaneInfoPO> laneInfoPOList, List<CrossPhaseLightsPO> crossPhaseLightsList, List<BaseCrossLightsPO> baseCrossLightsPOList, Integer dir, Integer phaseId, String crossId) {
List<SaveSchemeConfigDTO.LaneListElement> laneList = new ArrayList<>(); List<SaveSchemeConfigDTO.LaneListElement> laneList = new ArrayList<>();
CrossPhaseLightsPO entity = new CrossPhaseLightsPO(); /*CrossPhaseLightsPO entity = new CrossPhaseLightsPO();
entity.setPhaseId(phaseId); entity.setPhaseId(phaseId);
List<CrossPhaseLightsPO> crossPhaseLightsPOList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity); List<CrossPhaseLightsPO> crossPhaseLightsPOList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity);
List<Integer> lightsIds = crossPhaseLightsPOList.stream() List<Integer> lightsIds = crossPhaseLightsPOList.stream()
.map(CrossPhaseLightsPO::getLightsId) .map(CrossPhaseLightsPO::getLightsId)
.collect(Collectors.toList()); .collect(Collectors.toList());
List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsMapper.selectByLightsIdsAndDir(lightsIds, dir); List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsMapper.selectByLightsIdsAndDir(lightsIds, dir);
*/
List<BaseCrossLightsPO> crossLightsPOList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(crossPhaseLightsList)) {
List<Integer> lightsIds = crossPhaseLightsList.stream().filter(x -> Objects.equals(x.getPhaseId(), phaseId)).map(CrossPhaseLightsPO::getLightsId)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(lightsIds)) {
crossLightsPOList = baseCrossLightsPOList.stream().filter(x -> Objects.equals(x.getDir(), dir) && lightsIds.contains(x.getId())).collect(Collectors.toList());
}
}
for (BaseCrossLightsPO crossLightsPO : crossLightsPOList) { for (BaseCrossLightsPO crossLightsPO : crossLightsPOList) {
Integer type = crossLightsPO.getType(); Integer type = crossLightsPO.getType();
if (type < 20 || type >= 30) { // 非行人灯 if (type < 20 || type >= 30) { // 非行人灯
Integer lightsId = crossLightsPO.getId(); Integer lightsId = crossLightsPO.getId();
List<CrossLaneLightsPO> crossLaneLightsPOList = baseCrossLaneLightsMapper.selectByLightsId(lightsId);
/*List<CrossLaneLightsPO> crossLaneLightsPOList = baseCrossLaneLightsMapper.selectByLightsId(lightsId);
List<String> laneIds = crossLaneLightsPOList.stream()
.map(CrossLaneLightsPO::getLaneId)
.collect(Collectors.toList());*/
if (CollectionUtils.isNotEmpty(crossLaneLightsPOList)) {
List<String> laneIds = crossLaneLightsPOList.stream() List<String> laneIds = crossLaneLightsPOList.stream()
.filter(x -> Objects.equals(x.getLightsId(), lightsId))
.map(CrossLaneLightsPO::getLaneId) .map(CrossLaneLightsPO::getLaneId)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(laneIds)) {
List<LaneInfoPO> laneInfoPOList = laneInfoMapper.selectByLaneIds(laneIds); if (CollectionUtil.isNotEmpty(laneIds) && CollectionUtil.isNotEmpty(laneInfoPOList)) {
// List<LaneInfoPO> laneInfoPOList = laneInfoMapper.selectByLaneIds(laneIds);
laneInfoPOList = laneInfoPOList.stream().filter(x -> laneIds.contains(x.getId())).collect(Collectors.toList());
// 根据sort排序 // 根据sort排序
List<LaneInfoPO> collect = laneInfoPOList.stream() List<LaneInfoPO> collect = laneInfoPOList.stream()
.sorted(Comparator.comparing(LaneInfoPO::getSort)) .sorted(Comparator.comparing(LaneInfoPO::getSort))
...@@ -540,6 +773,83 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -540,6 +773,83 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
} }
} }
} }
}
List<SaveSchemeConfigDTO.LaneListElement> sortedList = laneList.stream()
.sorted(Comparator.comparing(SaveSchemeConfigDTO.LaneListElement::getLaneId))
.collect(Collectors.toList());
return sortedList;
}
/**
* 构造车道列表
*
* @param dir
* @param phaseId
* @param crossId
* @return java.util.List<net.wanji.web.dto.SaveSchemeConfigDTO.LaneListElement>
* @author Kent HAN
* @date 2023/1/12 15:02
*/
private List<SaveSchemeConfigDTO.LaneListElement> buildLaneList(List<CrossPhaseLightsPO> crossPhaseLightsList,List<BaseCrossLightsPO> baseCrossLightsPOSList,List<CrossLaneLightsPO> crossLaneLightsPOList,List<LaneInfoPO> laneInfoPOList,Integer dir, Integer phaseId, String crossId) {
List<SaveSchemeConfigDTO.LaneListElement> laneList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(crossPhaseLightsList)){
List<CrossPhaseLightsPO> crossPhaseLightsPOList = crossPhaseLightsList.stream().filter(x -> Objects.equals(x.getPhaseId(), phaseId)).collect(Collectors.toList());
/*CrossPhaseLightsPO entity = new CrossPhaseLightsPO();
entity.setPhaseId(phaseId);
List<CrossPhaseLightsPO> crossPhaseLightsPOList = baseCrossPhaseLightsMapper.listCrossPhaseLightsPO(entity);*/
List<Integer> lightsIds = crossPhaseLightsPOList.stream()
.map(CrossPhaseLightsPO::getLightsId)
.collect(Collectors.toList());
// List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsMapper.selectByLightsIdsAndDir(lightsIds, dir);
if (CollectionUtil.isNotEmpty(baseCrossLightsPOSList) && CollectionUtil.isNotEmpty(lightsIds)){
List<BaseCrossLightsPO> crossLightsPOList = baseCrossLightsPOSList.stream().filter(x -> Objects.equals(x.getDir(), dir) && lightsIds.contains(x.getId())).collect(Collectors.toList());
for (BaseCrossLightsPO crossLightsPO : crossLightsPOList) {
Integer type = crossLightsPO.getType();
if (type < 20 || type >= 30) { // 非行人灯
Integer lightsId = crossLightsPO.getId();
/*List<CrossLaneLightsPO> crossLaneLightsPOList = baseCrossLaneLightsMapper.selectByLightsId(lightsId);
List<String> laneIds = crossLaneLightsPOList.stream()
.map(CrossLaneLightsPO::getLaneId)
.collect(Collectors.toList());*/
if (CollectionUtil.isNotEmpty(crossLaneLightsPOList)){
List<String> laneIds = crossLaneLightsPOList.stream()
.filter(x -> Objects.equals(x.getLightsId(), lightsId))
.map(CrossLaneLightsPO::getLaneId)
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(laneIds) && CollectionUtil.isNotEmpty(laneInfoPOList)) {
/* List<LaneInfoPO> laneInfoPOList = laneInfoMapper.selectByLaneIds(laneIds);
// 根据sort排序
List<LaneInfoPO> collect = laneInfoPOList.stream()
.sorted(Comparator.comparing(LaneInfoPO::getSort))
.collect(Collectors.toList());*/
List<LaneInfoPO> laneInfoList = laneInfoPOList.stream()
.filter(x -> laneIds.contains(x.getId()))
.sorted(Comparator.comparing(LaneInfoPO::getSort))
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(laneInfoList)){
// 根据转向去重
TreeSet<LaneInfoPO> laneInfoPOTreeSet = laneInfoList.stream().collect(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(LaneInfoPO::getTurn))));
for (LaneInfoPO laneInfoPO : laneInfoPOTreeSet) {
SaveSchemeConfigDTO.LaneListElement laneListElement = new SaveSchemeConfigDTO.LaneListElement();
laneListElement.setDirection(laneInfoPO.getTurn());
laneListElement.setLaneType(laneInfoPO.getCategory());
laneListElement.setLaneId(laneInfoPO.getId());
laneListElement.setLightsId(lightsId);
laneList.add(laneListElement);
}
}
}
}
}
}
}
}
List<SaveSchemeConfigDTO.LaneListElement> sortedList = laneList.stream() List<SaveSchemeConfigDTO.LaneListElement> sortedList = laneList.stream()
.sorted(Comparator.comparing(SaveSchemeConfigDTO.LaneListElement::getLaneId)) .sorted(Comparator.comparing(SaveSchemeConfigDTO.LaneListElement::getLaneId))
.collect(Collectors.toList()); .collect(Collectors.toList());
......
...@@ -30,6 +30,8 @@ public interface BaseCrossLaneLightsMapper { ...@@ -30,6 +30,8 @@ public interface BaseCrossLaneLightsMapper {
Integer selectLightsIdByLaneId(@Param("crossId") String crossId, @Param("laneId") String laneId); Integer selectLightsIdByLaneId(@Param("crossId") String crossId, @Param("laneId") String laneId);
List<CrossLaneLightsPO> selectByCrossId(@Param("crossId") String crossId);
List<CrossLaneLightsPO> selectLanesByLightId(@Param("crossId") String crossId, List<CrossLaneLightsPO> selectLanesByLightId(@Param("crossId") String crossId,
@Param("lightId") Integer lightId); @Param("lightId") Integer lightId);
......
...@@ -21,6 +21,8 @@ public interface LaneInfoMapper { ...@@ -21,6 +21,8 @@ public interface LaneInfoMapper {
List<LaneInfoPO> selectBycrossId(@Param("crossId") String crossId); List<LaneInfoPO> selectBycrossId(@Param("crossId") String crossId);
List<LaneInfoPO> selectBycrossIdAll(@Param("crossId") String crossId);
LaneInfoPO selectByCrossIdDirCode(@Param("crossId") String crossId, LaneInfoPO selectByCrossIdDirCode(@Param("crossId") String crossId,
@Param("dir") Integer dir, @Param("dir") Integer dir,
@Param("code") String code); @Param("code") String code);
......
...@@ -74,6 +74,13 @@ ...@@ -74,6 +74,13 @@
where cross_id = #{crossId} and lights_id = #{lightId} where cross_id = #{crossId} and lights_id = #{lightId}
</select> </select>
<select id="selectByCrossId" resultMap="BaseResultMap">
select
id,lights_id,lane_id,cross_id,gmt_create,gmt_modified
from t_base_cross_lane_lights
where cross_id = #{crossId}
</select>
<select id="selectByLightsId" resultMap="BaseResultMap"> <select id="selectByLightsId" resultMap="BaseResultMap">
select select
id,lights_id,lane_id,cross_id,gmt_create,gmt_modified id,lights_id,lane_id,cross_id,gmt_create,gmt_modified
......
...@@ -51,6 +51,13 @@ ...@@ -51,6 +51,13 @@
where cross_id = #{crossId} and type = 2 where cross_id = #{crossId} and type = 2
</select> </select>
<select id="selectBycrossIdAll" resultMap="BaseResultMap">
select
id,code,sort,type,dir,turn,category,cross_id,rid,length,width,wkt,gmt_create,gmt_modified
from t_base_lane_info
where cross_id = #{crossId}
</select>
<select id="selectByCrossIdDirCode" resultMap="BaseResultMap"> <select id="selectByCrossIdDirCode" resultMap="BaseResultMap">
select select
id,code,sort,type,dir,turn,category,cross_id,rid,length,width,wkt,gmt_create,gmt_modified id,code,sort,type,dir,turn,category,cross_id,rid,length,width,wkt,gmt_create,gmt_modified
......
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