Commit 3513e9bc authored by hanbing's avatar hanbing

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

parent a0025f73
package net.wanji.web.common.constant;
/**
* @author Kent HAN
* @date 2023/1/6 9:33
*/
public class ControlModeConst {
public static final Integer FIXED_CYCLE = 1; // 定周期
public static final Integer YELLOW_FLASH = 7; // 黄闪
public static final Integer RED_FLASH = 8; // 红闪
}
......@@ -85,21 +85,21 @@ public class SaveSchemeConfigDTO {
private Integer turn;
}
@ApiModelProperty(value = "最小绿灯时间", required = true)
private Integer minGreenTime;
private Integer minGreenTime = 0;
@ApiModelProperty(value = "最大绿灯时间", required = true)
private Integer maxGreenTime;
private Integer maxGreenTime = 0;
@ApiModelProperty(value = "绿灯时间", required = true)
private Integer greenTime;
private Integer greenTime = 0;
@ApiModelProperty(value = "绿闪时间", required = true)
private Integer greenFlashTime;
private Integer greenFlashTime = 0;
@ApiModelProperty(value = "黄灯时间", required = true)
private Integer yellowTime;
private Integer yellowTime = 0;
@ApiModelProperty(value = "红灯时间", required = true)
private Integer redTime;
private Integer redTime = 0;
@ApiModelProperty(value = "是否黄闪 0否 1是", required = true)
private Integer yellowFlash;
private Integer yellowFlash = 0;
@ApiModelProperty(value = "是否红闪 0否 1是", required = true)
private Integer redFlash;
private Integer redFlash = 0;
}
}
}
......
......@@ -19,4 +19,6 @@ public interface CrossLaneLightsMapper {
void insertBatch(@Param("entities") List<CrossLaneLightsPO> entities);
String selectLightsCodeByLaneId(@Param("laneId") String laneId);
Integer selectLightsIdByLaneId(@Param("crossId") String crossId, @Param("laneId") Integer laneId);
}
package net.wanji.web.mapper.scheme;
import io.lettuce.core.dynamic.annotation.Param;
import net.wanji.web.po.scheme.CrossPhaseLightsPO;
import org.springframework.stereotype.Repository;
import java.util.Set;
/**
* 相位灯组关系;(t_base_cross_phase_lights)表数据库访问层
* @author : hanbing
......@@ -11,4 +14,6 @@ import org.springframework.stereotype.Repository;
@Repository
public interface CrossPhaseLightsMapper {
void deleteByCrossId(@Param("crossId") String crossId);
void insertBatchBySet(@Param("entities") Set<CrossPhaseLightsPO> entities);
}
package net.wanji.web.mapper.scheme;
import io.lettuce.core.dynamic.annotation.Param;
import net.wanji.web.po.scheme.CrossPhasePO;
import org.springframework.stereotype.Repository;
/**
......@@ -12,4 +13,6 @@ import org.springframework.stereotype.Repository;
public interface CrossPhaseMapper {
Integer selectIdByCrossIdAndPhaseNo(@Param("crossId") String crossId, @Param("coordPhaseNo") String coordPhaseNo);
void insertOne(CrossPhasePO crossPhasePO);
}
......@@ -17,4 +17,6 @@ public interface CrossSchemeMapper {
void deleteByCrossId(@Param("crossId") String crossId);
void insertBatch(@Param("entities") List<CrossSchemePO> entities);
Integer selectIdByCrossIdAndSchemeNo(@Param("crossId") String crossId, @Param("schemeNo") String schemeNo);
}
......@@ -23,4 +23,8 @@ public interface LaneInfoMapper {
LaneInfoPO selectByCrossIdDirCode(@Param("crossId") String crossId,
@Param("dir") Integer dir,
@Param("code") String code);
Integer selectIdByCrossIdDirTurn(@Param("crossId") String crossId,
@Param("dir") Integer dir,
@Param("turn") Integer turn);
}
package net.wanji.web.service.scheme.impl;
import net.wanji.web.common.constant.ControlModeConst;
import net.wanji.web.dto.SaveSchemeConfigDTO;
import net.wanji.web.mapper.scheme.CrossLaneLightsMapper;
import net.wanji.web.mapper.scheme.CrossPhaseLightsMapper;
import net.wanji.web.mapper.scheme.CrossPhaseMapper;
import net.wanji.web.mapper.scheme.CrossSchemeMapper;
import net.wanji.web.mapper.scheme.LaneInfoMapper;
import net.wanji.web.po.scheme.CrossPhaseLightsPO;
import net.wanji.web.po.scheme.CrossPhasePO;
import net.wanji.web.po.scheme.CrossSchemePO;
import net.wanji.web.service.scheme.SchemeConfigService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
* @author Kent HAN
......@@ -20,10 +28,16 @@ import java.util.Objects;
public class SchemeConfigServiceImpl implements SchemeConfigService {
private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseMapper crossPhaseMapper;
private final LaneInfoMapper laneInfoMapper;
private final CrossLaneLightsMapper crossLaneLightsMapper;
private final CrossPhaseLightsMapper crossPhaseLightsMapper;
public SchemeConfigServiceImpl(CrossSchemeMapper crossSchemeMapper, CrossPhaseMapper crossPhaseMapper) {
public SchemeConfigServiceImpl(CrossSchemeMapper crossSchemeMapper, CrossPhaseMapper crossPhaseMapper, LaneInfoMapper laneInfoMapper, CrossLaneLightsMapper crossLaneLightsMapper, CrossPhaseLightsMapper crossPhaseLightsMapper) {
this.crossSchemeMapper = crossSchemeMapper;
this.crossPhaseMapper = crossPhaseMapper;
this.laneInfoMapper = laneInfoMapper;
this.crossLaneLightsMapper = crossLaneLightsMapper;
this.crossPhaseLightsMapper = crossPhaseLightsMapper;
}
@Override
......@@ -40,7 +54,78 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private void handleRingTime(SaveSchemeConfigDTO saveSchemeConfigDTO) {
// 更新方案基础信息表
updateCrossScheme(saveSchemeConfigDTO);
// 更新相位基础表
// 更新相位基础表、相位灯组关系表
updateCrossPhase(saveSchemeConfigDTO);
}
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) {
Integer ringNo = ring.getRingNo();
List<SaveSchemeConfigDTO.TimeScheme.Ring.Phase> phaseList = ring.getPhaseList();
for (int i = 0; i < phaseList.size(); i++) {
SaveSchemeConfigDTO.TimeScheme.Ring.Phase phase = phaseList.get(i);
String phaseNo = phase.getPhaseNo();
Integer yellowFlash = phase.getYellowFlash();
Integer redFlash = phase.getRedFlash();
Integer greenTime = phase.getGreenTime();
Integer greenFlashTime = phase.getGreenFlashTime();
Integer yellowTime = phase.getYellowTime();
Integer redTime = phase.getRedTime();
Integer minGreenTime = phase.getMinGreenTime();
Integer maxGreenTime = phase.getMaxGreenTime();
// 获取方案ID
Integer schemeId = crossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
CrossPhasePO crossPhasePO = new CrossPhasePO();
crossPhasePO.setPhaseNo(phaseNo);
crossPhasePO.setSort(i + 1);
crossPhasePO.setCrossId(crossId);
crossPhasePO.setPlanId(schemeId);
crossPhasePO.setRingNo(ringNo);
// 控制模式
if (yellowFlash == 0 && redFlash == 0) {
crossPhasePO.setControlMode(ControlModeConst.FIXED_CYCLE);
} else if (yellowFlash == 1) {
crossPhasePO.setControlMode(ControlModeConst.YELLOW_FLASH);
} else if (redFlash == 1) {
crossPhasePO.setControlMode(ControlModeConst.RED_FLASH);
}
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
crossPhaseMapper.insertOne(crossPhasePO);
Integer phaseId = crossPhasePO.getId();
// 更新相位灯组关系表
updateCrossPhaseLights(crossId, phase, phaseId);
}
}
}
}
private void updateCrossPhaseLights(String crossId, SaveSchemeConfigDTO.TimeScheme.Ring.Phase phase,
Integer phaseId) {
Set<CrossPhaseLightsPO> crossPhaseLightsPOSet = new HashSet<>();
for (SaveSchemeConfigDTO.TimeScheme.Ring.Phase.Lane lane : phase.getLaneList()) {
CrossPhaseLightsPO crossPhaseLightsPO = new CrossPhaseLightsPO();
Integer dir = lane.getDir();
Integer turn = lane.getTurn();
// 根据车道获得灯组ID
Integer laneId = laneInfoMapper.selectIdByCrossIdDirTurn(crossId, dir, turn);
Integer lightsId = crossLaneLightsMapper.selectLightsIdByLaneId(crossId, laneId);
crossPhaseLightsPO.setLightsId(lightsId);
crossPhaseLightsPO.setPhaseId(phaseId);
crossPhaseLightsPO.setCrossId(crossId);
crossPhaseLightsPOSet.add(crossPhaseLightsPO);
}
crossPhaseLightsMapper.insertBatchBySet(crossPhaseLightsPOSet);
}
private void updateCrossScheme(SaveSchemeConfigDTO saveSchemeConfigDTO) {
......
......@@ -43,5 +43,11 @@
where t3.id = #{laneId}
</select>
<select id="selectLightsIdByLaneId" resultType="java.lang.Integer">
select lights_id from t_base_cross_lane_lights
where cross_id = #{crossId} and lane_id = #{laneId}
limit 1
</select>
</mapper>
......@@ -12,6 +12,14 @@
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<insert id="insertBatchBySet" keyProperty="id" useGeneratedKeys="true">
insert into t_base_cross_phase_lights(lights_id,phase_id,cross_id)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.lightsId},#{entity.phaseId},#{entity.crossId})
</foreach>
</insert>
<delete id="deleteByCrossId">
delete from t_base_cross_phase_lights
where cross_id = #{crossId}
......
......@@ -24,6 +24,11 @@
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<insert id="insertOne" keyProperty="id" useGeneratedKeys="true">
insert into t_base_cross_phase(phase_no,name,sort,cross_id,plan_id,ring_no,control_mode,phase_time,green_time,green_flash_time,ped_flash_time,yellow_time,red_time,min_green_time,max_green_time)
values (#{phaseNo},#{name},#{sort},#{crossId},#{planId},#{ringNo},#{controlMode},#{phaseTime},#{greenTime},#{greenFlashTime},#{pedFlashTime},#{yellowTime},#{redTime},#{minGreenTime},#{maxGreenTime})
</insert>
<select id="selectIdByCrossIdAndPhaseNo" resultType="java.lang.Integer">
select id from t_base_cross_phase
where cross_id = #{crossId} and phase_no = #{coordPhaseNo}
......
......@@ -30,5 +30,10 @@
where cross_id = #{crossId}
</delete>
<select id="selectIdByCrossIdAndSchemeNo" resultType="java.lang.Integer">
select id from t_base_cross_scheme
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</select>
</mapper>
......@@ -53,4 +53,11 @@
where cross_id = #{crossId} and dir = #{dir} and code = #{code}
</select>
<select id="selectIdByCrossIdDirTurn" resultType="java.lang.Integer">
select id
from t_base_lane_info
where cross_id = #{crossId} and dir = #{dir} and turn = #{turn}
limit 1
</select>
</mapper>
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