Showing
8 changed files
with
181 additions
and
0 deletions
application/src/main/java/org/thingsboard/server/controller/yunteng/TkMapGeoJsonController.java
0 → 100644
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,6 +122,9 @@ public final class ModelConstants { | ||
122 | public static final String TK_TASK_CENTER_NAME = "tk_task_center"; | 122 | public static final String TK_TASK_CENTER_NAME = "tk_task_center"; |
123 | /** 设备与任务中心映射表 */ | 123 | /** 设备与任务中心映射表 */ |
124 | public static final String TK_DEVICE_TASK_CENTER_NAME = "tk_device_task_center"; | 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 | public static class TableFields { | 130 | public static class TableFields { |
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TkMapGeoJsonDTO.java
0 → 100644
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> |