Commit acd2428d authored by hanbing's avatar hanbing

方案管理-方案配置,保存相位方案和配时方案

parent 3513e9bc
......@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class LaneListElement {
@ApiModelProperty(value = "车道ID(路口ID_方向_车道类型_序号)", required = true)
private String id;
@ApiModelProperty(value = "0无方向 箭头 1:直行2:左转,3:右转,4:掉头,5:左直,6:右直,7:左转掉头,8:左直掉头, 9:左直右, 10:左右转 11:左弯 12:右弯", required = true)
private Integer direction;
@ApiModelProperty(value = "车道代码", required = true)
......
......@@ -11,6 +11,8 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class LedConfigListElement {
@ApiModelProperty(value = "灯组ID", required = true)
private Integer id;
@ApiModelProperty(value = "灯组代码", required = true)
private String code;
@ApiModelProperty(value = "灯组类型 1机动车;2非机动车;3公交专用;4行人", required = true)
......
......@@ -26,27 +26,30 @@ public class SaveSchemeConfigDTO {
private String schemeNo;
@ApiModelProperty(value = "方案名称", required = true)
private String name;
private List<Ring> ringList; // 环列表
private List<RingListElement> ringList; // 环列表
@Data
public static class Ring {
public static class RingListElement {
@ApiModelProperty(value = "环号", required = true)
private Integer ringNo;
List<Phase> phaseList; // 相位列表
public static class Phase {
@ApiModelProperty(value = "相位序号", required = true)
List<PhaseListElement> phaseList; // 相位列表
@Data
public static class PhaseListElement {
@ApiModelProperty(value = "相位序号", required = false)
private Integer sort;
@ApiModelProperty(value = "相位号", required = true)
private String phaseNo;
private List<Lane> laneList; // 车道列表
private List<LaneListElement> laneList; // 车道列表
@Data
public static class Lane {
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;
}
}
}
......@@ -64,25 +67,27 @@ public class SaveSchemeConfigDTO {
private Integer cycle;
@ApiModelProperty(value = "相位差", required = true)
private Integer offset;
private List<Ring> ringList; // 环列表
private List<TimeRingListElement> ringList; // 环列表
@Data
public static class Ring {
public static class TimeRingListElement {
@ApiModelProperty(value = "环号", required = true)
private Integer ringNo;
List<Phase> phaseList; // 相位列表
List<TimePhaseListElement> phaseList; // 相位列表
@Data
public static class Phase {
@ApiModelProperty(value = "相位序号", required = true)
public static class TimePhaseListElement {
@ApiModelProperty(value = "相位序号", required = false)
private Integer sort;
@ApiModelProperty(value = "相位号", required = true)
private String phaseNo;
private List<Lane> laneList; // 车道列表
private List<TimeLaneListElement> laneList; // 车道列表
@Data
public static class Lane {
public static class TimeLaneListElement {
@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;
}
@ApiModelProperty(value = "最小绿灯时间", required = true)
private Integer minGreenTime = 0;
......
......@@ -20,5 +20,5 @@ public interface CrossLaneLightsMapper {
String selectLightsCodeByLaneId(@Param("laneId") String laneId);
Integer selectLightsIdByLaneId(@Param("crossId") String crossId, @Param("laneId") Integer laneId);
Integer selectLightsIdByLaneId(@Param("crossId") String crossId, @Param("laneId") String laneId);
}
......@@ -12,7 +12,9 @@ import org.springframework.stereotype.Repository;
@Repository
public interface CrossPhaseMapper {
Integer selectIdByCrossIdAndPhaseNo(@Param("crossId") String crossId, @Param("coordPhaseNo") String coordPhaseNo);
Integer selectIdByCrossIdAndPhaseNo(@Param("crossId") String crossId,
@Param("schemeId") Integer schemeId,
@Param("coordPhaseNo") String coordPhaseNo);
void insertOne(CrossPhasePO crossPhasePO);
}
......@@ -19,4 +19,8 @@ public interface CrossSchemeMapper {
void insertBatch(@Param("entities") List<CrossSchemePO> entities);
Integer selectIdByCrossIdAndSchemeNo(@Param("crossId") String crossId, @Param("schemeNo") String schemeNo);
void updateCoordPhase(@Param("crossId") String crossId,
@Param("schemeNo") String schemeNo,
@Param("phaseId") Integer phaseId);
}
......@@ -24,7 +24,8 @@ public interface LaneInfoMapper {
@Param("dir") Integer dir,
@Param("code") String code);
Integer selectIdByCrossIdDirTurn(@Param("crossId") String crossId,
String selectIdByCrossIdDirTurn(@Param("crossId") String crossId,
@Param("dir") Integer dir,
@Param("turn") Integer turn);
@Param("turn") Integer turn,
@Param("category") Integer category);
}
......@@ -257,6 +257,7 @@ public class CrossConfigServiceImpl implements CrossConfigService {
// 赋值给ledConfigList
for (CrossLightsPO crossLightsPO : crossLightsPOList) {
LedConfigListElement ledConfigListElement = new LedConfigListElement();
ledConfigListElement.setId(crossLightsPO.getId());
ledConfigListElement.setOrder(crossLightsPO.getSort());
ledConfigListElement.setCode(crossLightsPO.getLightsNo());
// 处理type
......@@ -321,11 +322,12 @@ public class CrossConfigServiceImpl implements CrossConfigService {
List<LaneListElement> laneListElementList = new ArrayList<>();
for (LaneInfoPO laneInfoPO : value) {
LaneListElement laneListElement = new LaneListElement();
String laneId = laneInfoPO.getId();
laneListElement.setId(laneId);
laneListElement.setDirection(laneInfoPO.getTurn());
laneListElement.setLaneType(laneInfoPO.getCategory());
laneListElement.setName(laneInfoPO.getCode());
// 根据laneId获取灯组代码
String laneId = laneInfoPO.getId();
String lightsCode = crossLaneLightsMapper.selectLightsCodeByLaneId(laneId);
if (lightsCode != null) {
laneListElement.setLedNum(lightsCode);
......
......@@ -56,18 +56,32 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
updateCrossScheme(saveSchemeConfigDTO);
// 更新相位基础表、相位灯组关系表
updateCrossPhase(saveSchemeConfigDTO);
// 更新协调相位ID
updateCoordPhase(saveSchemeConfigDTO);
}
private void updateCoordPhase(SaveSchemeConfigDTO saveSchemeConfigDTO) {
String crossId = saveSchemeConfigDTO.getCrossId();
List<SaveSchemeConfigDTO.TimeScheme> timeSchemeList = saveSchemeConfigDTO.getTimeSchemeList();
for (SaveSchemeConfigDTO.TimeScheme timeScheme : timeSchemeList) {
String schemeNo = timeScheme.getSchemeNo();
Integer schemeId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
String coordPhaseNo = timeScheme.getCoordPhaseNo();
Integer phaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, schemeId, coordPhaseNo);
crossSchemeMapper.updateCoordPhase(crossId, schemeNo, phaseId);
}
}
private void updateCrossPhase(SaveSchemeConfigDTO saveSchemeConfigDTO) {
String crossId = saveSchemeConfigDTO.getCrossId();
for (SaveSchemeConfigDTO.TimeScheme timeScheme : saveSchemeConfigDTO.getTimeSchemeList()) {
String schemeNo = timeScheme.getSchemeNo();
List<SaveSchemeConfigDTO.TimeScheme.Ring> ringList = timeScheme.getRingList();
for (SaveSchemeConfigDTO.TimeScheme.Ring ring : ringList) {
List<SaveSchemeConfigDTO.TimeScheme.TimeRingListElement> ringList = timeScheme.getRingList();
for (SaveSchemeConfigDTO.TimeScheme.TimeRingListElement ring : ringList) {
Integer ringNo = ring.getRingNo();
List<SaveSchemeConfigDTO.TimeScheme.Ring.Phase> phaseList = ring.getPhaseList();
List<SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement> phaseList = ring.getPhaseList();
for (int i = 0; i < phaseList.size(); i++) {
SaveSchemeConfigDTO.TimeScheme.Ring.Phase phase = phaseList.get(i);
SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement phase = phaseList.get(i);
String phaseNo = phase.getPhaseNo();
Integer yellowFlash = phase.getYellowFlash();
Integer redFlash = phase.getRedFlash();
......@@ -110,15 +124,17 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
}
}
private void updateCrossPhaseLights(String crossId, SaveSchemeConfigDTO.TimeScheme.Ring.Phase phase,
private void updateCrossPhaseLights(String crossId,
SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement phase,
Integer phaseId) {
Set<CrossPhaseLightsPO> crossPhaseLightsPOSet = new HashSet<>();
for (SaveSchemeConfigDTO.TimeScheme.Ring.Phase.Lane lane : phase.getLaneList()) {
for (SaveSchemeConfigDTO.TimeScheme.TimeRingListElement.TimePhaseListElement.TimeLaneListElement lane : phase.getLaneList()) {
CrossPhaseLightsPO crossPhaseLightsPO = new CrossPhaseLightsPO();
Integer dir = lane.getDir();
Integer turn = lane.getTurn();
Integer category = lane.getCategory();
// 根据车道获得灯组ID
Integer laneId = laneInfoMapper.selectIdByCrossIdDirTurn(crossId, dir, turn);
String laneId = laneInfoMapper.selectIdByCrossIdDirTurn(crossId, dir, turn, category);
Integer lightsId = crossLaneLightsMapper.selectLightsIdByLaneId(crossId, laneId);
crossPhaseLightsPO.setLightsId(lightsId);
crossPhaseLightsPO.setPhaseId(phaseId);
......@@ -146,9 +162,6 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
String schemeNoInTime = timeScheme.getSchemeNo();
if (Objects.equals(schemeNo, schemeNoInTime)) {
crossSchemePO.setCycle(timeScheme.getCycle());
String coordPhaseNo = timeScheme.getCoordPhaseNo();
Integer coordPhaseId = crossPhaseMapper.selectIdByCrossIdAndPhaseNo(crossId, coordPhaseNo);
crossSchemePO.setCoordPhase(coordPhaseId);
crossSchemePO.setOffset(timeScheme.getOffset());
}
}
......
......@@ -31,7 +31,7 @@
<select id="selectIdByCrossIdAndPhaseNo" resultType="java.lang.Integer">
select id from t_base_cross_phase
where cross_id = #{crossId} and phase_no = #{coordPhaseNo}
where cross_id = #{crossId} and plan_id = #{schemeId} and phase_no = #{coordPhaseNo}
</select>
......
......@@ -25,6 +25,12 @@
</foreach>
</insert>
<update id="updateCoordPhase">
update t_base_cross_scheme
set coord_phase = #{phaseId}
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</update>
<delete id="deleteByCrossId">
delete from t_base_cross_scheme
where cross_id = #{crossId}
......
......@@ -53,10 +53,10 @@
where cross_id = #{crossId} and dir = #{dir} and code = #{code}
</select>
<select id="selectIdByCrossIdDirTurn" resultType="java.lang.Integer">
<select id="selectIdByCrossIdDirTurn" resultType="java.lang.String">
select id
from t_base_lane_info
where cross_id = #{crossId} and dir = #{dir} and turn = #{turn}
where cross_id = #{crossId} and dir = #{dir} and turn = #{turn} and category = #{category}
limit 1
</select>
......
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