This commit is contained in:
wzy-warehouse
2026-04-17 17:24:54 +08:00
parent 71209c1fca
commit 26c2c4a5b9
9 changed files with 284 additions and 1 deletions
@@ -1,4 +1,28 @@
package com.gis.xian.controller;
import com.gis.xian.domain.ApiResponse;
import com.gis.xian.vo.XianHospitalsBasePointVo;
import com.gis.xian.vo.XianHospitalsPointDetailVo;
import com.gis.xian.service.XianHospitalsService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/hospitals")
public class XianHospitalsController extends BaseController{
@Resource
private XianHospitalsService xianHospitalsService;
@GetMapping("/base-points")
public ApiResponse<List<XianHospitalsBasePointVo>> getBasePoints() {
return ApiResponse.ok(xianHospitalsService.getBasePoints());
}
@GetMapping("/point-detail/{id}")
public ApiResponse<XianHospitalsPointDetailVo> getPointDetailById(@PathVariable String id) {
return ApiResponse.ok(xianHospitalsService.getPointDetailById(Long.parseLong(id)));
}
}
@@ -2,6 +2,8 @@ package com.gis.xian.mapper;
import com.gis.xian.entity.XianHospitals;
import java.util.List;
/**
* @author wzy
* @description 针对表【xian_hospitals(医院医疗机构)】的数据库操作Mapper
@@ -9,7 +11,18 @@ import com.gis.xian.entity.XianHospitals;
* @Entity com.gis.xian.entity.XianHospitals
*/
public interface XianHospitalsMapper {
/**
* 获取所有医院基础点
* @return 基础点列表
*/
List<XianHospitals> getBasePoints();
/**
* 根据id获取医院详情
* @param id 医院id
* @return 医院详情
*/
XianHospitals getPointDetailById(Long id);
}
@@ -1,4 +1,22 @@
package com.gis.xian.service;
import com.gis.xian.vo.XianHospitalsBasePointVo;
import com.gis.xian.vo.XianHospitalsPointDetailVo;
import java.util.List;
public interface XianHospitalsService {
/**
* 获取所有医院基础点
* @return 基础点列表
*/
List<XianHospitalsBasePointVo> getBasePoints();
/**
* 根据id获取医院详情
* @param id 医院id
* @return 医院详情
*/
XianHospitalsPointDetailVo getPointDetailById(Long id);
}
@@ -1,6 +1,46 @@
package com.gis.xian.service.impl;
import com.alibaba.fastjson2.JSON;
import com.gis.xian.entity.XianHospitals;
import com.gis.xian.vo.XianHospitalsBasePointVo;
import com.gis.xian.vo.XianHospitalsPointDetailVo;
import com.gis.xian.mapper.XianHospitalsMapper;
import com.gis.xian.service.XianHospitalsService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class IXianHospitalsServiceImpl implements XianHospitalsService {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Resource
private XianHospitalsMapper xianHospitalsMapper;
@Value("${init.data.base-points.hospitals}")
private String hospitalsBasePointsKey;
@Override
public List<XianHospitalsBasePointVo> getBasePoints() {
// 从redis中读取基础点信息
Object data = redisTemplate.opsForValue().get(hospitalsBasePointsKey);
if (data == null) {
List<XianHospitalsBasePointVo> basePoints = XianHospitalsBasePointVo.entity2Vo(xianHospitalsMapper.getBasePoints());
redisTemplate.opsForValue().set(hospitalsBasePointsKey, JSON.toJSONString(basePoints));
return basePoints;
}
return JSON.parseArray(data.toString(), XianHospitalsBasePointVo.class);
}
@Override
public XianHospitalsPointDetailVo getPointDetailById(Long id) {
return XianHospitalsPointDetailVo.entity2Vo(xianHospitalsMapper.getPointDetailById(id));
}
}
@@ -3,8 +3,10 @@ package com.gis.xian.task;
import com.alibaba.fastjson2.JSON;
import com.gis.xian.enums.DisasterTypeEnum;
import com.gis.xian.mapper.XianHiddenDangerSpotsMapper;
import com.gis.xian.mapper.XianHospitalsMapper;
import com.gis.xian.mapper.XianRiskSpotsMapper;
import com.gis.xian.vo.XianHiddenDangerSpotsBasePointVo;
import com.gis.xian.vo.XianHospitalsBasePointVo;
import com.gis.xian.vo.XianRiskSpotsBasePointVo;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
@@ -27,6 +29,9 @@ public class InitializeData {
@Resource
private XianRiskSpotsMapper xianRiskSpotsMapper;
@Resource
private XianHospitalsMapper xianHospitalsMapper;
@Resource
RedisTemplate<String, Object> redisTemplate;
@@ -39,6 +44,9 @@ public class InitializeData {
@Value("${init.data.base-points.risk}")
private String riskBasePointsKey;
@Value("${init.data.base-points.hospitals}")
private String hospitalsBasePointsKey;
@PostConstruct
@Async("xianPool")
public void init() {
@@ -62,6 +70,13 @@ public class InitializeData {
xianRiskSpotsMapper.getBasePoints())
)
);
// 加载医院基本信息写入redis
redisTemplate.opsForValue().set(hospitalsBasePointsKey, JSON.toJSONString(
XianHospitalsBasePointVo.entity2Vo(
xianHospitalsMapper.getBasePoints())
)
);
log.info("初始化数据完成");
}
}
@@ -0,0 +1,59 @@
package com.gis.xian.vo;
import com.gis.xian.entity.XianHospitals;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 医院-基本点信息
* @TableName xian_hospitals
*/
@Data
public class XianHospitalsBasePointVo {
/**
* id
*/
private Long id;
/**
* 经度
*/
private Double lon;
/**
* 纬度
*/
private Double lat;
public static XianHospitalsBasePointVo entity2Vo(XianHospitals entity) {
XianHospitalsBasePointVo vo = new XianHospitalsBasePointVo();
vo.setId(entity.getId());
vo.setLon(entity.getLon() != null ? entity.getLon().doubleValue() : null);
vo.setLat(entity.getLat() != null ? entity.getLat().doubleValue() : null);
return vo;
}
public static List<XianHospitalsBasePointVo> entity2Vo(List<XianHospitals> entityList) {
List<XianHospitalsBasePointVo> voList = new ArrayList<>();
for (XianHospitals entity : entityList) {
voList.add(entity2Vo(entity));
}
return voList;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
XianHospitalsBasePointVo that = (XianHospitalsBasePointVo) o;
return Objects.equals(id, that.id) && Objects.equals(lon, that.lon) && Objects.equals(lat, that.lat);
}
@Override
public int hashCode() {
return Objects.hash(id, lon, lat);
}
}
@@ -0,0 +1,99 @@
package com.gis.xian.vo;
import com.gis.xian.entity.XianHospitals;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 医院-详细信息
* @TableName xian_hospitals
*/
@Data
public class XianHospitalsPointDetailVo {
/**
* id
*/
private Long id;
/**
* 医院名称
*/
private String name;
/**
* 医院等级
*/
private String level;
/**
* 详细地址
*/
private String address;
/**
* 经度
*/
private Double lon;
/**
* 纬度
*/
private Double lat;
/**
* 年度总诊疗人数
*/
private Integer sumPeople;
/**
* 单位负责人
*/
private String unitHead;
/**
* 联系电话
*/
private String telephone;
public static XianHospitalsPointDetailVo entity2Vo(XianHospitals entity) {
XianHospitalsPointDetailVo vo = new XianHospitalsPointDetailVo();
vo.setId(entity.getId());
vo.setName(entity.getName());
vo.setLevel(entity.getLevel());
vo.setAddress(entity.getAddress());
vo.setLon(entity.getLon() != null ? entity.getLon().doubleValue() : null);
vo.setLat(entity.getLat() != null ? entity.getLat().doubleValue() : null);
vo.setSumPeople(entity.getSumPeople());
vo.setUnitHead(entity.getUnitHead());
vo.setTelephone(entity.getTelephone());
return vo;
}
public static List<XianHospitalsPointDetailVo> entity2Vo(List<XianHospitals> entityList) {
List<XianHospitalsPointDetailVo> voList = new ArrayList<>();
for (XianHospitals entity : entityList) {
voList.add(entity2Vo(entity));
}
return voList;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
XianHospitalsPointDetailVo that = (XianHospitalsPointDetailVo) o;
return Objects.equals(id, that.id) && Objects.equals(name, that.name)
&& Objects.equals(level, that.level) && Objects.equals(address, that.address)
&& Objects.equals(lon, that.lon) && Objects.equals(lat, that.lat)
&& Objects.equals(sumPeople, that.sumPeople) && Objects.equals(unitHead, that.unitHead)
&& Objects.equals(telephone, that.telephone);
}
@Override
public int hashCode() {
return Objects.hash(id, name, level, address, lon, lat, sumPeople, unitHead, telephone);
}
}
@@ -70,5 +70,19 @@
<result property="isDelete" column="is_delete" />
</resultMap>
<!-- 获取所有医院基础点 -->
<select id="getBasePoints" resultMap="BaseResultMap">
SELECT id, lon, lat FROM xian_hospitals
<where>
is_delete = 0
</where>
</select>
<!-- 根据id获取医院详情 -->
<select id="getPointDetailById" resultMap="BaseResultMap">
SELECT id, name, level, address, lon, lat, sum_people, unit_head, telephone FROM xian_hospitals
<where>
id = #{id} AND is_delete = 0
</where>
</select>
</mapper>
@@ -13,4 +13,5 @@ init:
hidden-danger:
rainstorm: 'xian:init:data:base-points:hidden-danger:rainstorm'
earthquake: 'xian:init:data:base-points:hidden-danger:earthquake'
risk: 'xian:init:data:base-points:risk'
risk: 'xian:init:data:base-points:risk'
hospitals: 'xian:init:data:base-points:hospitals'