From 28f0f696e723d6d87a89f336ca476b6af7c3cc9e Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Fri, 25 Apr 2025 13:56:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BA=E5=9F=9F=EF=BC=9A=E5=81=9C=E8=BD=A6?= =?UTF-8?q?=E5=8C=BA=E3=80=81=E8=90=A5=E8=BF=90=E5=8C=BA=E7=9A=84geo?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EbikeSeversetestApplicationTests.java | 20 ++-- .../controller/EbikeRegionController.java | 13 +-- .../service/EbikeRegionService.java | 13 +++ .../service/impl/EbikeRegionServiceImpl.java | 98 ++++++++++++------- .../cdzy/ebikeoperate/utils/RedisUtil.java | 30 +++++- 5 files changed, 120 insertions(+), 54 deletions(-) diff --git a/ebike-maintenance/src/test/java/com/cdzy/ebikemaintenance/EbikeSeversetestApplicationTests.java b/ebike-maintenance/src/test/java/com/cdzy/ebikemaintenance/EbikeSeversetestApplicationTests.java index 72da2831..e8bf3d5b 100644 --- a/ebike-maintenance/src/test/java/com/cdzy/ebikemaintenance/EbikeSeversetestApplicationTests.java +++ b/ebike-maintenance/src/test/java/com/cdzy/ebikemaintenance/EbikeSeversetestApplicationTests.java @@ -40,9 +40,9 @@ class EbikeSeversetestApplicationTests { @Test void contextLoads() { EbikeCmd cmd = new EbikeCmd(); - cmd.setCmdCode("temp_lock"); - cmd.setCmdName("临时停车"); - cmd.setDescribe("临时停车"); + cmd.setCmdCode("continue_cycling"); + cmd.setCmdName("继续骑行"); + cmd.setDescribe("继续骑行"); cmdMapper.insert(cmd); System.out.println(cmd.getCmdId()); } @@ -50,11 +50,11 @@ class EbikeSeversetestApplicationTests { @Test void addParam() { EbikeParam param = new EbikeParam(); - param.setParamName("stamp"); - param.setCmdId("260237383134347264"); - param.setLevel(1); - param.setValueType(2); -// param.setParentId(260499792692523008L); + param.setParamName("idx"); + param.setCmdId("271826173502169088"); + param.setLevel(2); + param.setValueType(3); + param.setParentId(271827039835688960L); ebikeParamMapper.insert(param); System.out.println(param.getParamId()); } @@ -62,8 +62,8 @@ class EbikeSeversetestApplicationTests { @Test void addParamValue() { EbikeParamValue paramValue = new EbikeParamValue(); - paramValue.setParamValue("84"); - paramValue.setParamId(266754356462866432L); + paramValue.setParamValue("8"); + paramValue.setParamId(271827551599529984L); ebikeParamValueMapper.insert(paramValue); } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java index 6a44a8a2..81d88fe8 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java @@ -123,10 +123,7 @@ public class EbikeRegionController { */ @PostMapping("delOperation") public JsonResult delOperation(@RequestBody @Validated ReqDelRegionDto delRegionDto) { - QueryWrapper queryWrapper = QueryWrapper.create() - .where(EBIKE_REGION.TYPE.eq(EbikeRegionType.OPERATION)) - .where(EBIKE_REGION.REGION_ID.in(delRegionDto.getRegionIds())); - ebikeRegionService.remove(queryWrapper); + ebikeRegionService.delOperation(delRegionDto); return JsonResult.success(); } @@ -231,7 +228,7 @@ public class EbikeRegionController { } /** - * 分页查询站点。 + * 分页查询停车区。 * * @param pageParam 分页参数 * @return {@code 200} 添加成功,{@code 500} 添加失败 @@ -262,11 +259,7 @@ public class EbikeRegionController { */ @PostMapping("delPark") public JsonResult delPark(@RequestBody @Validated ReqDelRegionDto delRegionDto) { - QueryWrapper queryWrapper = QueryWrapper.create() - .where(EBIKE_REGION.TYPE.eq(EbikeRegionType.PARKING)) - .where(EBIKE_REGION.REGION_ID.in(delRegionDto.getRegionIds())); - ebikeRegionService.remove(queryWrapper); - redisUtil.batchDeleteParkingArea(delRegionDto.getRegionIds()); + ebikeRegionService.delPark(delRegionDto); return JsonResult.success(); } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeRegionService.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeRegionService.java index f5ef5ad5..54f634f1 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeRegionService.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeRegionService.java @@ -2,6 +2,7 @@ package com.cdzy.ebikeoperate.service; import com.cdzy.common.model.PageParam; import com.cdzy.ebikeoperate.model.dto.request.ReqAuthorizeOperationDto; +import com.cdzy.ebikeoperate.model.dto.request.ReqDelRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqSaveRegionDto; import com.cdzy.ebikeoperate.model.dto.response.EbikeRegionDto; @@ -95,4 +96,16 @@ public interface EbikeRegionService extends IService { * @param authorizeOperationDto 授权信息 */ void authorizeOperation(ReqAuthorizeOperationDto authorizeOperationDto); + + /** + * 删除运营区 + * @param delRegionDto 信息 + */ + void delOperation(ReqDelRegionDto delRegionDto); + + /** + * 删除停车区 + * @param delRegionDto + */ + void delPark(ReqDelRegionDto delRegionDto); } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeRegionServiceImpl.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeRegionServiceImpl.java index 91c5a62e..0f47ea80 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeRegionServiceImpl.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeRegionServiceImpl.java @@ -14,10 +14,7 @@ import com.cdzy.ebikeoperate.mapper.EbikeAdministrationZoneMapper; import com.cdzy.ebikeoperate.mapper.EbikePointMapper; import com.cdzy.ebikeoperate.mapper.EbikeRegionMapper; import com.cdzy.ebikeoperate.mapper.EbikeStaffRegionMapper; -import com.cdzy.ebikeoperate.model.dto.request.ReqAuthorizeOperationDto; -import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto; -import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeRegionDto; -import com.cdzy.ebikeoperate.model.dto.request.ReqSaveRegionDto; +import com.cdzy.ebikeoperate.model.dto.request.*; import com.cdzy.ebikeoperate.model.dto.response.EbikeRegionDto; import com.cdzy.ebikeoperate.model.dto.response.RedisPoint; import com.cdzy.ebikeoperate.model.dto.response.ZoneDto; @@ -118,7 +115,7 @@ public class EbikeRegionServiceImpl extends ServiceImpl list = staffRegionMapper.selectListByQueryAs(queryWrapper, ZoneDto.class); - if (list.isEmpty()){ + if (list.isEmpty()) { return list; } //获取城市id @@ -197,7 +194,7 @@ public class EbikeRegionServiceImpl extends ServiceImpl pageRegion(PageParam pageParam, Integer type,String simpleName,String regionName,Integer inOperation) { + public Page pageRegion(PageParam pageParam, Integer type, String simpleName, String regionName, Integer inOperation) { QueryWrapper queryWrapper = QueryWrapper.create() - .select(EBIKE_REGION.ALL_COLUMNS,EBIKE_ADMINISTRATION_ZONE.NAME.as(EbikeRegionDto::getZoneName)) + .select(EBIKE_REGION.ALL_COLUMNS, EBIKE_ADMINISTRATION_ZONE.NAME.as(EbikeRegionDto::getZoneName)) .leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_REGION.ZONE_ID)) .where(EBIKE_REGION.TYPE.eq(type)) .where(EBIKE_REGION.SIMPLE_NAME.like(simpleName, Strings.isNotBlank(simpleName))) @@ -261,7 +258,7 @@ public class EbikeRegionServiceImpl extends ServiceImpl regionIds = authorizeOperationDto.getRegionIds(); @@ -269,30 +266,65 @@ public class EbikeRegionServiceImpl extends ServiceImpl list = this.mapper.selectListByIds(delRegionDto.getRegionIds()); + if (!list.isEmpty()){ + list.forEach(region -> { + redisUtil.delOperationArea(region.getOrgId(), region.getRegionId()); + }); + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_REGION.TYPE.eq(EbikeRegionType.PARKING)) + .where(EBIKE_REGION.PARENT_ID.in(delRegionDto.getRegionIds())); + List regions = this.mapper.selectListByQuery(queryWrapper); + regions.forEach(region -> { + redisUtil.delParkingArea(region.getOrgId(), region.getRegionId()); + }); + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_REGION.TYPE.eq(EbikeRegionType.OPERATION).or(EBIKE_REGION.TYPE.eq(EbikeRegionType.PARKING))) + .where(EBIKE_REGION.REGION_ID.in(delRegionDto.getRegionIds()).or(EBIKE_REGION.PARENT_ID.in(delRegionDto.getRegionIds()))); + this.mapper.deleteByQuery(queryWrapper); + } + + @Override + public void delPark(ReqDelRegionDto delRegionDto) { + List list = this.mapper.selectListByIds(delRegionDto.getRegionIds()); + if (!list.isEmpty()){ + list.forEach(region -> { + redisUtil.delParkingArea(region.getOrgId(), region.getRegionId()); + }); + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_REGION.TYPE.eq(EbikeRegionType.PARKING)) + .where(EBIKE_REGION.REGION_ID.in(delRegionDto.getRegionIds())); + this.mapper.deleteByQuery(queryWrapper); + } + private List getRspBikeInfos(List points) { //TODO:优化为点列表+电量,再通过详情接口获取车辆详情 - if (points != null && !points.isEmpty()) { - List sns = points.stream().map(RedisPoint::getMember).toList(); - JsonResult> bike = maintenanceFeignClient.getBikeByEcuSn(new ReqEcuSnDto(sns)); - if (bike.getCode() != Code.SUCCESS) { - throw new RuntimeException("获取车辆信息失败"); - } - List bikeInfos = bike.getData(); - for (RspBikeInfo rspBikeInfo : bikeInfos) { - points.forEach(redisPoint -> { - if (redisPoint.getMember().equals(rspBikeInfo.getEcuSn())) { - rspBikeInfo.setLongitude(redisPoint.getPoint().getX()); - rspBikeInfo.setLatitude(redisPoint.getPoint().getY()); - String jsonString = JSONObject.toJSONString(redisUtil.get(rspBikeInfo.getEcuSn())); - ResGPSDto resGPSDto = JSONObject.parseObject(jsonString, ResGPSDto.class); - rspBikeInfo.setSoc(resGPSDto.getSoc()); - } - }); - } - return bikeInfos; - }else { - return List.of(); - } + if (points != null && !points.isEmpty()) { + List sns = points.stream().map(RedisPoint::getMember).toList(); + JsonResult> bike = maintenanceFeignClient.getBikeByEcuSn(new ReqEcuSnDto(sns)); + if (bike.getCode() != Code.SUCCESS) { + throw new RuntimeException("获取车辆信息失败"); + } + List bikeInfos = bike.getData(); + for (RspBikeInfo rspBikeInfo : bikeInfos) { + points.forEach(redisPoint -> { + if (redisPoint.getMember().equals(rspBikeInfo.getEcuSn())) { + rspBikeInfo.setLongitude(redisPoint.getPoint().getX()); + rspBikeInfo.setLatitude(redisPoint.getPoint().getY()); + String jsonString = JSONObject.toJSONString(redisUtil.get(rspBikeInfo.getEcuSn())); + ResGPSDto resGPSDto = JSONObject.parseObject(jsonString, ResGPSDto.class); + rspBikeInfo.setSoc(resGPSDto.getSoc()); + } + }); + } + return bikeInfos; + } else { + return List.of(); + } } private void saveRegion(List points, EbikeRegion region, Integer type) { @@ -313,11 +345,11 @@ public class EbikeRegionServiceImpl extends ServiceImpl vertices = points.stream().map((point -> new Coordinate(point.getLongitude(), point.getLatitude()))).toList(); - redisUtil.addParkingArea(region.getParentId(),region.getRegionId(), vertices); + redisUtil.addParkingArea(region.getParentId(), region.getRegionId(), vertices); } if (type == EbikeRegionType.OPERATION && region.getShapeType() == ShapeType.SQUARE) { List vertices = points.stream().map((point -> new Coordinate(point.getLongitude(), point.getLatitude()))).toList(); - redisUtil.addOperationArea(region.getOrgId(),region.getRegionId(), vertices); + redisUtil.addOperationArea(region.getOrgId(), region.getRegionId(), vertices); } } 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 d948f006..e0290896 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 @@ -68,7 +68,17 @@ public class RedisUtil { } /** - * 添加停车区地理位置 + * 添加停车区数据 + * @param areaId 运营区Id + * @param regionId 停车区Id + */ + public void delParkingArea(Long areaId,Long regionId) { + redisTemplate.opsForGeo().remove(parkingKey+areaId, regionId); + delParkingAreaMeta(areaId,regionId); + } + + /** + * 添加运营区 * */ public void addOperationArea(Long orgId,Long regionId, List vertices) { @@ -77,6 +87,15 @@ public class RedisUtil { addOperationAreaMeta(orgId,regionId,vertices); } + /** + * 删除运营区 + * + */ + public void delOperationArea(Long orgId,Long regionId) { + redisTemplate.opsForGeo().remove(operationKey+orgId,regionId); + delOperationAreaMeta(orgId,regionId); + } + /** * 添加圆形停车区地理位置 * @@ -337,6 +356,10 @@ public class RedisUtil { redisTemplate.opsForHash().put("parking_area:meta:" + areaId, "mbr"+regionId, mbrStr); } + public void delParkingAreaMeta(Long areaId,Long regionId) { + redisTemplate.opsForHash().delete("parking_area:meta:" + areaId, "vertices"+regionId); + redisTemplate.opsForHash().delete("parking_area:meta:" + areaId, "mbr"+regionId); + } public void addOperationAreaMeta(Long orgId,Long regionId, List vertices) { @@ -354,6 +377,11 @@ public class RedisUtil { redisTemplate.opsForHash().put("operation_area:meta:" + orgId, "mbr"+regionId, mbrStr); } + public void delOperationAreaMeta(Long orgId,Long regionId) { + redisTemplate.opsForHash().delete("operation_area:meta:" + orgId, "vertices"+regionId); + redisTemplate.opsForHash().delete("operation_area:meta:" + orgId, "mbr"+regionId); + } + /** * 删除指定停车区的元数据(MBR 和顶点) * @param orgId 组织ID