xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/map/XpMapClient.java
@@ -14,7 +14,6 @@ @FeignClient(contextId = "XpMapClient", value = ServiceNameConstantsEnum.XP_MAP_SERVICE, fallbackFactory = XpMapClientFallbackFactory.class) public interface XpMapClient { /** * 获取距离和时长 * @param dto @@ -24,6 +23,7 @@ R<RouteVo> getDistanceAndDuration(@RequestBody RouteAndFareDto dto); /** * 判断是否同一经营区域 * @param dto xp-robotaxi-common/xp-common-redis/src/main/java/com/xiaopeng/common/redis/service/RedisService.java
@@ -173,8 +173,9 @@ } // 获取第一个元素但不删除 public Object getFirstElement(String key) { return redisTemplate.opsForList().index(key, 0); public String getFirstElement(String key) { String index = (String) redisTemplate.opsForList().index(key, 0); return index; } // 获取第一个元素并删除(弹出) @@ -374,7 +375,7 @@ */ public Set<String> getQuoteMatchName(String name) { // 模糊查询key为name的值 Set<String> keys = redisTemplate.keys("*" + name ); Set<String> keys = redisTemplate.keys(name + "*"); return keys; } } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/utils/GDMapGeocodingUtil.java
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.vo.operation.RouteVo; import com.xiaopeng.common.core.utils.HttpUtils; import com.xiaopeng.map.mangodb.service.XpGeoFencingPolygonService; import com.xiaopeng.map.utils.mangoUtils.MongoGeoFenceUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -54,11 +55,15 @@ params.put("start", start.getLongitude() + "," + start.getLatitude()); params.put("end", end.getLongitude() + "," + end.getLatitude()); params.put("routeUserType",2); params.put("voidPolygons", avoidRoads); if(avoidRoads!=null && !avoidRoads.isEmpty()){ params.put("voidPolygons", avoidRoads); } if(routePlanRule!=null){ params.put("strategy", routePlanRule); } String post = HttpUtils.post(url, JSON.toJSONString(params)); System.out.println("高德地图返回结果:"+ post); String forObject = restTemplate.getForObject(url, String.class, params); JSONObject jsonObject = JSON.parseObject(forObject); String data = jsonObject.getString("data"); xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java
@@ -396,11 +396,11 @@ // 获取起步里程 XpPricing xpPricing = this.baseMapper.selectOne(new LambdaQueryWrapper<XpPricing>().eq(XpPricing::getCityId, dto.getOpenCityId())); Integer startMileage = XpPricingUtil.getStartMileage(xpPricing.getStartingFareJson()); if (startMileage == null) { throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION); } // XpPricing xpPricing = this.baseMapper.selectOne(new LambdaQueryWrapper<XpPricing>().eq(XpPricing::getCityId, dto.getOpenCityId())); // Integer startMileage = XpPricingUtil.getStartMileage(xpPricing.getStartingFareJson()); // if (startMileage == null) { // throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION); // } // 根据id获取手机号 @@ -417,7 +417,7 @@ // 生成订单数据 XpOrder xpOrder = new XpOrder(); xpOrder.setStartMileage(Double.valueOf(startMileage)); // xpOrder.setStartMileage(Double.valueOf(startMileage)); xpOrder.setAppUserId(Long.valueOf(uid)); xpOrder.setOrderNumber("XP" + System.currentTimeMillis()); @@ -473,10 +473,10 @@ Integer distance = 0; Integer duration = 0; if (distanceAndDuration.getCode() != 200) { throw new ServiceException("订单生成失败", I18nKeyConstant.ORDER_CREATE_FAIL); // throw new ServiceException("订单生成失败", I18nKeyConstant.ORDER_CREATE_FAIL); } distance = distanceAndDuration.getData().getDistance(); duration = distanceAndDuration.getData().getDuration(); // distance = distanceAndDuration.getData().getDistance(); // duration = distanceAndDuration.getData().getDuration(); // 产生订单 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -83,18 +83,18 @@ /** * 5秒执行一次 */ // @Scheduled(cron = "0/5 * * * * ?") @Scheduled(cron = "0/5 * * * * ?") public void taskOrder() { System.out.println("5秒执行一次"); Set<String> quoteMatchName = redisService.getQuoteMatchName(CacheConstants.QUEUE_POINT_ID); for (String name : quoteMatchName) { Object firstElement = redisService.getFirstElement(name); String firstElement = redisService.getFirstElement(name); if (firstElement != null) { String[] split = firstElement.toString().split("_"); // 如果市未处理 创建新任务 if (split[2].equals("0")) { // 状态改为处理中 redisService.updateFirst(name, split[0] + "_" + split[1] + "_1"); // redisService.updateFirst(name, split[0] + "_" + split[1] + "_1"+split[3]+split[4]+split[5]+split[6]); threadPoolTaskExecutor.submit(() -> { orderProcess(name, firstElement.toString()); }); @@ -110,6 +110,7 @@ * @param firstElement 队列第一个元素 */ private void orderProcess(String quoteName, String firstElement) { System.out.println("进入处理环节"); XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null); String orderId = firstElement.split("_")[0]; String lonLat = firstElement.split("_")[1]; @@ -207,6 +208,7 @@ * @param xpTradingStrategy 规则 */ private void processPushOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) { System.out.println("进入推单环环节"); // 订单状态 R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo); if (xpOrderR.getCode() != 200) { @@ -217,9 +219,13 @@ } 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()); List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class); if (!availableVehiclesNearby.isEmpty()) {