xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/VehiclePositionByVinDto.java
New file @@ -0,0 +1,25 @@ package com.xiaopeng.api.dto.operation; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @ApiModel(value = "筛选车辆信息Dto") @AllArgsConstructor @NoArgsConstructor public class VehiclePositionByVinDto { // 区域id private Long areaId; // 车辆vin private List<String> vinList; // 数量 private Integer num; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/UserVehicleClient.java
@@ -1,15 +1,20 @@ package com.xiaopeng.api.feignClient.vehicleConvoy; import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto; import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto; import com.xiaopeng.api.factory.vehicleConvoy.UserVehicleClientFallbackFactory; import com.xiaopeng.api.vo.operation.VehiclePositionVo; import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo; import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo; import com.xiaopeng.api.vo.vehicleConvoy.GetTaxiPassengersVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; /** * 小鹏内部用户中心服务 @@ -43,4 +48,6 @@ */ @PostMapping("/logan/vehicleTaxi/update/cancelTaxiPassenger") BaseVehicleUserDto cancelTaxiPassenger(@RequestBody CancelTaxiPassengerVo vo); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpVehicleClient.java
@@ -1,7 +1,9 @@ package com.xiaopeng.api.feignClient.vehicleConvoy; import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto; import com.xiaopeng.api.factory.vehicleConvoy.XpVehicleClientFallbackFactory; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.operation.VehiclePositionVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; @@ -62,4 +64,11 @@ */ @GetMapping("/inner/vehicle/listByFenceId") R<List<XpVehicle>> listByFenceId(@RequestParam("fenceId") Long fenceId); /** * 查询车辆信息 进行筛选 */ @PostMapping("/logan/vehicle/queryVehiclePositionByVin") R<List<VehiclePositionVo>> queryVehiclePositionByVin(@RequestBody VehiclePositionByVinDto dto); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/automaticPilot/VehiclePosition.java
@@ -20,7 +20,7 @@ @CompoundIndex(name = "location_index", def = "{'point': '2dsphere'}") } ) public class VehiclePosition implements Serializable { public class VehiclePosition implements Serializable { /** * 车辆id */ xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/VehiclePositionVo.java
File was renamed from xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/VehiclePositionVo.java @@ -1,12 +1,9 @@ package com.xiaopeng.operation.vo; package com.xiaopeng.api.vo.operation; import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.geo.GeoJsonPoint; import org.springframework.data.mongodb.core.index.CompoundIndex; import org.springframework.data.mongodb.core.index.CompoundIndexes; import org.springframework.data.mongodb.core.mapping.Document; import java.io.Serializable; @@ -25,9 +22,9 @@ */ private String vin; /** * 车辆所属围栏id * 车辆所属区域id */ private Long electronic_id; private Long area_electronic_id; /** * 车辆实时位置信息 */ xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -3,10 +3,13 @@ import cn.hutool.core.bean.BeanUtil; import com.xiaopeng.api.dto.map.RouteAndFareDto; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto; import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto; import com.xiaopeng.api.feignClient.map.XpMapClient; import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient; import com.xiaopeng.api.feignClient.vehicleConvoy.VehicleControlClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.operation.XpTradingStrategy; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; @@ -19,14 +22,10 @@ import com.xiaopeng.operation.service.IXpTradingStrategyService; import com.xiaopeng.operation.service.XpPointService; import com.xiaopeng.operation.utils.mango.VehiclePositionService; import com.xiaopeng.operation.utils.map.FastDistanceCalculator; import com.xiaopeng.operation.vo.RouterVo; import com.xiaopeng.operation.vo.VehiclePositionVo; import org.redisson.Redisson; import com.xiaopeng.api.vo.operation.VehiclePositionVo; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; @@ -60,6 +59,9 @@ @Autowired private UserVehicleClient userVehicleClient; @Autowired private XpVehicleClient xpVehicleClient; @Autowired private RedissonClient redissonClient; @@ -191,7 +193,7 @@ processPushOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule); // 最终没找到车 redisService.popFirstElement(quoteName); // redisService.popFirstElement(quoteName); // 取消订单 xpOrderClient.cancelOrder(orderId); @@ -217,16 +219,29 @@ if (xpOrderR.getData().getStatus() != 1) { return; } XpOrder xpOrder = xpOrderR.getData(); for (int i = 0; i < count; i++) { System.out.println("进入找车环节"); // 根据距离找车 // 车多则根据配置找具体车数量 根据距离最近 // 更改 暂不限制数量 List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(Double.parseDouble(split[0]), Double.parseDouble(split[1]), xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount()); // 获取车辆的区域信息 if(positionList.isEmpty()){ continue; } List<String> vinList = positionList.stream().map(VehiclePosition::getVin).collect(Collectors.toList()); List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class); // 获取车辆的信息 筛选出可用车辆 R<List<VehiclePositionVo>> vehiclePositionVos = xpVehicleClient.queryVehiclePositionByVin(new VehiclePositionByVinDto(xpOrder.getXpElectronicFenceAreaId(), vinList, xpTradingStrategy.getSimultaneouslyOrderCount())); if(vehiclePositionVos.getCode()!=200){ continue; } List<VehiclePositionVo> availableVehiclesNearby =vehiclePositionVos.getData(); if (!availableVehiclesNearby.isEmpty()) { if (availableVehiclesNearby.size() > 1) { @@ -590,6 +605,9 @@ addTaxiPassengerVo.setOrderNo(orderNo); // TODO appid addTaxiPassengerVo.setAppId(""); BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo); if (baseVehicleUserDto.getCode() == 200) { xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
@@ -45,8 +45,8 @@ // 可以添加排序,按距离排序 query.with(Sort.by(Sort.Direction.ASC, "point")); // 可以限制返回数量 query.limit(num); // // 可以限制返回数量 // query.limit(num); return mongoTemplate.find(query, VehiclePosition.class); } @@ -63,4 +63,21 @@ return mongoTemplate.findOne(query, VehiclePosition.class); } /** * 所有的车辆 */ public List<VehiclePosition> findAll() { // 构建查询条件 Query query = new Query(); query.addCriteria(Criteria.where("status").is(1)); // 运营中 query.addCriteria(Criteria.where("state").is(1)); // 接单中 // 可以添加排序,按距离排序 query.with(Sort.by(Sort.Direction.ASC, "point")); return mongoTemplate.find(query, VehiclePosition.class); } }