Commit 19eb34f4 authored by hanbing's avatar hanbing

[update] 绿波时段合并配置抽取至数据库

parent 1ac73972
package net.wanji.opt.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author Kent HAN
* @date 2023/11/30 11:07
*/
@ConfigurationProperties(prefix = "greenwave-merge")
@Component
@Data
public class GreenwaveMergeConfig {
List<String> weekDay;
List<String> weekEnd;
}
...@@ -13,7 +13,6 @@ import net.wanji.databus.dao.mapper.*; ...@@ -13,7 +13,6 @@ import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.*; import net.wanji.databus.po.*;
import net.wanji.databus.vo.CrossIdAndNameVO; import net.wanji.databus.vo.CrossIdAndNameVO;
import net.wanji.opt.bo.*; import net.wanji.opt.bo.*;
import net.wanji.opt.config.GreenwaveMergeConfig;
import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper; import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper;
import net.wanji.opt.dao.mapper.strategy.StrategyMapper; import net.wanji.opt.dao.mapper.strategy.StrategyMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper; import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
...@@ -60,7 +59,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -60,7 +59,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private final CrossPlanMapper crossPlanMapper; private final CrossPlanMapper crossPlanMapper;
private final BaseCrossPlanMapper baseCrossPlanMapper; private final BaseCrossPlanMapper baseCrossPlanMapper;
private final BaseCrossSchemeMapper baseCrossSchemeMapper; private final BaseCrossSchemeMapper baseCrossSchemeMapper;
private final GreenwaveMergeConfig greenwaveMergeConfig; private final GreenwaveMergeMapper greenwaveMergeMapper;
SimpleDateFormat hourMinuteFormat = new SimpleDateFormat("HH:mm"); SimpleDateFormat hourMinuteFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd");
...@@ -75,7 +74,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -75,7 +74,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
@Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper, @Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper,
CrossBaseLaneInfoMapper crossBaseLaneInfoMapper, CrossBaseLaneInfoMapper crossBaseLaneInfoMapper,
@Qualifier("laneInfoMapper") LaneInfoMapper laneInfoMapper, @Qualifier("laneInfoMapper") LaneInfoMapper laneInfoMapper,
CrossDirDataHistMapper crossDirDataHistMapper, CrossDataHistMapper crossDataHistMapper, CrossTurnDataHistMapper crossTurnDataHistMapper, CrossLaneDataHistMapper crossLaneDataHistMapper, @Qualifier("greenwaveInfoMapper") GreenwaveInfoMapper greenwaveInfoMapper, @Qualifier("greenwaveHistMapper") GreenwaveHistMapper greenwaveHistMapper, @Qualifier("greenwaveCrossMapper") GreenwaveCrossMapper greenwaveCrossMapper, @Qualifier("baseCrossInfoMapper") BaseCrossInfoMapper baseCrossInfoMapper, @Qualifier("greenwaveSceneMapper") GreenwaveSceneMapper greenwaveSceneMapper, @Qualifier("sceneStrategyMapper") SceneStrategyMapper sceneStrategyMapper, @Qualifier("strategyMapper") StrategyMapper strategyMapper, @Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper, @Qualifier("ridInfoMapper") RidInfoMapper ridInfoMapper, CrossPlanMapper crossPlanMapper, @Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper, @Qualifier("baseCrossSchemeMapper") BaseCrossSchemeMapper baseCrossSchemeMapper, GreenwaveMergeConfig greenwaveMergeConfig) { CrossDirDataHistMapper crossDirDataHistMapper, CrossDataHistMapper crossDataHistMapper, CrossTurnDataHistMapper crossTurnDataHistMapper, CrossLaneDataHistMapper crossLaneDataHistMapper, @Qualifier("greenwaveInfoMapper") GreenwaveInfoMapper greenwaveInfoMapper, @Qualifier("greenwaveHistMapper") GreenwaveHistMapper greenwaveHistMapper, @Qualifier("greenwaveCrossMapper") GreenwaveCrossMapper greenwaveCrossMapper, @Qualifier("baseCrossInfoMapper") BaseCrossInfoMapper baseCrossInfoMapper, @Qualifier("greenwaveSceneMapper") GreenwaveSceneMapper greenwaveSceneMapper, @Qualifier("sceneStrategyMapper") SceneStrategyMapper sceneStrategyMapper, @Qualifier("strategyMapper") StrategyMapper strategyMapper, @Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper, @Qualifier("ridInfoMapper") RidInfoMapper ridInfoMapper, CrossPlanMapper crossPlanMapper, @Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper, @Qualifier("baseCrossSchemeMapper") BaseCrossSchemeMapper baseCrossSchemeMapper, @Qualifier("greenwaveMergeMapper") GreenwaveMergeMapper greenwaveMergeMapper) {
this.baseCrossDirInfoMapper = baseCrossDirInfoMapper; this.baseCrossDirInfoMapper = baseCrossDirInfoMapper;
this.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper; this.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper;
this.laneInfoMapper = laneInfoMapper; this.laneInfoMapper = laneInfoMapper;
...@@ -95,7 +94,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -95,7 +94,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
this.crossPlanMapper = crossPlanMapper; this.crossPlanMapper = crossPlanMapper;
this.baseCrossPlanMapper = baseCrossPlanMapper; this.baseCrossPlanMapper = baseCrossPlanMapper;
this.baseCrossSchemeMapper = baseCrossSchemeMapper; this.baseCrossSchemeMapper = baseCrossSchemeMapper;
this.greenwaveMergeConfig = greenwaveMergeConfig; this.greenwaveMergeMapper = greenwaveMergeMapper;
} }
@Override @Override
...@@ -736,42 +735,39 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -736,42 +735,39 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
} }
private void mergeLineSchemeBuffer(Map<String, LineSchemeDTO> lineSchemeBuffer, String mainlineName) { private void mergeLineSchemeBuffer(Map<String, LineSchemeDTO> lineSchemeBuffer, String mainlineName) {
if (mainlineName.contains("转山西路至霞景路")) { GreenwaveMergePO greenwaveMergePO = greenwaveMergeMapper.selectByMainlineName(mainlineName);
// 工作日合并 07:00-09:30,09:30-16:30,16:30-19:00,21:30-23:59 Map<String, LineSchemeDTO> mergedRecords = new HashMap<>();
// 周末和节假日合并 13:30-20:00,21:30-23:59
Map<String, LineSchemeDTO> mergedRecords = new HashMap<>(); Iterator<String> iterator = lineSchemeBuffer.keySet().iterator();
while (iterator.hasNext()){
Iterator<String> iterator = lineSchemeBuffer.keySet().iterator(); String key = iterator.next();
while (iterator.hasNext()){ String[] keyParts = key.split(" ");
String key = iterator.next(); String timeRange = keyParts[keyParts.length - 1];
String[] keyParts = key.split(" "); String[] times = timeRange.split("-");
String timeRange = keyParts[keyParts.length - 1]; int startTime = timeToInt(times[0]);
String[] times = timeRange.split("-"); int endTime = timeToInt(times[1]);
int startTime = timeToInt(times[0]);
int endTime = timeToInt(times[1]); boolean isWeekday = key.contains("工作日");
List<int[]> mergingPeriods = getMergingPeriods(isWeekday, greenwaveMergePO);
boolean isWeekday = key.contains("工作日");
List<int[]> mergingPeriods = getMergingPeriods(isWeekday); for (int[] mergingPeriod : mergingPeriods) {
if (isOverlapping(startTime, endTime, mergingPeriod[0], mergingPeriod[1])) {
for (int[] mergingPeriod : mergingPeriods) { int mergedStartTime = mergingPeriod[0];
if (isOverlapping(startTime, endTime, mergingPeriod[0], mergingPeriod[1])) { int mergedEndTime = mergingPeriod[1];
int mergedStartTime = mergingPeriod[0];
int mergedEndTime = mergingPeriod[1]; String newKey = constructNewKey(key, intToTime(mergedStartTime), intToTime(mergedEndTime));
if (mergedRecords.containsKey(newKey)) {
String newKey = constructNewKey(key, intToTime(mergedStartTime), intToTime(mergedEndTime)); LineSchemeDTO existingDto = mergedRecords.get(newKey);
if (mergedRecords.containsKey(newKey)) { existingDto.getGreenwaveHistPOList().addAll(lineSchemeBuffer.get(key).getGreenwaveHistPOList());
LineSchemeDTO existingDto = mergedRecords.get(newKey); iterator.remove();
existingDto.getGreenwaveHistPOList().addAll(lineSchemeBuffer.get(key).getGreenwaveHistPOList()); } else {
iterator.remove(); mergedRecords.put(newKey, lineSchemeBuffer.get(key));
} else { iterator.remove();
mergedRecords.put(newKey, lineSchemeBuffer.get(key));
iterator.remove();
}
} }
} }
} }
lineSchemeBuffer.putAll(mergedRecords);
} }
lineSchemeBuffer.putAll(mergedRecords);
} }
private int timeToInt(String time) { private int timeToInt(String time) {
...@@ -779,13 +775,18 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -779,13 +775,18 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return Integer.parseInt(parts[0]) * 60 + Integer.parseInt(parts[1]); return Integer.parseInt(parts[0]) * 60 + Integer.parseInt(parts[1]);
} }
private List<int[]> getMergingPeriods(boolean isWeekday) { private List<int[]> getMergingPeriods(boolean isWeekday, GreenwaveMergePO greenwaveMergePO) {
List<int[]> res = new ArrayList<>(); List<int[]> res = new ArrayList<>();
if (isWeekday) { if (isWeekday) {
List<String> weekDays = greenwaveMergeConfig.getWeekDay(); String weekdayMerge = greenwaveMergePO.getWeekdayMerge(); // 07:00,09:30|09:30,16:30|16:30,19:00|21:30,23:59
String[] split = weekdayMerge.split("\\|");
List<String> weekDays = new ArrayList<>(Arrays.asList(split));
fillRes(weekDays, res); fillRes(weekDays, res);
} else { } else {
List<String> weekEnds = greenwaveMergeConfig.getWeekEnd(); String weekendMerge = greenwaveMergePO.getWeekendMerge();
String[] split = weekendMerge.split("\\|");
List<String> weekEnds = new ArrayList<>(Arrays.asList(split));
fillRes(weekEnds, res); fillRes(weekEnds, res);
} }
return res; return res;
......
...@@ -141,11 +141,6 @@ crossOptParam: ...@@ -141,11 +141,6 @@ crossOptParam:
minVehheadTime: 2.0 minVehheadTime: 2.0
defaultVehheadTime: 2.8 defaultVehheadTime: 2.8
# 合并绿波时段
greenwave-merge:
weekday: ["07:00,09:30", "09:30,16:30", "16:30,19:00", "21:30,23:59"]
weekend: ["13:30,20:00", "21:30,23:59"]
# 绿波方向转换 # 绿波方向转换
direction-mappings: direction-mappings:
mappings: mappings:
......
package net.wanji.databus.dao.mapper;
import net.wanji.databus.po.GreenwaveMergePO;
import org.springframework.stereotype.Repository;
/**
* @author Kent HAN
* @date 2022/10/31 11:03
*/
@Repository
public interface GreenwaveMergeMapper {
GreenwaveMergePO selectByMainlineName(String mainlineName);
}
package net.wanji.databus.po;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2022/11/15 10:48
*/
@Data
public class GreenwaveMergePO {
/** 主键 */
@ApiModelProperty(name = "主键",notes = "")
private Integer id ;
/** 干线名称 */
@ApiModelProperty(name = "干线名称",notes = "")
private String mainlineName ;
/** 工作日合并时段 */
@ApiModelProperty(name = "工作日合并时段",notes = "")
private String weekdayMerge ;
/** 周末合并时段 */
@ApiModelProperty(name = "周末合并时段",notes = "")
private String weekendMerge ;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.databus.dao.mapper.GreenwaveMergeMapper">
<sql id="Base_Column_List">
id,mainline_name,weekday_merge,weekend_merge
</sql>
<select id="selectByMainlineName" resultType="net.wanji.databus.po.GreenwaveMergePO">
select <include refid="Base_Column_List"></include>
from t_greenwave_merge
where mainline_name = #{mainlineName}
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