Commit 592b33ff authored by hanbing's avatar hanbing

[update] 信号优化,方案评价-查询速度优化

parent 9c35f355
...@@ -23,4 +23,6 @@ public interface SceneMapper { ...@@ -23,4 +23,6 @@ public interface SceneMapper {
ScenePO selectBySceneNum(Integer status); ScenePO selectBySceneNum(Integer status);
ScenePO selectById(Integer sceneId); ScenePO selectById(Integer sceneId);
List<ScenePO> selectAll();
} }
...@@ -21,4 +21,6 @@ public interface SceneStrategyMapper { ...@@ -21,4 +21,6 @@ public interface SceneStrategyMapper {
void deleteByStrategyIds(List<Integer> ids); void deleteByStrategyIds(List<Integer> ids);
List<Integer> selectSceneIdsByStrategyId(Integer strategyId); List<Integer> selectSceneIdsByStrategyId(Integer strategyId);
List<SceneStrategyPO> selectAll();
} }
...@@ -33,4 +33,6 @@ public interface StrategyMapper { ...@@ -33,4 +33,6 @@ public interface StrategyMapper {
void insertGreenwave(Integer greenwaveId, Integer strategyId); void insertGreenwave(Integer greenwaveId, Integer strategyId);
List<String> selectGreenwaveAllNames(); List<String> selectGreenwaveAllNames();
List<StrategyPO> selectAll();
} }
...@@ -16,7 +16,10 @@ import net.wanji.databus.dao.entity.*; ...@@ -16,7 +16,10 @@ import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.MetricHistDTO; import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.dto.RunningPlanDTO; import net.wanji.databus.dto.RunningPlanDTO;
import net.wanji.databus.po.*; import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossTurnInfoPO;
import net.wanji.databus.po.LaneInfoPO;
import net.wanji.databus.vo.RunningEvaluateCrossListVO; import net.wanji.databus.vo.RunningEvaluateCrossListVO;
import net.wanji.opt.bo.CrossNameBO; import net.wanji.opt.bo.CrossNameBO;
import net.wanji.opt.bo.MetricsDetailBO; import net.wanji.opt.bo.MetricsDetailBO;
...@@ -227,7 +230,8 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -227,7 +230,8 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.filter(po -> !Objects.equals(po.getStatus(), CrossStatusEnum.NORMAL.getCode())) .filter(po -> !Objects.equals(po.getStatus(), CrossStatusEnum.NORMAL.getCode()))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 按采集时间小时进行聚合 // 按采集时间小时进行聚合
Map<String, List<CrossDataHistPO>> timePOMap = buildTimePOMap(collect);; Map<String, List<CrossDataHistPO>> timePOMap = buildTimePOMap(collect);
;
// 找出当前小时的记录 // 找出当前小时的记录
List<CrossDataHistPO> currentHourList = timePOMap.get(time.substring(0, 2)); // 保留小时字符串 List<CrossDataHistPO> currentHourList = timePOMap.get(time.substring(0, 2)); // 保留小时字符串
if (currentHourList != null) { if (currentHourList != null) {
...@@ -376,6 +380,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -376,6 +380,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
private List<RunningEvaluateMetricsDetailVO.ProblemScheme> buildSchemeList( private List<RunningEvaluateMetricsDetailVO.ProblemScheme> buildSchemeList(
List<MetricHistDTO> metricHistDTOList, String crossId) { List<MetricHistDTO> metricHistDTOList, String crossId) {
List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.selectAll();
List<RunningEvaluateMetricsDetailVO.ProblemScheme> res = new ArrayList<>(); List<RunningEvaluateMetricsDetailVO.ProblemScheme> res = new ArrayList<>();
// 验证数据是否正确 // 验证数据是否正确
if (!isDataValid(metricHistDTOList)) { if (!isDataValid(metricHistDTOList)) {
...@@ -412,7 +417,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -412,7 +417,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
boolean isIntersecting = isTimeIntersecting( boolean isIntersecting = isTimeIntersecting(
eventStartTime, eventEndTime, sectionStartTime, sectionEndTime); eventStartTime, eventEndTime, sectionStartTime, sectionEndTime);
buildResIfIntersecting(res, crossSectionPO, sectionStartTime, sectionEndTime, isIntersecting, buildResIfIntersecting(res, crossSectionPO, sectionStartTime, sectionEndTime, isIntersecting,
baseCrossSchemeMapper); baseCrossSchemePOList);
} }
} }
// 去除相同方案 // 去除相同方案
...@@ -424,10 +429,14 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -424,10 +429,14 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
void buildResIfIntersecting(List<RunningEvaluateMetricsDetailVO.ProblemScheme> res, CrossSectionPO crossSectionPO, void buildResIfIntersecting(List<RunningEvaluateMetricsDetailVO.ProblemScheme> res, CrossSectionPO crossSectionPO,
String sectionStartTime, String sectionEndTime, boolean isIntersecting, String sectionStartTime, String sectionEndTime, boolean isIntersecting,
BaseCrossSchemeMapper baseCrossSchemeMapper) { List<BaseCrossSchemePO> crossSchemePOList) {
if (isIntersecting) { if (isIntersecting) {
Integer schemeId = crossSectionPO.getSchemeId(); Integer schemeId = crossSectionPO.getSchemeId();
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectById(schemeId);
Optional<BaseCrossSchemePO> result = crossSchemePOList.stream()
.filter(crossScheme -> schemeId.equals(crossScheme.getId()))
.findFirst();
BaseCrossSchemePO baseCrossSchemePO = result.get();
String schemeName = baseCrossSchemePO.getName(); String schemeName = baseCrossSchemePO.getName();
RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme = RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme =
...@@ -521,7 +530,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -521,7 +530,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String crossId = bo.getCrossId(); String crossId = bo.getCrossId();
RunningEvaluateScopeTreeVO runningEvaluateScopeTreeVO = new RunningEvaluateScopeTreeVO(); RunningEvaluateScopeTreeVO runningEvaluateScopeTreeVO = new RunningEvaluateScopeTreeVO();
runningEvaluateScopeTreeVO.setCrossId(crossId); runningEvaluateScopeTreeVO.setCrossId(crossId);
List<RunningEvaluateScopeTreeVO.DirVO> dirVOList= buildDirVOList(crossId); List<RunningEvaluateScopeTreeVO.DirVO> dirVOList = buildDirVOList(crossId);
runningEvaluateScopeTreeVO.setChild(dirVOList); runningEvaluateScopeTreeVO.setChild(dirVOList);
return runningEvaluateScopeTreeVO; return runningEvaluateScopeTreeVO;
} }
......
...@@ -11,10 +11,7 @@ import net.wanji.common.enums.TurnConvertEnum; ...@@ -11,10 +11,7 @@ import net.wanji.common.enums.TurnConvertEnum;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.common.utils.tool.TimeArrayUtil; import net.wanji.common.utils.tool.TimeArrayUtil;
import net.wanji.databus.bo.CrossIdBO; import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.BaseCrossSchedulesPO; import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.entity.BaseCrossSchedulesPlanPO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.*; import net.wanji.databus.po.*;
import net.wanji.opt.bo.CrossSchemeListBO; import net.wanji.opt.bo.CrossSchemeListBO;
...@@ -121,11 +118,15 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -121,11 +118,15 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
res.setProblemCounts(problemCounts); // 问题方案数量 res.setProblemCounts(problemCounts); // 问题方案数量
// 构造问题方案列表(根据日期) // 构造问题方案列表(根据日期)
Map<Date, List<CrossDataHistPO>> dateProblemsMap = buildDateProblemsMap(timeProblemMap); // 构造日期-问题结果集 Map<Date, List<CrossDataHistPO>> dateProblemsMap = buildDateProblemsMap(timeProblemMap); // 构造日期-问题结果集
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectAll();
List<BaseCrossSchemePO> crossSchemePOList = baseCrossSchemeMapper.selectAll();
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap = Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap =
buildDateSchemesMap(dateProblemsMap, crossId); // 构造日期-问题方案结果集 buildDateSchemesMap(dateProblemsMap, crossId, crossSectionPOList, crossSchemePOList); // 构造日期-问题方案结果集
List<ScenePO> scenePOList = sceneMapper.selectAll();
List<SchemeEvaluateProblemSchemeVO.ByDateVO> byDateVOList = buildProblemSchemeListByDate( List<SchemeEvaluateProblemSchemeVO.ByDateVO> byDateVOList = buildProblemSchemeListByDate(
dateProblemsMap, dateSchemesMap); dateProblemsMap, dateSchemesMap, scenePOList);
res.setProblemSchemeListByDate(byDateVOList); res.setProblemSchemeListByDate(byDateVOList);
// 构造计数 // 构造计数
int schemeCounts = calcSchemeCounts(dateSchemesMap); int schemeCounts = calcSchemeCounts(dateSchemesMap);
...@@ -1370,18 +1371,26 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -1370,18 +1371,26 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
} }
private int calcSchemeCounts(Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap) { private int calcSchemeCounts(Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap) {
int schemeCounts = 0; Set<Integer> problemIdSet = new HashSet<>();
for (List<RunningEvaluateMetricsDetailVO.ProblemScheme> list : dateSchemesMap.values()) { Collection<List<RunningEvaluateMetricsDetailVO.ProblemScheme>> values = dateSchemesMap.values();
schemeCounts += list.size();
for (List<RunningEvaluateMetricsDetailVO.ProblemScheme> list : values) {
for (RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme : list) {
Integer schemeId = problemScheme.getSchemeId();
problemIdSet.add(schemeId);
}
} }
return schemeCounts; return problemIdSet.size();
} }
@NotNull @NotNull
private List<SchemeEvaluateProblemSchemeVO.ByDateVO> buildProblemSchemeListByDate( private List<SchemeEvaluateProblemSchemeVO.ByDateVO> buildProblemSchemeListByDate(
Map<Date, List<CrossDataHistPO>> dateProblemsMap, Map<Date, List<CrossDataHistPO>> dateProblemsMap,
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap) { Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap, List<ScenePO> scenePOList) {
List<SchemeEvaluateProblemSchemeVO.ByDateVO> byDateVOList = new ArrayList<>(); List<SchemeEvaluateProblemSchemeVO.ByDateVO> byDateVOList = new ArrayList<>();
List<SceneStrategyPO> sceneStrategyPOList = sceneStrategyMapper.selectAll();
List<StrategyPO> strategyPOList = strategyMapper.selectAll();
for (Map.Entry<Date, List<CrossDataHistPO>> entry : dateProblemsMap.entrySet()) { for (Map.Entry<Date, List<CrossDataHistPO>> entry : dateProblemsMap.entrySet()) {
Date key = entry.getKey(); Date key = entry.getKey();
...@@ -1397,12 +1406,22 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -1397,12 +1406,22 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
for (CrossDataHistPO crossDataHistPO : value) { for (CrossDataHistPO crossDataHistPO : value) {
Integer status = crossDataHistPO.getStatus(); Integer status = crossDataHistPO.getStatus();
// 根据场景查询策略 // 根据场景查询策略
ScenePO scenePO = sceneMapper.selectBySceneNum(status); Optional<ScenePO> first = scenePOList.stream()
.filter(po -> status.equals(po.getSceneNum()))
.findFirst();
ScenePO scenePO = first.get();
Integer sceneId = scenePO.getId(); Integer sceneId = scenePO.getId();
List<SceneStrategyPO> sceneStrategyList = sceneStrategyMapper.selectBySceneId(sceneId);
List<SceneStrategyPO> sceneStrategyList = sceneStrategyPOList.stream()
.filter(po -> sceneId.equals(po.getSceneId()))
.collect(Collectors.toList());
for (SceneStrategyPO sceneStrategyPO : sceneStrategyList) { for (SceneStrategyPO sceneStrategyPO : sceneStrategyList) {
Integer strategyId = sceneStrategyPO.getStrategyId(); Integer strategyId = sceneStrategyPO.getStrategyId();
StrategyPO strategyPO = strategyMapper.selectById(strategyId);
Optional<StrategyPO> first1 = strategyPOList.stream()
.filter(po -> strategyId.equals(po.getId()))
.findFirst();
StrategyPO strategyPO = first1.get();
String strategyCode = strategyPO.getStrategyCode(); String strategyCode = strategyPO.getStrategyCode();
if (strategyCode.equals(StrategyAndMetricsEnum.Strategy.EFFICIENCY.getCode())) { if (strategyCode.equals(StrategyAndMetricsEnum.Strategy.EFFICIENCY.getCode())) {
efficiencyProblemCounts += 1; efficiencyProblemCounts += 1;
...@@ -1423,7 +1442,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -1423,7 +1442,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
} }
private Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> buildDateSchemesMap( private Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> buildDateSchemesMap(
Map<Date, List<CrossDataHistPO>> dateProblemsMap, String crossId) { Map<Date, List<CrossDataHistPO>> dateProblemsMap, String crossId, List<CrossSectionPO> crossSectionPOList,
List<BaseCrossSchemePO> crossSchemePOList) {
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap = new HashMap<>(); Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap = new HashMap<>();
// 获取当前计划ID // 获取当前计划ID
...@@ -1433,8 +1453,13 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -1433,8 +1453,13 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(datetime); String dateStr = sdf.format(datetime);
Integer planId = runningEvaluateService.findPlanId(datetime, dateStr, crossId); Integer planId = runningEvaluateService.findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
for (CrossSectionPO crossSectionPO : crossSectionPOList) { List<CrossSectionPO> filteredList = crossSectionPOList.stream()
.filter(crossSection -> crossId.equals(crossSection.getCrossId()) &&
planId.equals(crossSection.getPlanId()))
.collect(Collectors.toList());
for (CrossSectionPO crossSectionPO : filteredList) {
String sectionStartTime = crossSectionPO.getStartTime(); String sectionStartTime = crossSectionPO.getStartTime();
String sectionEndTime = crossSectionPO.getEndTime(); String sectionEndTime = crossSectionPO.getEndTime();
List<CrossDataHistPO> value = dateListEntry.getValue(); List<CrossDataHistPO> value = dateListEntry.getValue();
...@@ -1449,7 +1474,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -1449,7 +1474,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
boolean isIntersecting = runningEvaluateService.isTimeIntersecting( boolean isIntersecting = runningEvaluateService.isTimeIntersecting(
eventStartTime, eventEndTime, sectionStartTime, sectionEndTime); eventStartTime, eventEndTime, sectionStartTime, sectionEndTime);
runningEvaluateService.buildResIfIntersecting(problemSchemeList, crossSectionPO, sectionStartTime, runningEvaluateService.buildResIfIntersecting(problemSchemeList, crossSectionPO, sectionStartTime,
sectionEndTime, isIntersecting, baseCrossSchemeMapper); sectionEndTime, isIntersecting, crossSchemePOList);
} }
} }
// 去除相同方案 // 去除相同方案
......
...@@ -57,9 +57,16 @@ ...@@ -57,9 +57,16 @@
</select> </select>
<select id="selectById" resultType="net.wanji.opt.po.strategy.ScenePO"> <select id="selectById" resultType="net.wanji.opt.po.strategy.ScenePO">
select
id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified
from t_strategy_scene from t_strategy_scene
where id = ${sceneId} where id = ${sceneId}
</select> </select>
<select id="selectAll" resultType="net.wanji.opt.po.strategy.ScenePO">
select
id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified
from t_strategy_scene
</select>
</mapper> </mapper>
...@@ -35,4 +35,10 @@ ...@@ -35,4 +35,10 @@
where strategy_id = #{strategyId} where strategy_id = #{strategyId}
</select> </select>
<select id="selectAll" resultType="net.wanji.opt.po.strategy.SceneStrategyPO">
select
id,scene_id,strategy_id,scene_strategy_priority,gmt_create,gmt_modified
from t_strategy_scene_strategy
</select>
</mapper> </mapper>
...@@ -95,4 +95,10 @@ ...@@ -95,4 +95,10 @@
WHERE strategy_target = 2 WHERE strategy_target = 2
</select> </select>
<select id="selectAll" resultType="net.wanji.opt.po.strategy.StrategyPO">
select
id,strategy_code,strategy_name,strategy_target,strategy_detail,gmt_create,gmt_modified
from t_strategy_strategy
</select>
</mapper> </mapper>
...@@ -54,4 +54,6 @@ public interface BaseCrossSchemeMapper { ...@@ -54,4 +54,6 @@ public interface BaseCrossSchemeMapper {
@Param("schemeNo") Integer schemeNo); @Param("schemeNo") Integer schemeNo);
List<BaseCrossSchemePO> selectByCrossIdAndPartialSchemeName(String crossId, String schemeName); List<BaseCrossSchemePO> selectByCrossIdAndPartialSchemeName(String crossId, String schemeName);
List<BaseCrossSchemePO> selectAll();
} }
...@@ -172,4 +172,10 @@ ...@@ -172,4 +172,10 @@
</if> </if>
</select> </select>
<select id="selectAll" resultType="net.wanji.databus.dao.entity.BaseCrossSchemePO">
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
</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