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 { ...@@ -22,4 +22,6 @@ public interface CrossInfoMapper {
List<CrossInfoPO> listCrossInfo(CrossQuery query); List<CrossInfoPO> listCrossInfo(CrossQuery query);
List<CrossInfoPO> selectByCrossIds(List<String> crossIdList); List<CrossInfoPO> selectByCrossIds(List<String> crossIdList);
CrossInfoPO selectById(String crossId);
} }
...@@ -3,6 +3,8 @@ package net.wanji.opt.po.base; ...@@ -3,6 +3,8 @@ package net.wanji.opt.po.base;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* @author hfx * @author hfx
* @date 2023/1/12 13:35 * @date 2023/1/12 13:35
...@@ -11,19 +13,29 @@ import lombok.Data; ...@@ -11,19 +13,29 @@ import lombok.Data;
@Data @Data
public class CrossDirInfoPO { public class CrossDirInfoPO {
@ApiModelProperty(name = "路口方向ID",notes = "") /** 路口方向ID(路口ID_方向_进出口_主辅路序号) */
private String crossDirId; @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 = "") @ApiModelProperty(name = "路口方向类型:1北;2东北;3东;4东南;5南;6西南;7西;8西北",notes = "")
private Integer dirType; private Integer dirType ;
/** 进出口类型:1进口;2出口 */
@ApiModelProperty(name = "进出口类型:1进口;2出口",notes = "") @ApiModelProperty(name = "进出口类型:1进口;2出口",notes = "")
private Integer inOutType; private Integer inOutType ;
/** 路口ID */
@ApiModelProperty(name = "路段长度",notes = "")
private Double length;
@ApiModelProperty(name = "路口ID",notes = "") @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; ...@@ -4,9 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.enums.CrossStatusEnum;
import net.wanji.common.enums.EventAlarmEnum; 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.mapper.RidInfoMapper;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper; import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper; import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dao.mapper.trend.CrossDirDataHistMapper; import net.wanji.opt.dao.mapper.trend.CrossDirDataHistMapper;
...@@ -36,6 +40,7 @@ import java.util.ArrayList; ...@@ -36,6 +40,7 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -50,19 +55,23 @@ public class TrendServiceImpl implements TrendService { ...@@ -50,19 +55,23 @@ public class TrendServiceImpl implements TrendService {
private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper; private final CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper;
private final CrossDirDataHistMapper crossDirDataHistMapper; private final CrossDirDataHistMapper crossDirDataHistMapper;
private final EventAlarmMapper eventAlarmMapper; private final EventAlarmMapper eventAlarmMapper;
private final RidInfoMapper ridInfoMapper;
private final CrossDirInfoMapper crossDirInfoMapper;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, CrossInfoMapper crossInfoMapper, public TrendServiceImpl(GreenwaveInfoMapper greenwaveInfoMapper, CrossInfoMapper crossInfoMapper,
CrossDataRealtimeMapper crossDataRealtimeMapper, CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper, CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper,
CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper) { CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper, RidInfoMapper ridInfoMapper, CrossDirInfoMapper crossDirInfoMapper) {
this.greenwaveInfoMapper = greenwaveInfoMapper; this.greenwaveInfoMapper = greenwaveInfoMapper;
this.crossInfoMapper = crossInfoMapper; this.crossInfoMapper = crossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossTurnDataRealtimeMapper = crossTurnDataRealtimeMapper; this.crossTurnDataRealtimeMapper = crossTurnDataRealtimeMapper;
this.crossDirDataHistMapper = crossDirDataHistMapper; this.crossDirDataHistMapper = crossDirDataHistMapper;
this.eventAlarmMapper = eventAlarmMapper; this.eventAlarmMapper = eventAlarmMapper;
this.ridInfoMapper = ridInfoMapper;
this.crossDirInfoMapper = crossDirInfoMapper;
} }
@Override @Override
...@@ -127,6 +136,23 @@ public class TrendServiceImpl implements TrendService { ...@@ -127,6 +136,23 @@ public class TrendServiceImpl implements TrendService {
location.add(lonLat[0]); location.add(lonLat[0]);
location.add(lonLat[1]); location.add(lonLat[1]);
abnormalCrossListVO.setLocation(location); 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); abnormalCrossVO.setAbnormalCrossList(abnormalCrossListVOList);
// 构造统计信息 // 构造统计信息
...@@ -137,6 +163,33 @@ public class TrendServiceImpl implements TrendService { ...@@ -137,6 +163,33 @@ public class TrendServiceImpl implements TrendService {
return abnormalCrossVO; 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 @Override
public AbnormalCrossDetailVO abnormalCrossDetail(CrossIdDTO crossIdDTO) { public AbnormalCrossDetailVO abnormalCrossDetail(CrossIdDTO crossIdDTO) {
String crossId = crossIdDTO.getCrossId(); String crossId = crossIdDTO.getCrossId();
......
...@@ -36,6 +36,10 @@ public class AbnormalCrossListVO { ...@@ -36,6 +36,10 @@ public class AbnormalCrossListVO {
private String locationStr; private String locationStr;
@ApiModelProperty(value = "路口坐标") @ApiModelProperty(value = "路口坐标")
private List<Double> location; private List<Double> location;
@ApiModelProperty(value = "关联路口坐标列表")
private List<List<Double>> ridLocationList;
@ApiModelProperty(value = "关联路口wkt列表")
private List<String> ridWktList;
@JsonIgnore @JsonIgnore
// 是否失衡:0否;1是 // 是否失衡:0否;1是
private Integer isUnbalance; 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 @@ ...@@ -51,4 +51,11 @@
</foreach> </foreach>
</select> </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> </mapper>
...@@ -116,6 +116,8 @@ public class RidInfoEntity { ...@@ -116,6 +116,8 @@ public class RidInfoEntity {
*/ */
@ApiModelProperty(name = "路段类型:1路段;3匝道;4隧道;5桥梁;6高架;99其他", notes = "") @ApiModelProperty(name = "路段类型:1路段;3匝道;4隧道;5桥梁;6高架;99其他", notes = "")
private Integer type; private Integer type;
@ApiModelProperty(name = "主辅标志:1主路;2辅路;99其他 (参见主辅标志字典)", notes = "")
private Integer mainFlag;
/** /**
* RID;空间对象 * RID;空间对象
*/ */
...@@ -125,7 +127,7 @@ public class RidInfoEntity { ...@@ -125,7 +127,7 @@ public class RidInfoEntity {
* 信控路段编号 * 信控路段编号
*/ */
@ApiModelProperty(name = "信控路段编号", notes = "") @ApiModelProperty(name = "信控路段编号", notes = "")
private String scRid; private String scId;
/** /**
* 信控路段名称 * 信控路段名称
*/ */
......
...@@ -23,4 +23,6 @@ public interface RidInfoMapper { ...@@ -23,4 +23,6 @@ public interface RidInfoMapper {
List<RidInfoEntity> selectOne(@Param("startCrossid") String startCrossid, List<RidInfoEntity> selectOne(@Param("startCrossid") String startCrossid,
@Param("endCrossid") String endCrossid); @Param("endCrossid") String endCrossid);
RidInfoEntity selectByEndInDir(String endCrossId, int spilloverDirInt);
} }
...@@ -68,4 +68,11 @@ ...@@ -68,4 +68,11 @@
</if> </if>
</where> </where>
</select> </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> </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