| | |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.xiaopeng.api.dto.account.UseUserCouponDto; |
| | | import com.xiaopeng.api.dto.automaticPilot.PushOrderDto; |
| | | import com.xiaopeng.api.dto.map.RouteAndFareDto; |
| | | import com.xiaopeng.api.dto.operation.LonLatDto; |
| | |
| | | import com.xiaopeng.api.model.operation.XpElectronicFence; |
| | | import com.xiaopeng.api.model.operation.XpTradingStrategy; |
| | | import com.xiaopeng.api.model.order.XpOrder; |
| | | import com.xiaopeng.api.model.order.XpOrderReassign; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | | import com.xiaopeng.api.vo.OrderType; |
| | | import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; |
| | |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.enums.OrderStatusEnum; |
| | | import com.xiaopeng.common.redis.service.RedisService; |
| | | import com.xiaopeng.operation.config.UidVinBindingConfig; |
| | | import com.xiaopeng.operation.dto.PriorityMatchResult; |
| | | import com.xiaopeng.operation.mapper.XpElectronicFenceMapper; |
| | | import com.xiaopeng.operation.service.IXpElectronicFenceAreaService; |
| | | import com.xiaopeng.operation.service.IXpTradingStrategyService; |
| | | import com.xiaopeng.operation.service.XpPointService; |
| | | import com.xiaopeng.operation.config.UidVinBindingConfig; |
| | | import com.xiaopeng.operation.dto.PriorityMatchResult; |
| | | import com.xiaopeng.operation.service.UidVinPriorityMatcher; |
| | | import com.xiaopeng.operation.service.XpPointService; |
| | | import com.xiaopeng.operation.utils.mango.VehiclePositionService; |
| | | import lombok.SneakyThrows; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 订单处理 |
| | | * 重新改派 |
| | | * 1.优化好点 做个倒计时的异步改派多次 |
| | | * @param count 轮数 |
| | | * @param uid |
| | | * @param uid 用户id |
| | | * @param longitude 经度 |
| | | * @param latitude 纬度 |
| | | * @param orderNo 订单号 |
| | | */ |
| | | @SneakyThrows |
| | | public void reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) { |
| | | System.out.println("进入推单环环节"); |
| | | public XpOrderReassign reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) { |
| | | log.info("进入推单环环节"); |
| | | if (count == 0) { |
| | | count = 1; |
| | | } |
| | | // 订单状态 |
| | | R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo); |
| | | if (xpOrderR.getCode() != 200) { |
| | | return; |
| | | return null; |
| | | } |
| | | // List<Integer> notDrive = new ArrayList<Integer>(){{ //未行驶的情况下订单故障状态点 status=2、3、4、5 |
| | | // add(OrderStatusEnum.READY_DEPART.getCode());add(OrderStatusEnum.PICK_UP.getCode()); |
| | | // add(OrderStatusEnum.PICK_UP_GUESTS.getCode());add(OrderStatusEnum.PASSENGER_BOARDED.getCode()); |
| | | // }}; |
| | | |
| | | if (xpOrderR.getData().getStatus() != 1) { |
| | | return; |
| | | return null; |
| | | } |
| | | |
| | | XpOrder data = xpOrderR.getData(); |
| | | XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null); |
| | | boolean orderCarStatus = false;//未派到车 默认 |
| | | |
| | | XpOrderReassign entity = new XpOrderReassign(data.getId(),data.getVehicleId(),data.getFleetId(),longitude,latitude,"接驾故障"); |
| | | entity.setIsComplete(false); |
| | | entity.setAppUserId(Long.valueOf(uid)); |
| | | //循环找车 |
| | | for (int i = 0; i < count; i++) { |
| | | log.info("进入找车环节"); |
| | |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | |
| | | //接单成功 将 修改 订单的状态=1 ( 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成) |
| | | orderCarStatus = true; |
| | | entity.setNewVehicleId(vehicleId1.getId()); |
| | | entity.setNewFleetId(vehicleId1.getFleetId()); |
| | | entity.setIsComplete(true); |
| | | // //接单成功 将 修改 订单的状态=1 ( 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成) |
| | | // orderCarStatus = true; |
| | | xpOrderClient.updateOrderStatus(data.getId(), OrderStatusEnum.PENDING_ORDER.getCode()); |
| | | redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.PENDING_ORDER.getCode(), 24L, TimeUnit.HOURS); |
| | | |
| | | break; |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } finally { |
| | | lock.unlock(); |
| | | } |
| | | } |
| | | //未找到车 系统强制取消订单,状态流转至“系统自动取消”。 自动退回优惠卷 |
| | | if(!orderCarStatus){ |
| | | xpOrderClient.updateOrderStatus(data.getId(),OrderStatusEnum.CANCELED.getCode()); |
| | | redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.CANCELED.getCode(), 24L, TimeUnit.HOURS); |
| | | //有优惠卷 自动退回优惠卷 |
| | | if(data.getCouponId() != null ){ |
| | | UseUserCouponDto useUserCouponDto = new UseUserCouponDto(); |
| | | useUserCouponDto.setUserCouponId(data.getCouponId() ); |
| | | xpAppUserCouponClient.backUserCoupon(useUserCouponDto); |
| | | } |
| | | } |
| | | |
| | | //保存改派记录 |
| | | return entity; |
| | | } |
| | | |
| | | |