Commit 0dadb193 authored by duanruiming's avatar duanruiming

[add] 优化监测-AI干线优化绿信比百分比

parent 85336f67
...@@ -120,54 +120,54 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService { ...@@ -120,54 +120,54 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
int end = (int) (System.currentTimeMillis() / 1000) + 300; int end = (int) (System.currentTimeMillis() / 1000) + 300;
List<CrossDirDataHistPO> dirDataHistPOS = crossDirDataHistMapper.selectDirDataList(crossId, dirList, start, end); List<CrossDirDataHistPO> dirDataHistPOS = crossDirDataHistMapper.selectDirDataList(crossId, dirList, start, end);
if (!CollectionUtils.isEmpty(dirDataHistPOS)) { if (!CollectionUtils.isEmpty(dirDataHistPOS)) {
Double greenTimeRatio = 0.0; Map<Integer, List<CrossDirDataHistPO>> dirHistMap = dirDataHistPOS.stream().collect(Collectors.groupingBy(CrossDirDataHistPO::getDirType));
List<GreenBeltKeyCrossFlowTimeVO.Detail> details = new ArrayList<>(); Integer dir = null;
for (CrossDirDataHistPO dirDataHistPO : dirDataHistPOS) { for (Map.Entry<Integer, List<CrossDirDataHistPO>> entry : dirHistMap.entrySet()) {
GreenBeltKeyCrossFlowTimeVO.Detail detail = new GreenBeltKeyCrossFlowTimeVO.Detail(); dir = entry.getKey();
detail.setCrossId(crossId); List<CrossDirDataHistPO> value = entry.getValue();
String crossName = baseCrossInfoCache.getCrossName(crossId); Double greenTimeRatio = 0.0;
detail.setCrossName(crossName); List<GreenBeltKeyCrossFlowTimeVO.Detail> details = new ArrayList<>();
Integer dirType = dirDataHistPO.getDirType(); for (CrossDirDataHistPO dirDataHistPO : value) {
detail.setDir(String.valueOf(dirType)); GreenBeltKeyCrossFlowTimeVO.Detail detail = new GreenBeltKeyCrossFlowTimeVO.Detail();
detail.setFlow(dirDataHistPO.getFlow()); detail.setCrossId(crossId);
detail.setStartTime(dirDataHistPO.getStartTime()); String crossName = baseCrossInfoCache.getCrossName(crossId);
detail.setGreenTimeRatio(greenTimeRatio); detail.setCrossName(crossName);
for (GreenBeltKeyCrossFlowTimeVO.Detail optResult : optResults) { Integer dirType = dirDataHistPO.getDirType();
Integer curDir = GreenBeltDirEnum.getInDir(optResult.getDir()); detail.setDir(String.valueOf(dirType));
if (StringUtils.equalsIgnoreCase("cancel", optResult.getDir()) && Objects.equals(curDir, dirType) detail.setFlow(dirDataHistPO.getFlow());
&& dirDataHistPO.getStartTime().getTime() == optResult.getStartTime().getTime()) { detail.setStartTime(dirDataHistPO.getStartTime());
greenTimeRatio = 0.0; detail.setGreenTimeRatio(greenTimeRatio);
} for (GreenBeltKeyCrossFlowTimeVO.Detail optResult : optResults) {
if (StringUtils.equalsIgnoreCase(crossId, optResult.getCrossId()) && Objects.equals(curDir, dirType) Integer curDir = GreenBeltDirEnum.getInDir(optResult.getDir());
&& dirDataHistPO.getStartTime().getTime() == optResult.getStartTime().getTime()) { if (StringUtils.equalsIgnoreCase("cancel", optResult.getDir()) && Objects.equals(curDir, dirType)
detail.setGreenTimeRatio(optResult.getGreenTimeRatio()); && dirDataHistPO.getStartTime().getTime() == optResult.getStartTime().getTime()) {
greenTimeRatio = optResult.getGreenTimeRatio(); greenTimeRatio = 0.0;
} }
if (StringUtils.equalsIgnoreCase(crossId, optResult.getCrossId()) && Objects.equals(curDir, dirType)
&& dirDataHistPO.getStartTime().getTime() == optResult.getStartTime().getTime()) {
detail.setGreenTimeRatio(optResult.getGreenTimeRatio() * 100);
greenTimeRatio = optResult.getGreenTimeRatio() * 100;
}
}
details.add(detail);
} }
details.add(detail); if (!CollectionUtils.isEmpty(details)) {
}
if (!CollectionUtils.isEmpty(details)) {
Map<String, List<GreenBeltKeyCrossFlowTimeVO.Detail>> dirMap = details.stream().collect(Collectors.groupingBy(GreenBeltKeyCrossFlowTimeVO.Detail::getDir));
for (Map.Entry<String, List<GreenBeltKeyCrossFlowTimeVO.Detail>> entry : dirMap.entrySet()) {
String dir = entry.getKey();
GreenBeltKeyCrossFlowTimeVO greenBeltKeyCrossFlowTimeVO = new GreenBeltKeyCrossFlowTimeVO(); GreenBeltKeyCrossFlowTimeVO greenBeltKeyCrossFlowTimeVO = new GreenBeltKeyCrossFlowTimeVO();
List<GreenBeltKeyCrossFlowTimeVO.Detail> value = entry.getValue();
String crossName = ""; String crossName = "";
if (!CollectionUtils.isEmpty(value)) { if (!CollectionUtils.isEmpty(value)) {
GreenBeltKeyCrossFlowTimeVO.Detail detail = value.get(0); GreenBeltKeyCrossFlowTimeVO.Detail detail = details.get(0);
crossName = detail.getCrossName(); crossName = detail.getCrossName();
} }
greenBeltKeyCrossFlowTimeVO.setCrossName(crossName); greenBeltKeyCrossFlowTimeVO.setCrossName(crossName);
greenBeltKeyCrossFlowTimeVO.setDirName(GreenBeltDirEnum.getInDirName(Integer.valueOf(dir))); greenBeltKeyCrossFlowTimeVO.setDirName(GreenBeltDirEnum.getInDirName(Integer.valueOf(dir)));
List<GreenBeltKeyCrossFlowTimeVO.Detail> collect = value.stream().sorted(Comparator.comparing(GreenBeltKeyCrossFlowTimeVO.Detail::getStartTime)).collect(Collectors.toList()); List<GreenBeltKeyCrossFlowTimeVO.Detail> collect = details.stream().sorted(Comparator.comparing(GreenBeltKeyCrossFlowTimeVO.Detail::getStartTime)).collect(Collectors.toList());
greenBeltKeyCrossFlowTimeVO.setDetailList(collect); greenBeltKeyCrossFlowTimeVO.setDetailList(collect);
results.add(greenBeltKeyCrossFlowTimeVO); results.add(greenBeltKeyCrossFlowTimeVO);
} }
} }
} }
// 关键路口历史数据
return results; return results;
} catch (Exception e) { } catch (Exception e) {
log.error("绿波关键路口流量绿信比查询异常:", e); log.error("绿波关键路口流量绿信比查询异常:", e);
......
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