diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java index 01049a2b..5e6009f3 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java @@ -96,7 +96,7 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl points = regionDto.getPoints(); - if (points != null && !points.isEmpty()) { - updatePoints(points, operationRegionId, regionDto.getSiteRegionId()); - } + updatePoints(points, operationRegionId, regionDto.getSiteRegionId(), regionDto.getSiteType(), oldSiteType); delImages(regionDto.getSiteRegionId()); List imageIds = regionDto.getImageIds(); if (imageIds != null && !imageIds.isEmpty()) { @@ -195,7 +199,7 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl points, Long areaId, Long siteRegionId) { + void savePoints(List points, Long areaId, Long siteRegionId, int siteType) { List list = new ArrayList<>(); List vertices = new ArrayList<>(); for (int i = 0; i < points.size(); i++) { @@ -210,13 +214,15 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl points, Long areaId, Long siteRegionId) { + void updatePoints(List points, Long areaId, Long siteRegionId, int siteType, int oldSiteType) { List list = new ArrayList<>(); List vertices = new ArrayList<>(); for (int i = 0; i < points.size(); i++) { @@ -231,7 +237,13 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl vertices) { + Point point = calculateCentroid(vertices); + redisTemplate.opsForGeo().add(siteKey+areaId, point, regionId); + addSiteAreaMeta(areaId,regionId,vertices); + } + + /** + * 删除站点 + * + */ + public void delSiteArea(Long orgId,Long regionId) { + redisTemplate.opsForGeo().remove(siteKey+orgId,regionId); + delSiteAreaMeta(orgId,regionId); + } + + public void delSiteAreaMeta(Long orgId,Long regionId) { + redisTemplate.opsForHash().delete("site_area:meta:" + orgId, "vertices"+regionId); + redisTemplate.opsForHash().delete("site_area:meta:" + orgId, "mbr"+regionId); + } + + public void addSiteAreaMeta(Long areaId,Long regionId, List vertices) { + + // 计算 MBR + double[] mbr = calculateMBR(vertices); + String mbrStr = String.format("%f %f %f %f", mbr[0], mbr[1], mbr[2], mbr[3]); + + // 序列化顶点 + String verticesStr = vertices.stream() + .map(c -> c.x + " " + c.y) + .collect(Collectors.joining(",")); + + // 存储到 Hash + redisTemplate.opsForHash().put("site_area:meta:" + areaId, "vertices"+regionId, verticesStr); + redisTemplate.opsForHash().put("site_area:meta:" + areaId, "mbr"+regionId, mbrStr); + } + /** * 添加圆形停车区地理位置 *