运营区车辆

This commit is contained in:
attiya 2025-05-08 09:17:54 +08:00
parent e41febdc35
commit 57f2a1804f
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;
@ -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 = new ArrayList<>();
// 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;
} }