Commit 444f6d38 authored by hanbing's avatar hanbing

[update] 新信号评价-场景评价-异常事件详情,筛选相交事件

parent cb8ccc87
......@@ -25,5 +25,5 @@ public class AbnormalDetailBO {
private Date problemDate;
@ApiModelProperty(value = "状态 0正常 1 失衡 2 拥堵 3 溢出 4 死锁")
private String status ;
private Integer status ;
}
......@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType;
import java.text.ParseException;
/**
* 场景评价
......@@ -52,7 +53,7 @@ public class SceneEvaluateController {
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SceneEvaluateAbnormalDetailVO.class),
})
public JsonViewObject abnormalDetail(@RequestBody AbnormalDetailBO abnormalDetailBO) {
public JsonViewObject abnormalDetail(@RequestBody AbnormalDetailBO abnormalDetailBO) throws ParseException {
SceneEvaluateAbnormalDetailVO res = sceneEvaluateService.abnormalDetail(abnormalDetailBO);
return JsonViewObject.newInstance().success(res);
}
......
......@@ -5,9 +5,11 @@ import net.wanji.opt.bo.AbnormalDetailBO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDetailVO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import java.text.ParseException;
public interface SceneEvaluateService {
SceneEvaluateAbnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo);
SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO);
SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) throws ParseException;
}
......@@ -16,6 +16,7 @@ import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
......@@ -52,11 +53,11 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
}
@Override
public SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) {
public SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) throws ParseException {
String crossId = abnormalDetailBO.getCrossId();
String hourMinute = abnormalDetailBO.getHourMinute();
Date problemDate = abnormalDetailBO.getProblemDate();
String status = abnormalDetailBO.getStatus();
Integer status = abnormalDetailBO.getStatus();
// 获取当前年份
Calendar calendar = Calendar.getInstance();
......@@ -82,7 +83,72 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
// 查询当天所有场景
List<CrossDataHistPO> crossDataHistPOList =
crossDataHistMapper.selectByCrossIdAndStartEnd(crossId, startOfDayTimestamp, endOfDayTimestamp);
// 过滤场景类型
// 按照startTime分组并选择duration最长的一个。
List<CrossDataHistPO> filteredList = crossDataHistPOList.stream()
.filter(po -> Objects.equals(po.getStatus(), status))
.collect(Collectors.groupingBy(CrossDataHistPO::getStartTime))
.values().stream()
.map(list -> list.stream().max(Comparator.comparingInt(CrossDataHistPO::getDuration)).get())
.collect(Collectors.toList());
// 进行startTime和endTime的格式化和分组。
Map<String, List<CrossDataHistPO>> groupedData = filteredList.stream()
.collect(Collectors.groupingBy(po -> {
// 计算startTime和endTime
Date startTime = po.getStartTime();
Date endTime = new Date(startTime.getTime() + po.getDuration() * 60 * 1000L);
// startTime向前取整至5分钟
calendar.setTime(startTime);
int minute = calendar.get(Calendar.MINUTE);
calendar.add(Calendar.MINUTE, -(minute % 5));
String startTimeStr = HOUR_SDF.format(calendar.getTime());
// endTime向后取整至5分钟
calendar.setTime(endTime);
minute = calendar.get(Calendar.MINUTE);
calendar.add(Calendar.MINUTE, 5 - (minute % 5));
String endTimeStr = HOUR_SDF.format(calendar.getTime());
return startTimeStr + "-" + endTimeStr;
}));
Date targetDate = HOUR_SDF.parse(hourMinute);
// 获取当前年份,并设置targetDate的年份
Calendar cal = Calendar.getInstance();
cal.setTime(newDate);
String[] split = hourMinute.split(":");
cal.set(Calendar.HOUR, Integer.parseInt(split[0]));
cal.set(Calendar.MINUTE, Integer.parseInt(split[1]));
targetDate = cal.getTime();
// 从groupedData中筛选与hourMinute相交的记录
List<CrossDataHistPO> intersectingRecords = new ArrayList<>();
for (Map.Entry<String, List<CrossDataHistPO>> entry : groupedData.entrySet()) {
String key = entry.getKey();
String[] times = key.split("-");
Calendar startCal = Calendar.getInstance();
Calendar endCal = Calendar.getInstance();
startCal.setTime(newDate);
endCal.setTime(newDate);
String[] start = times[0].split(":");
startCal.set(Calendar.HOUR, Integer.parseInt(start[0]));
startCal.set(Calendar.MINUTE, Integer.parseInt(start[1]));
String[] end = times[0].split(":");
endCal.set(Calendar.HOUR, Integer.parseInt(end[0]));
endCal.set(Calendar.MINUTE, Integer.parseInt(end[1]));
Date startTime = startCal.getTime();
Date endTime = endCal.getTime();
// 检查相交条件
if (!(targetDate.before(startTime) || targetDate.after(endTime))) {
intersectingRecords.addAll(entry.getValue());
}
}
return null;
......
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