xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -474,6 +474,41 @@ if(StringUtils.isNotEmpty(code)){ xpOrder = xpOrderClient.queryOrderByOrderNo(code).getData(); } //保存车辆实时信息到mongodb VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); if (null == vehiclePosition) { log.info("【模拟接单】MongoDB无车辆位置记录,新建,vin={}", xpVehicle.getVehicleVin()); vehiclePosition = new VehiclePosition(); vehiclePosition.setVin(xpVehicle.getVehicleVin()); vehiclePosition.setPoint(new GeoJsonPoint(startLon, startLat)); vehiclePosition.setCourse(60D); vehiclePosition.setAlt(100F); vehiclePosition.setSpeed(50F); vehiclePosition.setCurrentElectricity(80); vehiclePosition.setMileageRange(300f); vehiclePosition.setHasOrder(0); vehiclePosition.setOrderId(orderId); vehiclePosition.setTotalOdometer(10000L); vehiclePosition.setAddTime(System.currentTimeMillis()); mongoTemplate.save(vehiclePosition); }else{ log.info("【模拟接单】更新MongoDB车辆位置记录,vin={}", xpVehicle.getVehicleVin()); vehiclePosition.setOrderId(orderId); Update update = new Update() .set("point", new GeoJsonPoint(startLon, startLat)) .set("course", 60D) .set("alt", 100F) .set("speed", 50F) .set("currentElectricity", 80) .set("mileageRange", 300f) .set("hasOrder", 0) .set("orderId", orderId) .set("totalOdometer", 10000L) .set("addTime", System.currentTimeMillis()); mongoTemplate.updateFirst(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), update, VehiclePosition.class); } orderId = xpOrder.getId(); OrderRouteAndFareDto dto = new OrderRouteAndFareDto(); dto.setOrderId(orderId); xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -238,16 +238,6 @@ @Override public List<RouteAndFareVo> getRouteAndFare(RouteAndFareDto routeAndFareDto, String userId) { // // 判断是否5分钟内进行了查询 相同站点的起始点 并且是同时段 // String key = "xp-map-query-" + routeAndFareDto.getOpenCityId() // + "-" + routeAndFareDto.getOrigin().getLongitude() + "-" + routeAndFareDto.getOrigin().getLatitude() // + "-" + routeAndFareDto.getDestination().getLongitude() + "-" + routeAndFareDto.getDestination().getLatitude() + "-" + getCurrentTimeSlot() + "-" + userId+routeAndFareDto.getUserCouponId(); // // if (redisService.hasKey(key)) { // String jsonStr = Objects.requireNonNull(redisService.getCacheObject(key)).toString(); // RouteAndFareVo RouteAndFareVo = JSONObject.parseObject(jsonStr, RouteAndFareVo.class); // return (RouteAndFareVo); // } ArrayList<RouteAndFareVo> routeAndFareVos = new ArrayList<>(3); // 1. 基础数据查询 @@ -301,7 +291,8 @@ xpPricingCardVo = xpPricingUtil.calculationPrice(userId, JSON.parseObject(xpPricing.getBasicPricingJson()), JSON.parseArray(xpPricing.getStartingFareJson()), routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson() routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson() ); } else { xpPricingCardVo = xpPricingUtil.calculationFixedPrice(userId, xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/XpPricingUtil.java
@@ -80,7 +80,8 @@ /** * 计算一口价 */ public XpPricingCardVo calculationFixedPrice(String uid, JSONObject rule, JSONArray startingFareJson, double distance, long duration, long wait, Double waitMoney, Integer isDynamicPriceStatus, Long openCityId, String dynamicPricingJson) { public XpPricingCardVo calculationFixedPrice(String uid, JSONObject rule, JSONArray startingFareJson, double distance, long duration, long wait, Double waitMoney, Integer isDynamicPriceStatus, Long openCityId, String dynamicPricingJson) { // 默认费率1 double priceRate=1; if(isDynamicPriceStatus==1){ @@ -114,6 +115,7 @@ // 当前费率+(费率*上升百分比) priceRate = new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue(); } //天气动态调价 JSONArray ws = jsonObject.getJSONArray("weather"); if(null != ws){ XpOpenCity openCity = openCityClient.getXpOpenCityById(openCityId).getData(); @@ -188,9 +190,8 @@ * @return * @throws Exception */ public XpPricingCardVo calculationPrice(String uid,JSONObject rule, JSONArray startingFareJson, double distance, long duration, long wait, Double waitMoney,Integer isDynamicPriceStatus,Long openCityId,String dynamicPricingJson) { public XpPricingCardVo calculationPrice(String uid,JSONObject rule, JSONArray startingFareJson, double distance, long duration, long wait, Double waitMoney,Integer isDynamicPriceStatus,Long openCityId,String dynamicPricingJson) { // 默认费率1 double priceRate=1; if(isDynamicPriceStatus==1){ @@ -225,10 +226,27 @@ priceRate = new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue(); } // 天气预报动态调价 JSONArray ws = jsonObject.getJSONArray("weather"); if (null != ws) { XpOpenCity openCity = openCityClient.getXpOpenCityById(openCityId).getData(); WeatherDTO data = xpMapClient.wether(openCity.getCityCode()).getData(); List<WeatherDTO.Lives> lives = data.getLives(); if (lives != null && !lives.isEmpty()) { String w = lives.get(0).getWeather(); for (Object o : ws) { JSONObject ele = JSONObject.parseObject(o.toString()); if (w.contains(ele.getString("weatherType"))) { double floatRate = jsonObject.getDouble("ratio"); priceRate = new BigDecimal(priceRate).add(new BigDecimal(floatRate)).doubleValue(); break; } } } } // 冷却时间 Integer time = getOrderNum(jsonObject, 6); // 触发调价了 redisService.setCacheObject("USER_DYNAMIC_PRICE_" + openCityId + "_" + uid, priceRate,time.longValue(), TimeUnit.MINUTES); xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -235,12 +235,6 @@ vo.setIsInRange(true); vo.setMessageType(2); vo.setCheckLocationId(cruiseCheckInRuleLocation.getCheckLocationId()); // Boolean read = redisService.getCacheObject("CHECK_IN_SCOPE:" + xpCheckLocation.getId()); // if(null == read || !read){ // vo.setMessageType(2); // vo.setCheckLocationId(cruiseCheckInRuleLocation.getCheckLocationId()); // redisService.setCacheObject("CHECK_IN_SCOPE:" + xpCheckLocation.getId(), true, 1L, TimeUnit.HOURS); // } return vo; } //判断时间小于10分钟首次触发和小于3分钟再次触发 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -297,20 +297,20 @@ } //根据经纬度获取当前城市code // XpElectronicFenceArea xpElectronicFenceArea = dto.getElectronicFenceAreas().get(0); // String[] split = xpElectronicFenceArea.getFencePoints().split(","); // Coordinate[] coordinates = new Coordinate[split.length + 1]; // for (int i = 0; i < split.length; i++) { // String[] split1 = split[i].split("_"); // coordinates[i] = new Coordinate(Double.parseDouble(split1[0]), Double.parseDouble(split1[1])); // } // org.locationtech.jts.geom.Point point = calculateCentroid(coordinates); // Map<String, String> geocode = gdMapGeocodingUtil.geocode(point.getX() + "", point.getY() + ""); // if (null == geocode) { // return R.fail("经纬度转换城市code失败"); // } // String cityCode = geocode.get("cityCode"); // dto.setCityCode(cityCode); XpElectronicFenceArea xpElectronicFenceArea = dto.getElectronicFenceAreas().get(0); String[] split = xpElectronicFenceArea.getFencePoints().split(","); Coordinate[] coordinates = new Coordinate[split.length + 1]; for (int i = 0; i < split.length; i++) { String[] split1 = split[i].split("_"); coordinates[i] = new Coordinate(Double.parseDouble(split1[0]), Double.parseDouble(split1[1])); } org.locationtech.jts.geom.Point point = calculateCentroid(coordinates); Map<String, String> geocode = gdMapGeocodingUtil.geocode(point.getX() + "", point.getY() + ""); if (null == geocode) { return R.fail("经纬度转换城市code失败"); } String cityCode = geocode.get("cityCode"); dto.setCityCode(cityCode); xpElectronicFence.setCityCode(dto.getCityCode()); @@ -446,7 +446,7 @@ QuartzManager.removeJob((ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_EFFECT); QuartzManager.removeJob((ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_FAILURE); } /* //根据经纬度获取当前城市code XpElectronicFenceArea electronicFenceArea = dto.getElectronicFenceAreas().get(0); String[] split = electronicFenceArea.getFencePoints().split(","); @@ -462,7 +462,6 @@ } String cityCode = geocode.get("cityCode"); dto.setCityCode(cityCode); */ xpElectronicFence.setCityCode(dto.getCityCode()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java
@@ -183,13 +183,17 @@ return R.ok(); } AppUserLocationVo vo = new AppUserLocationVo(); AppUserPosition userPosition = mongoTemplate.findOne(Query.query(Criteria.where("appUserId").is(xpOrder.getAppUserId())), AppUserPosition.class); if(null != userPosition){ vo.setPassengerLng(userPosition.getPoint().getX()); vo.setPassengerLat(userPosition.getPoint().getY()); return R.ok(vo); } return R.ok(); vo.setPassengerLng(104.5165135); vo.setPassengerLat(30.2566515); return R.ok(vo); // TODO 后期放开,临时mock // AppUserPosition userPosition = mongoTemplate.findOne(Query.query(Criteria.where("appUserId").is(xpOrder.getAppUserId())), AppUserPosition.class); // if(null != userPosition){ // vo.setPassengerLng(userPosition.getPoint().getX()); // vo.setPassengerLat(userPosition.getPoint().getY()); // return R.ok(vo); // } // return R.ok(); } @@ -206,10 +210,42 @@ if(null == xpOrder){ return R.ok(); } return R.ok(); // TODO 后期放开,临时mock // R<VehicleDoorStatusVo> vehicleDoorStatus = xpVehicleClient.getVehicleDoorStatus(orderId); // if(200 != vehicleDoorStatus.getCode()){ // return R.fail(vehicleDoorStatus.getMsg()); // } // VehicleDoorStatusVo data = vehicleDoorStatus.getData(); VehicleSeatStatusVo vo = new VehicleSeatStatusVo(); //主驾 VehicleSeatStatus frontLeft = new VehicleSeatStatus(); // frontLeft.setSeatOccupied(data.getDriverSeatState() + ""); // frontLeft.setSeatbeltFastened(data.getDrvSeatBeltBuckleSt() + ""); frontLeft.setSeatOccupied("0"); frontLeft.setSeatbeltFastened("0"); vo.setFrontLeft(frontLeft); //副驾 VehicleSeatStatus frontRight = new VehicleSeatStatus(); // frontRight.setSeatOccupied(data.getPsngrSeatOccupancyStatus() + ""); // frontRight.setSeatbeltFastened(data.getPsngrSeatBeltBuckleSt() + ""); frontRight.setSeatOccupied("1"); frontRight.setSeatbeltFastened("0"); vo.setFrontRight(frontRight); //左后 VehicleSeatStatus rearLeft = new VehicleSeatStatus(); // rearLeft.setSeatOccupied(data.getSecRowLeftSeatOccupancyStatus() + ""); // rearLeft.setSeatbeltFastened(data.getSecRowLtSeatBeltBuckleSt() + ""); rearLeft.setSeatOccupied("1"); rearLeft.setSeatbeltFastened("1"); vo.setRearLeft(rearLeft); //右后 VehicleSeatStatus rearRight = new VehicleSeatStatus(); // rearRight.setSeatOccupied(data.getSecRowRightSeatOccupancyStatus() + ""); // rearRight.setSeatbeltFastened(data.getSecRowRtSeatBeltBuckleSt() + ""); rearRight.setSeatOccupied("0"); rearRight.setSeatbeltFastened("0"); vo.setRearRight(rearRight); return R.ok(vo); } @@ -225,15 +261,18 @@ public R<VehicleRangeVo> getVehicleRange(@PathVariable String orderId){ XpOrder xpOrder = xpOrderService.getById(orderId); VehicleRangeVo vo = new VehicleRangeVo(); if(null != xpOrder.getVehicleId()){ XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData(); VehiclePosition vehiclePositions = mongoTemplate.findOne(Query.query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); if(null == vehiclePositions){ return R.ok(); } vo.setBatteryLevel(vehiclePositions.getCurrentElectricity()); vo.setEstimatedRange(Double.valueOf(vehiclePositions.getMileageRange())); } // TODO 后期放开,临时mock // if(null != xpOrder.getVehicleId()){ // XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData(); // VehiclePosition vehiclePositions = mongoTemplate.findOne(Query.query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); // if(null == vehiclePositions){ // return R.ok(); // } // vo.setBatteryLevel(vehiclePositions.getCurrentElectricity()); // vo.setEstimatedRange(Double.valueOf(vehiclePositions.getMileageRange())); // } vo.setBatteryLevel(85); vo.setEstimatedRange(580D); return R.ok(vo); } @@ -247,7 +286,38 @@ @ApiOperation(value = "根据 订单查询四门三盖状态", notes = "客服系统对接") @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long", paramType = "path") public R<VehicleDoorStatusVo> getVehicleDoorStatus(@PathVariable Long orderId){ VehicleDoorStatusVo data = xpVehicleClient.getVehicleDoorStatus(orderId).getData(); // VehicleDoorStatusVo data = xpVehicleClient.getVehicleDoorStatus(orderId).getData(); // TODO 后期放开,临时mock VehicleDoorStatusVo data = new VehicleDoorStatusVo(); data.setFrontLeftDoor(0); data.setFrontRightDoor(0); data.setRearLeftDoor(0); data.setRearRightDoor(0); data.setTrunk(1); data.setFrunk(1); data.setHvacOn(0); data.setHvacInnerTempFloat(28.5); data.setHvacTempFloat(29.5); data.setRearLeftHvacTempFloat(29.5); data.setPassengerHvacTempFloat(29.5); data.setDriverSeatState(1); data.setPsngrSeatOccupancyStatus(0); data.setSecRowLeftSeatOccupancyStatus(0); data.setSecRowMidSeatOccupancyStatus(0); data.setSecRowRightSeatOccupancyStatus(0); data.setThirdRowLeftSeatOccupancyStatus(1); data.setThirdRowMidSeatOccupancyStatus(0); data.setThirdRowRightSeatOccupancyStatus(0); data.setDrvSeatBeltBuckleSt(1); data.setPsngrSeatBeltBuckleSt(0); data.setSecRowLtSeatBeltBuckleSt(0); data.setSecRowMidSeatBeltBuckleSt(0); data.setSecRowRtSeatBeltBuckleSt(0); data.setTrdRowLtSeatBeltBuckleSt(0); data.setTrdRowMidSeatBeltBuckleSt(0); data.setTrdRowRtSeatBeltBuckleSt(0); data.setSlowChargePortStatus(2); data.setFastChargePortStatus(2); return R.ok(data); } @@ -272,21 +342,55 @@ return R.ok(); } VehicleFenceInformationVo vo = new VehicleFenceInformationVo(); vo.setVehicleLng(vehiclePositions.getPoint().getX()); vo.setVehicleLat(vehiclePositions.getPoint().getY()); XpGeoFencingPolygon fencingPolygon = mongoTemplate.findOne(Query.query(Criteria.where("areaId").is(xpOrder.getXpElectronicFenceAreaId())), XpGeoFencingPolygon.class); List<FenceVo> collect = fencingPolygon.getPoints().getPoints().stream().map(point -> { // TODO 后期放开,临时mock // vo.setVehicleLng(vehiclePositions.getPoint().getX()); // vo.setVehicleLat(vehiclePositions.getPoint().getY()); vo.setVehicleLng(104.5313); vo.setVehicleLat(30.26335); // XpGeoFencingPolygon fencingPolygon = mongoTemplate.findOne(Query.query(Criteria.where("areaId").is(xpOrder.getXpElectronicFenceAreaId())), XpGeoFencingPolygon.class); // List<FenceVo> collect = fencingPolygon.getPoints().getPoints().stream().map(point -> { // FenceVo fenceVo = new FenceVo(); // fenceVo.setLng(point.getX()); // fenceVo.setLat(point.getY()); // return fenceVo; // }).collect(Collectors.toList()); List<FenceVo> collect = new ArrayList<FenceVo>(){{ FenceVo fenceVo = new FenceVo(); fenceVo.setLng(point.getX()); fenceVo.setLat(point.getY()); return fenceVo; }).collect(Collectors.toList()); fenceVo.setLng(104.5313); fenceVo.setLat(30.26335); add(fenceVo); fenceVo = new FenceVo(); fenceVo.setLng(104.5323); fenceVo.setLat(30.26325); add(fenceVo); fenceVo = new FenceVo(); fenceVo.setLng(104.5353); fenceVo.setLat(30.26365); add(fenceVo); fenceVo = new FenceVo(); fenceVo.setLng(104.5343); fenceVo.setLat(30.26375); add(fenceVo); fenceVo = new FenceVo(); fenceVo.setLng(104.5373); fenceVo.setLat(30.26395); add(fenceVo); fenceVo = new FenceVo(); fenceVo.setLng(104.5323); fenceVo.setLat(30.26375); add(fenceVo); fenceVo = new FenceVo(); fenceVo.setLng(104.5343); fenceVo.setLat(30.26345); add(fenceVo); }}; vo.setGeofenceBoundary(collect); GeoJsonPoint point = new GeoJsonPoint(vehiclePositions.getPoint().getX(), vehiclePositions.getPoint().getY()); List<XpGeoFencingPolygon> polygon = mongoTemplate.find(Query.query(Criteria.where("points").intersects(point)), XpGeoFencingPolygon.class); Set<String> collect1 = polygon.stream().map(XpGeoFencingPolygon::getAreaId).collect(Collectors.toSet()); vo.setIsOutOfGeofence(collect1.contains(xpOrder.getXpElectronicFenceAreaId())); // GeoJsonPoint point = new GeoJsonPoint(vehiclePositions.getPoint().getX(), vehiclePositions.getPoint().getY()); // List<XpGeoFencingPolygon> polygon = mongoTemplate.find(Query.query(Criteria.where("points").intersects(point)), XpGeoFencingPolygon.class); // Set<String> collect1 = polygon.stream().map(XpGeoFencingPolygon::getAreaId).collect(Collectors.toSet()); // vo.setIsOutOfGeofence(collect1.contains(xpOrder.getXpElectronicFenceAreaId())); vo.setIsOutOfGeofence(false); return R.ok(vo); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -2404,7 +2404,68 @@ totalPrice = totalPrice.add(xpOrderDetail1.getMoney()); xpOrderDetailMapper.insert(xpOrderDetail1); } order.setOrderMoney(totalPrice); // 默认费率1 double priceRate = 1; if (pricing.getIsDynamicPrice() == 1) { // 先判断是否已经调价过了 Object userDynamicPriceObj = redisService.getCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid); if (userDynamicPriceObj != null) { // 是否调价过了 priceRate = Double.parseDouble(userDynamicPriceObj.toString()); } else { // 没有调过 //是否触发动态调价 redis获取 Object dynamicPriceObj = redisService.getCacheObject("DYNAMIC_PRICE_" + order.getCityId()); if (dynamicPriceObj != null) { JSONObject jsonObject = JSONObject.parseObject(pricing.getDynamicPricingJson()); // 触发动态调价 // value=时间 String timeStr = dynamicPriceObj.toString(); // 判断当前距离这个时间范围的新增订单数(排除取消) / 上浮数量 算出应该增加的价格率 Integer num = this.getOrderNum(new GetOrderNumDto(timeStr, order.getCityId())); // X单上升一次调价 Integer orderNum = getOrderNum(jsonObject, 4); // 需要调价的次数 int count = num / orderNum; if (count > 0) { // 计算每次上升的费率 Integer upRate = getOrderNum(jsonObject, 5); BigDecimal divide = new BigDecimal(upRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); for (int i = count; i > 0; i--) { // 当前费率+(费率*上升百分比) priceRate = new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue(); } // 天气预报动态调价 JSONArray ws = jsonObject.getJSONArray("weather"); if (null != ws) { WeatherDTO data = xpMapClient.wether(order.getCityCode()).getData(); List<WeatherDTO.Lives> lives = data.getLives(); if (lives != null && !lives.isEmpty()) { String w = lives.get(0).getWeather(); for (Object o : ws) { JSONObject ele = JSONObject.parseObject(o.toString()); if (w.contains(ele.getString("weatherType"))) { double floatRate = jsonObject.getDouble("ratio"); priceRate = new BigDecimal(priceRate).add(new BigDecimal(floatRate)).doubleValue(); break; } } } } // 冷却时间 Integer time = getOrderNum(jsonObject, 6); // 触发调价了 redisService.setCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid, priceRate, time.longValue(), TimeUnit.MINUTES); } } } } order.setOrderMoney(totalPrice.multiply(new BigDecimal(priceRate))); order.setAppUserId(null); baseMapper.updateById(order); } else { @@ -2523,7 +2584,6 @@ } } } } // 封装费用明细数据 for (Map.Entry<String, BigDecimal> stringBigDecimalEntry : bill.entrySet()) { @@ -3550,6 +3610,7 @@ addTaxiPassengerVo.setUid(appUserId.toString()); order.setAppUserId(null); this.updateById(order); order.setAppUserId(appUserId); bootCommonService.setCache_orderStatus(order.getId(), order, null); //构建推送消息 @@ -3591,19 +3652,18 @@ //生成前往上车点的导航数据 //查询车辆位置 //TODO 本地环境默认写死 // VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(dto.getXpVehicleVin())), VehiclePosition.class); // if (Objects.isNull(vehiclePosition)) { // throw new RuntimeException("车辆位置信息不存在"); // } VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(dto.getXpVehicleVin())), VehiclePosition.class); if (Objects.isNull(vehiclePosition)) { throw new RuntimeException("车辆位置信息不存在"); } LonLatDto destination = new LonLatDto(); LonLatDto origin = new LonLatDto(); //查询司机当前位置到起点的线路 // origin.setLongitude(vehiclePosition.getPoint().getX()); // origin.setLatitude(vehiclePosition.getPoint().getY()); origin.setLongitude(104.055499); origin.setLatitude(30.586747); origin.setLongitude(vehiclePosition.getPoint().getX()); origin.setLatitude(vehiclePosition.getPoint().getY()); // origin.setLongitude(104.055499); // origin.setLatitude(30.586747); destination.setLongitude(order.getStartLon()); destination.setLatitude(order.getStartLat()); @@ -3634,25 +3694,25 @@ .plusMinutes(routeVo1.getDuration()).plusMinutes(endPoint.getParkingTimeLimit()).plusMinutes(30); long expirationTime = localDateTime.toEpochSecond(ZoneOffset.of("+8")); //生成token // String token = bluetoothUnlockTokenUtil.generateBluetoothUnlockToken(order.getAppUserId(), // order.getId(), order.getVehicleId(), expirationTime); // log.info("生成蓝牙token:{} 有效期:{} 订单号: {}", token, expirationTime, order.getOrderNumber()); // //存储缓存 // JSONObject jsonObject = new JSONObject(); // jsonObject.put("userId", order.getAppUserId()); // jsonObject.put("orderId", order.getId()); // jsonObject.put("vehicleId", order.getVehicleId()); // jsonObject.put("expirationTime", expirationTime); // jsonObject.put("orderNumber", order.getOrderNumber()); // jsonObject.put("vehicleVin", vehicle.getVehicleVin()); // jsonObject.put("createTime", System.currentTimeMillis()); // redisService.setCacheObject("rt:bluetooth:unlock:" + token, jsonObject.toJSONString(), expirationTime, TimeUnit.SECONDS); // redisService.setCacheObject("rt:bluetooth:unlock:order:" + order.getId(), token, expirationTime, TimeUnit.SECONDS); // //开始下发蓝牙token // BluetoothDeliverVo vo = new BluetoothDeliverVo(); // vo.setCredential(token); // vo.setVim(vehicle.getVehicleVin()); // vo.setPassengerUid(order.getAppUserId()); String token = bluetoothUnlockTokenUtil.generateBluetoothUnlockToken(order.getAppUserId(), order.getId(), order.getVehicleId(), expirationTime); log.info("生成蓝牙token:{} 有效期:{} 订单号: {}", token, expirationTime, order.getOrderNumber()); //存储缓存 JSONObject jsonObject = new JSONObject(); jsonObject.put("userId", order.getAppUserId()); jsonObject.put("orderId", order.getId()); jsonObject.put("vehicleId", order.getVehicleId()); jsonObject.put("expirationTime", expirationTime); jsonObject.put("orderNumber", order.getOrderNumber()); jsonObject.put("vehicleVin", vehicle.getVehicleVin()); jsonObject.put("createTime", System.currentTimeMillis()); redisService.setCacheObject("rt:bluetooth:unlock:" + token, jsonObject.toJSONString(), expirationTime, TimeUnit.SECONDS); redisService.setCacheObject("rt:bluetooth:unlock:order:" + order.getId(), token, expirationTime, TimeUnit.SECONDS); //开始下发蓝牙token BluetoothDeliverVo vo = new BluetoothDeliverVo(); vo.setCredential(token); vo.setVim(vehicle.getVehicleVin()); vo.setPassengerUid(order.getAppUserId()); // BaseVehicleUserDto deliver = bluetoothUnlockClient.deliver(vo); // if(null == deliver){ // throw new ServiceException("下发蓝牙token失败"); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/VehicleSeatStatus.java
@@ -7,8 +7,8 @@ @Data @ApiModel public class VehicleSeatStatus { @ApiModelProperty("座椅状态") @ApiModelProperty("座椅状态 0-无人,1-有人") private String seatOccupied; @ApiModelProperty("安全带状态") @ApiModelProperty("安全带状态 0:已解开 1:未解开") private String seatbeltFastened; } xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/controller/WebSocketController.java
@@ -104,7 +104,7 @@ * @return 操作结果 */ @ApiOperation(value = "发送车辆路线、时间") @PostMapping("/inner/websocket/order/sendRoute") @PostMapping("/logan/inner/websocket/order/sendRoute") public R<String> sendRoute(@RequestBody SendMessageDTO dto) { try { String message = dto.getMessage();