Commit fcdee888 authored by hanbing's avatar hanbing

[update] 问题路口列表,返回关联路口信息

parent 8120535d
package net.wanji.opt.dao.mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author hanbing
* @date 2023/1/12 13:24
* @desc CrossInfoMapper
*/
@Repository
public interface CrossDirInfoMapper {
List<Integer> selectInDirsByCrossId(String endCrossId);
}
......@@ -22,4 +22,6 @@ public interface CrossInfoMapper {
List<CrossInfoPO> listCrossInfo(CrossQuery query);
List<CrossInfoPO> selectByCrossIds(List<String> crossIdList);
CrossInfoPO selectById(String crossId);
}
......@@ -3,6 +3,8 @@ package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author hfx
* @date 2023/1/12 13:35
......@@ -11,19 +13,29 @@ import lombok.Data;
@Data
public class CrossDirInfoPO {
@ApiModelProperty(name = "路口方向ID",notes = "")
private String crossDirId;
/** 路口方向ID(路口ID_方向_进出口_主辅路序号) */
@ApiModelProperty(name = "路口方向ID(路口ID_方向_进出口_主辅路序号)",notes = "")
private String id ;
/** 路口方向类型:1北;2东北;3东;4东南;5南;6西南;7西;8西北 */
@ApiModelProperty(name = "路口方向类型:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dirType;
private Integer dirType ;
/** 进出口类型:1进口;2出口 */
@ApiModelProperty(name = "进出口类型:1进口;2出口",notes = "")
private Integer inOutType;
@ApiModelProperty(name = "路段长度",notes = "")
private Double length;
private Integer inOutType ;
/** 路口ID */
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId;
private String crossId ;
/** 路段长度 */
@ApiModelProperty(name = "路段长度",notes = "")
private Double length ;
/** 是否有行人过街:0否;1是 */
@ApiModelProperty(name = "是否有行人过街:0否;1是",notes = "")
private Integer isPedestrian ;
/** 创建时间 */
@ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate ;
/** 修改时间 */
@ApiModelProperty(name = "修改时间",notes = "")
private Date gmtModified ;
}
......@@ -4,9 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.common.enums.EventAlarmEnum;
import net.wanji.common.enums.EventAlarmSourceEnum;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dao.mapper.trend.CrossDirDataHistMapper;
......@@ -36,6 +40,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -50,19 +55,23 @@ public class TrendServiceImpl implements TrendService {
private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper;
private final CrossDirDataHistMapper crossDirDataHistMapper;
private final EventAlarmMapper eventAlarmMapper;
private final RidInfoMapper ridInfoMapper;
private final CrossDirInfoMapper crossDirInfoMapper;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, CrossInfoMapper crossInfoMapper,
CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper,
CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper) {
CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper, RidInfoMapper ridInfoMapper, CrossDirInfoMapper crossDirInfoMapper) {
this.greenwaveInfoMapper = greenwaveInfoMapper;
this.crossInfoMapper = crossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossTurnDataRealtimeMapper = crossTurnDataRealtimeMapper;
this.crossDirDataHistMapper = crossDirDataHistMapper;
this.eventAlarmMapper = eventAlarmMapper;
this.ridInfoMapper = ridInfoMapper;
this.crossDirInfoMapper = crossDirInfoMapper;
}
@Override
......@@ -127,6 +136,23 @@ public class TrendServiceImpl implements TrendService {
location.add(lonLat[0]);
location.add(lonLat[1]);
abnormalCrossListVO.setLocation(location);
// 关联路口信息
Integer realtimeStatus = abnormalCrossListVO.getRealtimeStatus();
String endCrossId = abnormalCrossListVO.getId();
if (Objects.equals(realtimeStatus, CrossStatusEnum.SPILLOVER.getCode())) {
// 溢出只返回溢出方向的关联路口
String spilloverDirs = abnormalCrossListVO.getSpilloverDirs();
String[] split = spilloverDirs.split(",");
List<Integer> spilloverDirList = new ArrayList<>();
for (String s : split) {
spilloverDirList.add(Integer.parseInt(s));
}
buildRidData(abnormalCrossListVO, endCrossId, spilloverDirList);
} else if (Objects.equals(realtimeStatus, CrossStatusEnum.CONGESTION.getCode())){
// 拥堵返回所有方向关联路口
List<Integer> inDirs = crossDirInfoMapper.selectInDirsByCrossId(endCrossId);
buildRidData(abnormalCrossListVO, endCrossId, inDirs);
}
}
abnormalCrossVO.setAbnormalCrossList(abnormalCrossListVOList);
// 构造统计信息
......@@ -137,6 +163,33 @@ public class TrendServiceImpl implements TrendService {
return abnormalCrossVO;
}
private void buildRidData(AbnormalCrossListVO abnormalCrossListVO, String endCrossId,
List<Integer> spilloverDirList) {
List<List<Double>> ridLocationList = new ArrayList<>();
List<String> ridWktList = new ArrayList<>();
for (Integer spilloverDir : spilloverDirList) {
RidInfoEntity ridInfo = ridInfoMapper.selectByEndInDir(endCrossId, spilloverDir);
if (ridInfo != null) {
// 关联路口坐标
String startCrossId = ridInfo.getStartCrossId();
CrossInfoPO crossInfoPO = crossInfoMapper.selectById(startCrossId);
if (crossInfoPO != null) {
String startLocationStr = crossInfoPO.getLocation();
double[] startLonLat = CrossUtil.getLonLat(startLocationStr);
List<Double> startLocation = new ArrayList<>();
startLocation.add(startLonLat[0]);
startLocation.add(startLonLat[1]);
ridLocationList.add(startLocation);
}
// 关联路口wkt
String wkt = ridInfo.getWkt();
ridWktList.add(wkt);
}
}
abnormalCrossListVO.setRidLocationList(ridLocationList);
abnormalCrossListVO.setRidWktList(ridWktList);
}
@Override
public AbnormalCrossDetailVO abnormalCrossDetail(CrossIdDTO crossIdDTO) {
String crossId = crossIdDTO.getCrossId();
......
......@@ -36,6 +36,10 @@ public class AbnormalCrossListVO {
private String locationStr;
@ApiModelProperty(value = "路口坐标")
private List<Double> location;
@ApiModelProperty(value = "关联路口坐标列表")
private List<List<Double>> ridLocationList;
@ApiModelProperty(value = "关联路口wkt列表")
private List<String> ridWktList;
@JsonIgnore
// 是否失衡:0否;1是
private Integer isUnbalance;
......
<?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.CrossDirInfoMapper">
<select id="selectInDirsByCrossId" resultType="java.lang.Integer">
SELECT dir_type
FROM t_base_cross_dir_info
WHERE cross_id = #{crossId}
</select>
</mapper>
......@@ -51,4 +51,11 @@
</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>
</mapper>
......@@ -116,6 +116,8 @@ public class RidInfoEntity {
*/
@ApiModelProperty(name = "路段类型:1路段;3匝道;4隧道;5桥梁;6高架;99其他", notes = "")
private Integer type;
@ApiModelProperty(name = "主辅标志:1主路;2辅路;99其他 (参见主辅标志字典)", notes = "")
private Integer mainFlag;
/**
* RID;空间对象
*/
......@@ -125,7 +127,7 @@ public class RidInfoEntity {
* 信控路段编号
*/
@ApiModelProperty(name = "信控路段编号", notes = "")
private String scRid;
private String scId;
/**
* 信控路段名称
*/
......
......@@ -23,4 +23,6 @@ public interface RidInfoMapper {
List<RidInfoEntity> selectOne(@Param("startCrossid") String startCrossid,
@Param("endCrossid") String endCrossid);
RidInfoEntity selectByEndInDir(String endCrossId, int spilloverDirInt);
}
......@@ -68,4 +68,11 @@
</if>
</where>
</select>
<select id="selectByEndInDir" resultType="net.wanji.databus.dao.entity.RidInfoEntity">
SELECT id,name,road_id,road_name,road_dir_id,start_cross_id,end_cross_id,out_dir,in_dir,start_angle,end_angle,
direction,sort,trend,level,area_code,length,width,is_oneway,type,wkt,sc_id,sc_name,sc_sort,gmt_create,gmt_modified
FROM t_base_rid_info
WHERE end_cross_id = #{endCrossId} and in_dir = #{spilloverDirInt}
</select>
</mapper>
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