细化隐患点类型

This commit is contained in:
wzy-warehouse
2026-04-28 09:28:48 +08:00
parent 233959e918
commit 668190dcd9
9 changed files with 77 additions and 159 deletions
@@ -18,9 +18,8 @@ public class XianHiddenDangerSpotsController extends BaseController{
@GetMapping("/base-points") @GetMapping("/base-points")
public ApiResponse<List<XianHiddenDangerSpotsBasePointVo>> getBasePoints( public ApiResponse<List<XianHiddenDangerSpotsBasePointVo>> getBasePoints(
@RequestParam String type,
@RequestParam(required = false) String disasterType) { @RequestParam(required = false) String disasterType) {
return ApiResponse.ok(xianHiddenDangerSpotsService.getBasePoints(type, disasterType)); return ApiResponse.ok(xianHiddenDangerSpotsService.getBasePoints(disasterType));
} }
@GetMapping("point-detail/{id}") @GetMapping("point-detail/{id}")
@@ -3,7 +3,7 @@ package com.gis.xian.entity;
import lombok.Data; import lombok.Data;
/** /**
* 地质灾害隐患点 * 隐患点(滑坡、泥石流、山洪、内涝)
* @TableName xian_hidden_danger_spots * @TableName xian_hidden_danger_spots
*/ */
@Data @Data
@@ -4,11 +4,7 @@ import lombok.Getter;
@Getter @Getter
public enum DisasterTypeEnum { public enum DisasterTypeEnum {
// 第一级:灾害大类 // 具体灾害类型
RAINSTORM("rainstorm", "暴雨"),
EARTHQUAKE("earthquake", "地震"),
// 第二级:具体灾害类型(暴雨类)
LANDSLIDE("landslide", "滑坡"), LANDSLIDE("landslide", "滑坡"),
DEBRIS_FLOW("debris_flow", "泥石流"), DEBRIS_FLOW("debris_flow", "泥石流"),
FLASH_FLOOD("flash_flood", "山洪"), FLASH_FLOOD("flash_flood", "山洪"),
@@ -13,11 +13,10 @@ import java.util.List;
public interface XianHiddenDangerSpotsMapper { public interface XianHiddenDangerSpotsMapper {
/** /**
* 获取所有基础点:滑坡、泥石流、山洪、内涝 * 获取所有基础点:滑坡、泥石流、山洪、内涝
* @param type 灾害大类(rainstorm-暴雨, earthquake-地震)
* @param disasterType 具体灾害类型(landslide-滑坡, debris_flow-泥石流, flash_flood-山洪, water_logging-内涝),可选 * @param disasterType 具体灾害类型(landslide-滑坡, debris_flow-泥石流, flash_flood-山洪, water_logging-内涝),可选
* @return 基础点列表 * @return 基础点列表
*/ */
List<XianHiddenDangerSpots> getBasePoints(String type, String disasterType); List<XianHiddenDangerSpots> getBasePoints(String disasterType);
/** /**
* 根据id获取隐患点详情 * 根据id获取隐患点详情
@@ -9,11 +9,10 @@ public interface XianHiddenDangerSpotsService {
/** /**
* 获取所有基础点:滑坡、泥石流、山洪、内涝 * 获取所有基础点:滑坡、泥石流、山洪、内涝
* @param type 灾害大类(rainstorm-暴雨, earthquake-地震)
* @param disasterType 具体灾害类型(landslide-滑坡, debris_flow-泥石流, flash_flood-山洪, water_logging-内涝),可选 * @param disasterType 具体灾害类型(landslide-滑坡, debris_flow-泥石流, flash_flood-山洪, water_logging-内涝),可选
* @return 基础点列表 * @return 基础点列表
*/ */
List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String type, String disasterType); List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String disasterType);
/** /**
* 根据id获取隐患点详情 * 根据id获取隐患点详情
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSON;
import com.gis.xian.entity.XianHiddenDangerSpots; import com.gis.xian.entity.XianHiddenDangerSpots;
import com.gis.xian.vo.XianHiddenDangerSpotsBasePointVo; import com.gis.xian.vo.XianHiddenDangerSpotsBasePointVo;
import com.gis.xian.vo.XianHiddenDangerSpotsPointDetailVo; import com.gis.xian.vo.XianHiddenDangerSpotsPointDetailVo;
import com.gis.xian.enums.DisasterTypeEnum;
import com.gis.xian.mapper.XianHiddenDangerSpotsMapper; import com.gis.xian.mapper.XianHiddenDangerSpotsMapper;
import com.gis.xian.service.XianHiddenDangerSpotsService; import com.gis.xian.service.XianHiddenDangerSpotsService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -23,34 +22,25 @@ public class IXianHiddenDangerSpotsServiceImpl implements XianHiddenDangerSpotsS
@Resource @Resource
private XianHiddenDangerSpotsMapper xianHiddenDangerSpotsMapper; private XianHiddenDangerSpotsMapper xianHiddenDangerSpotsMapper;
@Value("${init.data.base-points.hidden-danger.rainstorm}") @Value("${init.data.base-points.hidden-danger.all}")
private String rainstormBasePointsKey; private String allBasePointsKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-landslide}") @Value("${init.data.base-points.hidden-danger.landslide}")
private String rainstormLandslideKey; private String landslideKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-debris-flow}") @Value("${init.data.base-points.hidden-danger.debris-flow}")
private String rainstormDebrisFlowKey; private String debrisFlowKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-flash-flood}") @Value("${init.data.base-points.hidden-danger.flash-flood}")
private String rainstormMountainFloodKey; private String flashFloodKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-water-logging}") @Value("${init.data.base-points.hidden-danger.water-logging}")
private String rainstormWaterLoggingKey; private String waterLoggingKey;
@Value("${init.data.base-points.hidden-danger.earthquake}")
private String earthquakeBasePointsKey;
@Value("${init.data.base-points.hidden-danger.earthquake-landslide}")
private String earthquakeLandslideKey;
@Value("${init.data.base-points.hidden-danger.earthquake-debris-flow}")
private String earthquakeDebrisFlowKey;
@Override @Override
public List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String type, String disasterType) { public List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String disasterType) {
// 构建Redis key // 构建Redis key
String redisKey = buildRedisKey(type, disasterType); String redisKey = buildRedisKey(disasterType);
// 从redis中读取基础点信息 // 从redis中读取基础点信息
Object data = redisTemplate.opsForValue().get(redisKey); Object data = redisTemplate.opsForValue().get(redisKey);
@@ -58,7 +48,7 @@ public class IXianHiddenDangerSpotsServiceImpl implements XianHiddenDangerSpotsS
if (data == null) { if (data == null) {
// 从数据库查询 // 从数据库查询
List<XianHiddenDangerSpotsBasePointVo> basePoints = List<XianHiddenDangerSpotsBasePointVo> basePoints =
XianHiddenDangerSpotsBasePointVo.entity2Vo(xianHiddenDangerSpotsMapper.getBasePoints(type, disasterType)); XianHiddenDangerSpotsBasePointVo.entity2Vo(xianHiddenDangerSpotsMapper.getBasePoints(disasterType));
// 存入Redis // 存入Redis
redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(basePoints)); redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(basePoints));
@@ -69,40 +59,24 @@ public class IXianHiddenDangerSpotsServiceImpl implements XianHiddenDangerSpotsS
} }
/** /**
* 根据type和disasterType构建Redis key * 根据disasterType构建Redis key
*/ */
private String buildRedisKey(String type, String disasterType) { private String buildRedisKey(String disasterType) {
if (DisasterTypeEnum.RAINSTORM.getType().equals(type)) {
if (disasterType == null || disasterType.isEmpty()) { if (disasterType == null || disasterType.isEmpty()) {
return rainstormBasePointsKey; return allBasePointsKey;
} }
switch (disasterType) { switch (disasterType) {
case "landslide": case "landslide":
return rainstormLandslideKey; return landslideKey;
case "debris_flow": case "debris_flow":
return rainstormDebrisFlowKey; return debrisFlowKey;
case "flash_flood": case "flash_flood":
return rainstormMountainFloodKey; return flashFloodKey;
case "waterlogging": case "waterlogging":
return rainstormWaterLoggingKey; return waterLoggingKey;
default: default:
return rainstormBasePointsKey; return allBasePointsKey;
} }
} else if (DisasterTypeEnum.EARTHQUAKE.getType().equals(type)) {
if (disasterType == null || disasterType.isEmpty()) {
return earthquakeBasePointsKey;
}
switch (disasterType) {
case "landslide":
return earthquakeLandslideKey;
case "debris_flow":
return earthquakeDebrisFlowKey;
default:
return earthquakeBasePointsKey;
}
}
// 默认返回暴雨的key
return rainstormBasePointsKey;
} }
@Override @Override
@@ -1,7 +1,6 @@
package com.gis.xian.task; package com.gis.xian.task;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.gis.xian.enums.DisasterTypeEnum;
import com.gis.xian.mapper.*; import com.gis.xian.mapper.*;
import com.gis.xian.vo.*; import com.gis.xian.vo.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -58,29 +57,20 @@ public class InitializeData {
@Resource @Resource
RedisTemplate<String, Object> redisTemplate; RedisTemplate<String, Object> redisTemplate;
@Value("${init.data.base-points.hidden-danger.rainstorm}") @Value("${init.data.base-points.hidden-danger.all}")
private String rainstormBasePointsKey; private String allBasePointsKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-landslide}") @Value("${init.data.base-points.hidden-danger.landslide}")
private String rainstormLandslideKey; private String landslideKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-debris-flow}") @Value("${init.data.base-points.hidden-danger.debris-flow}")
private String rainstormDebrisFlowKey; private String debrisFlowKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-flash-flood}") @Value("${init.data.base-points.hidden-danger.flash-flood}")
private String rainstormMountainFloodKey; private String flashFloodKey;
@Value("${init.data.base-points.hidden-danger.rainstorm-water-logging}") @Value("${init.data.base-points.hidden-danger.water-logging}")
private String rainstormWaterLoggingKey; private String waterLoggingKey;
@Value("${init.data.base-points.hidden-danger.earthquake}")
private String earthquakeBasePointsKey;
@Value("${init.data.base-points.hidden-danger.earthquake-landslide}")
private String earthquakeLandslideKey;
@Value("${init.data.base-points.hidden-danger.earthquake-debris-flow}")
private String earthquakeDebrisFlowKey;
@Value("${init.data.base-points.risk}") @Value("${init.data.base-points.risk}")
private String riskBasePointsKey; private String riskBasePointsKey;
@@ -118,84 +108,54 @@ public class InitializeData {
log.info("开始初始化数据"); log.info("开始初始化数据");
// 并行执行所有数据库查询和Redis写入 // 并行执行所有数据库查询和Redis写入
// 暴雨类隐患点 - 总体 // 隐患点 - 总体
CompletableFuture<Void> rainstormFuture = CompletableFuture.runAsync(() -> { CompletableFuture<Void> allFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(rainstormBasePointsKey, JSON.toJSONString( redisTemplate.opsForValue().set(allBasePointsKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo( XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), null)) xianHiddenDangerSpotsMapper.getBasePoints(null))
) )
); );
log.info("加载暴雨隐患点信息(总体)并写入redis完成"); log.info("加载隐患点信息(总体)并写入redis完成");
}); });
// 暴雨类隐患点 - 滑坡 // 隐患点 - 滑坡
CompletableFuture<Void> rainstormLandslideFuture = CompletableFuture.runAsync(() -> { CompletableFuture<Void> landslideFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(rainstormLandslideKey, JSON.toJSONString( redisTemplate.opsForValue().set(landslideKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo( XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "landslide")) xianHiddenDangerSpotsMapper.getBasePoints("landslide"))
) )
); );
log.info("加载暴雨隐患点信息(滑坡)并写入redis完成"); log.info("加载隐患点信息(滑坡)并写入redis完成");
}); });
// 暴雨类隐患点 - 泥石流 // 隐患点 - 泥石流
CompletableFuture<Void> rainstormDebrisFlowFuture = CompletableFuture.runAsync(() -> { CompletableFuture<Void> debrisFlowFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(rainstormDebrisFlowKey, JSON.toJSONString( redisTemplate.opsForValue().set(debrisFlowKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo( XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "debris_flow")) xianHiddenDangerSpotsMapper.getBasePoints("debris_flow"))
) )
); );
log.info("加载暴雨隐患点信息(泥石流)并写入redis完成"); log.info("加载隐患点信息(泥石流)并写入redis完成");
}); });
// 暴雨类隐患点 - 山洪 // 隐患点 - 山洪
CompletableFuture<Void> rainstormMountainFloodFuture = CompletableFuture.runAsync(() -> { CompletableFuture<Void> flashFloodFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(rainstormMountainFloodKey, JSON.toJSONString( redisTemplate.opsForValue().set(flashFloodKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo( XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "flash_flood")) xianHiddenDangerSpotsMapper.getBasePoints("flash_flood"))
) )
); );
log.info("加载暴雨隐患点信息(山洪)并写入redis完成"); log.info("加载隐患点信息(山洪)并写入redis完成");
}); });
// 暴雨类隐患点 - 内涝 // 隐患点 - 内涝
CompletableFuture<Void> rainstormWaterLoggingFuture = CompletableFuture.runAsync(() -> { CompletableFuture<Void> waterLoggingFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(rainstormWaterLoggingKey, JSON.toJSONString( redisTemplate.opsForValue().set(waterLoggingKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo( XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "water_logging")) xianHiddenDangerSpotsMapper.getBasePoints("water_logging"))
) )
); );
log.info("加载暴雨隐患点信息(内涝)并写入redis完成"); log.info("加载隐患点信息(内涝)并写入redis完成");
});
// 地震类隐患点 - 总体
CompletableFuture<Void> earthquakeFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(earthquakeBasePointsKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.EARTHQUAKE.getType(), null))
)
);
log.info("加载地震隐患点信息(总体)并写入redis完成");
});
// 地震类隐患点 - 滑坡
CompletableFuture<Void> earthquakeLandslideFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(earthquakeLandslideKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.EARTHQUAKE.getType(), "landslide"))
)
);
log.info("加载地震隐患点信息(滑坡)并写入redis完成");
});
// 地震类隐患点 - 泥石流
CompletableFuture<Void> earthquakeDebrisFlowFuture = CompletableFuture.runAsync(() -> {
redisTemplate.opsForValue().set(earthquakeDebrisFlowKey, JSON.toJSONString(
XianHiddenDangerSpotsBasePointVo.entity2Vo(
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.EARTHQUAKE.getType(), "debris_flow"))
)
);
log.info("加载地震隐患点信息(泥石流)并写入redis完成");
}); });
CompletableFuture<Void> riskFuture = CompletableFuture.runAsync(() -> { CompletableFuture<Void> riskFuture = CompletableFuture.runAsync(() -> {
@@ -290,9 +250,8 @@ public class InitializeData {
// 等待所有任务完成 // 等待所有任务完成
CompletableFuture.allOf( CompletableFuture.allOf(
rainstormFuture, rainstormLandslideFuture, rainstormDebrisFlowFuture, allFuture, landslideFuture, debrisFlowFuture,
rainstormMountainFloodFuture, rainstormWaterLoggingFuture, flashFloodFuture, waterLoggingFuture,
earthquakeFuture, earthquakeLandslideFuture, earthquakeDebrisFlowFuture,
riskFuture, hospitalsFuture, riskFuture, hospitalsFuture,
dangerousSourceFuture, emergencyShelterFuture, firefighterFuture, storePointsFuture, schoolFuture, dangerousSourceFuture, emergencyShelterFuture, firefighterFuture, storePointsFuture, schoolFuture,
bridgeFuture, reservoirFuture, subwayFuture bridgeFuture, reservoirFuture, subwayFuture
@@ -30,12 +30,7 @@
SELECT id, disaster_name, lon, lat, disaster_type FROM xian_hidden_danger_spots SELECT id, disaster_name, lon, lat, disaster_type FROM xian_hidden_danger_spots
<where> <where>
is_delete = 0 is_delete = 0
<if test="type != null and type == 'rainstorm'">
AND disaster_type IN('滑坡', '泥石流', '山洪', '内涝') AND disaster_type IN('滑坡', '泥石流', '山洪', '内涝')
</if>
<if test="type != null and type == 'earthquake'">
AND disaster_type IN('滑坡', '泥石流')
</if>
<if test="disasterType != null and disasterType != ''"> <if test="disasterType != null and disasterType != ''">
<choose> <choose>
<when test="disasterType == 'landslide'"> <when test="disasterType == 'landslide'">
@@ -11,14 +11,11 @@ init:
# 基础信息点数据:滑坡、泥石流、山洪、内涝 # 基础信息点数据:滑坡、泥石流、山洪、内涝
base-points: base-points:
hidden-danger: hidden-danger:
rainstorm: 'xian:init:data:base-points:hidden-danger:rainstorm' all: 'xian:init:data:base-points:hidden-danger:all'
rainstorm-landslide: 'xian:init:data:base-points:hidden-danger:rainstorm:landslide' landslide: 'xian:init:data:base-points:hidden-danger:landslide'
rainstorm-debris-flow: 'xian:init:data:base-points:hidden-danger:rainstorm:debris_flow' debris-flow: 'xian:init:data:base-points:hidden-danger:debris_flow'
rainstorm-flash-flood: 'xian:init:data:base-points:hidden-danger:rainstorm:flash_flood' flash-flood: 'xian:init:data:base-points:hidden-danger:flash_flood'
rainstorm-water-logging: 'xian:init:data:base-points:hidden-danger:rainstorm:water_logging' water-logging: 'xian:init:data:base-points:hidden-danger:water_logging'
earthquake: 'xian:init:data:base-points:hidden-danger:earthquake'
earthquake-landslide: 'xian:init:data:base-points:hidden-danger:earthquake:landslide'
earthquake-debris-flow: 'xian:init:data:base-points:hidden-danger:earthquake:debris_flow'
risk: 'xian:init:data:base-points:risk' risk: 'xian:init:data:base-points:risk'
hospitals: 'xian:init:data:base-points:hospitals' hospitals: 'xian:init:data:base-points:hospitals'
dangerous-source: 'xian:init:data:base-points:dangerous-source' dangerous-source: 'xian:init:data:base-points:dangerous-source'