Commit bc6765cc authored by hanbing's avatar hanbing

[add] 新信号评价-方案评价,构造日期-问题方案结果集

parent cb74c813
...@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import java.util.List;
/** /**
* 运行评价 * 运行评价
...@@ -39,7 +38,7 @@ public class SchemeEvaluateController { ...@@ -39,7 +38,7 @@ public class SchemeEvaluateController {
@ApiResponse(code = 200, message = "OK", response = SchemeEvaluateProblemSchemeVO.class), @ApiResponse(code = 200, message = "OK", response = SchemeEvaluateProblemSchemeVO.class),
}) })
public JsonViewObject problemSchemeList(@RequestBody ProblemSchemeBO problemSchemeBO) { public JsonViewObject problemSchemeList(@RequestBody ProblemSchemeBO problemSchemeBO) {
List<SchemeEvaluateProblemSchemeVO> res = schemeEvaluateService.problemSchemeList(problemSchemeBO); SchemeEvaluateProblemSchemeVO res = schemeEvaluateService.problemSchemeList(problemSchemeBO);
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
......
...@@ -3,9 +3,6 @@ package net.wanji.opt.service; ...@@ -3,9 +3,6 @@ package net.wanji.opt.service;
import net.wanji.opt.bo.ProblemSchemeBO; import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO; import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import java.util.List;
public interface SchemeEvaluateService { public interface SchemeEvaluateService {
SchemeEvaluateProblemSchemeVO problemSchemeList(ProblemSchemeBO problemSchemeBO);
List<SchemeEvaluateProblemSchemeVO> problemSchemeList(ProblemSchemeBO problemSchemeBO);
} }
...@@ -755,7 +755,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -755,7 +755,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return schemeIdSet.size(); return schemeIdSet.size();
} }
private Integer findPlanId(Date datetime, String dateStr, String crossId) { Integer findPlanId(Date datetime, String dateStr, String crossId) {
CrossIdBO crossIdBO = new CrossIdBO(); CrossIdBO crossIdBO = new CrossIdBO();
crossIdBO.setCrossId(crossId); crossIdBO.setCrossId(crossId);
RunningPlanDTO runningPlanDTO = listRunningPlan(crossIdBO); RunningPlanDTO runningPlanDTO = listRunningPlan(crossIdBO);
...@@ -894,7 +894,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -894,7 +894,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return execList; return execList;
} }
private boolean isTimeIntersecting(String startTime1, String endTime1, String startTime2, String endTime2) { boolean isTimeIntersecting(String startTime1, String endTime1, String startTime2, String endTime2) {
return !(endTime1.compareTo(startTime2) <= 0 || startTime1.compareTo(endTime2) >= 0); return !(endTime1.compareTo(startTime2) <= 0 || startTime1.compareTo(endTime2) >= 0);
} }
......
package net.wanji.opt.service.impl; package net.wanji.opt.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.mapper.BaseCrossSchemeMapper;
import net.wanji.databus.dao.mapper.BaseCrossSectionMapper;
import net.wanji.databus.dao.mapper.CrossDataHistMapper; import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.po.CrossDataHistPO; import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.opt.bo.ProblemSchemeBO; import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.service.SchemeEvaluateService; import net.wanji.opt.service.SchemeEvaluateService;
import net.wanji.opt.vo.RunningEvaluateMetricsDetailVO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO; import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -22,14 +29,23 @@ import java.util.stream.Collectors; ...@@ -22,14 +29,23 @@ import java.util.stream.Collectors;
@Service @Service
public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
private final CrossDataHistMapper crossDataHistMapper; private final CrossDataHistMapper crossDataHistMapper;
private final RunningEvaluateServiceImpl runningEvaluateService;
private final BaseCrossSectionMapper baseCrossSectionMapper;
private final BaseCrossSchemeMapper baseCrossSchemeMapper;
public SchemeEvaluateServiceImpl(CrossDataHistMapper crossDataHistMapper) { public SchemeEvaluateServiceImpl(CrossDataHistMapper crossDataHistMapper,
RunningEvaluateServiceImpl runningEvaluateService,
@Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper,
@Qualifier("baseCrossSchemeMapper") BaseCrossSchemeMapper baseCrossSchemeMapper) {
this.crossDataHistMapper = crossDataHistMapper; this.crossDataHistMapper = crossDataHistMapper;
this.runningEvaluateService = runningEvaluateService;
this.baseCrossSectionMapper = baseCrossSectionMapper;
this.baseCrossSchemeMapper = baseCrossSchemeMapper;
} }
@Override @Override
public List<SchemeEvaluateProblemSchemeVO> problemSchemeList(ProblemSchemeBO problemSchemeBO) { public SchemeEvaluateProblemSchemeVO problemSchemeList(ProblemSchemeBO problemSchemeBO) {
List<SchemeEvaluateProblemSchemeVO> res = new ArrayList<>(); SchemeEvaluateProblemSchemeVO res = new SchemeEvaluateProblemSchemeVO();
String crossId = problemSchemeBO.getCrossId(); String crossId = problemSchemeBO.getCrossId();
Date startDate = problemSchemeBO.getStartDate(); Date startDate = problemSchemeBO.getStartDate();
Date endDate = problemSchemeBO.getEndDate(); Date endDate = problemSchemeBO.getEndDate();
...@@ -40,18 +56,112 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -40,18 +56,112 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
String endTime = problemSchemeBO.getEndTime(); String endTime = problemSchemeBO.getEndTime();
List<CrossDataHistPO> crossDataHistPOList = List<CrossDataHistPO> crossDataHistPOList =
crossDataHistMapper.selectByCrossIdAndStartEnd(crossId, startDateStamp, endDateStamp); crossDataHistMapper.selectByCrossIdAndStartEnd(crossId, startDateStamp, endDateStamp);
// 根据入参筛选结果 // 构造时间-问题结果集
Map<String, List<CrossDataHistPO>> stringListMap = getStringListMap( Map<String, List<CrossDataHistPO>> timeProblemMap = getTimeProblemMap(
crossDataHistPOList, endTime, startTime); crossDataHistPOList, endTime, startTime);
// 构造结果
// 问题次数
int problemCounts = 0;
if (CollectionUtil.isNotEmpty(timeProblemMap)) {
for (List<CrossDataHistPO> list : timeProblemMap.values()) {
problemCounts += list.size();
}
}
// 问题方案数量
res.setProblemCounts(problemCounts);
// 构造问题方案列表(根据日期)
// 构造日期-问题结果集
Map<Date, List<CrossDataHistPO>> dateProblemsMap = buildDateProblemsMap(timeProblemMap);
// 构造日期-问题方案结果集
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap =
buildDateSchemesMap(dateProblemsMap, crossId);
// res.setProblemSchemeListByDate();
// res.setSchemeCounts();
// res.setEfficiencyProblemCounts();
// res.setBalanceProblemCounts();
// res.setSecurityProblemCounts();
// res.setProblemSchemeListByScheme();
return res; return res;
} }
private Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> buildDateSchemesMap(
Map<Date, List<CrossDataHistPO>> dateProblemsMap, String crossId) {
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap = new HashMap<>();
// 获取当前计划ID
for (Map.Entry<Date, List<CrossDataHistPO>> dateListEntry : dateProblemsMap.entrySet()) {
List<RunningEvaluateMetricsDetailVO.ProblemScheme> problemSchemeList = new ArrayList<>();
Date datetime = dateListEntry.getKey();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(datetime);
Integer planId = runningEvaluateService.findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
for (CrossSectionPO crossSectionPO : crossSectionPOList) {
String sectionStartTime = crossSectionPO.getStartTime();
String sectionEndTime = crossSectionPO.getEndTime();
List<CrossDataHistPO> value = dateListEntry.getValue();
for (CrossDataHistPO crossDataHistPO : value) {
SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
Date abnormalEventStartTime = crossDataHistPO.getStartTime();
Integer duration = crossDataHistPO.getDuration();
Date abnormalEventEndTime = DateUtil.offsetMinute(abnormalEventStartTime, duration);
String eventStartTime = sdf2.format(abnormalEventStartTime);
String eventEndTime = sdf2.format(abnormalEventEndTime);
// 比较两组时间段是否相交
boolean isIntersecting = runningEvaluateService.isTimeIntersecting(
eventStartTime, eventEndTime, sectionStartTime, sectionEndTime);
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);
problemSchemeList.add(problemScheme);
}
}
}
// 去除相同方案
List<RunningEvaluateMetricsDetailVO.ProblemScheme> uniqueRes = problemSchemeList.stream()
.distinct()
.collect(Collectors.toList());
dateSchemesMap.put(datetime, uniqueRes);
}
return dateSchemesMap;
}
private Map<Date, List<CrossDataHistPO>> buildDateProblemsMap(Map<String, List<CrossDataHistPO>> timeProblemMap) {
// 创建一个新的Map,用于存储以Date为Key,List<CrossDataHistPO>为Value的数据
Map<Date, List<CrossDataHistPO>> dateMap = new HashMap<>();
// 创建一个SimpleDateFormat对象,用于将10位时间戳转换为Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 遍历timeProblemMap的所有entries
for (List<CrossDataHistPO> list : timeProblemMap.values()) {
for (CrossDataHistPO po : list) {
long timestamp = po.getBatchTime() * 1000L; // 将10位时间戳转换为13位
Date date = new Date(timestamp);
String formattedDate = sdf.format(date); // 格式化日期为"yyyy-MM-dd"
try {
Date keyDate = sdf.parse(formattedDate); // 将格式化后的日期字符串转回为Date对象
// 将CrossDataHistPO对象添加到相应日期的List中
dateMap.computeIfAbsent(keyDate, k -> new ArrayList<>()).add(po);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return dateMap;
}
@NotNull @NotNull
private static Map<String, List<CrossDataHistPO>> getStringListMap(List<CrossDataHistPO> crossDataHistPOList, String endTime, String startTime) { private static Map<String, List<CrossDataHistPO>> getTimeProblemMap(
List<CrossDataHistPO> crossDataHistPOList, String endTime, String startTime) {
// 过滤有问题的记录 // 过滤有问题的记录
List<CrossDataHistPO> filteredList = crossDataHistPOList.stream() List<CrossDataHistPO> filteredList = crossDataHistPOList.stream()
.filter(po -> po.getStatus() != null && po.getStatus() != 0) .filter(po -> po.getStatus() != null && po.getStatus() != 0)
......
...@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.Objects;
/** /**
* @author Kent HAN * @author Kent HAN
...@@ -46,4 +47,17 @@ public class BaseCrossSchemePO { ...@@ -46,4 +47,17 @@ public class BaseCrossSchemePO {
/** 修改时间 */ /** 修改时间 */
@ApiModelProperty(name = "修改时间",notes = "") @ApiModelProperty(name = "修改时间",notes = "")
private Date gmtModified ; private Date gmtModified ;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BaseCrossSchemePO that = (BaseCrossSchemePO) o;
return Objects.equals(id, that.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
} }
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