xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpTestPointClientFallbackFactory.java
@@ -2,6 +2,7 @@ import com.xiaopeng.api.feignClient.operation.XpTestPointClient; import com.xiaopeng.api.model.map.XpTestPoint; import com.xiaopeng.api.vo.map.QueryTestPoint; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; @@ -23,7 +24,7 @@ } @Override public R<List<XpTestPoint>> queryByIds(List<Long> ids) { public R<List<XpTestPoint>> queryPointByIds(QueryTestPoint query) { log.error("获取点位详情失败:{}", cause.getMessage()); return R.fail("获取点位详情失败"); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpTestOrderClientFallbackFactory.java
@@ -34,6 +34,12 @@ log.error("取消订单失败:{}", cause.getMessage()); return R.fail("取消订单失败"); } @Override public R<Long> queryCountByTestPlanId(Long testPlanId) { log.error("查询测试计划订单数量失败:{}", cause.getMessage()); return R.fail("查询测试计划订单数量失败"); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpTestPointClient.java
@@ -2,10 +2,13 @@ import com.xiaopeng.api.factory.operation.XpTestPointClientFallbackFactory; import com.xiaopeng.api.model.map.XpTestPoint; import com.xiaopeng.api.vo.map.QueryTestPoint; 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 org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -25,8 +28,8 @@ /** * 点位详情 */ @GetMapping("/api/v1/testPoint/queryPointById") R<List<XpTestPoint>> queryByIds(@RequestParam List<Long> ids); @PostMapping("/api/v1/testPoint/queryPointByIds") R<List<XpTestPoint>> queryPointByIds(@RequestBody QueryTestPoint query); @@ -36,6 +39,6 @@ * @param pointId * @return */ @GetMapping("/inner/v1/testPoint/nowInTimePoint") @PostMapping("/inner/v1/testPoint/nowInTimePoint") R<Boolean> nowInTimePoint(@RequestParam Long pointId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpTestOrderClient.java
@@ -43,4 +43,13 @@ */ @PostMapping("/inner/testOrder/cancelTestOrderById") R<?> cancelTestOrderById(@RequestParam Long orderId); /** * 根据测试计划ID查询订单数量 * @param testPlanId * @return */ @PostMapping("/inner/v1/testOrder/queryCountByTestPlanId") R<Long> queryCountByTestPlanId(@RequestParam Long testPlanId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpTestOrder.java
@@ -37,6 +37,8 @@ @ApiModelProperty(value = "订单类型(1=正常单,2=巡游单)") private Integer orderType; @ApiModelProperty(value = "测试计划id") private Integer testPlanId; @ApiModelProperty(value = "用户id") private Long cityId; @ApiModelProperty(value = "车辆id") xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/map/QueryTestPoint.java
New file @@ -0,0 +1,11 @@ package com.xiaopeng.api.vo.map; import lombok.Data; import java.util.List; @Data public class QueryTestPoint { private List<Long> ids; } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpTestPointManagementController.java
@@ -12,6 +12,7 @@ import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.api.vo.map.QueryTestPoint; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.controller.BaseController; import com.xiaopeng.common.core.web.page.PageInfo; @@ -212,9 +213,9 @@ /** * 点位详情 */ @GetMapping("/api/v1/testPoint/queryPointById") public R<List<XpTestPoint>> queryByIds(@RequestParam List<Long> ids){ List<XpTestPoint> xpTestPoints = xpTestPointService.listByIds(ids); @PostMapping("/api/v1/testPoint/queryPointByIds") public R<List<XpTestPoint>> queryPointByIds(@RequestBody QueryTestPoint query){ List<XpTestPoint> xpTestPoints = xpTestPointService.listByIds(query.getIds()); return R.ok(xpTestPoints); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpTestPlanController.java
@@ -54,9 +54,10 @@ @ApiOperation(value = "新增测试计划", tags = {"管理后台-测试计划"}) @PostMapping(value = {"/api/v1/xp-test-plan/add"}) public R<?> add(@Valid @RequestBody XpTestPlanAddDTO dto) { xpTestPlanService.add(dto); return R.ok(); public R<Long> add() { XpTestPlan plan = new XpTestPlan(); xpTestPlanService.save(plan); return R.ok(plan.getId()); } @ApiOperation(value = "编辑测试计划", tags = {"管理后台-测试计划"}) xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTestPlanServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.xiaopeng.api.feignClient.operation.XpTestPointClient; import com.xiaopeng.api.feignClient.order.XpTestOrderClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; @@ -12,8 +13,10 @@ import com.xiaopeng.api.model.operation.XpTestPlanPoint; import com.xiaopeng.api.model.operation.XpTestPlanVehicle; import com.xiaopeng.api.model.operation.XpTestPlan; import com.xiaopeng.api.model.order.XpTestOrder; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.map.QueryTestPoint; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.web.page.PageInfo; @@ -53,6 +56,10 @@ private final XpVehicleClient xpVehicleClient; private final XpFleetVehicleClient xpFleetVehicleClient; private final XpFleetClient xpFleetClient; private final XpTestOrderClient xpTestOrderClient; @Override public PageInfo<XpTestPlan> getPageList(TestPlanQuery query) { PageInfo<XpTestPlan> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); @@ -71,7 +78,8 @@ page.getRecords().forEach(plan -> { plan.setPointNum(pointMap.get(plan.getId()).size()); plan.setVehicleNum(vehicleMap.get(plan.getId()).size()); Long testOrder = xpTestOrderClient.queryCountByTestPlanId(plan.getId()).getData(); plan.setOrderNum(testOrder.intValue()); }); pageInfo.setRecords(page.getRecords()); return pageInfo; @@ -178,7 +186,9 @@ .filter(Objects::nonNull) .collect(Collectors.toList()); pointIds.addAll(pointIds1); List<XpTestPoint> data = testPointClient.queryByIds(pointIds).getData(); QueryTestPoint query = new QueryTestPoint(); query.setIds(pointIds); List<XpTestPoint> data = testPointClient.queryPointByIds(query).getData(); Map<Long, XpTestPoint> pointMap = CollUtil.isNotEmpty(pointIds) ? data.stream() .collect(Collectors.toMap(XpTestPoint::getId, v -> v)) xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpTestOrderController.java
@@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xiaopeng.api.dto.QueryOrderRouteDTO; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.dto.order.GetOrderNumDto; @@ -224,7 +225,6 @@ /** * 订单车辆定位实时存储-订单车辆定位实时存储(内部接口) */ @ApiOperation(value = "订单车辆定位实时存储") @PostMapping("/inner/v1/testOrder/saveVehicleLocation") public R<String> saveVehicleLocation(@RequestBody OrderTrajectoryVo vo) { OrderTrajectory orderTrajectory = new OrderTrajectory(); @@ -234,6 +234,16 @@ } /** * 根据测试计划ID查询订单数量 * @param testPlanId * @return */ @PostMapping("/inner/v1/testOrder/queryCountByTestPlanId") public R<Long> queryCountByTestPlanId(@RequestParam Long testPlanId){ long count = xpTestOrderService.count(new QueryWrapper<XpTestOrder>().eq("test_plan_id", testPlanId)); return R.ok(count); } } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/AddTestOrderVo.java
@@ -5,18 +5,26 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel public class AddTestOrderVo { @ApiModelProperty("测试计划id") private Long testPlanId; private Integer testPlanId; @ApiModelProperty("测试计划点位id") private Long testPlanPointId; @ApiModelProperty("测试起点id") private Long startTestPointId; @ApiModelProperty("测试终点id") private Long endTestPointId; @ApiModelProperty("订单类型(1=测试单,2=巡游单)") private Integer orderType; @ApiModelProperty("是否停车(0=否,1=是)") private Integer stopFlag; @ApiModelProperty("车辆id") private List<Long> vehicleIds; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java
@@ -154,9 +154,8 @@ */ @Override public void addTestOrder(AddTestOrderVo query) { XpTestPlanPoint xpTestPlanPoint = xpTestPlanClient.getXpTestPlanPointById(query.getTestPlanPointId()).getData(); Long startTestPointId = xpTestPlanPoint.getStartTestPointId(); Long endTestPointId = xpTestPlanPoint.getEndTestPointId(); Long startTestPointId = query.getStartTestPointId(); Long endTestPointId = query.getEndTestPointId(); XpTestPoint xpPoint = xpTestPlanClient.getXpTestPointById(startTestPointId).getData(); XpTestPoint endXpPoint = xpTestPlanClient.getXpTestPointById(endTestPointId).getData(); if(xpPoint ==null || xpPoint.getOperationStatus()!=2){ @@ -222,6 +221,7 @@ // 生成订单数据 XpTestOrder xpOrder = new XpTestOrder(); xpOrder.setTestPlanId(query.getTestPlanId()); xpOrder.setOrderType(query.getOrderType()); xpOrder.setMileageKilometers(0.0); xpOrder.setOrderNumber("XP" + System.currentTimeMillis()); @@ -253,15 +253,16 @@ xpOrder.setCreateTime(LocalDateTime.now()); xpOrder.setCityCode(openCity.getCityCode()); List<XpTestPlanVehicle> data = xpTestPlanClient.getXpTestPlanVehicleByTestPlanId(query.getTestPlanId()).getData(); for (XpTestPlanVehicle datum : data) { XpVehicle xpVehicle = xpVehicleClient.queryById(datum.getVehicleId()).getData(); xpOrder.setVehicleId(datum.getVehicleId()); List<Long> vehicleIds = query.getVehicleIds(); for (Long vehicleId : vehicleIds) { XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData(); xpOrder.setVehicleId(vehicleId); xpOrder.setFleetId(xpVehicle.getFleetId()); this.save(xpOrder); redisService.setCacheObject("ORDER_STATUS:" + xpOrder.getId(), 1, 24L, TimeUnit.HOURS); //缓存导航数据,用于下单后推送导航给车端和乘客端 redisService.setCacheObject("TEST_ORDER_NAVIGATION_END_DATA:" + datum.getVehicleId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS); redisService.setCacheObject("TEST_ORDER_NAVIGATION_END_DATA:" + vehicleId, JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS); //下发XPU消息 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(xpVehicle.getVehicleVin());