xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
@@ -200,7 +200,7 @@ } @ApiOperation(value = "运维人员管理重置密码", tags = {"管理后台-运维执行"}) @DeleteMapping("/api/v1/operationsUser/rePassword") @PostMapping("/api/v1/operationsUser/rePassword") public R<String> rePassword(@RequestBody RePasswordDTO dto) { xpOperationsUserService.rePassword(dto); return R.ok(); @@ -215,7 +215,7 @@ @ApiOperation(value = "运维人员管理导出列表", tags = {"管理后台-运维执行"}) @GetMapping("/api/v1/operationsUser/exportOperationsUser") @PostMapping("/api/v1/operationsUser/exportOperationsUser") public void exportOperationsUser(@RequestBody XpOperationsUserQuery query, HttpServletResponse response){ xpOperationsUserService.exportOperationsUser(query, response); } xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.dto.account.GetUserCouponDto; import com.xiaopeng.api.dto.map.OrderRouteAndFareDto; import com.xiaopeng.api.dto.map.RouteAndFareDto; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.dto.pushMessage.SendMessageDTO; @@ -709,7 +710,7 @@ dto.setMessage("{\"type\":\"VEHICLE_LOCATION\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"lon\\\":113.385848,\\\"lat\\\":23.156841}\",\"timestamp\":\"176569945845456\"}"); xpPushMessageClient.sendVehicleLocation(dto); //发送车辆到达起点的轨迹 RouteAndFareDto routeAndFareDto = new RouteAndFareDto(); OrderRouteAndFareDto routeAndFareDto = new OrderRouteAndFareDto(); LonLatDto destination = new LonLatDto(); destination.setLongitude(xpOrder.getStartLon()); destination.setLatitude(xpOrder.getStartLat()); @@ -718,8 +719,9 @@ origin.setLongitude(113.385848); origin.setLatitude(23.156841); routeAndFareDto.setOrigin(origin); routeAndFareDto.setOpenCityId(2L); RouteVo routeVo = xpMapClient.getDistanceAndDuration(routeAndFareDto).getData(); routeAndFareDto.setRouteType(1); routeAndFareDto.setOrderId(orderId); RouteVo routeVo = xpMapClient.getOrderDistanceAndDuration(routeAndFareDto).getData(); com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject(); jsonObject.put("type", "ORDER_ROUTE"); jsonObject.put("timestamp", System.currentTimeMillis()); @@ -782,12 +784,12 @@ dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":5}\",\"timestamp\":\"176569945845456\"}"); xpPushMessageClient.sendStatus(dto); //推送起点到终点的行驶轨迹 RouteAndFareDto routeAndFareDto = new RouteAndFareDto(); routeAndFareDto = new RouteAndFareDto(); OrderRouteAndFareDto routeAndFareDto = new OrderRouteAndFareDto(); routeAndFareDto.setDestination(new LonLatDto(xpOrder.getEndLon(), xpOrder.getEndLat())); routeAndFareDto.setOrigin(new LonLatDto(xpOrder.getStartLon(), xpOrder.getStartLat())); routeAndFareDto.setOpenCityId(2L); RouteVo routeVo = xpMapClient.getDistanceAndDuration(routeAndFareDto).getData(); routeAndFareDto.setRouteType(2); routeAndFareDto.setOrderId(orderId); RouteVo routeVo = xpMapClient.getOrderDistanceAndDuration(routeAndFareDto).getData(); com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject(); jsonObject.put("type", "ORDER_ROUTE"); jsonObject.put("timestamp", System.currentTimeMillis()); xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/XpPricingUtil.java
@@ -264,14 +264,18 @@ if (holiday) { if (realDistance > rule.getDouble("num6")) { longDistanceOne = rule.getDouble("num32") * (realDistance - rule.getDouble("num6")); longDistanceOne = new BigDecimal(longDistanceOne).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num9")) { longDistanceTwo = rule.getDouble("num33") * (realDistance - rule.getDouble("num9")); longDistanceTwo = new BigDecimal(longDistanceTwo).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num12")) { longDistanceThree = rule.getDouble("num34") * (realDistance - rule.getDouble("num12")); longDistanceThree = new BigDecimal(longDistanceThree).setScale(2,RoundingMode.HALF_UP).doubleValue(); } amount = rule.getDouble("num29") + new BigDecimal(exceedDistance * rule.getDouble("num30")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (exceedTime * rule.getDouble("num31")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; amount = rule.getDouble("num29") + new BigDecimal(exceedDistance * rule.getDouble("num30")).setScale(2,RoundingMode.HALF_UP).doubleValue() + new BigDecimal(exceedTime * rule.getDouble("num31")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; // 起步价 @@ -299,14 +303,17 @@ if (date.getTime() > calendarNight.getTimeInMillis() && date.getTime() < calendar.getTimeInMillis()) { if (realDistance > rule.getDouble("num6")) { longDistanceOne = rule.getDouble("num18") * (realDistance - rule.getDouble("num6")); longDistanceOne = new BigDecimal(longDistanceOne).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num9")) { longDistanceTwo = rule.getDouble("num19") * (realDistance - rule.getDouble("num9")); longDistanceTwo = new BigDecimal(longDistanceTwo).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num12")) { longDistanceThree = rule.getDouble("num20") * (realDistance - rule.getDouble("num12")); longDistanceThree = new BigDecimal(longDistanceThree).setScale(2,RoundingMode.HALF_UP).doubleValue(); } amount = rule.getDouble("num15") + new BigDecimal(exceedDistance * rule.getDouble("num16")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (exceedTime * rule.getDouble("num17")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; amount = rule.getDouble("num15") + new BigDecimal(exceedDistance * rule.getDouble("num16")).setScale(2,RoundingMode.HALF_UP).doubleValue() + new BigDecimal(exceedTime * rule.getDouble("num17")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; // 起步价 @@ -355,14 +362,17 @@ if ((date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())) { if (realDistance > rule.getDouble("num6")) { longDistanceOne = rule.getDouble("num26") * (realDistance - rule.getDouble("num6")); longDistanceOne = new BigDecimal(longDistanceOne).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num9")) { longDistanceTwo = rule.getDouble("num27") * (realDistance - rule.getDouble("num9")); longDistanceTwo = new BigDecimal(longDistanceTwo).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num12")) { longDistanceThree = rule.getDouble("num28") * (realDistance - rule.getDouble("num12")); longDistanceThree = new BigDecimal(longDistanceThree).setScale(2,RoundingMode.HALF_UP).doubleValue(); } amount = rule.getDouble("num23") + new BigDecimal(exceedDistance * rule.getDouble("num24")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (exceedTime * rule.getDouble("num25")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; amount = rule.getDouble("num23") + new BigDecimal(exceedDistance * rule.getDouble("num24")).setScale(2,RoundingMode.HALF_UP).doubleValue() + new BigDecimal(exceedTime * rule.getDouble("num25")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; // 起步价 @@ -393,14 +403,17 @@ //其他时间段的计算 if (realDistance > rule.getDouble("num6")) { longDistanceOne = rule.getDouble("num8") * (realDistance - rule.getDouble("num6")); longDistanceOne = new BigDecimal(longDistanceOne).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num9")) { longDistanceTwo = rule.getDouble("num11") * (realDistance - rule.getDouble("num9")); longDistanceTwo = new BigDecimal(longDistanceTwo).setScale(2,RoundingMode.HALF_UP).doubleValue(); } if (realDistance > rule.getDouble("num12")) { longDistanceThree = rule.getDouble("num13") * (realDistance - rule.getDouble("num12")); longDistanceThree = new BigDecimal(longDistanceThree).setScale(2,RoundingMode.HALF_UP).doubleValue(); } amount = rule.getDouble("num1") + new BigDecimal(exceedDistance * rule.getDouble("num4")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (exceedTime * rule.getDouble("num5")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; amount = rule.getDouble("num1") + new BigDecimal(exceedDistance * rule.getDouble("num4")).setScale(2,RoundingMode.HALF_UP).doubleValue() + new BigDecimal(exceedTime * rule.getDouble("num5")).setScale(2,RoundingMode.HALF_UP).doubleValue() + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree; // 起步价 @@ -433,6 +446,7 @@ // 订单总额 Double startPrice = xpPricingCardVo.getStartPrice(); amount=new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP).doubleValue(); // 先减去起步价重新计算 amount = amount - startPrice; // 动态计算费用 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpMapController.java
@@ -121,17 +121,8 @@ // 存储redis redisService.setCacheObject(CacheConstants.ORDER_ROUTE + "_" + dto.getOrderId() + "_" +dto.getRouteType(), routeVo); // 查询订单信息 XpOrder xpOrder = xpOrderClient.queryOrderById(dto.getOrderId()).getData(); // 封装消息内容 Integer routeType = dto.getRouteType(); if(routeType == 2){ routeType = 3; }else { routeType = xpOrder.getStatus() == 4 ? 1 : 2; } // 存储路线偏离缓存,后续进行轨迹截取 redisService.setCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +routeType, routeVo); redisService.setCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +dto.getRouteType(), routeVo); return R.ok(routeVo); } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java
@@ -150,8 +150,18 @@ @ApiOperation(value = "设置特殊点位",tags = "后台管理-特殊点位") public R setSpecialPoint(@RequestBody XpPointSpecialDto dto) { xpPointService.update(new LambdaUpdateWrapper<XpPoint>().set(XpPoint::getChargePoint, 0).set(XpPoint::getParkingPoint,0)); xpPointService.update(new LambdaUpdateWrapper<XpPoint>().in(XpPoint::getId,dto.getChargePoints()).set(XpPoint::getChargePoint,1)); xpPointService.update(new LambdaUpdateWrapper<XpPoint>().in(XpPoint::getId,dto.getParkingPoints()).set(XpPoint::getParkingPoint,2)); List<XpPoint> list = xpPointService.list(new LambdaQueryWrapper<XpPoint>().in(XpPoint::getId, dto.getChargePoints())); list.forEach(e->{ e.setChargePoint(1); e.setElectronicAreaId(null); }); xpPointService.updateBatchById(list); List<XpPoint> list1 = xpPointService.list(new LambdaQueryWrapper<XpPoint>().in(XpPoint::getId, dto.getParkingPoints())); list1.forEach(e->{ e.setParkingPoint(1); e.setElectronicAreaId(null); }); xpPointService.updateBatchById(list1); return R.ok(); } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpCruisePlanServiceImpl.java
@@ -21,10 +21,7 @@ import com.xiaopeng.operation.dto.XpCruisePlanEditDTO; import com.xiaopeng.operation.mapper.XpCruisePlanMapper; import com.xiaopeng.operation.query.CruisePlanQuery; import com.xiaopeng.operation.service.IXpCruisePlanPointService; import com.xiaopeng.operation.service.IXpCruisePlanService; import com.xiaopeng.operation.service.IXpCruisePlanVehicleService; import com.xiaopeng.operation.service.IXpPointService; import com.xiaopeng.operation.service.*; import com.xiaopeng.operation.vo.XpCruisePlanDetailVO; import com.xiaopeng.operation.vo.XpCruisePlanPointVO; import com.xiaopeng.operation.vo.XpCruisePlanVehicleVO; @@ -51,7 +48,7 @@ private final IXpCruisePlanPointService xpCruisePlanPointService; private final IXpCruisePlanVehicleService xpCruisePlanVehicleService; private final IXpPointService xpPointService; private final XpPointService xpPointService; private final XpVehicleClient xpVehicleClient; private final XpFleetVehicleClient xpFleetVehicleClient; private final XpFleetClient xpFleetClient; xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -460,8 +460,9 @@ * 订单查询实时轨迹路线 */ @ApiOperation(value = "订单查询实时轨迹路线") @PostMapping("/api/v1/order/queryOrderRoute") public R<RouteVo> queryOrderRoute(@Validated @RequestBody QueryOrderRouteDTO dto) { @PostMapping("/api/v1/mini-program/order/queryOrderRoute") public R<RouteVo> queryOrderRoute(@Validated @RequestBody QueryOrderRouteDTO dto, HttpServletRequest request) { String uid = request.getHeader("XP-Uid"); // 查询订单信息 XpOrder xpOrder = xpOrderService.getById(dto.getOrderId()); // 封装消息内容 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -952,6 +952,7 @@ order.setStatus(8); order.setAppUserId(null); order.setTripEnd(LocalDateTime.now()); order.setMileageKilometers(80.0); baseMapper.updateById(order); // 解绑用户与车辆关系 CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo(); @@ -1009,9 +1010,8 @@ // 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值 config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num12")), 999999, Double.parseDouble(basicPricingJson.getString("num13")))); } for (Object o : startingFareJsonArray) { // 转化为jsonObject JSONObject jsonObject = (JSONObject) o; for (int i = 0; i < startingFareJsonArray.size(); i++) { com.alibaba.fastjson.JSONObject jsonObject = startingFareJsonArray.getJSONObject(i); String num1 = jsonObject.getString("num1"); String num2 = jsonObject.getString("num2"); String num3 = jsonObject.getString("num3"); @@ -1021,7 +1021,6 @@ String num7 = jsonObject.getString("num7"); config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", num1, num2, Double.parseDouble(num3), Double.parseDouble(num4), Double.parseDouble(num5), Double.parseDouble(num6), Double.parseDouble(num7))); } TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService(); Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getCreateTime()), order.getMileageKilometers(), gpsPoints, config); @@ -1091,8 +1090,9 @@ } else if (key.contains("节假")) { startDetail.setType(4); } startDetail.setDuration(Double.valueOf(key.split("=")[1])); startDetail.setMileage(new BigDecimal(key.split("&")[1])); String durationAndMileage = key.split("\\|")[2]; startDetail.setDuration(Double.valueOf(durationAndMileage.split("&")[0])); startDetail.setMileage(new BigDecimal(durationAndMileage.split("&")[1])); start.add(startDetail); } // 封装里程费 @@ -1100,8 +1100,8 @@ FareBreakdownDetailVo mileageDetail = new FareBreakdownDetailVo(); if (key.contains("普通时段")) { mileageDetail.setType(1); String key1 = "distance普通时段" + key.split("\\|")[1]; String key2 = "普通时段" + key.split("\\|")[1]; String key1 = "distance普通时段|" + key.split("\\|")[1]; String key2 = "普通时段|" + key.split("\\|")[1]; BigDecimal distance = bill.get(key1); BigDecimal money = bill.get(key2); mileageDetail.setMileage(distance); @@ -1109,8 +1109,8 @@ mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate))); } else if (key.contains("夜间行驶")) { mileageDetail.setType(2); String key1 = "distance夜间行驶" + key.split("\\|")[1]; String key2 = "夜间行驶" + key.split("\\|")[1]; String key1 = "distance夜间行驶|" + key.split("\\|")[1]; String key2 = "夜间行驶|" + key.split("\\|")[1]; BigDecimal distance = bill.get(key1); BigDecimal money = bill.get(key2); mileageDetail.setMileage(distance); @@ -1119,8 +1119,8 @@ mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate))); } else if (key.contains("高峰期")) { mileageDetail.setType(3); String key1 = "distance高峰期" + key.split("\\|")[1]; String key2 = "高峰期" + key.split("\\|")[1]; String key1 = "distance高峰期|" + key.split("\\|")[1]; String key2 = "高峰期|" + key.split("\\|")[1]; BigDecimal distance = bill.get(key1); BigDecimal money = bill.get(key2); mileageDetail.setMileage(distance); @@ -1129,8 +1129,8 @@ mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate))); } else if (key.contains("节假")) { mileageDetail.setType(4); String key1 = "distance节假日" + key.split("\\|")[1]; String key2 = "节假日" + key.split("\\|")[1]; String key1 = "distance节假日|" + key.split("\\|")[1]; String key2 = "节假日|" + key.split("\\|")[1]; BigDecimal distance = bill.get(key1); BigDecimal money = bill.get(key2); mileageDetail.setMileage(distance); @@ -1178,16 +1178,19 @@ for (XpOrderDetail xpOrderDetail : xpOrderDetails) { xpOrderDetailMapper.insert(xpOrderDetail); } for (FareBreakdownDetailVo fareBreakdownDetailVo : duration) { order.setDurationType(fareBreakdownDetailVo.getType()); order.setDurationMoney(fareBreakdownDetailVo.getMoney()); order.setDuration(Double.parseDouble(fareBreakdownDetailVo.getDuration() + "")); for (XpOrderDetail xpOrderDetail : xpOrderDetails) { if (xpOrderDetail.getDetailType() == 1){ order.setDurationType(xpOrderDetail.getType()); order.setDurationMoney(xpOrderDetail.getMoney()); order.setDuration(Double.parseDouble(xpOrderDetail.getDuration() + "")); }else{ order.setLongDistanceType(order.getDurationType()); order.setLongDistance(xpOrderDetail.getMileage().doubleValue()); order.setLongDistancemoney(xpOrderDetail.getMoney()); } } for (FareBreakdownDetailVo fareBreakdownDetailVo : longDistance) { order.setLongDistanceType(fareBreakdownDetailVo.getType()); order.setLongDistance(fareBreakdownDetailVo.getMileage().doubleValue()); order.setLongDistancemoney(fareBreakdownDetailVo.getMoney()); } BigDecimal orderMoney = startMoney.add(mileageMoney).add(order.getDurationMoney() != null ? order.getDurationMoney() : BigDecimal.ZERO) .add(order.getLongDistancemoney() != null ? order.getLongDistancemoney() : BigDecimal.ZERO) .add(order.getWaitMoney()!=null?order.getWaitMoney():BigDecimal.ZERO); @@ -1478,7 +1481,7 @@ detail.setTime(xpOrderDetail.getTime()); detail.setMileage(xpOrderDetail.getMileage()); detail.setDuration(xpOrderDetail.getDuration()); if (xpOrderDetail.getType() == 1){ if (xpOrderDetail.getDetailType() == 1){ start.add(detail); }else{ mileage.add(detail); @@ -1490,6 +1493,7 @@ durationDetail.setType(order.getDurationType()); durationDetail.setDuration(order.getDuration()); durationDetail.setMoney(order.getDurationMoney()); duration.add(durationDetail); } List<FareBreakdownDetailVo> longDistance = new ArrayList<>(); @@ -1531,6 +1535,7 @@ // mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可 XpOrder order = this.getById(dto.getOrderId()); order.setStatus(9); order.setAppUserId(null); baseMapper.updateById(order); return R.ok(); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaxiPricingDemoService.java
@@ -41,7 +41,7 @@ BigDecimal totalMileage = BigDecimal.valueOf(totalMileageKm); PricingRule baseRule = config.findMatchedRule(orderTime); result.put("起步价(" + baseRule.ruleName + ")"+"|"+baseRule.start+"-"+baseRule.end+"="+baseRule.baseMin+"&"+baseRule.baseKm, baseRule.baseFare); result.put("起步价(" + baseRule.ruleName + ")"+"|"+baseRule.start+"-"+baseRule.end+"|"+baseRule.baseMin+"&"+baseRule.baseKm, baseRule.baseFare); if (totalMileage.compareTo(baseRule.baseKm) <= 0) { return formatMap(result);