Commit b0a5698fc9cae1099f574cdbafd62d4b541bb979

Authored by xp.Huang
1 parent 63f88321

feat: 新增地图行政区域经纬度信息查询

  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import lombok.RequiredArgsConstructor;
  5 +import org.springframework.web.bind.annotation.GetMapping;
  6 +import org.springframework.web.bind.annotation.PathVariable;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RestController;
  9 +import org.thingsboard.server.common.data.yunteng.dto.TkMapGeoJsonDTO;
  10 +import org.thingsboard.server.common.data.yunteng.enums.AreaLevelEnum;
  11 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
  12 +import org.thingsboard.server.dao.yunteng.service.TkMapGeoJsonService;
  13 +
  14 +@RestController
  15 +@RequestMapping("/api/yt/map/geo_json")
  16 +@RequiredArgsConstructor
  17 +@Api(tags = "行政区域经纬度信息")
  18 +public class TkMapGeoJsonController {
  19 + private final TkMapGeoJsonService tkMapGeoJsonService;
  20 +
  21 + @GetMapping("/{code}/{level}")
  22 + public ResponseResult<TkMapGeoJsonDTO> getMapGeoJson(
  23 + @PathVariable("code") Integer code, @PathVariable("level") AreaLevelEnum level) {
  24 + return ResponseResult.success(tkMapGeoJsonService.findMapInfoByCodeAndLevel(code, level));
  25 + }
  26 +}
