Commit 0f849f2d authored by hanbing's avatar hanbing

方案管理-方案配置,保存方案配置

parent 525f6018
...@@ -17,46 +17,9 @@ public class SaveSchemeConfigDTO { ...@@ -17,46 +17,9 @@ public class SaveSchemeConfigDTO {
private String crossId; private String crossId;
@ApiModelProperty(value = "配时方式 1阶段式 2环式", required = true) @ApiModelProperty(value = "配时方式 1阶段式 2环式", required = true)
private Integer timeType; private Integer timeType;
private List<PhaseScheme> phaseSchemeList; // 相位方案列表 private List<PhaseScheme> phaseSchemeList; // 方案列表
private List<TimeScheme> timeSchemeList; // 配时方案列表
@Data @Data
public static class PhaseScheme { public static class PhaseScheme {
@ApiModelProperty(value = "方案号", required = true)
private String schemeNo;
@ApiModelProperty(value = "方案名称", required = true)
private String name;
private List<RingListElement> ringList; // 环列表
@Data
public static class RingListElement {
@ApiModelProperty(value = "环号", required = true)
private Integer ringNo;
List<PhaseListElement> phaseList; // 相位列表
@Data
public static class PhaseListElement {
@ApiModelProperty(value = "相位序号", required = false)
private Integer sort;
@ApiModelProperty(value = "相位号", required = true)
private String phaseNo;
private List<LaneListElement> laneList; // 车道列表
@Data
public static class LaneListElement {
@ApiModelProperty(value = "车道序号,从左车道开始编号11、12、13...", required = true)
private Integer sort;
@ApiModelProperty(value = "车道方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北", required = true)
private Integer dir;
@ApiModelProperty(value = "车道转向:1左转;2直行;3右转;4掉头;5左直;6直右;7左直右;8左右;9左转掉头;10直行掉头;11右转掉头;12左直掉头;13直右掉头;14左直右掉头;15左右掉头", required = true)
private Integer turn;
@ApiModelProperty(value = "车道类别:1机动车;2非机动车;3公交专用;4可变;5潮汐", required = true)
private Integer category;
}
}
}
}
@Data
public static class TimeScheme {
@ApiModelProperty(value = "方案号", required = true) @ApiModelProperty(value = "方案号", required = true)
private String schemeNo; private String schemeNo;
@ApiModelProperty(value = "方案名称", required = true) @ApiModelProperty(value = "方案名称", required = true)
...@@ -67,45 +30,79 @@ public class SaveSchemeConfigDTO { ...@@ -67,45 +30,79 @@ public class SaveSchemeConfigDTO {
private Integer cycle; private Integer cycle;
@ApiModelProperty(value = "相位差", required = true) @ApiModelProperty(value = "相位差", required = true)
private Integer offset; private Integer offset;
private List<TimeRingListElement> ringList; // 环列表 private List<RingListElement> ringList; // 环列表
@Data private List<PhaseListElement> specialControlModeList; // 特殊控制相位列表
public static class TimeRingListElement {
@ApiModelProperty(value = "环号", required = true) }
private Integer ringNo;
List<TimePhaseListElement> phaseList; // 相位列表 @Data
@Data public static class RingListElement {
public static class TimePhaseListElement { @ApiModelProperty(value = "环号", required = true)
@ApiModelProperty(value = "相位序号", required = false) private Integer ringNo;
private Integer sort; List<GroupListElement> groupList; // 组列表
@ApiModelProperty(value = "相位号", required = true)
private String phaseNo; }
private List<TimeLaneListElement> laneList; // 车道列表
@Data @Data
public static class TimeLaneListElement { public static class GroupListElement {
@ApiModelProperty(value = "车道方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北", required = true) @ApiModelProperty(value = "组号", required = true)
private Integer dir; private Integer groupNo;
@ApiModelProperty(value = "车道转向:1左转;2直行;3右转;4掉头;5左直;6直右;7左直右;8左右;9左转掉头;10直行掉头;11右转掉头;12左直掉头;13直右掉头;14左直右掉头;15左右掉头", required = true) List<PhaseListElement> phaseList; // 相位列表
private Integer turn; }
@ApiModelProperty(value = "车道类别:1机动车;2非机动车;3公交专用;4可变;5潮汐", required = true)
private Integer category; @Data
} public static class PhaseListElement {
@ApiModelProperty(value = "最小绿灯时间", required = true) @ApiModelProperty(value = "相位号", required = true)
private Integer minGreenTime = 0; private String phaseNo;
@ApiModelProperty(value = "最大绿灯时间", required = true) @ApiModelProperty(value = "相位序号", required = false)
private Integer maxGreenTime = 0; private Integer sort;
@ApiModelProperty(value = "绿灯时间", required = true) @ApiModelProperty(value = "相位类型 1实相位 2虚相位 3伴随相位", required = true)
private Integer greenTime = 0; private Integer phaseType;
@ApiModelProperty(value = "绿闪时间", required = true) @ApiModelProperty(value = "最小绿灯时间", required = true)
private Integer greenFlashTime = 0; private Integer minGreenTime;
@ApiModelProperty(value = "黄灯时间", required = true) @ApiModelProperty(value = "最大绿灯时间", required = true)
private Integer yellowTime = 0; private Integer maxGreenTime;
@ApiModelProperty(value = "红灯时间", required = true) @ApiModelProperty(value = "绿灯时间", required = true)
private Integer redTime = 0; private Integer greenTime;
@ApiModelProperty(value = "是否黄闪 0否 1是", required = true) @ApiModelProperty(value = "绿闪时间", required = true)
private Integer yellowFlash = 0; private Integer greenFlashTime;
@ApiModelProperty(value = "是否红闪 0否 1是", required = true) @ApiModelProperty(value = "黄闪时间", required = true)
private Integer redFlash = 0; private Integer yellowFlashTime;
} @ApiModelProperty(value = "红闪时间", required = true)
} private Integer redFlashTime;
@ApiModelProperty(value = "黄灯时间", required = true)
private Integer yellowTime;
@ApiModelProperty(value = "红灯时间", required = true)
private Integer redTime;
@ApiModelProperty(value = "是否黄闪 0否 1是", required = true)
private Integer yellowFlash;
@ApiModelProperty(value = "是否红灯 0否 1是", required = true)
private Integer isRed;
@ApiModelProperty(value = "是否绿灯 0否 1是", required = true)
private Integer isGreen;
@ApiModelProperty(value = "是否绿闪 0否 1是", required = true)
private Integer greenFlash;
@ApiModelProperty(value = "被伴随相位号列表", required = true)
List<String> accompanyPhaseNoList;
private List<DirListElement> dirList; // 方向列表
}
@Data
public static class DirListElement {
@ApiModelProperty(value = "车道进口方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北", required = true)
private Integer dir;
@ApiModelProperty(value = "是否有行人过街:0否;1是", required = true)
private Integer isPersonCross;
private List<LaneListElement> laneList; // 车道列表
}
@Data
public static class LaneListElement {
@ApiModelProperty(value = "车道序号,从左车道开始编号11、12、13...", required = true)
private Integer sort;
@ApiModelProperty(value = "车道转向:1左转;2直行;3右转;4掉头;5左直;6直右;7左直右;8左右;9左转掉头;10直行掉头;11右转掉头;12左直掉头;13直右掉头;14左直右掉头;15左右掉头", required = true)
private Integer turn;
@ApiModelProperty(value = "车道类别:1机动车;2非机动车;3公交专用;4可变;5潮汐", required = true)
private Integer category;
} }
} }
\ No newline at end of file
...@@ -19,4 +19,9 @@ public interface CrossPhaseMapper { ...@@ -19,4 +19,9 @@ public interface CrossPhaseMapper {
void insertOne(CrossPhasePO crossPhasePO); void insertOne(CrossPhasePO crossPhasePO);
void deleteByCrossId(@Param("crossId") String crossId); void deleteByCrossId(@Param("crossId") String crossId);
void updateAccompanyPhaseNo(@Param("coordPhaseNo") String coordPhaseNo,
@Param("phaseNoReal") String phaseNoReal,
@Param("planId") Integer planId,
@Param("crossId") String crossId);
} }
...@@ -16,7 +16,7 @@ public class CrossPhaseLightsPO { ...@@ -16,7 +16,7 @@ public class CrossPhaseLightsPO {
private Integer id ; private Integer id ;
/** 灯组ID */ /** 灯组ID */
@ApiModelProperty(name = "灯组ID",notes = "") @ApiModelProperty(name = "灯组ID",notes = "")
private Integer lightsId ; private Integer lightsId = 0 ;
/** 相位ID */ /** 相位ID */
@ApiModelProperty(name = "相位ID",notes = "") @ApiModelProperty(name = "相位ID",notes = "")
private Integer phaseId ; private Integer phaseId ;
......
...@@ -29,39 +29,51 @@ public class CrossPhasePO { ...@@ -29,39 +29,51 @@ public class CrossPhasePO {
/** 方案ID */ /** 方案ID */
@ApiModelProperty(name = "方案ID",notes = "") @ApiModelProperty(name = "方案ID",notes = "")
private Integer planId ; private Integer planId ;
/** 伴随相位ID */
@ApiModelProperty(name = "伴随相位号",notes = "")
private String accompanyPhaseNo = "";
/** 环号 */ /** 环号 */
@ApiModelProperty(name = "环号",notes = "") @ApiModelProperty(name = "环号",notes = "")
private Integer ringNo ; private Integer ringNo = 0 ;
/** 组号 */ /** 组号 */
@ApiModelProperty(name = "组号",notes = "") @ApiModelProperty(name = "组号",notes = "")
private Integer groupNo ; private Integer groupNo = 0;
/** 控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪 */
@ApiModelProperty(name = "相位类型 1实相位 2虚相位 3伴随相位",notes = "")
private Integer phaseType = 0;
/** 控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪 */ /** 控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪 */
@ApiModelProperty(name = "控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪",notes = "") @ApiModelProperty(name = "控制模式:1定周期;2绿灯;3黄灯;4红灯;5关灯;6绿闪;7黄闪;8红闪",notes = "")
private Integer controlMode ; private Integer controlMode ;
/** 相位时间 */ /** 相位时间 */
@ApiModelProperty(name = "相位时间",notes = "") @ApiModelProperty(name = "相位时间",notes = "")
private Integer phaseTime ; private Integer phaseTime= 0 ;
/** 绿灯时间 */ /** 绿灯时间 */
@ApiModelProperty(name = "绿灯时间",notes = "") @ApiModelProperty(name = "绿灯时间",notes = "")
private Integer greenTime ; private Integer greenTime= 0 ;
/** 绿闪时间 */ /** 绿闪时间 */
@ApiModelProperty(name = "绿闪时间",notes = "") @ApiModelProperty(name = "绿闪时间",notes = "")
private Integer greenFlashTime ; private Integer greenFlashTime= 0 ;
/** 黄闪时间 */
@ApiModelProperty(name = "黄闪时间",notes = "")
private Integer yellowFlashTime= 0 ;
/** 红闪时间 */
@ApiModelProperty(name = "红闪时间",notes = "")
private Integer redFlashTime= 0 ;
/** 行闪时间 */ /** 行闪时间 */
@ApiModelProperty(name = "行闪时间",notes = "") @ApiModelProperty(name = "行闪时间",notes = "")
private Integer pedFlashTime = 0; private Integer pedFlashTime = 0;
/** 黄灯时间 */ /** 黄灯时间 */
@ApiModelProperty(name = "黄灯时间",notes = "") @ApiModelProperty(name = "黄灯时间",notes = "")
private Integer yellowTime ; private Integer yellowTime= 0 ;
/** 红灯时间 */ /** 红灯时间 */
@ApiModelProperty(name = "红灯时间",notes = "") @ApiModelProperty(name = "红灯时间",notes = "")
private Integer redTime ; private Integer redTime= 0 ;
/** 最小绿灯时间 */ /** 最小绿灯时间 */
@ApiModelProperty(name = "最小绿灯时间",notes = "") @ApiModelProperty(name = "最小绿灯时间",notes = "")
private Integer minGreenTime ; private Integer minGreenTime= 0 ;
/** 最大绿灯时间 */ /** 最大绿灯时间 */
@ApiModelProperty(name = "最大绿灯时间",notes = "") @ApiModelProperty(name = "最大绿灯时间",notes = "")
private Integer maxGreenTime ; private Integer maxGreenTime= 0 ;
/** 创建时间 */ /** 创建时间 */
@ApiModelProperty(name = "创建时间",notes = "") @ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate ; private Date gmtCreate ;
......
...@@ -25,13 +25,13 @@ public class CrossSchemePO { ...@@ -25,13 +25,13 @@ public class CrossSchemePO {
private String crossId ; private String crossId ;
/** 周期 */ /** 周期 */
@ApiModelProperty(name = "周期",notes = "") @ApiModelProperty(name = "周期",notes = "")
private Integer cycle ; private Integer cycle = 0;
/** 协调相位ID */ /** 协调相位ID */
@ApiModelProperty(name = "协调相位ID",notes = "") @ApiModelProperty(name = "协调相位ID",notes = "")
private Integer coordPhase = 0 ; private Integer coordPhase = 0 ;
/** 相位差 */ /** 相位差 */
@ApiModelProperty(name = "相位差",notes = "") @ApiModelProperty(name = "相位差",notes = "")
private Integer offset ; private Integer offset = 0;
/** 数据来源:1信号机;2平台 */ /** 数据来源:1信号机;2平台 */
@ApiModelProperty(name = "数据来源:1信号机;2平台",notes = "") @ApiModelProperty(name = "数据来源:1信号机;2平台",notes = "")
private Integer source ; private Integer source ;
......
...@@ -23,8 +23,10 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -23,8 +23,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -103,18 +105,18 @@ public class CrossConfigServiceImpl implements CrossConfigService { ...@@ -103,18 +105,18 @@ public class CrossConfigServiceImpl implements CrossConfigService {
handleLaneData(saveLaneInfoDTO); handleLaneData(saveLaneInfoDTO);
} else { } else {
// 前端传过来的所有灯组代码列表 // 前端传过来的所有灯组代码列表
List<String> lightCodeList = new ArrayList<>(); Set<String> lightCodeSet = new HashSet<>();
// 保存灯组设置 // 保存灯组设置
handleLightsData(saveLaneInfoDTO, ledConfigList, lightCodeList); handleLightsData(saveLaneInfoDTO, ledConfigList, lightCodeSet);
// 保存车道配置(灯组-车道关系表) // 保存车道配置(灯组-车道关系表)
handleLaneConfig(saveLaneInfoDTO, lightCodeList); handleLaneConfig(saveLaneInfoDTO, lightCodeSet);
if (lightCodeList.size() != 0) { if (lightCodeSet.size() != 0) {
throw new RuntimeException("存在未配置的灯组号"); throw new RuntimeException("存在未配置的灯组号");
} }
} }
} }
private void handleLaneConfig(SaveLaneInfoDTO saveLaneInfoDTO, List<String> lightCodeList) { private void handleLaneConfig(SaveLaneInfoDTO saveLaneInfoDTO, Set<String> lightCodeSet) {
String crossId = saveLaneInfoDTO.getCrossId(); String crossId = saveLaneInfoDTO.getCrossId();
List<DirListElement> dirList = saveLaneInfoDTO.getDirList(); List<DirListElement> dirList = saveLaneInfoDTO.getDirList();
List<CrossLaneLightsPO> crossLaneLightsPOList = new ArrayList<>(); List<CrossLaneLightsPO> crossLaneLightsPOList = new ArrayList<>();
...@@ -136,7 +138,7 @@ public class CrossConfigServiceImpl implements CrossConfigService { ...@@ -136,7 +138,7 @@ public class CrossConfigServiceImpl implements CrossConfigService {
Integer lightsId = crossLightsPO.getId(); Integer lightsId = crossLightsPO.getId();
crossLaneLightsPO.setLightsId(lightsId); crossLaneLightsPO.setLightsId(lightsId);
// 用于判断灯组号是否都配置完成 // 用于判断灯组号是否都配置完成
lightCodeList.remove(ledNum); lightCodeSet.remove(ledNum);
} }
crossLaneLightsPOList.add(crossLaneLightsPO); crossLaneLightsPOList.add(crossLaneLightsPO);
} }
...@@ -146,12 +148,12 @@ public class CrossConfigServiceImpl implements CrossConfigService { ...@@ -146,12 +148,12 @@ public class CrossConfigServiceImpl implements CrossConfigService {
} }
private void handleLightsData(SaveLaneInfoDTO saveLaneInfoDTO, List<LedConfigListElement> ledConfigList, private void handleLightsData(SaveLaneInfoDTO saveLaneInfoDTO, List<LedConfigListElement> ledConfigList,
List<String> lightCodeList) { Set<String> lightCodeSet) {
String crossId = saveLaneInfoDTO.getCrossId(); String crossId = saveLaneInfoDTO.getCrossId();
List<CrossLightsPO> crossLightsPOList = new ArrayList<>(); List<CrossLightsPO> crossLightsPOList = new ArrayList<>();
for (LedConfigListElement ledConfigListElement : ledConfigList) { for (LedConfigListElement ledConfigListElement : ledConfigList) {
String lightCode = ledConfigListElement.getCode(); String lightCode = ledConfigListElement.getCode();
lightCodeList.add(lightCode); lightCodeSet.add(lightCode);
CrossLightsPO crossLightsPO = new CrossLightsPO(); CrossLightsPO crossLightsPO = new CrossLightsPO();
crossLightsPO.setLightsNo(lightCode); crossLightsPO.setLightsNo(lightCode);
// 灯组类型 // 灯组类型
......
...@@ -20,9 +20,10 @@ import org.springframework.stereotype.Service; ...@@ -20,9 +20,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -38,7 +39,9 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -38,7 +39,9 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private final CrossLaneLightsMapper crossLaneLightsMapper; private final CrossLaneLightsMapper crossLaneLightsMapper;
private final CrossPhaseLightsMapper crossPhaseLightsMapper; private final CrossPhaseLightsMapper crossPhaseLightsMapper;
public SchemeConfigServiceImpl(CrossSchemeMapper crossSchemeMapper, CrossPhaseMapper crossPhaseMapper, LaneInfoMapper laneInfoMapper, CrossLaneLightsMapper crossLaneLightsMapper, CrossPhaseLightsMapper crossPhaseLightsMapper) { public SchemeConfigServiceImpl(CrossSchemeMapper crossSchemeMapper, CrossPhaseMapper crossPhaseMapper,
LaneInfoMapper laneInfoMapper, CrossLaneLightsMapper crossLaneLightsMapper,
CrossPhaseLightsMapper crossPhaseLightsMapper) {
this.crossSchemeMapper = crossSchemeMapper; this.crossSchemeMapper = crossSchemeMapper;
this.crossPhaseMapper = crossPhaseMapper; this.crossPhaseMapper = crossPhaseMapper;
this.laneInfoMapper = laneInfoMapper; this.laneInfoMapper = laneInfoMapper;
...@@ -95,11 +98,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -95,11 +98,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private void updateCoordPhase(SaveSchemeConfigDTO saveSchemeConfigDTO) { private void updateCoordPhase(SaveSchemeConfigDTO saveSchemeConfigDTO) {
String crossId = saveSchemeConfigDTO.getCrossId(); String crossId = saveSchemeConfigDTO.getCrossId();
List<SaveSchemeConfigDTO.TimeScheme> timeSchemeList = saveSchemeConfigDTO.getTimeSchemeList(); List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = saveSchemeConfigDTO.getPhaseSchemeList();
for (SaveSchemeConfigDTO.TimeScheme timeScheme : timeSchemeList) { for (SaveSchemeConfigDTO.PhaseScheme phaseScheme : phaseSchemeList) {
String schemeNo = timeScheme.getSchemeNo(); String schemeNo = phaseScheme.getSchemeNo();
Integer schemeId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo); Integer schemeId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
String coordPhaseNo = timeScheme.getCoordPhaseNo(); String coordPhaseNo = phaseScheme.getCoordPhaseNo();
Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, coordPhaseNo); Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, coordPhaseNo);
crossSchemeMapper.updateCoordPhase(crossId, schemeNo, phaseId); crossSchemeMapper.updateCoordPhase(crossId, schemeNo, phaseId);
} }
...@@ -109,46 +112,141 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -109,46 +112,141 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
String crossId = saveSchemeConfigDTO.getCrossId(); String crossId = saveSchemeConfigDTO.getCrossId();
crossPhaseMapper.deleteByCrossId(crossId); crossPhaseMapper.deleteByCrossId(crossId);
crossPhaseLightsMapper.deleteByCrossId(crossId); crossPhaseLightsMapper.deleteByCrossId(crossId);
for (SaveSchemeConfigDTO.TimeScheme timeScheme : saveSchemeConfigDTO.getTimeSchemeList()) {
String schemeNo = timeScheme.getSchemeNo(); List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = saveSchemeConfigDTO.getPhaseSchemeList();
List<SaveSchemeConfigDTO.TimeScheme.TimeRingListElement> ringList = timeScheme.getRingList(); for (SaveSchemeConfigDTO.PhaseScheme phaseScheme : phaseSchemeList) {
for (SaveSchemeConfigDTO.TimeScheme.TimeRingListElement ring : ringList) { String schemeNo = phaseScheme.getSchemeNo();
Integer ringNo = ring.getRingNo(); // 获取方案ID
List<SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement> phaseList = ring.getPhaseList(); Integer schemeId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
for (int i = 0; i < phaseList.size(); i++) { List<SaveSchemeConfigDTO.RingListElement> ringList = phaseScheme.getRingList();
SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement phase = phaseList.get(i); // 用于维护伴随相位
String phaseNo = phase.getPhaseNo(); Map<String, SaveSchemeConfigDTO.PhaseListElement> phaseNoMap = new HashMap<>();
Integer yellowFlash = phase.getYellowFlash(); for (SaveSchemeConfigDTO.RingListElement ringListElement : ringList) {
Integer redFlash = phase.getRedFlash(); Integer ringNo = ringListElement.getRingNo();
Integer greenTime = phase.getGreenTime(); List<SaveSchemeConfigDTO.GroupListElement> groupList = ringListElement.getGroupList();
Integer greenFlashTime = phase.getGreenFlashTime(); for (SaveSchemeConfigDTO.GroupListElement groupListElement : groupList) {
Integer yellowTime = phase.getYellowTime(); Integer groupNo = groupListElement.getGroupNo();
Integer redTime = phase.getRedTime(); List<SaveSchemeConfigDTO.PhaseListElement> phaseList = groupListElement.getPhaseList();
Integer minGreenTime = phase.getMinGreenTime(); for (int i = 0; i < phaseList.size(); i++) {
Integer maxGreenTime = phase.getMaxGreenTime(); SaveSchemeConfigDTO.PhaseListElement phase = phaseList.get(i);
// 获取方案ID Integer phaseType = phase.getPhaseType();
Integer schemeId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo); if (phaseType != 3) { // 非伴随相位
String phaseNo = phase.getPhaseNo();
phaseNoMap.put(phaseNo, phase);
Integer yellowFlashTime = phase.getYellowFlashTime();
Integer redFlashTime = phase.getRedFlashTime();
Integer greenTime = phase.getGreenTime();
Integer greenFlashTime = phase.getGreenFlashTime();
Integer yellowTime = phase.getYellowTime();
Integer redTime = phase.getRedTime();
Integer minGreenTime = phase.getMinGreenTime();
Integer maxGreenTime = phase.getMaxGreenTime();
CrossPhasePO crossPhasePO = new CrossPhasePO();
crossPhasePO.setPhaseNo(phaseNo);
crossPhasePO.setPhaseType(phaseType);
crossPhasePO.setSort(i + 1);
crossPhasePO.setCrossId(crossId);
crossPhasePO.setPlanId(schemeId);
crossPhasePO.setRingNo(ringNo);
crossPhasePO.setGroupNo(groupNo);
// 控制模式
crossPhasePO.setControlMode(ControlModeConst.FIXED_CYCLE);
crossPhasePO.setGreenTime(greenTime);
crossPhasePO.setGreenFlashTime(greenFlashTime);
crossPhasePO.setYellowTime(yellowTime);
crossPhasePO.setRedTime(redTime);
crossPhasePO.setYellowFlashTime(yellowFlashTime);
crossPhasePO.setRedFlashTime(redFlashTime);
crossPhasePO.setMinGreenTime(minGreenTime);
crossPhasePO.setMaxGreenTime(maxGreenTime);
crossPhasePO.setPhaseTime(greenTime + greenFlashTime + yellowTime + redTime
+ yellowFlashTime + redFlashTime);
// 插入相位表记录,获取ID
crossPhaseMapper.insertOne(crossPhasePO);
Integer phaseId = crossPhasePO.getId();
if (phaseType == 1) { // 实相位
// 更新相位灯组关系表
updateCrossPhaseLights(crossId, phase, phaseId);
}
} else { // 伴随相位
CrossPhasePO crossPhasePO = new CrossPhasePO();
String phaseNo = phase.getPhaseNo();
crossPhasePO.setPhaseNo(phaseNo);
crossPhasePO.setPhaseType(phaseType);
crossPhasePO.setSort(i + 1);
crossPhasePO.setCrossId(crossId);
crossPhasePO.setPlanId(schemeId);
crossPhasePO.setRingNo(ringNo);
crossPhasePO.setGroupNo(groupNo);
// 控制模式
crossPhasePO.setControlMode(ControlModeConst.FIXED_CYCLE);
Integer coordGreenTime = 0;
Integer coordGreenFlashTime = 0;
Integer coordYelloFlashTime = 0;
Integer coordRedFlashTime = 0;
Integer coordYellowTime = 0;
Integer coordRedTime = 0;
Integer coordMinGreenTime = 0;
Integer coordMaxGreenTime = 0;
List<String> accompanyPhaseNoList = phase.getAccompanyPhaseNoList();
if (accompanyPhaseNoList != null) {
for (String accompanyPhaseNo : accompanyPhaseNoList) {
SaveSchemeConfigDTO.PhaseListElement phaseListElement = phaseNoMap.get(accompanyPhaseNo);
// 时长加总
coordGreenTime += phaseListElement.getGreenTime();
coordGreenFlashTime += phaseListElement.getGreenFlashTime();
coordYelloFlashTime += phaseListElement.getYellowFlashTime();
coordRedFlashTime += phaseListElement.getRedFlashTime();
coordYellowTime += phaseListElement.getYellowTime();
coordRedTime += phaseListElement.getRedTime();
coordMinGreenTime += phaseListElement.getMinGreenTime();
coordMaxGreenTime += phaseListElement.getMaxGreenTime();
// 实相位号
String phaseNoReal = phaseListElement.getPhaseNo();
// 更新伴随相位号
Integer planId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
crossPhaseMapper.updateAccompanyPhaseNo(accompanyPhaseNo, phaseNoReal, planId, crossId);
}
}
crossPhasePO.setGreenTime(coordGreenTime);
crossPhasePO.setGreenFlashTime(coordGreenFlashTime);
crossPhasePO.setYellowFlashTime(coordYelloFlashTime);
crossPhasePO.setRedFlashTime(coordRedFlashTime);
crossPhasePO.setYellowTime(coordYellowTime);
crossPhasePO.setRedTime(coordRedTime);
crossPhasePO.setMinGreenTime(coordMinGreenTime);
crossPhasePO.setMaxGreenTime(coordMaxGreenTime);
crossPhasePO.setPhaseTime(coordGreenTime + coordGreenFlashTime + coordYelloFlashTime
+ coordRedFlashTime + coordYellowTime + coordRedTime);
// 插入相位表记录
crossPhaseMapper.insertOne(crossPhasePO);
}
}
}
}
// 处理特殊控制
List<SaveSchemeConfigDTO.PhaseListElement> specialControlModeList = phaseScheme.getSpecialControlModeList();
if (specialControlModeList != null) {
for (int i = 0; i < specialControlModeList.size(); i++) {
SaveSchemeConfigDTO.PhaseListElement phase = specialControlModeList.get(i);
CrossPhasePO crossPhasePO = new CrossPhasePO(); CrossPhasePO crossPhasePO = new CrossPhasePO();
crossPhasePO.setPhaseNo(phaseNo); crossPhasePO.setPhaseNo(phase.getPhaseNo());
crossPhasePO.setSort(i + 1); crossPhasePO.setSort(i + 1);
crossPhasePO.setCrossId(crossId); crossPhasePO.setCrossId(crossId);
crossPhasePO.setPlanId(schemeId); crossPhasePO.setPlanId(schemeId);
crossPhasePO.setRingNo(ringNo); crossPhasePO.setPhaseType(1);
// 控制模式 // 控制模式
if (yellowFlash == 0 && redFlash == 0) { if (phase.getYellowFlash() == 1) {
crossPhasePO.setControlMode(ControlModeConst.FIXED_CYCLE); crossPhasePO.setControlMode(7);
} else if (yellowFlash == 1) { } else if (phase.getIsRed() == 1) {
crossPhasePO.setControlMode(ControlModeConst.YELLOW_FLASH); crossPhasePO.setControlMode(4);
} else if (redFlash == 1) { } else if (phase.getIsGreen() == 1) {
crossPhasePO.setControlMode(ControlModeConst.RED_FLASH); crossPhasePO.setControlMode(2);
} else if (phase.getGreenFlash() == 1) {
crossPhasePO.setControlMode(6);
} }
crossPhasePO.setGreenTime(greenTime);
crossPhasePO.setGreenFlashTime(greenFlashTime);
crossPhasePO.setYellowTime(yellowTime);
crossPhasePO.setRedTime(redTime);
crossPhasePO.setMinGreenTime(minGreenTime);
crossPhasePO.setMaxGreenTime(maxGreenTime);
crossPhasePO.setPhaseTime(greenTime + greenFlashTime + yellowTime + redTime);
// 插入相位表记录,获取ID // 插入相位表记录,获取ID
crossPhaseMapper.insertOne(crossPhasePO); crossPhaseMapper.insertOne(crossPhasePO);
Integer phaseId = crossPhasePO.getId(); Integer phaseId = crossPhasePO.getId();
...@@ -159,22 +257,30 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -159,22 +257,30 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
} }
} }
private void updateCrossPhaseLights(String crossId, private void updateCrossPhaseLights(String crossId,
SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement phase, SaveSchemeConfigDTO.PhaseListElement phase,
Integer phaseId) { Integer phaseId) {
Set<CrossPhaseLightsPO> crossPhaseLightsPOSet = new HashSet<>(); Set<CrossPhaseLightsPO> crossPhaseLightsPOSet = new HashSet<>();
for (SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement.TimeLaneListElement lane : phase.getLaneList()) { List<SaveSchemeConfigDTO.DirListElement> dirList = phase.getDirList();
CrossPhaseLightsPO crossPhaseLightsPO = new CrossPhaseLightsPO(); for (SaveSchemeConfigDTO.DirListElement dirListElement : dirList) {
Integer dir = lane.getDir(); Integer dir = dirListElement.getDir();
Integer turn = lane.getTurn(); List<SaveSchemeConfigDTO.LaneListElement> laneList = dirListElement.getLaneList();
Integer category = lane.getCategory(); for (SaveSchemeConfigDTO.LaneListElement laneListElement : laneList) {
// 根据车道获得灯组ID CrossPhaseLightsPO crossPhaseLightsPO = new CrossPhaseLightsPO();
String laneId = laneInfoMapper.selectIdByCrossIdDirTurn(crossId, dir, turn, category); Integer category = laneListElement.getCategory();
Integer lightsId = crossLaneLightsMapper.selectLightsIdByLaneId(crossId, laneId); Integer turn = laneListElement.getTurn();
crossPhaseLightsPO.setLightsId(lightsId); Integer sort = laneListElement.getSort();
crossPhaseLightsPO.setPhaseId(phaseId); // 根据车道获得灯组ID
crossPhaseLightsPO.setCrossId(crossId); String laneId = laneInfoMapper.selectIdByCrossIdDirTurn(crossId, dir, turn, category);
crossPhaseLightsPOSet.add(crossPhaseLightsPO); Integer lightsId = crossLaneLightsMapper.selectLightsIdByLaneId(crossId, laneId);
if (lightsId != null) {
crossPhaseLightsPO.setLightsId(lightsId);
}
crossPhaseLightsPO.setPhaseId(phaseId);
crossPhaseLightsPO.setCrossId(crossId);
crossPhaseLightsPOSet.add(crossPhaseLightsPO);
}
} }
crossPhaseLightsMapper.insertBatchBySet(crossPhaseLightsPOSet); crossPhaseLightsMapper.insertBatchBySet(crossPhaseLightsPOSet);
} }
...@@ -191,15 +297,8 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -191,15 +297,8 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
String name = phaseScheme.getName(); // 方案名称 String name = phaseScheme.getName(); // 方案名称
crossSchemePO.setName(name); crossSchemePO.setName(name);
crossSchemePO.setCrossId(crossId); crossSchemePO.setCrossId(crossId);
// 获取方案周期、协调相位ID、相位差 crossSchemePO.setCycle(phaseScheme.getCycle());
List<SaveSchemeConfigDTO.TimeScheme> timeSchemeList = saveSchemeConfigDTO.getTimeSchemeList(); crossSchemePO.setOffset(phaseScheme.getOffset());
for (SaveSchemeConfigDTO.TimeScheme timeScheme : timeSchemeList) {
String schemeNoInTime = timeScheme.getSchemeNo();
if (Objects.equals(schemeNo, schemeNoInTime)) {
crossSchemePO.setCycle(timeScheme.getCycle());
crossSchemePO.setOffset(timeScheme.getOffset());
}
}
crossSchemePO.setSource(2); // 来自平台 crossSchemePO.setSource(2); // 来自平台
crossSchemePO.setIsDeleted(0); crossSchemePO.setIsDeleted(0);
crossSchemePOList.add(crossSchemePO); crossSchemePOList.add(crossSchemePO);
......
...@@ -10,8 +10,10 @@ ...@@ -10,8 +10,10 @@
<result property="sort" column="sort"/> <result property="sort" column="sort"/>
<result property="crossId" column="cross_id"/> <result property="crossId" column="cross_id"/>
<result property="planId" column="plan_id"/> <result property="planId" column="plan_id"/>
<result property="accompanyPhaseNo" column="accompany_phase_no"/>
<result property="ringNo" column="ring_no"/> <result property="ringNo" column="ring_no"/>
<result property="groupNo" column="group_no"/> <result property="groupNo" column="group_no"/>
<result property="phaseType" column="phase_type"/>
<result property="controlMode" column="control_mode"/> <result property="controlMode" column="control_mode"/>
<result property="phaseTime" column="phase_time"/> <result property="phaseTime" column="phase_time"/>
<result property="greenTime" column="green_time"/> <result property="greenTime" column="green_time"/>
...@@ -26,10 +28,16 @@ ...@@ -26,10 +28,16 @@
</resultMap> </resultMap>
<insert id="insertOne" keyProperty="id" useGeneratedKeys="true"> <insert id="insertOne" keyProperty="id" useGeneratedKeys="true">
insert into t_base_cross_phase(phase_no,name,sort,cross_id,plan_id,ring_no,group_no,control_mode,phase_time,green_time,green_flash_time,ped_flash_time,yellow_time,red_time,min_green_time,max_green_time) insert into t_base_cross_phase(phase_no,name,sort,cross_id,plan_id,accompany_phase_no,ring_no,group_no,phase_type,control_mode,phase_time,green_time,green_flash_time,yellow_flash_time,red_flash_time,ped_flash_time,yellow_time,red_time,min_green_time,max_green_time)
values (#{phaseNo},#{name},#{sort},#{crossId},#{planId},#{ringNo},#{groupNo},#{controlMode},#{phaseTime},#{greenTime},#{greenFlashTime},#{pedFlashTime},#{yellowTime},#{redTime},#{minGreenTime},#{maxGreenTime}) values (#{phaseNo},#{name},#{sort},#{crossId},#{planId},#{accompanyPhaseNo},#{ringNo},#{groupNo},#{phaseType},#{controlMode},#{phaseTime},#{greenTime},#{greenFlashTime},#{yellowFlashTime},#{redFlashTime},#{pedFlashTime},#{yellowTime},#{redTime},#{minGreenTime},#{maxGreenTime})
</insert> </insert>
<update id="updateAccompanyPhaseNo">
update t_base_cross_phase
set coord_phase_no = #{coordPhaseNo}
where cross_id = #{crossId} and plan_id = #{planId} and phase_no = #{phaseNoReal}
</update>
<delete id="deleteByCrossId"> <delete id="deleteByCrossId">
delete from t_base_cross_phase delete from t_base_cross_phase
where cross_id = #{crossId} where cross_id = #{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