细化隐患点类型
This commit is contained in:
@@ -17,8 +17,10 @@ public class XianHiddenDangerSpotsController extends BaseController{
|
|||||||
private XianHiddenDangerSpotsService xianHiddenDangerSpotsService;
|
private XianHiddenDangerSpotsService xianHiddenDangerSpotsService;
|
||||||
|
|
||||||
@GetMapping("/base-points")
|
@GetMapping("/base-points")
|
||||||
public ApiResponse<List<XianHiddenDangerSpotsBasePointVo>> getBasePoints(@RequestParam String disasterType) {
|
public ApiResponse<List<XianHiddenDangerSpotsBasePointVo>> getBasePoints(
|
||||||
return ApiResponse.ok(xianHiddenDangerSpotsService.getBasePoints(disasterType));
|
@RequestParam String type,
|
||||||
|
@RequestParam(required = false) String disasterType) {
|
||||||
|
return ApiResponse.ok(xianHiddenDangerSpotsService.getBasePoints(type, disasterType));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("point-detail/{id}")
|
@GetMapping("point-detail/{id}")
|
||||||
|
|||||||
@@ -4,12 +4,33 @@ import lombok.Getter;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public enum DisasterTypeEnum {
|
public enum DisasterTypeEnum {
|
||||||
RAINSTORM("rainstorm"),
|
// 第一级:灾害大类
|
||||||
EARTHQUAKE("earthquake");
|
RAINSTORM("rainstorm", "暴雨"),
|
||||||
|
EARTHQUAKE("earthquake", "地震"),
|
||||||
|
|
||||||
|
// 第二级:具体灾害类型(暴雨类)
|
||||||
|
LANDSLIDE("landslide", "滑坡"),
|
||||||
|
DEBRIS_FLOW("debris_flow", "泥石流"),
|
||||||
|
FLASH_FLOOD("flash_flood", "山洪"),
|
||||||
|
WATER_LOGGING("water_logging", "内涝");
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
|
private final String description;
|
||||||
|
|
||||||
DisasterTypeEnum(String type) {
|
DisasterTypeEnum(String type, String description) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据type获取枚举
|
||||||
|
*/
|
||||||
|
public static DisasterTypeEnum getByType(String type) {
|
||||||
|
for (DisasterTypeEnum e : values()) {
|
||||||
|
if (e.getType().equals(type)) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,11 @@ import java.util.List;
|
|||||||
public interface XianHiddenDangerSpotsMapper {
|
public interface XianHiddenDangerSpotsMapper {
|
||||||
/**
|
/**
|
||||||
* 获取所有基础点:滑坡、泥石流、山洪、内涝
|
* 获取所有基础点:滑坡、泥石流、山洪、内涝
|
||||||
|
* @param type 灾害大类(rainstorm-暴雨, earthquake-地震)
|
||||||
|
* @param disasterType 具体灾害类型(landslide-滑坡, debris_flow-泥石流, flash_flood-山洪, water_logging-内涝),可选
|
||||||
* @return 基础点列表
|
* @return 基础点列表
|
||||||
*/
|
*/
|
||||||
List<XianHiddenDangerSpots> getBasePoints(String disasterType);
|
List<XianHiddenDangerSpots> getBasePoints(String type, String disasterType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据id获取隐患点详情
|
* 根据id获取隐患点详情
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ public interface XianHiddenDangerSpotsService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所有基础点:滑坡、泥石流、山洪、内涝
|
* 获取所有基础点:滑坡、泥石流、山洪、内涝
|
||||||
|
* @param type 灾害大类(rainstorm-暴雨, earthquake-地震)
|
||||||
|
* @param disasterType 具体灾害类型(landslide-滑坡, debris_flow-泥石流, flash_flood-山洪, water_logging-内涝),可选
|
||||||
* @return 基础点列表
|
* @return 基础点列表
|
||||||
*/
|
*/
|
||||||
List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String disasterType);
|
List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String type, String disasterType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据id获取隐患点详情
|
* 根据id获取隐患点详情
|
||||||
|
|||||||
@@ -26,34 +26,85 @@ public class IXianHiddenDangerSpotsServiceImpl implements XianHiddenDangerSpotsS
|
|||||||
@Value("${init.data.base-points.hidden-danger.rainstorm}")
|
@Value("${init.data.base-points.hidden-danger.rainstorm}")
|
||||||
private String rainstormBasePointsKey;
|
private String rainstormBasePointsKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-landslide}")
|
||||||
|
private String rainstormLandslideKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-debris-flow}")
|
||||||
|
private String rainstormDebrisFlowKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-flash-flood}")
|
||||||
|
private String rainstormMountainFloodKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-water-logging}")
|
||||||
|
private String rainstormWaterLoggingKey;
|
||||||
|
|
||||||
@Value("${init.data.base-points.hidden-danger.earthquake}")
|
@Value("${init.data.base-points.hidden-danger.earthquake}")
|
||||||
private String earthquakeBasePointsKey;
|
private String earthquakeBasePointsKey;
|
||||||
|
|
||||||
@Override
|
@Value("${init.data.base-points.hidden-danger.earthquake-landslide}")
|
||||||
public List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String disasterType) {
|
private String earthquakeLandslideKey;
|
||||||
// 从redis中读取基础点信息
|
|
||||||
Object data = null;
|
|
||||||
|
|
||||||
if(DisasterTypeEnum.RAINSTORM.getType().equals(disasterType)) {
|
@Value("${init.data.base-points.hidden-danger.earthquake-debris-flow}")
|
||||||
data = redisTemplate.opsForValue().get(rainstormBasePointsKey);
|
private String earthquakeDebrisFlowKey;
|
||||||
}else {
|
|
||||||
data = redisTemplate.opsForValue().get(earthquakeBasePointsKey);
|
@Override
|
||||||
}
|
public List<XianHiddenDangerSpotsBasePointVo> getBasePoints(String type, String disasterType) {
|
||||||
|
// 构建Redis key
|
||||||
|
String redisKey = buildRedisKey(type, disasterType);
|
||||||
|
|
||||||
|
// 从redis中读取基础点信息
|
||||||
|
Object data = redisTemplate.opsForValue().get(redisKey);
|
||||||
|
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
List<XianHiddenDangerSpotsBasePointVo> basePoints = XianHiddenDangerSpotsBasePointVo.entity2Vo(xianHiddenDangerSpotsMapper.getBasePoints(disasterType));
|
// 从数据库查询
|
||||||
|
List<XianHiddenDangerSpotsBasePointVo> basePoints =
|
||||||
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(xianHiddenDangerSpotsMapper.getBasePoints(type, disasterType));
|
||||||
|
|
||||||
if(DisasterTypeEnum.RAINSTORM.getType().equals(disasterType)) {
|
// 存入Redis
|
||||||
redisTemplate.opsForValue().set(rainstormBasePointsKey, JSON.toJSONString(basePoints));
|
redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(basePoints));
|
||||||
}else {
|
|
||||||
redisTemplate.opsForValue().set(earthquakeBasePointsKey, JSON.toJSONString(basePoints));
|
|
||||||
}
|
|
||||||
return basePoints;
|
return basePoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
return JSON.parseArray(data.toString(), XianHiddenDangerSpotsBasePointVo.class);
|
return JSON.parseArray(data.toString(), XianHiddenDangerSpotsBasePointVo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据type和disasterType构建Redis key
|
||||||
|
*/
|
||||||
|
private String buildRedisKey(String type, String disasterType) {
|
||||||
|
if (DisasterTypeEnum.RAINSTORM.getType().equals(type)) {
|
||||||
|
if (disasterType == null || disasterType.isEmpty()) {
|
||||||
|
return rainstormBasePointsKey;
|
||||||
|
}
|
||||||
|
switch (disasterType) {
|
||||||
|
case "landslide":
|
||||||
|
return rainstormLandslideKey;
|
||||||
|
case "debris_flow":
|
||||||
|
return rainstormDebrisFlowKey;
|
||||||
|
case "flash_flood":
|
||||||
|
return rainstormMountainFloodKey;
|
||||||
|
case "waterlogging":
|
||||||
|
return rainstormWaterLoggingKey;
|
||||||
|
default:
|
||||||
|
return rainstormBasePointsKey;
|
||||||
|
}
|
||||||
|
} 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
|
||||||
public XianHiddenDangerSpotsPointDetailVo getPointDetailById(Long id) {
|
public XianHiddenDangerSpotsPointDetailVo getPointDetailById(Long id) {
|
||||||
return XianHiddenDangerSpotsPointDetailVo.entity2Vo(xianHiddenDangerSpotsMapper.getPointDetailById(id));
|
return XianHiddenDangerSpotsPointDetailVo.entity2Vo(xianHiddenDangerSpotsMapper.getPointDetailById(id));
|
||||||
|
|||||||
@@ -61,9 +61,27 @@ public class InitializeData {
|
|||||||
@Value("${init.data.base-points.hidden-danger.rainstorm}")
|
@Value("${init.data.base-points.hidden-danger.rainstorm}")
|
||||||
private String rainstormBasePointsKey;
|
private String rainstormBasePointsKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-landslide}")
|
||||||
|
private String rainstormLandslideKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-debris-flow}")
|
||||||
|
private String rainstormDebrisFlowKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-flash-flood}")
|
||||||
|
private String rainstormMountainFloodKey;
|
||||||
|
|
||||||
|
@Value("${init.data.base-points.hidden-danger.rainstorm-water-logging}")
|
||||||
|
private String rainstormWaterLoggingKey;
|
||||||
|
|
||||||
@Value("${init.data.base-points.hidden-danger.earthquake}")
|
@Value("${init.data.base-points.hidden-danger.earthquake}")
|
||||||
private String earthquakeBasePointsKey;
|
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;
|
||||||
|
|
||||||
@@ -99,22 +117,85 @@ public class InitializeData {
|
|||||||
public void init() {
|
public void init() {
|
||||||
log.info("开始初始化数据");
|
log.info("开始初始化数据");
|
||||||
// 并行执行所有数据库查询和Redis写入
|
// 并行执行所有数据库查询和Redis写入
|
||||||
|
|
||||||
|
// 暴雨类隐患点 - 总体
|
||||||
CompletableFuture<Void> rainstormFuture = CompletableFuture.runAsync(() -> {
|
CompletableFuture<Void> rainstormFuture = CompletableFuture.runAsync(() -> {
|
||||||
redisTemplate.opsForValue().set(rainstormBasePointsKey, JSON.toJSONString(
|
redisTemplate.opsForValue().set(rainstormBasePointsKey, JSON.toJSONString(
|
||||||
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
||||||
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType()))
|
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), null))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
log.info("加载暴雨隐患点信息并写入redis完成");
|
log.info("加载暴雨隐患点信息(总体)并写入redis完成");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 暴雨类隐患点 - 滑坡
|
||||||
|
CompletableFuture<Void> rainstormLandslideFuture = CompletableFuture.runAsync(() -> {
|
||||||
|
redisTemplate.opsForValue().set(rainstormLandslideKey, JSON.toJSONString(
|
||||||
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
||||||
|
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "landslide"))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
log.info("加载暴雨隐患点信息(滑坡)并写入redis完成");
|
||||||
|
});
|
||||||
|
|
||||||
|
// 暴雨类隐患点 - 泥石流
|
||||||
|
CompletableFuture<Void> rainstormDebrisFlowFuture = CompletableFuture.runAsync(() -> {
|
||||||
|
redisTemplate.opsForValue().set(rainstormDebrisFlowKey, JSON.toJSONString(
|
||||||
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
||||||
|
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "debris_flow"))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
log.info("加载暴雨隐患点信息(泥石流)并写入redis完成");
|
||||||
|
});
|
||||||
|
|
||||||
|
// 暴雨类隐患点 - 山洪
|
||||||
|
CompletableFuture<Void> rainstormMountainFloodFuture = CompletableFuture.runAsync(() -> {
|
||||||
|
redisTemplate.opsForValue().set(rainstormMountainFloodKey, JSON.toJSONString(
|
||||||
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
||||||
|
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "flash_flood"))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
log.info("加载暴雨隐患点信息(山洪)并写入redis完成");
|
||||||
|
});
|
||||||
|
|
||||||
|
// 暴雨类隐患点 - 内涝
|
||||||
|
CompletableFuture<Void> rainstormWaterLoggingFuture = CompletableFuture.runAsync(() -> {
|
||||||
|
redisTemplate.opsForValue().set(rainstormWaterLoggingKey, JSON.toJSONString(
|
||||||
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
||||||
|
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.RAINSTORM.getType(), "water_logging"))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
log.info("加载暴雨隐患点信息(内涝)并写入redis完成");
|
||||||
|
});
|
||||||
|
|
||||||
|
// 地震类隐患点 - 总体
|
||||||
CompletableFuture<Void> earthquakeFuture = CompletableFuture.runAsync(() -> {
|
CompletableFuture<Void> earthquakeFuture = CompletableFuture.runAsync(() -> {
|
||||||
redisTemplate.opsForValue().set(earthquakeBasePointsKey, JSON.toJSONString(
|
redisTemplate.opsForValue().set(earthquakeBasePointsKey, JSON.toJSONString(
|
||||||
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
XianHiddenDangerSpotsBasePointVo.entity2Vo(
|
||||||
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.EARTHQUAKE.getType()))
|
xianHiddenDangerSpotsMapper.getBasePoints(DisasterTypeEnum.EARTHQUAKE.getType(), null))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
log.info("加载地震隐患点信息并写入redis完成");
|
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(() -> {
|
||||||
@@ -209,7 +290,10 @@ public class InitializeData {
|
|||||||
|
|
||||||
// 等待所有任务完成
|
// 等待所有任务完成
|
||||||
CompletableFuture.allOf(
|
CompletableFuture.allOf(
|
||||||
rainstormFuture, earthquakeFuture, riskFuture, hospitalsFuture,
|
rainstormFuture, rainstormLandslideFuture, rainstormDebrisFlowFuture,
|
||||||
|
rainstormMountainFloodFuture, rainstormWaterLoggingFuture,
|
||||||
|
earthquakeFuture, earthquakeLandslideFuture, earthquakeDebrisFlowFuture,
|
||||||
|
riskFuture, hospitalsFuture,
|
||||||
dangerousSourceFuture, emergencyShelterFuture, firefighterFuture, storePointsFuture, schoolFuture,
|
dangerousSourceFuture, emergencyShelterFuture, firefighterFuture, storePointsFuture, schoolFuture,
|
||||||
bridgeFuture, reservoirFuture, subwayFuture
|
bridgeFuture, reservoirFuture, subwayFuture
|
||||||
).join();
|
).join();
|
||||||
|
|||||||
@@ -29,15 +29,29 @@
|
|||||||
<select id="getBasePoints" resultMap="XianHiddenDangerSpotsResultMap">
|
<select id="getBasePoints" resultMap="XianHiddenDangerSpotsResultMap">
|
||||||
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
|
||||||
|
<if test="type != null and type == 'rainstorm'">
|
||||||
|
AND disaster_type IN('滑坡', '泥石流', '山洪', '内涝')
|
||||||
|
</if>
|
||||||
|
<if test="type != null and type == 'earthquake'">
|
||||||
|
AND disaster_type IN('滑坡', '泥石流')
|
||||||
|
</if>
|
||||||
|
<if test="disasterType != null and disasterType != ''">
|
||||||
<choose>
|
<choose>
|
||||||
<when test='disasterType == "rainstorm"'>
|
<when test="disasterType == 'landslide'">
|
||||||
disaster_type IN('滑坡', '泥石流', '山洪', '内涝')
|
AND disaster_type = '滑坡'
|
||||||
|
</when>
|
||||||
|
<when test="disasterType == 'debris_flow'">
|
||||||
|
AND disaster_type = '泥石流'
|
||||||
|
</when>
|
||||||
|
<when test="disasterType == 'flash_flood'">
|
||||||
|
AND disaster_type = '山洪'
|
||||||
|
</when>
|
||||||
|
<when test="disasterType == 'waterlogging'">
|
||||||
|
AND disaster_type = '内涝'
|
||||||
</when>
|
</when>
|
||||||
<otherwise>
|
|
||||||
disaster_type IN('滑坡', '泥石流')
|
|
||||||
</otherwise>
|
|
||||||
</choose>
|
</choose>
|
||||||
AND is_delete = 0
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,13 @@ init:
|
|||||||
base-points:
|
base-points:
|
||||||
hidden-danger:
|
hidden-danger:
|
||||||
rainstorm: 'xian:init:data:base-points:hidden-danger:rainstorm'
|
rainstorm: 'xian:init:data:base-points:hidden-danger:rainstorm'
|
||||||
|
rainstorm-landslide: 'xian:init:data:base-points:hidden-danger:rainstorm:landslide'
|
||||||
|
rainstorm-debris-flow: 'xian:init:data:base-points:hidden-danger:rainstorm:debris_flow'
|
||||||
|
rainstorm-flash-flood: 'xian:init:data:base-points:hidden-danger:rainstorm:flash_flood'
|
||||||
|
rainstorm-water-logging: 'xian:init:data:base-points:hidden-danger:rainstorm:water_logging'
|
||||||
earthquake: 'xian:init:data:base-points:hidden-danger:earthquake'
|
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'
|
||||||
|
|||||||
Reference in New Issue
Block a user