| | |
| | | import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; |
| | | import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; |
| | | import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto; |
| | | import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto; |
| | | import com.xiaopeng.api.feignClient.account.UserResourcesClient; |
| | | import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient; |
| | | import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient; |
| | |
| | | import com.xiaopeng.api.vo.OrderType; |
| | | import com.xiaopeng.api.vo.account.UserCouponVo; |
| | | import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; |
| | | // import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType; |
| | | import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperationType; |
| | | import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType; |
| | | import com.xiaopeng.api.vo.operation.RouteVo; |
| | | import com.xiaopeng.api.vo.order.*; |
| | | import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo; |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.data.domain.Sort; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | |
| | | private MongoTemplate mongoTemplate; |
| | | @Autowired |
| | | private HolidayUtil holidayUtil; |
| | | // @Autowired |
| | | // private XpPricingUtil xpPricingUtil; |
| | | |
| | | @Value("${robotaxi.appId:xp_robotaxi_api}") |
| | | private String appid; |
| | | |
| | | |
| | | @Override |
| | | public OrderStatisticsDTO getOrderStatistics(StatisticsQueryDTO query) { |
| | |
| | | * 取消订单 |
| | | */ |
| | | private void cancelOrder(XpOrder order) { |
| | | redisService.removeByPattern(order.getQueueName(),order.getOrderNumber()); |
| | | //判断还原车辆状态 |
| | | if(null == order.getVehicleId()){ |
| | | Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString()); |
| | | if(null != cacheObject1){ |
| | | com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString()); |
| | | String vin = jsonObject.getString("vin"); |
| | | XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData(); |
| | | if(null != vehicle && 0 != vehicle.getState()){ |
| | | vehicle.setState(0); |
| | | xpVehicleClient.updateVehicleById(vehicle); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (order.getStatus() == 1) { |
| | | order.setStatus(0); |
| | | order.setAppUserId(null); |
| | | baseMapper.updateById(order); |
| | | return; |
| | | } |
| | | // 1. 更新订单状态为已取消(0) |
| | | lambdaUpdate().set(XpOrder::getStatus, 0) |
| | | .eq(XpOrder::getId, order.getId()).update(); |
| | |
| | | //查询车辆信息 |
| | | R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getId()); |
| | | if (xpVehicleR.getCode() == HttpStatus.SUCCESS && Objects.nonNull(xpVehicleR.getData())) { |
| | | XpVehicle xpVehicle = xpVehicleR.getData(); |
| | | // 组装调用车机参数 |
| | | CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo(); |
| | | cancelTaxiPassengerVo.setVin(xpVehicle.getVehicleVin()); |
| | | cancelTaxiPassengerVo.setUid(order.getAppUserId().toString()); |
| | | cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber()); |
| | | // TODO 加配置文件取 |
| | | cancelTaxiPassengerVo.setAppId(appid); |
| | | |
| | | BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); |
| | | if (baseVehicleUserDto == null) { |
| | | // TODO 本地无法调通 |
| | | // throw new RuntimeException("取消订单失败"); |
| | | } |
| | | |
| | | //还原车辆状态 |
| | | if(1 == xpVehicle.getState()){ |
| | | xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0)); |
| | | } |
| | | |
| | | // 下发命令 |
| | | if (order.getStatus() > 1) { |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setOrderId(order.getId().toString()); |
| | | pushOrderDto.setVin(xpVehicleR.getData().getVehicleVin()); |
| | | // pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER); |
| | | pushOrderDto.setVin(xpVehicle.getVehicleVin()); |
| | | pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER); |
| | | orderMissionClient.cancelOrder(pushOrderDto); |
| | | } |
| | | } else { |
| | |
| | | PushOrderDto cancelDto = new PushOrderDto(); |
| | | cancelDto.setOrderId(order.getId().toString()); |
| | | cancelDto.setVin(oldVehicle.getVehicleVin()); |
| | | // cancelDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER); |
| | | cancelDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER); |
| | | orderMissionClient.cancelOrder(cancelDto); |
| | | log.info("已取消原车辆订单指令,订单ID: {}, VIN: {}", orderId, oldVehicle.getVehicleVin()); |
| | | |
| | |
| | | cancelVo.setVin(oldVehicle.getVehicleVin()); |
| | | cancelVo.setUid(order.getAppUserId().toString()); |
| | | cancelVo.setOrderNo(order.getOrderNumber()); |
| | | cancelVo.setAppId(""); |
| | | cancelVo.setAppId(appid); |
| | | userVehicleClient.cancelTaxiPassenger(cancelVo); |
| | | log.info("已解绑乘客与原车辆关系,用户ID: {}, VIN: {}", order.getAppUserId(), oldVehicle.getVehicleVin()); |
| | | } |
| | |
| | | addVo.setVin(newVehicle.getVehicleVin()); |
| | | addVo.setUid(order.getAppUserId().toString()); |
| | | addVo.setOrderNo(order.getOrderNumber()); |
| | | addVo.setAppId(""); // TODO 获取appId |
| | | addVo.setAppId(appid); // TODO 获取appId |
| | | userVehicleClient.addTaxiPassenger(addVo); |
| | | log.info("已绑定乘客与新车辆关系,用户ID: {}, VIN: {}", order.getAppUserId(), newVehicle.getVehicleVin()); |
| | | } |
| | |
| | | if (order.getStatus() > 5 || order.getStatus() < 1) { |
| | | throw new ServiceException("订单状态错误", I18nKeyConstant.ORDER_STATUS_ERROR); |
| | | } |
| | | |
| | | redisService.removeByPattern(order.getQueueName(),order.getOrderNumber()); |
| | | //判断还原车辆状态 |
| | | if(null == order.getVehicleId()){ |
| | | Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString()); |
| | | if(null != cacheObject1){ |
| | | com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString()); |
| | | String vin = jsonObject.getString("vin"); |
| | | XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData(); |
| | | if(null != vehicle && 0 != vehicle.getState()){ |
| | | vehicle.setState(0); |
| | | xpVehicleClient.updateVehicleById(vehicle); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (order.getStatus() == 1) { |
| | | order.setStatus(0); |
| | | order.setAppUserId(null); |
| | |
| | | cancelTaxiPassengerVo.setUid(order.getAppUserId().toString()); |
| | | cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber()); |
| | | // TODO 加配置文件取 |
| | | cancelTaxiPassengerVo.setAppId(""); |
| | | cancelTaxiPassengerVo.setAppId(appid); |
| | | |
| | | BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); |
| | | if (baseVehicleUserDto == null) { |
| | |
| | | xpOrderCancel.setCancelSource(1); |
| | | xpOrderCancel.setCancelReason("用户取消订单"); |
| | | xpOrderCancelService.save(xpOrderCancel); |
| | | //判断还原车辆状态 |
| | | Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString()); |
| | | if(null != cacheObject1){ |
| | | com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString()); |
| | | String vin = jsonObject.getString("vin"); |
| | | XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData(); |
| | | if(null != vehicle && 0 != vehicle.getState()){ |
| | | vehicle.setState(0); |
| | | xpVehicleClient.updateVehicleById(vehicle); |
| | | } |
| | | //还原车辆状态 |
| | | if(1 == xpVehicle.getState()){ |
| | | xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0)); |
| | | } |
| | | |
| | | // 设置当天的取消次数缓存 |
| | |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setOrderId(order.getId().toString()); |
| | | pushOrderDto.setVin(xpVehicle.getVehicleVin()); |
| | | // pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.VEHICLE_CANCEL_ORDER); |
| | | pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.VEHICLE_CANCEL_ORDER); |
| | | orderMissionClient.cancelOrder(pushOrderDto); |
| | | } |
| | | |
| | |
| | | xpOrderCancel.setCancelReason("系统取消订单"); |
| | | xpOrderCancel.setCreateTime(LocalDateTime.now()); |
| | | xpOrderCancelService.save(xpOrderCancel); |
| | | |
| | | redisService.removeByPattern(order.getQueueName(),order.getOrderNumber()); |
| | | |
| | | |
| | | R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getVehicleId()); |
| | |
| | | cancelTaxiPassengerVo.setUid(uid); |
| | | cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber()); |
| | | // TODO 加配置文件取 |
| | | cancelTaxiPassengerVo.setAppId(""); |
| | | cancelTaxiPassengerVo.setAppId(appid); |
| | | userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); |
| | | |
| | | // 修改车辆接单状态 |
| | |
| | | this.updateById(order); |
| | | addTaxiPassengerVo.setOrderNo(order.getOrderNumber()); |
| | | // TODO appid |
| | | addTaxiPassengerVo.setAppId(""); |
| | | addTaxiPassengerVo.setAppId(appid); |
| | | userVehicleClient.addTaxiPassenger(addTaxiPassengerVo); |
| | | //推送乘客车辆到达预约点的导航数据 |
| | | sendRoute(addTaxiPassengerVo.getUid(), orderId, "ORDER_NAVIGATION_START_DATA", dto.getXpVehicleVin()); |