Commit 9dfa6091 authored by hanbing's avatar hanbing

[update] 信号优化,态势监测-问题路口详情按分钟返回数据

parent 92210f82
...@@ -67,6 +67,18 @@ public class TrendServiceImpl implements TrendService { ...@@ -67,6 +67,18 @@ public class TrendServiceImpl implements TrendService {
private final CrossBaseLaneInfoMapper crossBaseLaneInfoMapper; private final CrossBaseLaneInfoMapper crossBaseLaneInfoMapper;
private final CrossTurnDataHistMapper crossTurnDataHistMapper; private final CrossTurnDataHistMapper crossTurnDataHistMapper;
// 用于计算路口状态,key为方向,value为状态
private Map<Integer, Integer> preStatus = new HashMap<Integer, Integer>() {{
put(1, 1);
put(2, 1);
put(3, 1);
put(4, 1);
put(5, 1);
put(6, 1);
put(7, 1);
put(8, 1);
}};
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, BaseCrossInfoMapper baseCrossInfoMapper, public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, BaseCrossInfoMapper baseCrossInfoMapper,
...@@ -859,6 +871,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -859,6 +871,7 @@ public class TrendServiceImpl implements TrendService {
} }
private List<AbnormalCrossDetailVO.DirDataElement> buildDirData(String crossId) { private List<AbnormalCrossDetailVO.DirDataElement> buildDirData(String crossId) {
initPreStatus();
List<AbnormalCrossDetailVO.DirDataElement> dirData = new ArrayList<>(); List<AbnormalCrossDetailVO.DirDataElement> dirData = new ArrayList<>();
// 获取当前时间之前40分钟的10位时间戳 // 获取当前时间之前40分钟的10位时间戳
long currentSeconds = DateUtil.currentSeconds(); long currentSeconds = DateUtil.currentSeconds();
...@@ -867,27 +880,58 @@ public class TrendServiceImpl implements TrendService { ...@@ -867,27 +880,58 @@ public class TrendServiceImpl implements TrendService {
long preSeconds = currentSeconds - 40 * 60; long preSeconds = currentSeconds - 40 * 60;
List<CrossDirDataHistPO> crossDirDataHistPOList = List<CrossDirDataHistPO> crossDirDataHistPOList =
crossDirDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds); crossDirDataHistMapper.selectByCrossIdAndTimestamp(crossId, preSeconds);
List<Integer> dirs = baseCrossDirInfoMapper.selectInDirsByCrossId(crossId);
for (CrossDirDataHistPO crossDirDataHistPO : crossDirDataHistPOList) {
AbnormalCrossDetailVO.DirDataElement dirDataElement = new AbnormalCrossDetailVO.DirDataElement(); Date currentMinute = DateUtil.date(currentSeconds * 1000);
dirDataElement.setDir(crossDirDataHistPO.getDirType());
// 获取采集时间 for (int i = 1; i <= 60; i++) {
Integer batchTime = crossDirDataHistPO.getBatchTime(); // 上一分钟
Date date = DateUtil.date(batchTime * 1000); Date preMinute = DateUtil.offsetMinute(currentMinute, -1);
dirDataElement.setTime(date); for (Integer dir : dirs) {
// 转换状态,3、4都算拥堵 AbnormalCrossDetailVO.DirDataElement dirDataElement = new AbnormalCrossDetailVO.DirDataElement();
Integer status = crossDirDataHistPO.getStatus(); dirDataElement.setDir(dir);
if (status == 4) { dirDataElement.setTime(currentMinute);
status = 3; int status = calcStatus(crossDirDataHistPOList, preMinute, currentMinute, dir);
dirDataElement.setStatus(status);
dirData.add(dirDataElement);
} }
dirDataElement.setStatus(status); currentMinute = preMinute;
dirData.add(dirDataElement);
} }
return dirData; return dirData;
} }
private void initPreStatus() {
for (Integer key : preStatus.keySet()) {
preStatus.put(key, 1);
}
}
/**
* 计算路口状态
*
* @author Kent HAN
* @date 2023/6/20 9:07
*/
private Integer calcStatus(List<CrossDirDataHistPO> crossDirDataHistPOList, Date preMinute, Date currentMinute,
int dir) {
for (CrossDirDataHistPO crossDirDataHistPO : crossDirDataHistPOList) {
int dirType = crossDirDataHistPO.getDirType();
long batchTime = crossDirDataHistPO.getBatchTime();
long preSecond = preMinute.getTime() / 1000;
long currentSecond = currentMinute.getTime() / 1000;
if ( dirType == dir && batchTime <= currentSecond && batchTime >= preSecond) {
Integer status = crossDirDataHistPO.getStatus();
// 转换状态,3、4都算拥堵
if (status == 4) {
status = 3;
}
preStatus.put(dir, status);
}
}
return preStatus.get(dir);
}
private List<AbnormalCrossDetailVO.TurnDataElement> buildTurnData(String crossId) { private List<AbnormalCrossDetailVO.TurnDataElement> buildTurnData(String crossId) {
List<AbnormalCrossDetailVO.TurnDataElement> turnData = new ArrayList<>(); List<AbnormalCrossDetailVO.TurnDataElement> turnData = new ArrayList<>();
List<CrossTurnDataRealtimePO> crossTurnDataRealtimePOList = crossTurnDataRealtimeMapper.selectByCrossId(crossId); List<CrossTurnDataRealtimePO> crossTurnDataRealtimePOList = crossTurnDataRealtimeMapper.selectByCrossId(crossId);
......
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