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.*;
import net.wanji.databus.po.*;
import net.wanji.databus.vo.CrossIdAndNameVO;
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.StrategyMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
......@@ -60,7 +59,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private final CrossPlanMapper crossPlanMapper;
private final BaseCrossPlanMapper baseCrossPlanMapper;
private final BaseCrossSchemeMapper baseCrossSchemeMapper;
private final GreenwaveMergeConfig greenwaveMergeConfig;
private final GreenwaveMergeMapper greenwaveMergeMapper;
SimpleDateFormat hourMinuteFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd");
......@@ -75,7 +74,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
@Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper,
CrossBaseLaneInfoMapper crossBaseLaneInfoMapper,
@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.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper;
this.laneInfoMapper = laneInfoMapper;
......@@ -95,7 +94,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
this.crossPlanMapper = crossPlanMapper;
this.baseCrossPlanMapper = baseCrossPlanMapper;
this.baseCrossSchemeMapper = baseCrossSchemeMapper;
this.greenwaveMergeConfig = greenwaveMergeConfig;
this.greenwaveMergeMapper = greenwaveMergeMapper;
}
@Override
......@@ -736,42 +735,39 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
}
private void mergeLineSchemeBuffer(Map<String, LineSchemeDTO> lineSchemeBuffer, String mainlineName) {
if (mainlineName.contains("转山西路至霞景路")) {
// 工作日合并 07:00-09:30,09:30-16:30,16:30-19:00,21:30-23:59
// 周末和节假日合并 13:30-20:00,21:30-23:59
Map<String, LineSchemeDTO> mergedRecords = new HashMap<>();
Iterator<String> iterator = lineSchemeBuffer.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
String[] keyParts = key.split(" ");
String timeRange = keyParts[keyParts.length - 1];
String[] times = timeRange.split("-");
int startTime = timeToInt(times[0]);
int endTime = timeToInt(times[1]);
boolean isWeekday = key.contains("工作日");
List<int[]> mergingPeriods = getMergingPeriods(isWeekday);
for (int[] mergingPeriod : mergingPeriods) {
if (isOverlapping(startTime, endTime, mergingPeriod[0], mergingPeriod[1])) {
int mergedStartTime = mergingPeriod[0];
int mergedEndTime = mergingPeriod[1];
String newKey = constructNewKey(key, intToTime(mergedStartTime), intToTime(mergedEndTime));
if (mergedRecords.containsKey(newKey)) {
LineSchemeDTO existingDto = mergedRecords.get(newKey);
existingDto.getGreenwaveHistPOList().addAll(lineSchemeBuffer.get(key).getGreenwaveHistPOList());
iterator.remove();
} else {
mergedRecords.put(newKey, lineSchemeBuffer.get(key));
iterator.remove();
}
GreenwaveMergePO greenwaveMergePO = greenwaveMergeMapper.selectByMainlineName(mainlineName);
Map<String, LineSchemeDTO> mergedRecords = new HashMap<>();
Iterator<String> iterator = lineSchemeBuffer.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
String[] keyParts = key.split(" ");
String timeRange = keyParts[keyParts.length - 1];
String[] times = timeRange.split("-");
int startTime = timeToInt(times[0]);
int endTime = timeToInt(times[1]);
boolean isWeekday = key.contains("工作日");
List<int[]> mergingPeriods = getMergingPeriods(isWeekday, greenwaveMergePO);
for (int[] mergingPeriod : mergingPeriods) {
if (isOverlapping(startTime, endTime, mergingPeriod[0], mergingPeriod[1])) {
int mergedStartTime = mergingPeriod[0];
int mergedEndTime = mergingPeriod[1];
String newKey = constructNewKey(key, intToTime(mergedStartTime), intToTime(mergedEndTime));
if (mergedRecords.containsKey(newKey)) {
LineSchemeDTO existingDto = mergedRecords.get(newKey);
existingDto.getGreenwaveHistPOList().addAll(lineSchemeBuffer.get(key).getGreenwaveHistPOList());
iterator.remove();
} else {
mergedRecords.put(newKey, lineSchemeBuffer.get(key));
iterator.remove();
}
}
}
lineSchemeBuffer.putAll(mergedRecords);
}
lineSchemeBuffer.putAll(mergedRecords);
}
private int timeToInt(String time) {
......@@ -779,13 +775,18 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
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<>();
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);
} 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);
}
return res;
......
......@@ -141,11 +141,6 @@ crossOptParam:
minVehheadTime: 2.0
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:
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