xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/order/PopOrderDto.java
New file @@ -0,0 +1,20 @@ package com.xiaopeng.api.dto.order; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "订单成功下发命令信息") public class PopOrderDto { @ApiModelProperty(value = "队列名称") private String queueName; @ApiModelProperty(value = "订单Id") private Long orderId; @ApiModelProperty(value = "车辆Id") private Long xpVehicleId; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPricingClient.java
@@ -3,6 +3,7 @@ import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.factory.operation.XpPricingClientFallbackFactory; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpPricing; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; @@ -18,7 +19,16 @@ */ @PostMapping("/base/v1/mini-program/pricing/getWaitTime") R<Integer> getWaitTime(@RequestBody LonLatDto dto); // 根据开通城市 获取定价 @GetMapping("/base/v1/mini-program/getPricingByCityId/{cityId}") R<XpPricing> getPricingByCityId(@PathVariable("cityId")Long cityId); /** * 保存XpGeoQueryEntity */ @PostMapping("/inner/saveXpGeoQueryEntity") R<?> saveXpGeoQueryEntity(@RequestBody XpGeoQueryEntity xpGeoQueryEntity); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java
@@ -1,6 +1,7 @@ package com.xiaopeng.api.feignClient.order; import com.xiaopeng.api.dto.order.GetOrderNumDto; import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; import com.xiaopeng.api.factory.order.XpOrderClientFallbackFactory; @@ -84,4 +85,10 @@ R<Integer> getOrderNum(@RequestBody GetOrderNumDto dto); /** * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据 */ @PostMapping("/inner/order/popOrder") R<?> popOrder(@RequestBody PopOrderDto dto); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpGeoQueryEntity.java
File was renamed from xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/entity/XpGeoQueryEntity.java @@ -1,4 +1,4 @@ package com.xiaopeng.operation.entity; package com.xiaopeng.api.model.operation; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -28,6 +28,8 @@ } @PostMapping("/inner/pushOrder") public R<Boolean> pushOrder(@RequestParam Long orderId) { xp-robotaxi-common/xp-common-redis/src/main/java/com/xiaopeng/common/redis/service/RedisService.java
@@ -179,8 +179,8 @@ } // 获取第一个元素并删除(弹出) public Object popFirstElement(String key) { return redisTemplate.opsForList().leftPop(key); public String popFirstElement(String key) { return (String)redisTemplate.opsForList().leftPop(key); } /** xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpGeoQueryEntityController.java
@@ -1,11 +1,10 @@ package com.xiaopeng.operation.controller; import com.xiaopeng.operation.entity.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.operation.service.IXpGeoQueryEntityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java
@@ -3,12 +3,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpPricing; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.controller.BaseController; import com.xiaopeng.common.core.web.domain.AjaxResult; import com.xiaopeng.api.dto.map.RouteAndFareDto; import com.xiaopeng.operation.dto.XpOrderDto; import com.xiaopeng.operation.service.IXpGeoQueryEntityService; import com.xiaopeng.operation.service.XpPricingService; import com.xiaopeng.api.vo.operation.RouteAndFareVo; import com.xiaopeng.operation.vo.SaveOrderVo; @@ -38,10 +40,12 @@ public class XpPricingController extends BaseController { private final XpPricingService xpPricingService; private final IXpGeoQueryEntityService xpGeoQueryEntityService; public XpPricingController(XpPricingService xpPricingService) { public XpPricingController(XpPricingService xpPricingService, IXpGeoQueryEntityService xpGeoQueryEntityService) { this.xpPricingService = xpPricingService; this.xpGeoQueryEntityService = xpGeoQueryEntityService; } @@ -87,6 +91,18 @@ /** * 保存信息 * @param xpGeoQueryEntity * @return */ @PostMapping("/inner/saveXpGeoQueryEntity") public R<?> saveXpGeoQueryEntity(@RequestBody XpGeoQueryEntity xpGeoQueryEntity){ xpGeoQueryEntityService.save(xpGeoQueryEntity); return R.ok(); } /** * 播单 */ @PostMapping("/base/v1/mini-program/order/save") xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/repository/XpGeoQueryEntityRepository.java
@@ -1,6 +1,6 @@ package com.xiaopeng.operation.repository; import com.xiaopeng.operation.entity.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; import org.springframework.data.mongodb.repository.MongoRepository; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpGeoQueryEntityService.java
@@ -1,7 +1,6 @@ package com.xiaopeng.operation.service; import com.xiaopeng.operation.entity.XpGeoQueryEntity; import org.springframework.data.geo.Point; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import java.util.List; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
@@ -1,6 +1,6 @@ package com.xiaopeng.operation.service.impl; import com.xiaopeng.operation.entity.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.operation.repository.XpGeoQueryEntityRepository; import com.xiaopeng.operation.service.IXpGeoQueryEntityService; import org.springframework.beans.factory.annotation.Autowired; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java
@@ -16,7 +16,6 @@ import com.xiaopeng.api.model.account.XpAppUser; import com.xiaopeng.api.model.operation.*; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.account.UserCouponVo; import com.xiaopeng.api.vo.operation.FareVo; import com.xiaopeng.api.vo.operation.RouteAndFareVo; @@ -29,7 +28,7 @@ import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.operation.constant.I18nKeyConstant; import com.xiaopeng.operation.dto.XpOrderDto; import com.xiaopeng.operation.entity.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.operation.mapper.*; import com.xiaopeng.operation.service.IXpGeoQueryEntityService; import com.xiaopeng.operation.service.XpPricingService; xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.dto.order.GetOrderNumDto; import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; import com.xiaopeng.api.model.order.XpOrder; @@ -115,6 +116,18 @@ return R.ok(xpOrderService.getOrderNum(dto)); } /** * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据 */ @PostMapping("/inner/order/popOrder") public R<?> popOrder(@RequestBody PopOrderDto dto){ xpOrderService.popOrder(dto); return R.ok(); } /** * 新增订单 * xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.api.dto.order.GetOrderNumDto; import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; import com.xiaopeng.api.model.order.XpOrder; @@ -186,4 +187,10 @@ * @param orderTrajectory */ void saveVehicleLocation(OrderTrajectory orderTrajectory); /** * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据 * @param dto */ void popOrder(PopOrderDto dto); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -12,6 +12,7 @@ import com.xiaopeng.api.dto.order.GetOrderNumDto; import com.xiaopeng.api.dto.order.HistoryEndPointsDto; import com.xiaopeng.api.dto.order.HistoryStartPointsDto; import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.pushMessage.SendMessageDTO; import com.xiaopeng.api.dto.statistics.DailyCountDTO; import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; @@ -28,6 +29,7 @@ import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.account.XpAppUser; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.order.XpOrderCancel; @@ -71,11 +73,13 @@ import com.xiaopeng.order.utils.holiday.HolidayUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.transaction.core.TransactionType; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.geo.GeoJsonPoint; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; @@ -1590,6 +1594,42 @@ /** * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据 * @param dto */ @Override @Transactional // @ShardingTransactionType(TransactionType.BASE) public void popOrder(PopOrderDto dto) { XpOrder order = this.getById(dto.getOrderId()); order.setAcceptanceTime(LocalDateTime.now()); order.setVehicleId(dto.getXpVehicleId()); order.setStatus(2); // Redis弹出这个队列元素 // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间 String popFirstElement = redisService.popFirstElement(dto.getQueueName()); XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity(); String[] split = popFirstElement.split("_"); xpGeoQueryEntity.setOrderId(split[0]); String[] split1 = split[1].split(","); xpGeoQueryEntity.setLocation(new GeoJsonPoint(Double.parseDouble(split1[0]), Double.parseDouble(split1[1]))); xpGeoQueryEntity.setTimestamp(new Date()); // 计算2个时间的秒数 LocalDateTime createTime = order.getCreateTime(); LocalDateTime acceptanceTime = order.getAcceptanceTime(); xpGeoQueryEntity.setSeconds((int) Duration.between(createTime, acceptanceTime).getSeconds()); String currentTimeSlot = DateUtils.getCurrentTimeSlot(); xpGeoQueryEntity.setTime(currentTimeSlot); // 存mongo数据 xpPricingClient.saveXpGeoQueryEntity(xpGeoQueryEntity); this.updateById(order); } /** * 获取当前用户正在执行的订单 * * @param uid