Commit 444f6d38 authored by hanbing's avatar hanbing

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

parent cb8ccc87
...@@ -25,5 +25,5 @@ public class AbnormalDetailBO { ...@@ -25,5 +25,5 @@ public class AbnormalDetailBO {
private Date problemDate; private Date problemDate;
@ApiModelProperty(value = "状态 0正常 1 失衡 2 拥堵 3 溢出 4 死锁") @ApiModelProperty(value = "状态 0正常 1 失衡 2 拥堵 3 溢出 4 死锁")
private String status ; private Integer status ;
} }
...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -16,6 +16,7 @@ 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.text.ParseException;
/** /**
* 场景评价 * 场景评价
...@@ -52,7 +53,7 @@ public class SceneEvaluateController { ...@@ -52,7 +53,7 @@ public class SceneEvaluateController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SceneEvaluateAbnormalDetailVO.class), @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); SceneEvaluateAbnormalDetailVO res = sceneEvaluateService.abnormalDetail(abnormalDetailBO);
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
......
...@@ -5,9 +5,11 @@ import net.wanji.opt.bo.AbnormalDetailBO; ...@@ -5,9 +5,11 @@ import net.wanji.opt.bo.AbnormalDetailBO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDetailVO; import net.wanji.opt.vo.SceneEvaluateAbnormalDetailVO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO; import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import java.text.ParseException;
public interface SceneEvaluateService { public interface SceneEvaluateService {
SceneEvaluateAbnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo); SceneEvaluateAbnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo);
SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO); SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) throws ParseException;
} }
...@@ -16,6 +16,7 @@ import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO; ...@@ -16,6 +16,7 @@ import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -52,11 +53,11 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -52,11 +53,11 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
} }
@Override @Override
public SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) { public SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) throws ParseException {
String crossId = abnormalDetailBO.getCrossId(); String crossId = abnormalDetailBO.getCrossId();
String hourMinute = abnormalDetailBO.getHourMinute(); String hourMinute = abnormalDetailBO.getHourMinute();
Date problemDate = abnormalDetailBO.getProblemDate(); Date problemDate = abnormalDetailBO.getProblemDate();
String status = abnormalDetailBO.getStatus(); Integer status = abnormalDetailBO.getStatus();
// 获取当前年份 // 获取当前年份
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
...@@ -82,7 +83,72 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -82,7 +83,72 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
// 查询当天所有场景 // 查询当天所有场景
List<CrossDataHistPO> crossDataHistPOList = List<CrossDataHistPO> crossDataHistPOList =
crossDataHistMapper.selectByCrossIdAndStartEnd(crossId, startOfDayTimestamp, endOfDayTimestamp); 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; 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