| | |
| | | String orderId = split[0]; |
| | | XpOrder xpOrder = xpOrderClient.queryOrderById(Long.valueOf(orderId)).getData(); |
| | | if(xpOrder.getStatus() != OrderStatusEnum.PENDING_ORDER.getCode()){ |
| | | redisService.popFirstElement(xpOrder.getQueueName()); |
| | | if(StringUtils.isNotEmpty((xpOrder.getQueueName()))){ |
| | | redisService.removeByPattern(xpOrder.getQueueName(), xpOrder.getOrderNumber()); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | String[] split = firstElement.toString().split("_"); |
| | | // 如果未处理 创建新任务 |
| | | if (split[2].equals("0")) { |
| | | String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7]; |
| | | String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7] + "_" + split[8]; |
| | | // 状态改为处理中 |
| | | redisService.updateFirst(name, value); |
| | | threadPoolTaskExecutor.submit(() -> { |
| | |
| | | String orderId = split[0]; |
| | | XpOrder xpOrder = xpOrderClient.queryOrderById(Long.valueOf(orderId)).getData(); |
| | | if(xpOrder.getStatus() != OrderStatusEnum.PENDING_ORDER.getCode()){ |
| | | redisService.popFirstElement(xpOrder.getQueueName()); |
| | | if(StringUtils.isNotEmpty(xpOrder.getQueueName())){ |
| | | redisService.removeByPattern(xpOrder.getQueueName(), xpOrder.getOrderNumber()); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | if (xpOrder.getStatus() == 1) { |
| | | xpOrderClient.cancelOrder(orderId); |
| | | log.info("五轮推单结束,无车辆接单,执行取消订单 {}", orderNo); |
| | | //将订单从队列中移除 |
| | | redisService.popFirstElement(quoteName); |
| | | log.info("五轮推单结束,无车辆接单,执行队列移除订单 {}", orderNo); |
| | | //推送订单状态给乘客 |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(xpOrder.getAppUserId().toString()); |
| | |
| | | } |
| | | XpOrder xpOrder = xpOrderR.getData(); |
| | | if (xpOrder.getStatus() == 0) { |
| | | log.info("订单已取消,退出退单逻辑 {}", orderNo); |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName, xpOrder.getOrderNumber()); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | // 找出围栏id |
| | |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(priorityVin); |
| | | pushOrderDto.setOrderId(orderCheck.getData().getId().toString()); |
| | | pushOrderDto.setStartTaskId(orderCheck.getData().getXpuStartTaskId()); |
| | | pushOrderDto.setEndTaskId(orderCheck.getData().getXpuEndTaskId()); |
| | | pushOrderDto.setStartWaypointId(orderCheck.getData().getStartPointId()); |
| | | pushOrderDto.setEndWaypointId(orderCheck.getData().getEndPointId()); |
| | | pushOrderDto.setStartLatitude(orderCheck.getData().getStartLat()); |
| | |
| | | orderCheck.getData().getEndLat(), orderCheck.getData().getEndLon(), orderNo); |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | log.info("[人车订单绑定测试] ====== 派单成功! uid={}, vin={}, orderNo={}, 从队列移除订单 ======", uid, priorityVin, orderNo); |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName, orderNo); |
| | | } |
| | | |
| | | return true; |
| | | } else { |
| | | log.info("[人车订单绑定测试] 关闭巡游单失败, 回退常规流程, vin={}, orderNo={}", priorityVin, orderNo); |
| | |
| | | } |
| | | VehiclePositionVo vehiclePositionVo = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getTotal).reversed()).collect(Collectors.toList()).get(0); |
| | | |
| | | // |
| | | // VehiclePositionVo vehiclePositionVo1 = vehiclePositionVo; |
| | | |
| | | |
| | | RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo.getVin()); |
| | | lock.lock(10, TimeUnit.SECONDS); |
| | | log.info("队列 {} 车辆 {} 单号 {}", quoteName, vehiclePositionVo.getVin(), orderNo); |
| | | try { |
| | | |
| | | |
| | | |
| | | // VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id()); |
| | | R<XpVehicle> vehiclePositionR = xpVehicleClient.findByVehicleVin(vehiclePositionVo.getVin()); |
| | | if (vehiclePositionR.getCode() != 200) { |
| | | continue; |
| | | } |
| | | if (vehiclePositionR.getCode() == 200) { |
| | | XpVehicle vehiclePosition = vehiclePositionR.getData(); |
| | | log.info("符合条件的车辆 {} ,直接推单XPU。单号 {}", vehiclePosition.getPlateNumber(), orderNo); |
| | | log.info("当前车辆状态 {} 单号 {}", vehiclePosition.getState(), orderNo); |
| | | |
| | | String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehiclePosition.getVehicleVin()); |
| | | // 再次查询一下订单 看是否取消 |
| | | xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo); |
| | | if (xpOrderR.getCode() != 200) { |
| | | continue; |
| | | } |
| | | xpOrder = xpOrderR.getData(); |
| | | if (xpOrder.getStatus() != 1) { |
| | | continue; |
| | | } |
| | | xpOrder = xpOrderClient.queryOrderByOrderNo(orderNo).getData(); |
| | | if (xpOrder.getStatus() == 1) { |
| | | //所有条件满足,走正常派单,不满足走后面的连环派单 |
| | | if (vehiclePosition.getOperatingStatus() == 1 && vehiclePosition.getState() == 0 && vehiclePosition.getVehicleType() == 2) { |
| | | //非合作商的车辆需要处理巡游单 |
| | | if(null == vehiclePosition.getOfficialPartnerId()){ |
| | | // 关闭巡游单子 |
| | | R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin); |
| | | if (stringR == null || stringR.getCode() != 200) { |
| | | log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber()); |
| | | continue; |
| | | } |
| | | if (stringR != null && stringR.getCode() == 200) { |
| | | log.info("关闭巡游单成功 {} {}", vehiclePosition.getPlateNumber(), orderNo); |
| | | XpCruiseOrder cruiseOrder = stringR.getData(); |
| | | // 下发命令 |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(vin); |
| | | pushOrderDto.setOrderId(xpOrder.getId().toString()); |
| | | pushOrderDto.setStartTaskId(xpOrder.getXpuStartTaskId()); |
| | | pushOrderDto.setEndTaskId(xpOrder.getXpuEndTaskId()); |
| | | pushOrderDto.setStartWaypointId(xpOrder.getStartPointId()); |
| | | pushOrderDto.setEndWaypointId(xpOrder.getEndPointId()); |
| | | pushOrderDto.setStartLatitude(xpOrder.getStartLat()); |
| | |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo); |
| | | } |
| | | }else { |
| | | //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口 |
| | | officialPartnerUtil.pushNewOrder(vehiclePosition.getOfficialPartnerId(), xpOrder); |
| | | } |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName,xpOrder.getOrderNumber()); |
| | | } |
| | | |
| | | log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName); |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | |
| | | try { |
| | | // 查询车辆状态 |
| | | R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin); |
| | | if (vehicleR.getCode() != 200) { |
| | | continue; |
| | | } |
| | | if (vehicleR.getCode() == 200) { |
| | | XpVehicle vehicleId1 = vehicleR.getData(); |
| | | log.info("附近只有一个车辆 {} ,直接推单XPU。单号 {}", vehicleId1.getPlateNumber(), orderNo); |
| | | log.info("当前车辆状态 运营状态 {} 单号 {}", vehicleId1.getState(), orderNo); |
| | | |
| | | // 再次查询一下订单 看是否取消 |
| | | xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo); |
| | | if (xpOrderR.getCode() != 200) { |
| | | continue; |
| | | } |
| | | xpOrder = xpOrderR.getData(); |
| | | if (xpOrder.getStatus() != 1) { |
| | | continue; |
| | | } |
| | | |
| | | xpOrder = xpOrderClient.queryOrderByOrderNo(orderNo).getData(); |
| | | if (xpOrder.getStatus() == 1) { |
| | | // 所有条件满足走正常派单,不满足走循环派单 |
| | | if (vehicleId1.getOperatingStatus() == 1 && vehicleId1.getState() == 0 && vehicleId1.getVehicleType() == 2) { |
| | | if(null == vehicleId1.getOfficialPartnerId()){ |
| | | // 关闭巡游单子 |
| | | String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehicleId1.getVehicleVin()); |
| | | R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin); |
| | | if (stringR == null || stringR.getCode() != 200) { |
| | | log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber()); |
| | | continue; |
| | | } |
| | | if (stringR != null && stringR.getCode() == 200) { |
| | | log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo); |
| | | XpCruiseOrder cruiseOrder = stringR.getData(); |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(vehiclePosition.getVin()); |
| | | pushOrderDto.setOrderId(xpOrder.getId().toString()); |
| | | pushOrderDto.setStartTaskId(xpOrder.getXpuStartTaskId()); |
| | | pushOrderDto.setEndTaskId(xpOrder.getXpuEndTaskId()); |
| | | pushOrderDto.setStartWaypointId(xpOrder.getStartPointId()); |
| | | pushOrderDto.setEndWaypointId(xpOrder.getEndPointId()); |
| | | pushOrderDto.setStartLatitude(xpOrder.getStartLat()); |
| | |
| | | pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask); |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | } |
| | | }else { |
| | | //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口 |
| | | officialPartnerUtil.pushNewOrder(vehicleId1.getOfficialPartnerId(), xpOrder); |
| | | } |
| | | log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber()); |
| | | redisService.popFirstElement(quoteName); |
| | | |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName, xpOrder.getOrderNumber()); |
| | | } |
| | | |
| | | log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("orderId", xpOrder.getId()); |
| | | jsonObject.put("endLongitude", xpOrder.getEndLat()); |
| | | jsonObject.put("endLongitude", xpOrder.getEndLon()); |
| | | jsonObject.put("endLatitude", xpOrder.getEndLat()); |
| | | redisService.setCacheObject(CacheConstants.nextOrder(xpOrder1.getId().toString()), jsonObject.toJSONString()); |
| | | redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), JSON.toJSONString(route)); |
| | | |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName,xpOrder.getOrderNumber()); |
| | | } |
| | | log.info("连环派单 {} 设置下一单接驾导航数据 {}", orderNo, JSON.toJSONString(route)); |
| | | |
| | | //构建推送消息 |
| | |
| | | } |
| | | XpOrder xpOrder = xpOrderR.getData(); |
| | | if (xpOrder.getStatus() == 0) { |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName, xpOrder.getOrderNumber()); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 找出围栏id |
| | |
| | | orderCheck.getData().getEndLat(), orderCheck.getData().getEndLon(), orderNo); |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | log.info("[人车订单绑定测试] ====== 派单成功! uid={}, vin={}, orderNo={}, 从队列移除订单 ======", uid, priorityVin, orderNo); |
| | | |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName, orderNo); |
| | | } |
| | | |
| | | return true; |
| | | } else { |
| | | log.info("[人车订单绑定测试] 关闭巡游单失败, 回退常规流程, vin={}, orderNo={}", priorityVin, orderNo); |
| | |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo); |
| | | |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName,xpOrder.getOrderNumber()); |
| | | } |
| | | log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName); |
| | | return true; |
| | | } catch (Exception e) { |
| | |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber()); |
| | | redisService.popFirstElement(quoteName); |
| | | |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName, xpOrder.getOrderNumber()); |
| | | } |
| | | log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName); |
| | | return true; |
| | | } catch (Exception e) { |
| | |
| | | // orderMissionClient.pushOrder(pushOrderDto); |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("orderId", xpOrder.getId()); |
| | | jsonObject.put("endLongitude", xpOrder.getEndLat()); |
| | | jsonObject.put("endLongitude", xpOrder.getEndLon()); |
| | | jsonObject.put("endLatitude", xpOrder.getEndLat()); |
| | | redisService.setCacheObject(CacheConstants.nextOrder(luckyOder.getId().toString()), jsonObject.toJSONString()); |
| | | redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), routeToOrigin); |
| | | if(StringUtils.isNotEmpty(quoteName)){ |
| | | redisService.removeByPattern(quoteName,xpOrder.getOrderNumber()); |
| | | } |
| | | |
| | | log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName); |
| | | break; |
| | | } |
| | |
| | | routeToOrigin.setDistance(routeToOrigin.getDistance() + routeRemain.getDistance()); |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("orderId", data.getId()); |
| | | jsonObject.put("endLongitude", data.getEndLat()); |
| | | jsonObject.put("endLongitude", data.getEndLon()); |
| | | jsonObject.put("endLatitude", data.getEndLat()); |
| | | redisService.setCacheObject(CacheConstants.nextOrder(luckyOder.getId().toString()), jsonObject.toJSONString()); |
| | | redisService.setCacheObject(CacheConstants.navigationStart(data.getAppUserId().toString()), routeToOrigin); |