Merge remote-tracking branch 'origin/main'

This commit is contained in:
dzl 2025-05-08 09:41:41 +08:00
commit a666fb5cd6
2 changed files with 29 additions and 32 deletions

View File

@ -99,4 +99,12 @@ public interface MaintenanceFeignClient {
*/ */
@GetMapping("ebikeBikeInfo/updateVehicleStatus") @GetMapping("ebikeBikeInfo/updateVehicleStatus")
JsonResult<?> updateVehicleStatus(@RequestBody ReqVehicleStatusUpdateDto request); JsonResult<?> updateVehicleStatus(@RequestBody ReqVehicleStatusUpdateDto request);
/**
* 根据运营区id获取所有车辆
*
* @return 结果
*/
@GetMapping("ebikeBikeInfo/getVehicleDetailsByRegionId")
JsonResult<List<RspBikeInfo>> getVehicleDetailsByRegionId(@RequestParam(name = "regionId") String regionId);
} }

View File

@ -1,7 +1,7 @@
package com.cdzy.ebikeoperate.service.impl; package com.cdzy.ebikeoperate.service.impl;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson2.JSONObject; import com.cdzy.common.enums.Code;
import com.cdzy.common.model.JsonResult; import com.cdzy.common.model.JsonResult;
import com.cdzy.common.model.PageParam; import com.cdzy.common.model.PageParam;
import com.cdzy.common.model.ResGPSDto; import com.cdzy.common.model.ResGPSDto;
@ -15,7 +15,10 @@ import com.cdzy.ebikeoperate.model.dto.request.ReqAuthorizeOperationDto;
import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto;
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeOperationRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeOperationRegionDto;
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto; import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto;
import com.cdzy.ebikeoperate.model.dto.response.*; import com.cdzy.ebikeoperate.model.dto.response.EbikeOperationRegionPageDto;
import com.cdzy.ebikeoperate.model.dto.response.ResEbikeOperationRegionDto;
import com.cdzy.ebikeoperate.model.dto.response.ResOperationRegionInfo;
import com.cdzy.ebikeoperate.model.dto.response.ZoneDto;
import com.cdzy.ebikeoperate.model.pojo.EbikeAdministrationZone; import com.cdzy.ebikeoperate.model.pojo.EbikeAdministrationZone;
import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion; import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion;
import com.cdzy.ebikeoperate.model.pojo.EbikePoint; import com.cdzy.ebikeoperate.model.pojo.EbikePoint;
@ -24,7 +27,6 @@ import com.cdzy.ebikeoperate.service.EbikeOperationRegionService;
import com.cdzy.ebikeoperate.utils.RedisUtil; import com.cdzy.ebikeoperate.utils.RedisUtil;
import com.ebike.feign.clients.MaintenanceFeignClient; import com.ebike.feign.clients.MaintenanceFeignClient;
import com.ebike.feign.clients.StaffFeignClient; import com.ebike.feign.clients.StaffFeignClient;
import com.ebike.feign.model.res.ReqEcuSnDto;
import com.ebike.feign.model.rsp.RspBikeInfo; import com.ebike.feign.model.rsp.RspBikeInfo;
import com.ebike.feign.model.rsp.StaffFeign; import com.ebike.feign.model.rsp.StaffFeign;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
@ -34,7 +36,6 @@ import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.data.geo.Point;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -95,7 +96,7 @@ public class EbikeOperationRegionServiceImpl extends ServiceImpl<EbikeOperationR
@Override @Override
public Page<EbikeOperationRegionPageDto> pageOperationRegion(PageParam pageParam, String simpleName, String regionName, Integer inOperation) { public Page<EbikeOperationRegionPageDto> pageOperationRegion(PageParam pageParam, String simpleName, String regionName, Integer inOperation) {
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.select(EBIKE_OPERATION_REGION.ALL_COLUMNS,EBIKE_ADMINISTRATION_ZONE.NAME.as(ResOperationRegionInfo::getZoneName),EBIKE_REGION_LEVEL.LEVEL_NAME) .select(EBIKE_OPERATION_REGION.ALL_COLUMNS, EBIKE_ADMINISTRATION_ZONE.NAME.as(ResOperationRegionInfo::getZoneName), EBIKE_REGION_LEVEL.LEVEL_NAME)
.leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_OPERATION_REGION.OPERATION_LEVEL)) .leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_OPERATION_REGION.OPERATION_LEVEL))
.leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_OPERATION_REGION.ZONE_ID)) .leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_OPERATION_REGION.ZONE_ID))
.where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.OPERATION)) .where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.OPERATION))
@ -108,7 +109,7 @@ public class EbikeOperationRegionServiceImpl extends ServiceImpl<EbikeOperationR
@Override @Override
public ResOperationRegionInfo operationRegionInfo(Long regionId) { public ResOperationRegionInfo operationRegionInfo(Long regionId) {
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.select(EBIKE_OPERATION_REGION.ALL_COLUMNS,EBIKE_ADMINISTRATION_ZONE.NAME.as(ResOperationRegionInfo::getZoneName),EBIKE_REGION_LEVEL.LEVEL_NAME) .select(EBIKE_OPERATION_REGION.ALL_COLUMNS, EBIKE_ADMINISTRATION_ZONE.NAME.as(ResOperationRegionInfo::getZoneName), EBIKE_REGION_LEVEL.LEVEL_NAME)
.leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_OPERATION_REGION.ZONE_ID)) .leftJoin(EBIKE_ADMINISTRATION_ZONE).on(EBIKE_ADMINISTRATION_ZONE.ID.eq(EBIKE_OPERATION_REGION.ZONE_ID))
.leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_OPERATION_REGION.OPERATION_LEVEL)) .leftJoin(EBIKE_REGION_LEVEL).on(EBIKE_REGION_LEVEL.LEVEL_VALUE.eq(EBIKE_OPERATION_REGION.OPERATION_LEVEL))
.where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(regionId)) .where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.eq(regionId))
@ -135,7 +136,7 @@ public class EbikeOperationRegionServiceImpl extends ServiceImpl<EbikeOperationR
public void delOperation(ReqBatchRegionDto delRegionDto) { public void delOperation(ReqBatchRegionDto delRegionDto) {
List<EbikeOperationRegion> ebikeOperationRegions = this.mapper.selectListByIds(delRegionDto.getIds()); List<EbikeOperationRegion> ebikeOperationRegions = this.mapper.selectListByIds(delRegionDto.getIds());
ebikeOperationRegions.forEach(region -> ebikeOperationRegions.forEach(region ->
delPoints(region.getOrgId(), region.getOperationRegionId()) delPoints(region.getOrgId(), region.getOperationRegionId())
); );
this.mapper.deleteBatchByIds(delRegionDto.getIds()); this.mapper.deleteBatchByIds(delRegionDto.getIds());
} }
@ -182,35 +183,23 @@ public class EbikeOperationRegionServiceImpl extends ServiceImpl<EbikeOperationR
@Override @Override
public List<RspBikeInfo> getOperationBike(String regionId) { public List<RspBikeInfo> getOperationBike(String regionId) {
QueryWrapper queryWrapper = QueryWrapper.create() JsonResult<List<RspBikeInfo>> bikeInfoJsonResult = maintenanceFeignClient.getVehicleDetailsByRegionId(regionId);
.where(EBIKE_POINT.REGION_ID.eq(regionId)); if (bikeInfoJsonResult.getCode() != Code.SUCCESS) {
List<EbikePoint> ebikePoints = pointMapper.selectListByQuery(queryWrapper);
List<Point> list = ebikePoints.stream().filter(Objects::nonNull).map(point -> new Point(point.getLongitude(), point.getLatitude())).toList();
List<RedisPoint> redisPoints = redisUtil.searchBikeByPolygon(list);
if (redisPoints == null || redisPoints.isEmpty()) {
return List.of();
}
Map<String, RedisPoint> map = new HashMap<>();
for (RedisPoint redisPoint : redisPoints) {
map.put(redisPoint.getMember(), redisPoint);
}
List<String> strings = redisPoints.stream().map(RedisPoint::getMember).toList();
ReqEcuSnDto ecuSnDto = new ReqEcuSnDto(strings);
JsonResult<List<RspBikeInfo>> result = maintenanceFeignClient.getBikeByEcuSn(ecuSnDto);
if (result.getCode() != 200) {
throw new RuntimeException("获取车辆信息失败"); throw new RuntimeException("获取车辆信息失败");
} }
// List<String> ecuSns = new ArrayList<>(); List<RspBikeInfo> bikeInfos = bikeInfoJsonResult.getData();
// List<Object> objects = redisUtil.multiGet(ecuSns); List<String> ecuSns = bikeInfos.stream().map(RspBikeInfo::getEcuSn).distinct().toList();
// List<ResGPSDto> resGPSDtos = objects.stream().map(object -> { List<Object> objects = redisUtil.multiGet(ecuSns);
// return (ResGPSDto) object; Map<String, ResGPSDto> map = new HashMap<>();
// }).toList(); objects.forEach(object -> {
ResGPSDto gpsDto = (ResGPSDto) object;
map.put(gpsDto.getEcuSn(), gpsDto);
});
List<RspBikeInfo> bikeInfos = result.getData();
bikeInfos.forEach(rspBikeInfo -> { bikeInfos.forEach(rspBikeInfo -> {
RedisPoint redisPoint = map.get(rspBikeInfo.getEcuSn()); ResGPSDto gpsDto = map.get(rspBikeInfo.getEcuSn());
rspBikeInfo.setLongitude(redisPoint.getPoint().getX()); rspBikeInfo.setLongitude(gpsDto.getLongitude());
rspBikeInfo.setLatitude(redisPoint.getPoint().getY()); rspBikeInfo.setLatitude(gpsDto.getLatitude());
}); });
return bikeInfos; return bikeInfos;
} }