From 26c2c4a5b91a90837ba1076c85adf1db65d254da Mon Sep 17 00:00:00 2001 From: wzy-warehouse <18135009705@163.com> Date: Fri, 17 Apr 2026 17:24:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E9=99=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/XianHospitalsController.java | 24 +++++ .../gis/xian/mapper/XianHospitalsMapper.java | 13 +++ .../xian/service/XianHospitalsService.java | 18 ++++ .../impl/IXianHospitalsServiceImpl.java | 40 ++++++++ .../com/gis/xian/task/InitializeData.java | 15 +++ .../gis/xian/vo/XianHospitalsBasePointVo.java | 59 +++++++++++ .../xian/vo/XianHospitalsPointDetailVo.java | 99 +++++++++++++++++++ .../gis/xian/mapper/XianHospitalsMapper.xml | 14 +++ src/main/resources/config/redis/redis-key.yml | 3 +- 9 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gis/xian/vo/XianHospitalsBasePointVo.java create mode 100644 src/main/java/com/gis/xian/vo/XianHospitalsPointDetailVo.java diff --git a/src/main/java/com/gis/xian/controller/XianHospitalsController.java b/src/main/java/com/gis/xian/controller/XianHospitalsController.java index 88e48fd..e631d1a 100644 --- a/src/main/java/com/gis/xian/controller/XianHospitalsController.java +++ b/src/main/java/com/gis/xian/controller/XianHospitalsController.java @@ -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> getBasePoints() { + return ApiResponse.ok(xianHospitalsService.getBasePoints()); + } + + @GetMapping("/point-detail/{id}") + public ApiResponse getPointDetailById(@PathVariable String id) { + return ApiResponse.ok(xianHospitalsService.getPointDetailById(Long.parseLong(id))); + } } diff --git a/src/main/java/com/gis/xian/mapper/XianHospitalsMapper.java b/src/main/java/com/gis/xian/mapper/XianHospitalsMapper.java index 01f8322..f72f632 100644 --- a/src/main/java/com/gis/xian/mapper/XianHospitalsMapper.java +++ b/src/main/java/com/gis/xian/mapper/XianHospitalsMapper.java @@ -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 getBasePoints(); + /** + * 根据id获取医院详情 + * @param id 医院id + * @return 医院详情 + */ + XianHospitals getPointDetailById(Long id); } diff --git a/src/main/java/com/gis/xian/service/XianHospitalsService.java b/src/main/java/com/gis/xian/service/XianHospitalsService.java index 5ecc7dc..ba944a5 100644 --- a/src/main/java/com/gis/xian/service/XianHospitalsService.java +++ b/src/main/java/com/gis/xian/service/XianHospitalsService.java @@ -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 getBasePoints(); + + /** + * 根据id获取医院详情 + * @param id 医院id + * @return 医院详情 + */ + XianHospitalsPointDetailVo getPointDetailById(Long id); } diff --git a/src/main/java/com/gis/xian/service/impl/IXianHospitalsServiceImpl.java b/src/main/java/com/gis/xian/service/impl/IXianHospitalsServiceImpl.java index 14f3288..cb2db09 100644 --- a/src/main/java/com/gis/xian/service/impl/IXianHospitalsServiceImpl.java +++ b/src/main/java/com/gis/xian/service/impl/IXianHospitalsServiceImpl.java @@ -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 redisTemplate; + + @Resource + private XianHospitalsMapper xianHospitalsMapper; + + @Value("${init.data.base-points.hospitals}") + private String hospitalsBasePointsKey; + + @Override + public List getBasePoints() { + // 从redis中读取基础点信息 + Object data = redisTemplate.opsForValue().get(hospitalsBasePointsKey); + + if (data == null) { + List 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)); + } } diff --git a/src/main/java/com/gis/xian/task/InitializeData.java b/src/main/java/com/gis/xian/task/InitializeData.java index d4358a5..da2be65 100644 --- a/src/main/java/com/gis/xian/task/InitializeData.java +++ b/src/main/java/com/gis/xian/task/InitializeData.java @@ -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 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("初始化数据完成"); } } diff --git a/src/main/java/com/gis/xian/vo/XianHospitalsBasePointVo.java b/src/main/java/com/gis/xian/vo/XianHospitalsBasePointVo.java new file mode 100644 index 0000000..9149661 --- /dev/null +++ b/src/main/java/com/gis/xian/vo/XianHospitalsBasePointVo.java @@ -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 entity2Vo(List entityList) { + List 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); + } +} diff --git a/src/main/java/com/gis/xian/vo/XianHospitalsPointDetailVo.java b/src/main/java/com/gis/xian/vo/XianHospitalsPointDetailVo.java new file mode 100644 index 0000000..0c21d5c --- /dev/null +++ b/src/main/java/com/gis/xian/vo/XianHospitalsPointDetailVo.java @@ -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 entity2Vo(List entityList) { + List 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); + } +} diff --git a/src/main/resources/com/gis/xian/mapper/XianHospitalsMapper.xml b/src/main/resources/com/gis/xian/mapper/XianHospitalsMapper.xml index 4290ce2..eb9a782 100644 --- a/src/main/resources/com/gis/xian/mapper/XianHospitalsMapper.xml +++ b/src/main/resources/com/gis/xian/mapper/XianHospitalsMapper.xml @@ -70,5 +70,19 @@ + + + + diff --git a/src/main/resources/config/redis/redis-key.yml b/src/main/resources/config/redis/redis-key.yml index 6cd86aa..186b730 100644 --- a/src/main/resources/config/redis/redis-key.yml +++ b/src/main/resources/config/redis/redis-key.yml @@ -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' \ No newline at end of file + risk: 'xian:init:data:base-points:risk' + hospitals: 'xian:init:data:base-points:hospitals' \ No newline at end of file