... ...
... ... @@ -122,6 +122,9 @@ public final class ModelConstants {
122 122 public static final String TK_TASK_CENTER_NAME = "tk_task_center";
123 123 /** 设备与任务中心映射表 */
124 124 public static final String TK_DEVICE_TASK_CENTER_NAME = "tk_device_task_center";
  125 +
  126 + /** 行政区域经纬度信息表 */
  127 + public static final String TK_MAP_GEO_JSON_NAME = "tk_map_geo_json";
125 128 }
126 129
127 130 public static class TableFields {
... ...
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import org.thingsboard.server.common.data.yunteng.enums.AreaLevelEnum;
  6 +
  7 +@Data
  8 +public class TkMapGeoJsonDTO {
  9 + @ApiModelProperty(value = "行政区域代码")
  10 + Integer code;
  11 +
  12 + @ApiModelProperty(value = "名称")
  13 + String name;
  14 +
  15 + @ApiModelProperty(value = "行政区域级别")
  16 + AreaLevelEnum level;
  17 +
  18 + @ApiModelProperty(value = "GeoJson数据: 由于数据量太大转为string")
  19 + String geoJson;
  20 +
  21 + public TkMapGeoJsonDTO(Integer code, String name, AreaLevelEnum level, String geoJson) {
  22 + this.code = code;
  23 + this.name = name;
  24 + this.level = level;
  25 + this.geoJson = geoJson;
  26 + }
  27 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableField;
  4 +import com.baomidou.mybatisplus.annotation.TableName;
  5 +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
  6 +import com.fasterxml.jackson.databind.JsonNode;
  7 +import lombok.Data;
  8 +import org.apache.ibatis.type.EnumTypeHandler;
  9 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  10 +import org.thingsboard.server.common.data.yunteng.enums.AreaLevelEnum;
  11 +
  12 +import java.io.Serializable;
  13 +
  14 +@Data
  15 +@TableName(ModelConstants.Table.TK_MAP_GEO_JSON_NAME)
  16 +public class TkMagGeoJsonEntity implements Serializable {
  17 +
  18 + private static final long serialVersionUID = 6687083490949794872L;
  19 +
  20 + Integer code;
  21 + String name;
  22 +
  23 + @TableField(typeHandler = EnumTypeHandler.class)
  24 + AreaLevelEnum level;
  25 +
  26 + @TableField(typeHandler = JacksonTypeHandler.class)
  27 + JsonNode geoJson;
  28 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import lombok.RequiredArgsConstructor;
  4 +import org.springframework.stereotype.Service;
  5 +import org.thingsboard.server.common.data.yunteng.core.cache.CacheUtils;
  6 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  7 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  8 +import org.thingsboard.server.common.data.yunteng.dto.TkMapGeoJsonDTO;
  9 +import org.thingsboard.server.common.data.yunteng.enums.AreaLevelEnum;
  10 +import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
  11 +import org.thingsboard.server.dao.yunteng.entities.TkMagGeoJsonEntity;
  12 +import org.thingsboard.server.dao.yunteng.mapper.TkMapGeoJsonMapper;
  13 +import org.thingsboard.server.dao.yunteng.service.TkMapGeoJsonService;
  14 +
  15 +import java.util.Optional;
  16 +
  17 +@Service
  18 +@RequiredArgsConstructor
  19 +public class TkMapGeoJsonServiceImpl implements TkMapGeoJsonService {
  20 +
  21 + private final TkMapGeoJsonMapper mapper;
  22 + private final CacheUtils cacheUtils;
  23 +
  24 + @Override
  25 + public TkMapGeoJsonDTO findMapInfoByCodeAndLevel(Integer code, AreaLevelEnum level) {
  26 + if (null == code || null == level) {
  27 + throw new TkDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  28 + }
  29 + String key = code + "_" + level.name();
  30 + Optional<TkMapGeoJsonDTO> cache = cacheUtils.get(key);
  31 + return cache.orElseGet(
  32 + () ->
  33 + cache.orElseGet(
  34 + () -> {
  35 + TkMagGeoJsonEntity json = mapper.findMapInfoByCodeAndLevel(code, level);
  36 + return Optional.ofNullable(json)
  37 + .map(
  38 + obj -> {
  39 + TkMapGeoJsonDTO result =
  40 + new TkMapGeoJsonDTO(
  41 + obj.getCode(),
  42 + obj.getName(),
  43 + obj.getLevel(),
  44 + JacksonUtil.toString(obj.getGeoJson()));
  45 + cacheUtils.put(key, result);
  46 + return result;
  47 + })
  48 + .orElse(null);
  49 + }));
  50 + }
  51 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.apache.ibatis.annotations.Param;
  6 +import org.thingsboard.server.common.data.yunteng.enums.AreaLevelEnum;
  7 +import org.thingsboard.server.dao.yunteng.entities.TkMagGeoJsonEntity;
  8 +
  9 +@Mapper
  10 +public interface TkMapGeoJsonMapper extends BaseMapper<TkMagGeoJsonEntity> {
  11 + TkMagGeoJsonEntity findMapInfoByCodeAndLevel(
  12 + @Param("code") int code, @Param("level") AreaLevelEnum level);
  13 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.TkMapGeoJsonDTO;
  4 +import org.thingsboard.server.common.data.yunteng.enums.AreaLevelEnum;
  5 +
  6 +public interface TkMapGeoJsonService {
  7 + /**
  8 + * 根据行政区域代码和级别查询行政区域经纬度范围信息
  9 + *
  10 + * @param code 行政区域代码
  11 + * @param level 行政区域级别
  12 + * @return 行政区域经纬度范围信息
  13 + */
  14 + TkMapGeoJsonDTO findMapInfoByCodeAndLevel(Integer code, AreaLevelEnum level);
  15 +}
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.TkMapGeoJsonMapper">
  5 + <resultMap id="geoJsonMap" type="org.thingsboard.server.dao.yunteng.entities.TkMagGeoJsonEntity">
  6 + <result property="code" column="code"/>
  7 + <result property="name" column="name"/>
  8 + <result property="level" column="level" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  9 + <result property="geoJson" column="geo_json"
  10 + typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
  11 + </resultMap>
  12 + <select id="findMapInfoByCodeAndLevel" resultMap="geoJsonMap">
  13 + SELECT code, name, level, geo_json
  14 + FROM tk_map_geo_json
  15 + WHERE code = #{code}
  16 + AND level = #{level}
  17 + </select>
  18 +</mapper>
... ...