Commit 3a049925 authored by duanruiming's avatar duanruiming

[update] opt优化

parent a0e43a4d
package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author hfx
* @date 2023/01/12 13:29:39
* @desc 路口基础信息
*/
@Data
public class CrossInfoPO {
@ApiModelProperty(name = "路口ID",notes = "")
private String id;
@ApiModelProperty(name = "路口名称",notes = "")
private String name;
@ApiModelProperty(name = "路口类型",notes = "")
private Integer type;
@ApiModelProperty(name = "路口级别",notes = "")
private Integer level;
@ApiModelProperty(name = "行政区划代码",notes = "")
private Integer areaCode;
@ApiModelProperty(name = "路口位置",notes = "")
private String location;
@ApiModelProperty(name = "是否信控路口:1是;0否",notes = "")
private Integer isSignal;
@ApiModelProperty(name = "是否启动优化:1是;0否",notes = "")
private Integer isStart;
@ApiModelProperty(name = "是否下发方案:1是;0否",notes = "")
private Integer isSend;
}
package net.wanji.opt.service; package net.wanji.opt.service;
import net.wanji.opt.dto.CrossInfoDTO;
import net.wanji.opt.query.CrossQuery;
import java.util.List;
/** /**
* @author hfx * @author hfx
* @date 2023/1/12 15:12 * @date 2023/1/12 15:12
...@@ -17,6 +12,6 @@ public interface CrossInfoService { ...@@ -17,6 +12,6 @@ public interface CrossInfoService {
* 查询路口基础信息列表 * 查询路口基础信息列表
* @return * @return
*/ */
List<CrossInfoDTO> listCrossInfo(CrossQuery query); // List<CrossInfoDTO> listCrossInfo(CrossQuery query);
} }
package net.wanji.opt.service.impl; package net.wanji.opt.service.impl;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dto.CrossInfoDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.query.CrossQuery;
import net.wanji.opt.service.CrossInfoService; import net.wanji.opt.service.CrossInfoService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author hfx * @author hfx
* @date 2023/1/12 15:12 * @date 2023/1/12 15:12
...@@ -20,14 +11,14 @@ import java.util.List; ...@@ -20,14 +11,14 @@ import java.util.List;
@Service @Service
public class CrossInfoServiceImpl implements CrossInfoService { public class CrossInfoServiceImpl implements CrossInfoService {
@Resource // @Resource
CrossInfoMapper crossInfoMapper; // CrossInfoMapper crossInfoMapper;
//
public List<CrossInfoDTO> listCrossInfo(CrossQuery query) { // public List<CrossInfoDTO> listCrossInfo(CrossQuery query) {
//
// 获取数据库数据 // // 获取数据库数据
List<CrossInfoPO> crossInfoPOList = crossInfoMapper.listCrossInfo(query); // List<CrossInfoPO> crossInfoPOList = crossInfoMapper.listCrossInfo(query);
return BeanListUtils.populateList(crossInfoPOList, new ArrayList<>(), CrossInfoDTO.class); // return BeanListUtils.populateList(crossInfoPOList, new ArrayList<>(), CrossInfoDTO.class);
} // }
} }
package net.wanji.opt.service.impl; package net.wanji.opt.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.CrossStatusEnum; import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.common.framework.Constants; import net.wanji.common.framework.Constants;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.BeanListUtils;
import net.wanji.databus.dao.entity.RidInfoEntity; import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossTurnDataRealtimeMapper;
import net.wanji.databus.dto.CrossDirInfoDTO; import net.wanji.databus.dto.CrossDirInfoDTO;
import net.wanji.databus.dto.CrossTurnInfoDTO; import net.wanji.databus.dto.CrossTurnInfoDTO;
import net.wanji.databus.entity.develop.servicedevelop.develop.StatusCodeEnum; import net.wanji.databus.entity.develop.servicedevelop.develop.StatusCodeEnum;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.feign.pojo.vo.SchemeSendVO; import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.feign.pojo.vo.SignalStatusVO; import net.wanji.databus.po.CrossTurnDataRealtimePO;
import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.databus.vo.SignalStatusVO;
import net.wanji.feign.service.UtcFeignClients; import net.wanji.feign.service.UtcFeignClients;
import net.wanji.opt.cache.CrossDirTurnPhaseCache; import net.wanji.opt.cache.CrossDirTurnPhaseCache;
import net.wanji.opt.cache.CrossRidInfoCache; import net.wanji.opt.cache.CrossRidInfoCache;
...@@ -31,18 +38,9 @@ import org.springframework.stereotype.Service; ...@@ -31,18 +38,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static net.wanji.opt.cache.CrossPhaseInfoCache.getCrossPhaseCacheByCrossId; import static net.wanji.opt.cache.CrossPhaseInfoCache.getCrossPhaseCacheByCrossId;
...@@ -54,19 +52,17 @@ import static net.wanji.opt.cache.CrossSchemeInfoCache.geteSchemePOCache; ...@@ -54,19 +52,17 @@ import static net.wanji.opt.cache.CrossSchemeInfoCache.geteSchemePOCache;
* @desc CrossOptimizeServiceImpl * @desc CrossOptimizeServiceImpl
*/ */
@Service @Service
@RequiredArgsConstructor
@Slf4j @Slf4j
public class CrossOptimizeServiceImpl implements CrossOptimizeService { public class CrossOptimizeServiceImpl implements CrossOptimizeService {
@Resource private final CrossSchemeOptLogMapper crossSchemeOptLogMapper;
CrossSchemeOptLogMapper crossSchemeOptLogMapper; private final UtcFeignClients utcFeignClients;
@Resource private final CrossDirTurnPhaseCache crossDirTurnPhaseCache;
UtcFeignClients utcFeignClients; private final CrossRidInfoCache crossRidInfoCache;
@Resource private final SceneService sceneService;
CrossDirTurnPhaseCache crossDirTurnPhaseCache; private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper;
@Resource private final CrossDirDataRealtimeMapper crossDirDataRealtimeMapper;
CrossRidInfoCache crossRidInfoCache;
@Resource
SceneService sceneService;
@Value("${crossOptParam.maxVehheadDist}") @Value("${crossOptParam.maxVehheadDist}")
private Double maxVehheadDist; private Double maxVehheadDist;
...@@ -89,6 +85,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -89,6 +85,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
try { try {
// todo 当前路口不是信控路口,需要跳过 // todo 当前路口不是信控路口,需要跳过
// utcFeignClients.listCrossInfo()
// todo 系统管理,路口管理,信控标志关闭,优化下发也要关闭 // todo 系统管理,路口管理,信控标志关闭,优化下发也要关闭
// 相位配时信息,key: 路口编号_方向类型_转向类型,value: 相位配时信息 // 相位配时信息,key: 路口编号_方向类型_转向类型,value: 相位配时信息
...@@ -98,7 +95,11 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -98,7 +95,11 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
setTurnList(crossDataRealtimePOList, phaseMap); setTurnList(crossDataRealtimePOList, phaseMap);
// 获取所有信控路口转向实时数据,包括异常路口和正常路口 // 获取所有信控路口转向实时数据,包括异常路口和正常路口
Map<String, List<CrossTurnDataRealtimeDTO>> turnDataRealtime = listTurnDataRealtime(crossDataRealtimePOList); // Map<String, List<CrossTurnDataRealtimeDTO>> turnDataRealtimeMap = listTurnDataRealtime(crossDataRealtimePOList);
List<CrossTurnDataRealtimePO> crossTurnDataRealtimePOS = crossTurnDataRealtimeMapper.selectList(new LambdaQueryWrapper<CrossTurnDataRealtimePO>());
ArrayList<CrossTurnDataRealtimeDTO> turnDataRealtimeList = new ArrayList<>();
BeanListUtils.populateList(crossTurnDataRealtimePOS, turnDataRealtimeList, CrossTurnDataRealtimeDTO.class);
Map<String, List<CrossTurnDataRealtimeDTO>> turnDataRealtimeMap = turnDataRealtimeList.stream().collect(Collectors.groupingBy(CrossTurnDataRealtimeDTO::getCrossId));
// 恢复优化路口原始方案:上一批次优化后,路口正常需要恢复原始方案 // 恢复优化路口原始方案:上一批次优化后,路口正常需要恢复原始方案
// todo 方案运行时间,恢复时当前时间是否在远方案运行时间内,否则phaseMap数据不准确 // todo 方案运行时间,恢复时当前时间是否在远方案运行时间内,否则phaseMap数据不准确
...@@ -107,15 +108,15 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -107,15 +108,15 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
Map<Integer, List<CrossDataRealtimePO>> crossDataMap = abnormalCrossList.stream().collect(Collectors.groupingBy(CrossDataRealtimePO::getStatus)); Map<Integer, List<CrossDataRealtimePO>> crossDataMap = abnormalCrossList.stream().collect(Collectors.groupingBy(CrossDataRealtimePO::getStatus));
abnormalCrossList = crossDataMap.get(CrossStatusEnum.SPILLOVER.getCode()); // 溢出 abnormalCrossList = crossDataMap.get(CrossStatusEnum.SPILLOVER.getCode()); // 溢出
if (abnormalCrossList != null && !abnormalCrossList.isEmpty()) { if (abnormalCrossList != null && !abnormalCrossList.isEmpty()) {
spilloverOpt(abnormalCrossList, turnDataRealtime, phaseMap); spilloverOpt(abnormalCrossList, turnDataRealtimeMap, phaseMap);
} }
abnormalCrossList = crossDataMap.get(CrossStatusEnum.CONGESTION.getCode()); // 拥堵 abnormalCrossList = crossDataMap.get(CrossStatusEnum.CONGESTION.getCode()); // 拥堵
if (abnormalCrossList != null && !abnormalCrossList.isEmpty()) { if (abnormalCrossList != null && !abnormalCrossList.isEmpty()) {
congestionOpt(abnormalCrossList, turnDataRealtime, phaseMap); congestionOpt(abnormalCrossList, turnDataRealtimeMap, phaseMap);
} }
abnormalCrossList = crossDataMap.get(CrossStatusEnum.UNBALANCE.getCode()); // 失衡 abnormalCrossList = crossDataMap.get(CrossStatusEnum.UNBALANCE.getCode()); // 失衡
if (abnormalCrossList != null && !abnormalCrossList.isEmpty()) { if (abnormalCrossList != null && !abnormalCrossList.isEmpty()) {
unbalanceOpt(abnormalCrossList, turnDataRealtime, phaseMap); unbalanceOpt(abnormalCrossList, turnDataRealtimeMap, phaseMap);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -155,16 +156,15 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -155,16 +156,15 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
} }
// 判断路口是否是绿波 // 判断路口是否是绿波
// 路口拥堵进口方向,dir // 路口拥堵进口方向,dir
List<String> optCrossDirList = getOptCrossInDirList(cross); List<Integer> optCrossDirList = getOptCrossInDirList(crossId);
// 溢出当前路口方向转向减少时间 10s // 溢出当前路口方向转向减少时间 10s
// 计算路口各转向所需的通行时长(秒) // 计算路口各转向所需的通行时长(秒)
List<CrossTurnDataRealtimeDTO> crossTurnDataRealtimeDTOS = turnDataRealtimeMap.get(crossId); List<CrossTurnDataRealtimeDTO> crossTurnDataRealtimeDTOS = turnDataRealtimeMap.get(crossId);
for (String dir : optCrossDirList) { for (Integer dir : optCrossDirList) {
for (CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO : crossTurnDataRealtimeDTOS) { for (CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO : crossTurnDataRealtimeDTOS) {
Integer inDir = crossTurnDataRealtimeDTO.getInDir(); Integer inDir = crossTurnDataRealtimeDTO.getInDir();
String turnType = crossTurnDataRealtimeDTO.getTurnType(); if (Objects.equals(dir, inDir)) {
if (Objects.equals(dir, String.valueOf(inDir))) {
crossTurnDataRealtimeDTO.setPassTime(-10.0); crossTurnDataRealtimeDTO.setPassTime(-10.0);
} }
} }
...@@ -179,8 +179,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -179,8 +179,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
if (CollectionUtils.isEmpty(ridInfoEntities)) { if (CollectionUtils.isEmpty(ridInfoEntities)) {
continue; continue;
} }
for (String dirTurn : optCrossDirList) { for (Integer dir : optCrossDirList) {
Integer dir = Integer.valueOf(dirTurn);
for (RidInfoEntity ridInfoEntity : ridInfoEntities) { for (RidInfoEntity ridInfoEntity : ridInfoEntities) {
Integer inDir = ridInfoEntity.getInDir(); Integer inDir = ridInfoEntity.getInDir();
if (!congestCrossMap.containsKey(ridInfoEntity.getEndCrossId()) && Objects.equals(inDir, dir)) { if (!congestCrossMap.containsKey(ridInfoEntity.getEndCrossId()) && Objects.equals(inDir, dir)) {
...@@ -234,7 +233,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -234,7 +233,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
} }
// 路口拥堵方向转向,dir_turn // 路口拥堵方向转向,dir_turn
List<String> optCrossDirList = getOptCrossInDirList(cross); List<Integer> optCrossDirList = getOptCrossInDirList(crossId);
// 判断当前路口是否已优化 // 判断当前路口是否已优化
if (CROSS_OPT.contains(crossId)) { if (CROSS_OPT.contains(crossId)) {
...@@ -248,9 +247,8 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -248,9 +247,8 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
continue; continue;
} }
// 当前路口拥堵方向,优化当前路口方向的上游路口的直行和左转方向 // 当前路口拥堵方向,优化当前路口方向的上游路口的直行和左转方向
for (String congestionDir : optCrossDirList) { for (Integer intCongestionDir : optCrossDirList) {
Integer intCongestionDir = Integer.valueOf(congestionDir); // 拥堵路口对上游路口进 行优化
// 拥堵路口对上游路口进行优化
for (RidInfoEntity ridInfoEntity : ridInfoEntities) { for (RidInfoEntity ridInfoEntity : ridInfoEntities) {
String startCrossId = ridInfoEntity.getStartCrossId(); String startCrossId = ridInfoEntity.getStartCrossId();
...@@ -328,33 +326,41 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -328,33 +326,41 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
} }
} }
/** // /**
* 当前路口异常转向列表 element:进口方向 // * 当前路口异常转向列表 element:进口方向
* // *
* @param cross // * @param cross
* @return // * @return
*/ // */
private static List<String> getOptCrossInDirList(CrossDataRealtimePO cross) { // private static List<String> getOptCrossInDirList(CrossDataRealtimePO cross) {
List<String> crossIdDirList = new ArrayList<>(); // List<String> crossIdDirList = new ArrayList<>();
List<CrossDirInfoDTO> dirList = cross.getDirList(); // List<CrossDirInfoDTO> dirList = cross.getDirList();
List<CrossTurnInfoDTO> turnList = cross.getTurnList(); // List<CrossTurnInfoDTO> turnList = cross.getTurnList();
if (!CollectionUtils.isEmpty(dirList) && !CollectionUtils.isEmpty(turnList)) { // if (!CollectionUtils.isEmpty(dirList) && !CollectionUtils.isEmpty(turnList)) {
for (CrossDirInfoDTO crossDirInfoDTO : dirList) { // for (CrossDirInfoDTO crossDirInfoDTO : dirList) {
Integer dirType = crossDirInfoDTO.getDirType(); // Integer dirType = crossDirInfoDTO.getDirType();
Integer inOutType = crossDirInfoDTO.getInOutType(); // Integer inOutType = crossDirInfoDTO.getInOutType();
for (CrossTurnInfoDTO crossTurnInfoDTO : turnList) { // for (CrossTurnInfoDTO crossTurnInfoDTO : turnList) {
Integer inDir = crossTurnInfoDTO.getInDir(); // Integer inDir = crossTurnInfoDTO.getInDir();
// 路口方向进口=驶入方向 // // 路口方向进口=驶入方向
if (Objects.equals(dirType, inDir) && Objects.equals(1, inOutType)) { // if (Objects.equals(dirType, inDir) && Objects.equals(1, inOutType)) {
String str = String.valueOf(crossDirInfoDTO.getDirType()); // String str = String.valueOf(crossDirInfoDTO.getDirType());
if (!crossIdDirList.contains(str)) { // if (!crossIdDirList.contains(str)) {
crossIdDirList.add(str); // crossIdDirList.add(str);
} // }
} // }
} // }
} // }
} // }
return crossIdDirList; // return crossIdDirList;
// }
private List<Integer> getOptCrossInDirList(String crossId) {
LambdaQueryWrapper<CrossDirDataRealtimePO> dirWrapper = new LambdaQueryWrapper<>();
dirWrapper.eq(CrossDirDataRealtimePO::getCrossId, crossId);
dirWrapper.eq(CrossDirDataRealtimePO::getInOutType, 1);
List<CrossDirDataRealtimePO> crossDirDataRealtimePOS = crossDirDataRealtimeMapper.selectList(dirWrapper);
List<Integer> optCrossDirList = crossDirDataRealtimePOS.stream().map(CrossDirDataRealtimePO::getDirType).collect(Collectors.toList());
return optCrossDirList;
} }
/** /**
...@@ -389,8 +395,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -389,8 +395,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
turnList.add(crossTurnInfoDTO); turnList.add(crossTurnInfoDTO);
} }
} }
crossDataRealtimeDTO.setDirList(dirList.stream().distinct().collect(Collectors.toList()));
crossDataRealtimeDTO.setTurnList(turnList);
} }
} }
...@@ -744,26 +748,26 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -744,26 +748,26 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
* *
* @return * @return
*/ */
public Map<String, List<CrossTurnDataRealtimeDTO>> listTurnDataRealtime(List<CrossDataRealtimePO> abnormalCrossList) { // public Map<String, List<CrossTurnDataRealtimeDTO>> listTurnDataRealtime(List<CrossDataRealtimePO> abnormalCrossList) {
Map<String, List<CrossTurnDataRealtimeDTO>> turnDataRealtimeDTOList = new HashMap<>(); // Map<String, List<CrossTurnDataRealtimeDTO>> turnDataRealtimeDTOList = new HashMap<>();
//
abnormalCrossList.forEach(entry -> { // abnormalCrossList.forEach(entry -> {
List<CrossTurnDataRealtimeDTO> crossTurnDataRealtimeDTOS = new ArrayList<>(); // List<CrossTurnDataRealtimeDTO> crossTurnDataRealtimeDTOS = new ArrayList<>();
String crossId = entry.getCrossId(); // String crossId = entry.getCrossId();
List<CrossTurnInfoDTO> turnList = entry.getTurnList(); // List<CrossTurnInfoDTO> turnList = entry.getTurnList();
turnList.forEach(crossTurnInfoDTO -> { // turnList.forEach(crossTurnInfoDTO -> {
CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO = new CrossTurnDataRealtimeDTO(); // CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO = new CrossTurnDataRealtimeDTO();
BeanUtils.copyProperties(entry, crossTurnDataRealtimeDTO); // BeanUtils.copyProperties(entry, crossTurnDataRealtimeDTO);
crossTurnDataRealtimeDTO.setTurnType(crossTurnInfoDTO.getTurnType()); // crossTurnDataRealtimeDTO.setTurnType(crossTurnInfoDTO.getTurnType());
crossTurnDataRealtimeDTO.setInDir(crossTurnInfoDTO.getInDir()); // crossTurnDataRealtimeDTO.setInDir(crossTurnInfoDTO.getInDir());
crossTurnDataRealtimeDTO.setOutDir(crossTurnInfoDTO.getOutDir()); // crossTurnDataRealtimeDTO.setOutDir(crossTurnInfoDTO.getOutDir());
crossTurnDataRealtimeDTOS.add(crossTurnDataRealtimeDTO); // crossTurnDataRealtimeDTOS.add(crossTurnDataRealtimeDTO);
}); // });
turnDataRealtimeDTOList.put(crossId, crossTurnDataRealtimeDTOS); // turnDataRealtimeDTOList.put(crossId, crossTurnDataRealtimeDTOS);
}); // });
//
return turnDataRealtimeDTOList; // return turnDataRealtimeDTOList;
} // }
/** /**
......
...@@ -10,16 +10,13 @@ import lombok.extern.slf4j.Slf4j; ...@@ -10,16 +10,13 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity; import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.CrossDataHistMapper; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.databus.po.CrossDataHistPO; import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO; import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.feign.pojo.vo.SchemeSendVO; import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper; import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.CrossPhaseMapper; import net.wanji.opt.dao.mapper.CrossPhaseMapper;
import net.wanji.opt.dao.mapper.CrossSchemeMapper; import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper; import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
...@@ -30,7 +27,6 @@ import net.wanji.opt.dto.OptDataExtend; ...@@ -30,7 +27,6 @@ import net.wanji.opt.dto.OptDataExtend;
import net.wanji.opt.dto.SendManualDTO; import net.wanji.opt.dto.SendManualDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.dto.strategy.QuerySceneDTO; import net.wanji.opt.dto.strategy.QuerySceneDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.base.CrossPhasePO; import net.wanji.opt.po.base.CrossPhasePO;
import net.wanji.opt.po.base.CrossSchemeOptLogPO; import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.po.base.CrossSchemePO; import net.wanji.opt.po.base.CrossSchemePO;
...@@ -44,15 +40,7 @@ import net.wanji.opt.vo.SchemeOptSendVO; ...@@ -44,15 +40,7 @@ import net.wanji.opt.vo.SchemeOptSendVO;
import net.wanji.opt.vo.SchemeOptVO; import net.wanji.opt.vo.SchemeOptVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeSet;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
......
...@@ -13,13 +13,13 @@ import net.wanji.databus.bo.CrossDirDataHistAvgBO; ...@@ -13,13 +13,13 @@ import net.wanji.databus.bo.CrossDirDataHistAvgBO;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper; import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper; import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper; import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO; import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.opt.dao.mapper.CrossInfoMapper; import net.wanji.databus.po.CrossInfoPO;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper; import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dto.CrossIdAndMinutesDTO; import net.wanji.opt.dto.CrossIdAndMinutesDTO;
import net.wanji.opt.dto.OptDataExtend; import net.wanji.opt.dto.OptDataExtend;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.base.CrossSchemeOptLogPO; import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.service.EvaluateService; import net.wanji.opt.service.EvaluateService;
import net.wanji.opt.vo.EvaluateCrossDetailVO; import net.wanji.opt.vo.EvaluateCrossDetailVO;
......
...@@ -9,39 +9,25 @@ import net.wanji.common.enums.EventAlarmEnum; ...@@ -9,39 +9,25 @@ import net.wanji.common.enums.EventAlarmEnum;
import net.wanji.common.enums.EventAlarmSourceEnum; import net.wanji.common.enums.EventAlarmSourceEnum;
import net.wanji.common.utils.tool.CrossUtil; import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity; import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossTurnDataRealtimeMapper;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataHistPO; import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.CrossTurnDataRealtimePO; import net.wanji.databus.po.CrossTurnDataRealtimePO;
import net.wanji.databus.vo.AbnormalCrossListVO; import net.wanji.databus.vo.AbnormalCrossListVO;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper; import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.trend.EventAlarmMapper; import net.wanji.opt.dao.mapper.trend.EventAlarmMapper;
import net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper; import net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper;
import net.wanji.opt.dto.trend.AbnormalCrossListDTO; import net.wanji.opt.dto.trend.AbnormalCrossListDTO;
import net.wanji.opt.dto.trend.GreenwaveListDTO; import net.wanji.opt.dto.trend.GreenwaveListDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.trend.EventAlarmPO; import net.wanji.opt.po.trend.EventAlarmPO;
import net.wanji.opt.service.TrendService; import net.wanji.opt.service.TrendService;
import net.wanji.opt.vo.AbnormalCrossDetailVO; import net.wanji.opt.vo.*;
import net.wanji.opt.vo.AbnormalCrossStats;
import net.wanji.opt.vo.AbnormalCrossVO;
import net.wanji.opt.vo.EventAlarmVO;
import net.wanji.opt.vo.GreenwaveListVO;
import net.wanji.opt.vo.GreenwaveStats;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
......
...@@ -4,7 +4,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -4,7 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.exception.FeignServiceException; import net.wanji.common.framework.exception.FeignServiceException;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.entity.develop.servicedevelop.develop.StatusCodeEnum; import net.wanji.databus.entity.develop.servicedevelop.develop.StatusCodeEnum;
import net.wanji.feign.pojo.vo.SchemeSendVO; import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.feign.service.UtcFeignClients; import net.wanji.feign.service.UtcFeignClients;
import net.wanji.opt.cache.CrossDirTurnPhaseCache; import net.wanji.opt.cache.CrossDirTurnPhaseCache;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper; import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
......
package net.wanji.opt.task; package net.wanji.opt.task;
import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.CrossStatusEnum; import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.common.framework.Constants; import net.wanji.common.framework.Constants;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper; import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.opt.dto.CrossTurnDataRealtimeDTO;
import net.wanji.opt.dto.LaneInfoDTO;
import net.wanji.opt.kafka.ConsumerHandler; import net.wanji.opt.kafka.ConsumerHandler;
import net.wanji.opt.po.kafka.LanePeriodicDataPO;
import net.wanji.opt.query.LaneQuery;
import net.wanji.opt.service.CrossOptimizeService; import net.wanji.opt.service.CrossOptimizeService;
import net.wanji.opt.service.impl.LaneInfoServiceImpl; import net.wanji.opt.service.impl.LaneInfoServiceImpl;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -92,40 +88,20 @@ public class CrossMonitorTask { ...@@ -92,40 +88,20 @@ public class CrossMonitorTask {
BeanUtils.copyProperties(po, dto); BeanUtils.copyProperties(po, dto);
dto.setCrossId(po.getCrossId()); dto.setCrossId(po.getCrossId());
dto.setStatus(status); dto.setStatus(status);
dto.setDirList(null);
dto.setTurnList(null);
dtoList.add(dto); dtoList.add(dto);
} }
return dtoList; return dtoList;
} }
/** /**
* 获取路口实时监测数据 * 获取路口实时监测数据,获取数据中心存入到数据库中的数据
* (暂定从数据中心kafka获取) * (暂定从数据中心kafka获取)
* *
* @return * @return
*/ */
public List<CrossDataRealtimePO> listCrossDataRealtime() { public List<CrossDataRealtimePO> listCrossDataRealtime() {
List<CrossDataRealtimePO> crossDataRealtimePOS = crossDataRealtimeMapper.selectList(new LambdaQueryWrapper<>());
// todo test数据 return crossDataRealtimePOS;
List<CrossDataRealtimePO> crossDataRealtimePOList = new ArrayList<>(1);
CrossDataRealtimePO crossDataRealtimePO = crossDataRealtimeMapper.selectByCrossId("14Q1409IRF0");
CrossDataRealtimePO crossDataRealtimePO1 = crossDataRealtimeMapper.selectByCrossId("14Q0S09IQB0");
crossDataRealtimePOList.add(crossDataRealtimePO);
crossDataRealtimePOList.add(crossDataRealtimePO1);
String lanePeriodicData = consumerHandler.getTopicMessage("JN040001LanePeriodicData");
LanePeriodicDataPO lanePeriodicDataPO = JSONObject.parseObject(lanePeriodicData, LanePeriodicDataPO.class);
// todo 对数据进行处理,可能主要是CrossTurnDataRealtimeDTO中的车间距,车时距等配置修改
CrossTurnDataRealtimeDTO crossTurnDataRealtimeDTO = new CrossTurnDataRealtimeDTO();
// 查询车道信息表
LaneQuery laneQuery = new LaneQuery();
List<LaneInfoDTO> laneInfoDTOS = laneInfoService.listLaneInfo(laneQuery);
// 将车道信息表转存路口实时数据CrossDataRealtimePO,转向数据CrossTurnDataRealtimeDTO,方向数据CrossDirDataHistPO
// 通过数据进行优化
return crossDataRealtimePOList;
} }
} }
\ No newline at end of file
...@@ -3,7 +3,7 @@ package net.wanji.opt.vo; ...@@ -3,7 +3,7 @@ package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import net.wanji.feign.pojo.vo.SchemeSendVO; import net.wanji.databus.vo.SchemeSendVO;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.CrossInfoMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.po.base.CrossInfoPO">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="type" column="type"/>
<result property="level" column="level"/>
<result property="areaCode" column="area_code"/>
<result property="location" column="location"/>
<result property="isSignal" column="is_signal"/>
<result property="isStart" column="is_start"/>
<result property="isSend" column="is_send"/>
</resultMap>
<!-- 查询路口列表信息 -->
<select id="listCrossInfo" parameterType="net.wanji.opt.query.CrossQuery" resultMap="BaseResultMap">
select
id
,name
,type
,level
,area_code
,location
,is_signal
,is_start
,is_send
from
t_base_cross_info
where 1 = 1
<if test="isSignal != null and isSignal != '' ">
and is_signal = #{isSignal}
</if>
<if test="isStart != null and isStart != '' ">
and is_start = #{isStart}
</if>
<if test="isSend != null and isSend != '' ">
and is_send = #{isSend}
</if>
</select>
<select id="selectByCrossIds" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
where id IN
<foreach collection="crossIdList" item="crossId" separator="," open="(" close=")">
#{crossId}
</foreach>
</select>
<select id="selectById" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
where id = #{crossId}
</select>
<select id="selectByName" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%',#{name},'%')
</if>
</where>
order by id
</select>
<select id="selectAll" resultType="net.wanji.opt.po.base.CrossInfoPO">
select
id,name,type,level,area_code,is_signal,is_start,is_send,location
from t_base_cross_info
order by id
</select>
</mapper>
package net.wanji.opt.dao.mapper; package net.wanji.databus.dao.mapper;
import net.wanji.opt.po.base.CrossInfoPO; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.query.CrossQuery; import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.vo.CrossDeviceStatusInfoOutVO;
import net.wanji.databus.vo.CrossInfoVO;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
...@@ -12,14 +15,14 @@ import java.util.List; ...@@ -12,14 +15,14 @@ import java.util.List;
* @desc CrossInfoMapper * @desc CrossInfoMapper
*/ */
@Repository @Repository
public interface CrossInfoMapper { public interface CrossInfoMapper extends BaseMapper<TBaseCrossInfo> {
/** /**
* 查询路口列表信息 * 查询路口列表信息
* @param query * @param query
* @return * @return
*/ */
List<CrossInfoPO> listCrossInfo(CrossQuery query); // List<CrossInfoPO> listCrossInfo(CrossQuery query);
List<CrossInfoPO> selectByCrossIds(List<String> crossIdList); List<CrossInfoPO> selectByCrossIds(List<String> crossIdList);
...@@ -28,4 +31,23 @@ public interface CrossInfoMapper { ...@@ -28,4 +31,23 @@ public interface CrossInfoMapper {
List<CrossInfoPO> selectByName(String name); List<CrossInfoPO> selectByName(String name);
List<CrossInfoPO> selectAll(); List<CrossInfoPO> selectAll();
int deleteByPrimaryKey(String id);
@Override
int insert(TBaseCrossInfo record);
int insertSelective(TBaseCrossInfo record);
TBaseCrossInfo selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(TBaseCrossInfo record);
int updateByPrimaryKey(TBaseCrossInfo record);
List<CrossInfoPO> selectAll(CrossInfoVO crossInfoVO);
Integer countSelectAll(CrossInfoVO crossInfoVO);
List<CrossDeviceStatusInfoOutVO> listCrossDeviceStatusInfo();
} }
...@@ -4,11 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableName; ...@@ -4,11 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import net.wanji.databus.dto.CrossDirInfoDTO;
import net.wanji.databus.dto.CrossTurnInfoDTO;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author duanruiming * @author duanruiming
...@@ -18,84 +15,126 @@ import java.util.List; ...@@ -18,84 +15,126 @@ import java.util.List;
@TableName("t_cross_data_realtime") @TableName("t_cross_data_realtime")
@ApiModel(value = "CrossDataRealtimePO", description = "路口实时数据") @ApiModel(value = "CrossDataRealtimePO", description = "路口实时数据")
public class CrossDataRealtimePO { public class CrossDataRealtimePO {
/** 路口编号 */ /**
@ApiModelProperty(value = "路口编号",notes = "") * 路口编号
private String crossId ; */
/** 路口状态:0正常;1失衡;2拥堵;3溢出;4死锁 */ @ApiModelProperty(value = "路口编号", notes = "")
@ApiModelProperty(value = "路口状态:0正常;1失衡;2拥堵;3溢出;4死锁",notes = "") private String crossId;
private Integer status ; /**
/** 拥堵类型:1常规;2异常 */ * 路口状态:0正常;1失衡;2拥堵;3溢出;4死锁
@ApiModelProperty(value = "拥堵类型:1常规;2异常",notes = "") */
private Integer type ; @ApiModelProperty(value = "路口状态:0正常;1失衡;2拥堵;3溢出;4死锁", notes = "")
/** 交通指数(1~10) */ private Integer status;
@ApiModelProperty(value = "交通指数(1~10)",notes = "") /**
private Double trafficIndex ; * 拥堵类型:1常规;2异常
/** 开始时间:yyyy-MM-dd HH;mm:ss */ */
@ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss",notes = "") @ApiModelProperty(value = "拥堵类型:1常规;2异常", notes = "")
private Date startTime ; private Integer type;
@ApiModelProperty(value = "持续时间(单位:分钟)",notes = "") /**
private Integer duration ; * 交通指数(1~10)
/** 是否失衡:0否;1是 */ */
@ApiModelProperty(value = "是否失衡:0否;1是",notes = "") @ApiModelProperty(value = "交通指数(1~10)", notes = "")
private Integer isUnbalance ; private Double trafficIndex;
/** 是否溢出:0否;1是 */ /**
@ApiModelProperty(value = "是否溢出:0否;1是",notes = "") * 开始时间:yyyy-MM-dd HH;mm:ss
private Integer isSpillover ; */
/** 是否拥堵:0否;1是 */ @ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss", notes = "")
@ApiModelProperty(value = "是否拥堵:0否;1是",notes = "") private Date startTime;
private Integer isCongestion ; @ApiModelProperty(value = "持续时间(单位:分钟)", notes = "")
/** 失衡指数 */ private Integer duration;
@ApiModelProperty(value = "失衡指数",notes = "") /**
private Double unbalanceIndex ; * 是否失衡:0否;1是
/** 溢出指数 */ */
@ApiModelProperty(value = "溢出指数",notes = "") @ApiModelProperty(value = "是否失衡:0否;1是", notes = "")
private Double spilloverIndex ; private Integer isUnbalance;
/** 拥堵指数 */ /**
@ApiModelProperty(value = "拥堵指数",notes = "") * 是否溢出:0否;1是
private Double congestionIndex ; */
/** 路口失衡方向:1,2,3... */ @ApiModelProperty(value = "是否溢出:0否;1是", notes = "")
@ApiModelProperty(value = "路口失衡方向:1,2,3...",notes = "") private Integer isSpillover;
private String unbalanceDirs ; /**
/** 路口溢出方向:1,2,3... */ * 是否拥堵:0否;1是
@ApiModelProperty(value = "路口溢出方向:1,2,3...",notes = "") */
private String spilloverDirs ; @ApiModelProperty(value = "是否拥堵:0否;1是", notes = "")
/** 路口拥堵方向:1,2,3... */ private Integer isCongestion;
@ApiModelProperty(value = "路口拥堵方向:1,2,3...",notes = "") /**
private String congestionDirs ; * 失衡指数
/** 交通流量(辆) */ */
@ApiModelProperty(value = "交通流量(辆)",notes = "") @ApiModelProperty(value = "失衡指数", notes = "")
private Integer flow ; private Double unbalanceIndex;
/** 交通流率/h */ /**
@ApiModelProperty(value = "交通流率/h",notes = "") * 溢出指数
private Double flowRate ; */
/** 平均速度(km/h) */ @ApiModelProperty(value = "溢出指数", notes = "")
@ApiModelProperty(value = "平均速度(km/h)",notes = "") private Double spilloverIndex;
private Double speed ; /**
/** 最大排队(米) */ * 拥堵指数
@ApiModelProperty(value = "最大排队(米)",notes = "") */
private Double queueLength ; @ApiModelProperty(value = "拥堵指数", notes = "")
/** 停车次数(次) */ private Double congestionIndex;
@ApiModelProperty(value = "停车次数(次)",notes = "") /**
private Double stopTimes ; * 路口失衡方向:1,2,3...
/** 延误时间(秒) */ */
@ApiModelProperty(value = "延误时间(秒)",notes = "") @ApiModelProperty(value = "路口失衡方向:1,2,3...", notes = "")
private Integer delayTime ; private String unbalanceDirs;
/** 饱和度 */ /**
@ApiModelProperty(value = "饱和度",notes = "") * 路口溢出方向:1,2,3...
private Double sturation ; */
/** 采集时间(10位时间戳) */ @ApiModelProperty(value = "路口溢出方向:1,2,3...", notes = "")
@ApiModelProperty(value = "采集时间(10位时间戳)",notes = "") private String spilloverDirs;
private Integer batchTime ; /**
/** 创建时间 */ * 路口拥堵方向:1,2,3...
@ApiModelProperty(value = "创建时间",notes = "") */
private Date gmtCreate ; @ApiModelProperty(value = "路口拥堵方向:1,2,3...", notes = "")
/** 修改时间 */ private String congestionDirs;
@ApiModelProperty(value = "修改时间",notes = "") /**
private Date gmtModified ; * 交通流量(辆)
*/
@ApiModelProperty(name = "路口方向列表",notes = "") @ApiModelProperty(value = "交通流量(辆)", notes = "")
List<CrossDirInfoDTO> dirList; private Integer flow;
/**
@ApiModelProperty(name = "路口转向列表",notes = "") * 交通流率/h
List<CrossTurnInfoDTO> turnList; */
@ApiModelProperty(value = "交通流率/h", notes = "")
private Double flowRate;
/**
* 平均速度(km/h)
*/
@ApiModelProperty(value = "平均速度(km/h)", notes = "")
private Double speed;
/**
* 最大排队(米)
*/
@ApiModelProperty(value = "最大排队(米)", notes = "")
private Double queueLength;
/**
* 停车次数(次)
*/
@ApiModelProperty(value = "停车次数(次)", notes = "")
private Double stopTimes;
/**
* 延误时间(秒)
*/
@ApiModelProperty(value = "延误时间(秒)", notes = "")
private Integer delayTime;
/**
* 饱和度
*/
@ApiModelProperty(value = "饱和度", notes = "")
private Double sturation;
/**
* 采集时间(10位时间戳)
*/
@ApiModelProperty(value = "采集时间(10位时间戳)", notes = "")
private Integer batchTime;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", notes = "")
private Date gmtCreate;
/**
* 修改时间
*/
@ApiModelProperty(value = "修改时间", notes = "")
private Date gmtModified;
} }
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