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 | 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 { | ... | ... |
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> | ... | ... |