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 { ...@@ -85,21 +85,21 @@ public class SaveSchemeConfigDTO {
private Integer turn; private Integer turn;
} }
@ApiModelProperty(value = "最小绿灯时间", required = true) @ApiModelProperty(value = "最小绿灯时间", required = true)
private Integer minGreenTime; private Integer minGreenTime = 0;
@ApiModelProperty(value = "最大绿灯时间", required = true) @ApiModelProperty(value = "最大绿灯时间", required = true)
private Integer maxGreenTime; private Integer maxGreenTime = 0;
@ApiModelProperty(value = "绿灯时间", required = true) @ApiModelProperty(value = "绿灯时间", required = true)
private Integer greenTime; private Integer greenTime = 0;
@ApiModelProperty(value = "绿闪时间", required = true) @ApiModelProperty(value = "绿闪时间", required = true)
private Integer greenFlashTime; private Integer greenFlashTime = 0;
@ApiModelProperty(value = "黄灯时间", required = true) @ApiModelProperty(value = "黄灯时间", required = true)
private Integer yellowTime; private Integer yellowTime = 0;
@ApiModelProperty(value = "红灯时间", required = true) @ApiModelProperty(value = "红灯时间", required = true)
private Integer redTime; private Integer redTime = 0;
@ApiModelProperty(value = "是否黄闪 0否 1是", required = true) @ApiModelProperty(value = "是否黄闪 0否 1是", required = true)
private Integer yellowFlash; private Integer yellowFlash = 0;
@ApiModelProperty(value = "是否红闪 0否 1是", required = true) @ApiModelProperty(value = "是否红闪 0否 1是", required = true)
private Integer redFlash; private Integer redFlash = 0;
} }
} }
} }
......
...@@ -19,4 +19,6 @@ public interface CrossLaneLightsMapper { ...@@ -19,4 +19,6 @@ public interface CrossLaneLightsMapper {
void insertBatch(@Param("entities") List<CrossLaneLightsPO> entities); void insertBatch(@Param("entities") List<CrossLaneLightsPO> entities);
String selectLightsCodeByLaneId(@Param("laneId") String laneId); String selectLightsCodeByLaneId(@Param("laneId") String laneId);
Integer selectLightsIdByLaneId(@Param("crossId") String crossId, @Param("laneId") Integer laneId);
} }
package net.wanji.web.mapper.scheme; package net.wanji.web.mapper.scheme;
import io.lettuce.core.dynamic.annotation.Param; import io.lettuce.core.dynamic.annotation.Param;
import net.wanji.web.po.scheme.CrossPhaseLightsPO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Set;
/** /**
* 相位灯组关系;(t_base_cross_phase_lights)表数据库访问层 * 相位灯组关系;(t_base_cross_phase_lights)表数据库访问层
* @author : hanbing * @author : hanbing
...@@ -11,4 +14,6 @@ import org.springframework.stereotype.Repository; ...@@ -11,4 +14,6 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface CrossPhaseLightsMapper { public interface CrossPhaseLightsMapper {
void deleteByCrossId(@Param("crossId") String crossId); void deleteByCrossId(@Param("crossId") String crossId);
void insertBatchBySet(@Param("entities") Set<CrossPhaseLightsPO> entities);
} }
package net.wanji.web.mapper.scheme; package net.wanji.web.mapper.scheme;
import io.lettuce.core.dynamic.annotation.Param; import io.lettuce.core.dynamic.annotation.Param;
import net.wanji.web.po.scheme.CrossPhasePO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
...@@ -12,4 +13,6 @@ import org.springframework.stereotype.Repository; ...@@ -12,4 +13,6 @@ import org.springframework.stereotype.Repository;
public interface CrossPhaseMapper { public interface CrossPhaseMapper {
Integer selectIdByCrossIdAndPhaseNo(@Param("crossId") String crossId, @Param("coordPhaseNo") String coordPhaseNo); Integer selectIdByCrossIdAndPhaseNo(@Param("crossId") String crossId, @Param("coordPhaseNo") String coordPhaseNo);
void insertOne(CrossPhasePO crossPhasePO);
} }
...@@ -17,4 +17,6 @@ public interface CrossSchemeMapper { ...@@ -17,4 +17,6 @@ public interface CrossSchemeMapper {
void deleteByCrossId(@Param("crossId") String crossId); void deleteByCrossId(@Param("crossId") String crossId);
void insertBatch(@Param("entities") List<CrossSchemePO> entities); void insertBatch(@Param("entities") List<CrossSchemePO> entities);
Integer selectIdByCrossIdAndSchemeNo(@Param("crossId") String crossId, @Param("schemeNo") String schemeNo);
} }
...@@ -23,4 +23,8 @@ public interface LaneInfoMapper { ...@@ -23,4 +23,8 @@ public interface LaneInfoMapper {
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);
Integer selectIdByCrossIdDirTurn(@Param("crossId") String crossId,
@Param("dir") Integer dir,
@Param("turn") Integer turn);
} }
package net.wanji.web.service.scheme.impl; package net.wanji.web.service.scheme.impl;
import net.wanji.web.common.constant.ControlModeConst;
import net.wanji.web.dto.SaveSchemeConfigDTO; 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.CrossPhaseMapper;
import net.wanji.web.mapper.scheme.CrossSchemeMapper; 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.po.scheme.CrossSchemePO;
import net.wanji.web.service.scheme.SchemeConfigService; import net.wanji.web.service.scheme.SchemeConfigService;
import org.springframework.stereotype.Service; 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.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -20,10 +28,16 @@ import java.util.Objects; ...@@ -20,10 +28,16 @@ import java.util.Objects;
public class SchemeConfigServiceImpl implements SchemeConfigService { public class SchemeConfigServiceImpl implements SchemeConfigService {
private final CrossSchemeMapper crossSchemeMapper; private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseMapper crossPhaseMapper; 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.crossSchemeMapper = crossSchemeMapper;
this.crossPhaseMapper = crossPhaseMapper; this.crossPhaseMapper = crossPhaseMapper;
this.laneInfoMapper = laneInfoMapper;
this.crossLaneLightsMapper = crossLaneLightsMapper;
this.crossPhaseLightsMapper = crossPhaseLightsMapper;
} }
@Override @Override
...@@ -40,7 +54,78 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -40,7 +54,78 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private void handleRingTime(SaveSchemeConfigDTO saveSchemeConfigDTO) { private void handleRingTime(SaveSchemeConfigDTO saveSchemeConfigDTO) {
// 更新方案基础信息表 // 更新方案基础信息表
updateCrossScheme(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) { private void updateCrossScheme(SaveSchemeConfigDTO saveSchemeConfigDTO) {
......
...@@ -43,5 +43,11 @@ ...@@ -43,5 +43,11 @@
where t3.id = #{laneId} where t3.id = #{laneId}
</select> </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> </mapper>
...@@ -12,6 +12,14 @@ ...@@ -12,6 +12,14 @@
<result property="gmtModified" column="gmt_modified"/> <result property="gmtModified" column="gmt_modified"/>
</resultMap> </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 id="deleteByCrossId">
delete from t_base_cross_phase_lights delete from t_base_cross_phase_lights
where cross_id = #{crossId} where cross_id = #{crossId}
......
...@@ -24,6 +24,11 @@ ...@@ -24,6 +24,11 @@
<result property="gmtModified" column="gmt_modified"/> <result property="gmtModified" column="gmt_modified"/>
</resultMap> </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="selectIdByCrossIdAndPhaseNo" resultType="java.lang.Integer">
select id from t_base_cross_phase select id from t_base_cross_phase
where cross_id = #{crossId} and phase_no = #{coordPhaseNo} where cross_id = #{crossId} and phase_no = #{coordPhaseNo}
......
...@@ -30,5 +30,10 @@ ...@@ -30,5 +30,10 @@
where cross_id = #{crossId} where cross_id = #{crossId}
</delete> </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> </mapper>
...@@ -53,4 +53,11 @@ ...@@ -53,4 +53,11 @@
where cross_id = #{crossId} and dir = #{dir} and code = #{code} where cross_id = #{crossId} and dir = #{dir} and code = #{code}
</select> </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> </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