运营区删除:redisGeo数据清空

This commit is contained in:
attiya 2025-05-13 14:33:16 +08:00
parent ca2c32462e
commit 081dc26d85
2 changed files with 50 additions and 0 deletions

View File

@ -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<EbikeOperationR
@Override
public void delOperation(ReqBatchRegionDto delRegionDto) {
List<EbikeOperationRegion> 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());
}

View File

@ -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<String> 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<Long> ids) {
List<String> parkingKeyList = new ArrayList<>();
List<String> siteKeyList = new ArrayList<>();
List<String> parkingAreaKeyList = new ArrayList<>();
List<String> 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);
}
}