Commit 35716e72 authored by hanbing's avatar hanbing

[update] 诊断优化,处理缺少数据异常

parent 0b165ee2
...@@ -162,24 +162,25 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -162,24 +162,25 @@ public class DiagnoServiceImpl implements DiagnoService {
schemeOptVO.setCrossId(crossId); schemeOptVO.setCrossId(crossId);
// 选择数据批次时间最大的记录 // 选择数据批次时间最大的记录
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId); List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
if (CollectionUtil.isEmpty(maxList)) { if (CollectionUtil.isNotEmpty(maxList)) {
throw new RuntimeException("没有该路口优化日志数据"); // 根据相位去重
TreeSet<CrossSchemeOptLogPO> collect = maxList.stream()
.collect(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(CrossSchemeOptLogPO::getPhaseNo))));
CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
String optType = crossSchemeOptLogPO.getOptType();
schemeOptVO.setOptType(Integer.parseInt(optType));
Integer schemeId = crossSchemeOptLogPO.getSchemeId();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectById(schemeId);
if (crossSchemePO != null) {
schemeOptVO.setCycle(crossSchemePO.getCycle());
schemeOptVO.setSchemeId(crossSchemePO.getId());
schemeOptVO.setOffset(crossSchemeOptLogPO.getOffset());
}
// 构造调整时间列表
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = buildPhaseOptTimeList(collect, schemeId);
schemeOptVO.setPhaseOptTimeList(phaseOptTimeList);
} }
// 根据相位去重
TreeSet<CrossSchemeOptLogPO> collect = maxList.stream()
.collect(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(CrossSchemeOptLogPO::getPhaseNo))));
CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
String optType = crossSchemeOptLogPO.getOptType();
schemeOptVO.setOptType(Integer.parseInt(optType));
Integer schemeId = crossSchemeOptLogPO.getSchemeId();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectById(schemeId);
schemeOptVO.setCycle(crossSchemePO.getCycle());
schemeOptVO.setSchemeId(crossSchemePO.getId());
schemeOptVO.setOffset(crossSchemeOptLogPO.getOffset());
// 构造调整时间列表
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = buildPhaseOptTimeList(collect, schemeId);
schemeOptVO.setPhaseOptTimeList(phaseOptTimeList);
return schemeOptVO; return schemeOptVO;
} }
...@@ -245,18 +246,18 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -245,18 +246,18 @@ public class DiagnoServiceImpl implements DiagnoService {
String crossId = sendManualDTO.getSendCrossId(); String crossId = sendManualDTO.getSendCrossId();
// 选择数据批次时间最大的记录 // 选择数据批次时间最大的记录
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId); List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
if (CollectionUtil.isEmpty(maxList)) { if (CollectionUtil.isNotEmpty(maxList)) {
throw new RuntimeException("没有该路口优化日志数据"); CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
String dataExtend = crossSchemeOptLogPO.getDataExtend();
OptDataExtend optDataExtendOld = gson.fromJson(dataExtend, OptDataExtend.class);
OptDataExtend optDataExtendNew = new OptDataExtend();
optDataExtendNew.setSceneName(optDataExtendOld.getSceneName());
optDataExtendNew.setStrategyName(optDataExtendOld.getStrategyName());
// todo 改为枚举值
optDataExtendNew.setIdeaName("手动干预");
return gson.toJson(optDataExtendNew);
} }
CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0); return null;
String dataExtend = crossSchemeOptLogPO.getDataExtend();
OptDataExtend optDataExtendOld = gson.fromJson(dataExtend, OptDataExtend.class);
OptDataExtend optDataExtendNew = new OptDataExtend();
optDataExtendNew.setSceneName(optDataExtendOld.getSceneName());
optDataExtendNew.setStrategyName(optDataExtendOld.getStrategyName());
// todo 改为枚举值
optDataExtendNew.setIdeaName("手动干预");
return gson.toJson(optDataExtendNew);
} }
private List<SchemeSendVO.Pattern> buildPatternList(String sendCrossId, Integer schemeId, private List<SchemeSendVO.Pattern> buildPatternList(String sendCrossId, Integer schemeId,
...@@ -343,20 +344,16 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -343,20 +344,16 @@ public class DiagnoServiceImpl implements DiagnoService {
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(crossId); CrossInfoPO crossInfoPO = crossInfoMapper.selectById(crossId);
optEffectVO.setCrossName(crossInfoPO.getName()); optEffectVO.setCrossName(crossInfoPO.getName());
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId); List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
CrossSchemeOptLogPO crossSchemeOptLogPO = null; if (maxList != null) {
try { CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
crossSchemeOptLogPO = maxList.get(0); optEffectVO.setOptStartTime(crossSchemeOptLogPO.getStartTime());
} catch (IndexOutOfBoundsException e) { Date endTime = crossSchemeOptLogPO.getEndTime();
throw new RuntimeException("没有该路口优化日志数据"); if (ObjectUtil.isEmpty(endTime)) {
} optEffectVO.setStatus(2);
optEffectVO.setOptStartTime(crossSchemeOptLogPO.getStartTime()); } else {
Date endTime = crossSchemeOptLogPO.getEndTime(); optEffectVO.setStatus(1);
if (ObjectUtil.isEmpty(endTime)) { }
optEffectVO.setStatus(2);
} else {
optEffectVO.setStatus(1);
} }
Integer dir = crossIdAndDirDTO.getDir(); Integer dir = crossIdAndDirDTO.getDir();
// 获取当前时间之前45分钟的10位时间戳 // 获取当前时间之前45分钟的10位时间戳
long currentSeconds = DateUtil.currentSeconds(); long currentSeconds = DateUtil.currentSeconds();
...@@ -367,18 +364,22 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -367,18 +364,22 @@ public class DiagnoServiceImpl implements DiagnoService {
// 获取路口历史数据 // 获取路口历史数据
List<CrossDataHistPO> crossDataHistPOList = List<CrossDataHistPO> crossDataHistPOList =
crossDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds); crossDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds);
List<OptEffectVO.IndexDelay> indexDelayList = buildIndexDelayList(crossDataHistPOList); if (CollectionUtil.isNotEmpty(crossDataHistPOList)) {
optEffectVO.setIndexDelayList(indexDelayList); List<OptEffectVO.IndexDelay> indexDelayList = buildIndexDelayList(crossDataHistPOList);
List<OptEffectVO.QueueStop> queueStopList = buildQueueStopList(crossDataHistPOList); optEffectVO.setIndexDelayList(indexDelayList);
optEffectVO.setQueueStopList(queueStopList); List<OptEffectVO.QueueStop> queueStopList = buildQueueStopList(crossDataHistPOList);
optEffectVO.setQueueStopList(queueStopList);
}
} else { } else {
// 获取路口方向历史数据 // 获取路口方向历史数据
List<CrossDirDataHistPO> crossDirDataHistPOList = List<CrossDirDataHistPO> crossDirDataHistPOList =
crossDirDataHistMapper.selectByCrossIdDirAndTimestamp(crossId, dir, preSeconds); crossDirDataHistMapper.selectByCrossIdDirAndTimestamp(crossId, dir, preSeconds);
List<OptEffectVO.IndexDelay> indexDelayList = buildIndexDelayListDir(crossDirDataHistPOList); if (CollectionUtil.isNotEmpty(crossDirDataHistPOList)) {
optEffectVO.setIndexDelayList(indexDelayList); List<OptEffectVO.IndexDelay> indexDelayList = buildIndexDelayListDir(crossDirDataHistPOList);
List<OptEffectVO.QueueStop> queueStopList = buildQueueStopListDir(crossDirDataHistPOList); optEffectVO.setIndexDelayList(indexDelayList);
optEffectVO.setQueueStopList(queueStopList); List<OptEffectVO.QueueStop> queueStopList = buildQueueStopListDir(crossDirDataHistPOList);
optEffectVO.setQueueStopList(queueStopList);
}
} }
return optEffectVO; return optEffectVO;
} }
......
...@@ -67,22 +67,21 @@ public class EvaluateServiceImpl implements EvaluateService { ...@@ -67,22 +67,21 @@ public class EvaluateServiceImpl implements EvaluateService {
private void fillOptData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId) { private void fillOptData(EvaluateCrossDetailVO evaluateCrossDetailVO, String crossId) {
// 选择数据批次时间最大的记录 // 选择数据批次时间最大的记录
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId); List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
if (CollectionUtil.isEmpty(maxList)) { if (CollectionUtil.isNotEmpty(maxList)) {
throw new RuntimeException("没有该路口优化日志数据"); CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0);
} // 解析dataExtend
CrossSchemeOptLogPO crossSchemeOptLogPO = maxList.get(0); String dataExtend = crossSchemeOptLogPO.getDataExtend();
// 解析dataExtend OptDataExtend optDataExtend = gson.fromJson(dataExtend, OptDataExtend.class);
String dataExtend = crossSchemeOptLogPO.getDataExtend(); evaluateCrossDetailVO.setSceneName(optDataExtend.getSceneName());
OptDataExtend optDataExtend = gson.fromJson(dataExtend, OptDataExtend.class); evaluateCrossDetailVO.setStrategyName(optDataExtend.getStrategyName());
evaluateCrossDetailVO.setSceneName(optDataExtend.getSceneName()); evaluateCrossDetailVO.setIdeaName(optDataExtend.getIdeaName());
evaluateCrossDetailVO.setStrategyName(optDataExtend.getStrategyName()); evaluateCrossDetailVO.setOptStartTime(crossSchemeOptLogPO.getStartTime());
evaluateCrossDetailVO.setIdeaName(optDataExtend.getIdeaName()); Date endTime = crossSchemeOptLogPO.getEndTime();
evaluateCrossDetailVO.setOptStartTime(crossSchemeOptLogPO.getStartTime()); if (ObjectUtil.isEmpty(endTime)) {
Date endTime = crossSchemeOptLogPO.getEndTime(); evaluateCrossDetailVO.setOptStatus(2);
if (ObjectUtil.isEmpty(endTime)) { } else {
evaluateCrossDetailVO.setOptStatus(2); evaluateCrossDetailVO.setOptStatus(1);
} else { }
evaluateCrossDetailVO.setOptStatus(1);
} }
} }
} }
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
from t_base_cross_scheme_opt_log from t_base_cross_scheme_opt_log
where cross_id = #{crossId} where cross_id = #{crossId}
and data_batch_time=(SELECT MAX(ABS(data_batch_time)) FROM t_base_cross_scheme_opt_log); and data_batch_time=(SELECT MAX(ABS(data_batch_time)) FROM t_base_cross_scheme_opt_log WHERE cross_id = #{crossId});
</select> </select>
<insert id="insertOne" parameterType="net.wanji.opt.po.base.CrossSchemeOptLogPO"> <insert id="insertOne" parameterType="net.wanji.opt.po.base.CrossSchemeOptLogPO">
......
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