Commit cb84ffaf authored by hanbing's avatar hanbing

[update] 新信号评价-运行评价-方案问题修改

parent 7314f33f
...@@ -58,6 +58,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -58,6 +58,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
private final CrossTurnDataHistMapper crossTurnDataHistMapper; private final CrossTurnDataHistMapper crossTurnDataHistMapper;
private final CrossLaneDataHistMapper crossLaneDataHistMapper; private final CrossLaneDataHistMapper crossLaneDataHistMapper;
SimpleDateFormat HOUR_SDF = new SimpleDateFormat("HH:mm");
SimpleDateFormat DAY_SDF = new SimpleDateFormat("yyyy-MM-dd");
public RunningEvaluateServiceImpl(CrossDataRealtimeMapper crossDataRealtimeMapper, public RunningEvaluateServiceImpl(CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossDataHistMapper crossDataHistMapper, CrossDataHistMapper crossDataHistMapper,
@Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper, @Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper,
...@@ -204,12 +207,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -204,12 +207,7 @@ 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());
// 按采集时间小时进行聚合 // 按采集时间小时进行聚合
SimpleDateFormat sdf = new SimpleDateFormat("HH"); Map<String, List<CrossDataHistPO>> timePOMap = buildTimePOMap(collect);;
Map<String, List<CrossDataHistPO>> timePOMap = crossDataHistPOList.stream()
.collect(Collectors.groupingBy(po -> {
Date date = new Date((long) po.getBatchTime() * 1000); // 将10位时间戳转换为Date对象
return sdf.format(date); // 将Date对象转换为"HH"格式的字符串
}));
// 找出当前小时的记录 // 找出当前小时的记录
List<CrossDataHistPO> currentHourList = timePOMap.get(time.substring(0, 2)); // 保留小时字符串 List<CrossDataHistPO> currentHourList = timePOMap.get(time.substring(0, 2)); // 保留小时字符串
if (currentHourList != null) { if (currentHourList != null) {
...@@ -237,6 +235,16 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -237,6 +235,16 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return res; return res;
} }
private Map<String, List<CrossDataHistPO>> buildTimePOMap(List<CrossDataHistPO> crossDataHistPOList) {
SimpleDateFormat sdf = new SimpleDateFormat("HH");
Map<String, List<CrossDataHistPO>> timePOMap = crossDataHistPOList.stream()
.collect(Collectors.groupingBy(po -> {
Date date = new Date((long) po.getBatchTime() * 1000); // 将10位时间戳转换为Date对象
return sdf.format(date); // 将Date对象转换为"HH"格式的字符串
}));
return timePOMap;
}
@Override @Override
public RunningEvaluateMetricsDetailVO metricsDetail(MetricsDetailBO bo) { public RunningEvaluateMetricsDetailVO metricsDetail(MetricsDetailBO bo) {
String crossId = bo.getCrossId(); String crossId = bo.getCrossId();
...@@ -366,16 +374,14 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -366,16 +374,14 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.values().stream().collect(Collectors.toList()); // 从Map中获取值并收集到新的列表中 .values().stream().collect(Collectors.toList()); // 从Map中获取值并收集到新的列表中
for (MetricHistDTO dto : uniqueList) { for (MetricHistDTO dto : uniqueList) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date abnormalEventStartTime = dto.getStartTime(); Date abnormalEventStartTime = dto.getStartTime();
Integer duration = dto.getDuration(); Integer duration = dto.getDuration();
Date abnormalEventEndTime = DateUtil.offsetMinute(abnormalEventStartTime, duration); Date abnormalEventEndTime = DateUtil.offsetMinute(abnormalEventStartTime, duration);
String eventStartTime = sdf.format(abnormalEventStartTime); String eventStartTime = HOUR_SDF.format(abnormalEventStartTime);
String eventEndTime = sdf.format(abnormalEventEndTime); String eventEndTime = HOUR_SDF.format(abnormalEventEndTime);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date datetime = new Date(); Date datetime = new Date();
String dateStr = sdf2.format(datetime); String dateStr = DAY_SDF.format(datetime);
// 获取当前计划ID // 获取当前计划ID
Integer planId = findPlanId(datetime, dateStr, crossId); Integer planId = findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId); List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
...@@ -385,18 +391,8 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -385,18 +391,8 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
// 比较两组时间段是否相交 // 比较两组时间段是否相交
boolean isIntersecting = isTimeIntersecting( boolean isIntersecting = isTimeIntersecting(
eventStartTime, eventEndTime, sectionStartTime, sectionEndTime); eventStartTime, eventEndTime, sectionStartTime, sectionEndTime);
if (isIntersecting) { buildResIfIntersecting(res, crossSectionPO, sectionStartTime, sectionEndTime, isIntersecting,
Integer schemeId = crossSectionPO.getSchemeId(); baseCrossSchemeMapper);
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectById(schemeId);
String schemeName = baseCrossSchemePO.getName();
RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme =
new RunningEvaluateMetricsDetailVO.ProblemScheme();
problemScheme.setSchemeName(schemeName);
problemScheme.setStartTime(sectionStartTime);
problemScheme.setEndTime(sectionEndTime);
res.add(problemScheme);
}
} }
} }
// 去除相同方案 // 去除相同方案
...@@ -406,6 +402,23 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -406,6 +402,23 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return uniqueRes; return uniqueRes;
} }
void buildResIfIntersecting(List<RunningEvaluateMetricsDetailVO.ProblemScheme> res, CrossSectionPO crossSectionPO,
String sectionStartTime, String sectionEndTime, boolean isIntersecting,
BaseCrossSchemeMapper baseCrossSchemeMapper) {
if (isIntersecting) {
Integer schemeId = crossSectionPO.getSchemeId();
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectById(schemeId);
String schemeName = baseCrossSchemePO.getName();
RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme =
new RunningEvaluateMetricsDetailVO.ProblemScheme();
problemScheme.setSchemeName(schemeName);
problemScheme.setStartTime(sectionStartTime);
problemScheme.setEndTime(sectionEndTime);
res.add(problemScheme);
}
}
List<RunningEvaluateMetricsDetailVO.ProblemStatus> buildProblemStatusList( List<RunningEvaluateMetricsDetailVO.ProblemStatus> buildProblemStatusList(
List<MetricHistDTO> metricHistDTOList) { List<MetricHistDTO> metricHistDTOList) {
List<RunningEvaluateMetricsDetailVO.ProblemStatus> res = new ArrayList<>(); List<RunningEvaluateMetricsDetailVO.ProblemStatus> res = new ArrayList<>();
...@@ -667,12 +680,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -667,12 +680,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
@NotNull @NotNull
private List<RunningEvaluateIndexStatusVO> buildRunningEvaluateIndexStatusVOList( private List<RunningEvaluateIndexStatusVO> buildRunningEvaluateIndexStatusVOList(
List<CrossDataHistPO> crossDataHistPOList, int status) { List<CrossDataHistPO> crossDataHistPOList, int status) {
SimpleDateFormat sdf = new SimpleDateFormat("HH"); Map<String, List<CrossDataHistPO>> timePOMap = buildTimePOMap(crossDataHistPOList);
Map<String, List<CrossDataHistPO>> timePOMap = crossDataHistPOList.stream()
.collect(Collectors.groupingBy(po -> {
Date date = new Date((long) po.getBatchTime() * 1000); // 将10位时间戳转换为Date对象
return sdf.format(date); // 将Date对象转换为"HH"格式的字符串
}));
// 构造结果集 // 构造结果集
List<RunningEvaluateIndexStatusVO> res = new ArrayList<>(); List<RunningEvaluateIndexStatusVO> res = new ArrayList<>();
...@@ -728,16 +736,14 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -728,16 +736,14 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.collect(Collectors.toList()); .collect(Collectors.toList());
for (CrossDataHistPO abnormalEvent : allList) { for (CrossDataHistPO abnormalEvent : allList) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date abnormalEventStartTime = abnormalEvent.getStartTime(); Date abnormalEventStartTime = abnormalEvent.getStartTime();
Integer duration = abnormalEvent.getDuration(); Integer duration = abnormalEvent.getDuration();
Date abnormalEventEndTime = DateUtil.offsetMinute(abnormalEventStartTime, duration); Date abnormalEventEndTime = DateUtil.offsetMinute(abnormalEventStartTime, duration);
String eventStartTime = sdf.format(abnormalEventStartTime); String eventStartTime = HOUR_SDF.format(abnormalEventStartTime);
String eventEndTime = sdf.format(abnormalEventEndTime); String eventEndTime = HOUR_SDF.format(abnormalEventEndTime);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date datetime = new Date(); Date datetime = new Date();
String dateStr = sdf2.format(datetime); String dateStr = DAY_SDF.format(datetime);
// 获取当前计划ID // 获取当前计划ID
Integer planId = findPlanId(datetime, dateStr, crossId); Integer planId = findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId); List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
......
...@@ -339,18 +339,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -339,18 +339,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
// 比较两组时间段是否相交 // 比较两组时间段是否相交
boolean isIntersecting = runningEvaluateService.isTimeIntersecting( boolean isIntersecting = runningEvaluateService.isTimeIntersecting(
eventStartTime, eventEndTime, sectionStartTime, sectionEndTime); eventStartTime, eventEndTime, sectionStartTime, sectionEndTime);
if (isIntersecting) { runningEvaluateService.buildResIfIntersecting(problemSchemeList, crossSectionPO, sectionStartTime,
Integer schemeId = crossSectionPO.getSchemeId(); sectionEndTime, isIntersecting, baseCrossSchemeMapper);
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectById(schemeId);
String schemeName = baseCrossSchemePO.getName();
RunningEvaluateMetricsDetailVO.ProblemScheme problemScheme =
new RunningEvaluateMetricsDetailVO.ProblemScheme();
problemScheme.setSchemeName(schemeName);
problemScheme.setStartTime(sectionStartTime);
problemScheme.setEndTime(sectionEndTime);
problemSchemeList.add(problemScheme);
}
} }
} }
// 去除相同方案 // 去除相同方案
......
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