早上拉取的高德地图的行政区域数据到本地,前端需要返回相应的属性结构接口,用递归的方法解决了,上代码~
DAO类:
public class AmpArea implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 1省,2市,3:区县
*/
private String level;
/**
* 行政区名称
*/
private String name;
/**
* 编码
*/
private String code;
/**
* 父编码
*/
private String parentCode;
/**
* 区域中心点(经度,维度)
*/
private String center;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 数据删除标识
*/
private Boolean deleteFlag;
}
返回结果类:
public class AmpAreaTreeResVO {
private Long id;
@ApiModelProperty(value = "1省,2市,3:区县")
private String level;
@ApiModelProperty(value = "行政区名称")
private String name;
@ApiModelProperty(value = "编码")
private String code;
@ApiModelProperty(value = "父编码")
private String parentCode;
@ApiModelProperty(value = "区域中心点(经度,维度)")
private String center;
@ApiModelProperty(value = "子节点")
private List<AmpAreaTreeResVO> children;
}
service层:
@Override
public List<AmpAreaTreeResVO> getAmpAreaTree() {
List<AmpArea> areas = this.list(new LambdaQueryWrapper<>(new AmpArea()).eq(AmpArea::getLevel, AreaDistrictsType.PROCINCE.getKey()));
List<AmpAreaTreeResVO> res = areas.stream().map(m -> {
AmpAreaTreeResVO resVO = BeanCopyUtils.copyProperties(m, AmpAreaTreeResVO.class);
resVO.setChildren(getChild(m));
return resVO;
}).collect(Collectors.toList());
return res;
}
public List<AmpAreaTreeResVO> getChild(AmpArea ampArea) {
List<AmpAreaTreeResVO> res = new ArrayList<>();
List<AmpArea> areas = new ArrayList<>();
//level层级只需要到3
if (!ampArea.getLevel().equals(AreaDistrictsType.DISTRICTS.getKey())) {
areas = this.list(new LambdaQueryWrapper<>(new AmpArea()).eq(AmpArea::getParentCode, ampArea.getCode()));
}
if (areas.size() > 0) {
res = areas.stream().map(m -> {
AmpAreaTreeResVO resVO = BeanCopyUtils.copyProperties(m, AmpAreaTreeResVO.class);
resVO.setChildren(getChild(m));
return resVO;
}).collect(Collectors.toList());
}
return res;
}