diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeOperationRegionServiceImpl.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeOperationRegionServiceImpl.java index 556f79c7..15908d00 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeOperationRegionServiceImpl.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeOperationRegionServiceImpl.java @@ -47,6 +47,7 @@ import static com.cdzy.ebikeoperate.model.pojo.table.EbikeAdministrationZoneTabl import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION; import static com.cdzy.ebikeoperate.model.pojo.table.EbikePointTableDef.EBIKE_POINT; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL; +import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSiteRegionTableDef.EBIKE_SITE_REGION; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION; /** @@ -135,9 +136,15 @@ public class EbikeOperationRegionServiceImpl extends ServiceImpl ebikeOperationRegions = this.mapper.selectListByIds(delRegionDto.getIds()); + //做不同运营商考虑,通过循环进行删除 ebikeOperationRegions.forEach(region -> delPoints(region.getOrgId(), region.getOperationRegionId()) ); + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_SITE_REGION.OPERATION_REGION_ID.in(delRegionDto.getIds())); + staffRegionMapper.deleteByQuery(queryWrapper); + //站点与运营商解耦仅与运营区有关,做批量删除 + redisUtil.deleteStieByOperationIds(delRegionDto.getIds()); this.mapper.deleteBatchByIds(delRegionDto.getIds()); } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/RedisUtil.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/RedisUtil.java index 4b114a19..511e5a90 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/RedisUtil.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/RedisUtil.java @@ -321,6 +321,32 @@ public class RedisUtil { Polygon polygon = parsePolygonFromWKT(polygonFromWKT); return isPointInPolygon(lng, lat, polygon); } + /** + * 判断坐标点是否在附近站点区内 + * @param lng 经度 + * @param lat 纬度 + * @return true-在内部;false-在外部或边界上(根据业务需求调整) + */ + public Long isPointInSiteWithSiteRegionId(double lng, double lat,Long areaId) { + //查询附近停车区 + List nearbyParking = findNearbyParking(lng, lat,areaId); + if (nearbyParking.isEmpty()) { + return null; + } + //获取第一个大致包含该点位的停车区 + String regionId = checkPointInArea(lng, lat, nearbyParking,areaId); + if (regionId == null) { + return null; + } + //进行更精确的判断 + String polygonFromWKT = getPolygonFromWKT(areaId,regionId,"parking_area:meta:"); + Polygon polygon = parsePolygonFromWKT(polygonFromWKT); + boolean inPolygon = isPointInPolygon(lng, lat, polygon); + if (inPolygon) { + return Long.valueOf(regionId); + } + return null; + } /** * 判断坐标点是否在附近运营区内 @@ -809,4 +835,21 @@ public class RedisUtil { public Boolean releaseLock(String key) { return redisTemplate.delete(key); } + + public void deleteStieByOperationIds(List ids) { + List parkingKeyList = new ArrayList<>(); + List siteKeyList = new ArrayList<>(); + List parkingAreaKeyList = new ArrayList<>(); + List siteAreaKeyList = new ArrayList<>(); + for (Long id : ids) { + parkingKeyList.add(parkingKey+id); + siteKeyList.add(siteKey+id); + parkingAreaKeyList.add("parking_area:meta:"+id); + siteAreaKeyList.add("site_area:meta:"+id); + } + redisTemplate.delete(parkingKeyList); + redisTemplate.delete(siteKeyList); + redisTemplate.delete(parkingAreaKeyList); + redisTemplate.delete(siteAreaKeyList); + } }