| | |
| | | |
| | | @Autowired |
| | | private XpMapClient xpMapClient; |
| | | // |
| | | // |
| | | @Autowired |
| | | private OrderMissionClient orderMissionClient; |
| | | |
| | |
| | | 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]; |
| | | // 状态改为处理中 |
| | | redisService.updateFirst(name, value); |
| | | threadPoolTaskExecutor.submit(() -> { |
| | |
| | | @SneakyThrows |
| | | private void processPushOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) { |
| | | System.out.println("进入推单环环节"); |
| | | if(count==0){ |
| | | count=1; |
| | | if (count == 0) { |
| | | count = 1; |
| | | } |
| | | // 订单状态 |
| | | R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo); |
| | |
| | | |
| | | // 订单价值 |
| | | if (Objects.equals(secondMax, tendencyOrderValue)) { |
| | | // 订单价值 |
| | | // 时间差权重 |
| | | Integer weightTimeDifference = xpTradingStrategy.getWeightTimeDifference(); |
| | | // 距离差权重 |
| | | Integer weightDistanceDifference = xpTradingStrategy.getWeightDistanceDifference(); |
| | | // 距离权重 |
| | | Integer weightDistance = xpTradingStrategy.getWeightDistance(); |
| | | // 时间权重 |
| | | Integer weightTime = xpTradingStrategy.getWeightTime(); |
| | | // 电量权重 |
| | | Integer weightElectricity = xpTradingStrategy.getWeightElectricity(); |
| | | |
| | | // 找出最大的值是那个 |
| | | Integer max1 = Math.max(weightTimeDifference, Math.max(weightDistanceDifference, Math.max(weightDistance, Math.max(weightTime, weightElectricity)))); |
| | | |
| | | // 时间差 |
| | | if (max1.equals(weightTimeDifference)) { |
| | | for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) { |
| | | RouteAndFareDto routeAndFareDto = new RouteAndFareDto(); |
| | | LonLatDto lonLatDto = new LonLatDto(); |
| | | lonLatDto.setLongitude(vehiclePosition.getPoint().getX()); |
| | | lonLatDto.setLatitude(vehiclePosition.getPoint().getY()); |
| | | routeAndFareDto.setOrigin(lonLatDto); |
| | | LonLatDto lonLatDto1 = new LonLatDto(); |
| | | lonLatDto1.setLongitude(Double.valueOf(split[0])); |
| | | lonLatDto1.setLatitude(Double.valueOf(split[1])); |
| | | routeAndFareDto.setDestination(lonLatDto1); |
| | | routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule)); |
| | | R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto); |
| | | if (distanceAndDuration.getCode() == 200) { |
| | | // 送驾- 接驾 |
| | | Integer durationDifference = Integer.parseInt(duration) - distanceAndDuration.getData().getDuration(); |
| | | vehiclePosition.setTimeDifference(durationDifference); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (max1.equals(weightDistanceDifference)) { |
| | | for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) { |
| | | RouteAndFareDto routeAndFareDto = new RouteAndFareDto(); |
| | | LonLatDto lonLatDto = new LonLatDto(); |
| | | lonLatDto.setLongitude(vehiclePosition.getPoint().getX()); |
| | | lonLatDto.setLatitude(vehiclePosition.getPoint().getY()); |
| | | routeAndFareDto.setOrigin(lonLatDto); |
| | | LonLatDto lonLatDto1 = new LonLatDto(); |
| | | lonLatDto1.setLongitude(Double.valueOf(split[0])); |
| | | lonLatDto1.setLatitude(Double.valueOf(split[1])); |
| | | routeAndFareDto.setDestination(lonLatDto1); |
| | | routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule)); |
| | | R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto); |
| | | if (distanceAndDuration.getCode() == 200) { |
| | | // 送驾- 接驾 |
| | | Integer distanceDifference = Integer.parseInt(distance) - distanceAndDuration.getData().getDistance(); |
| | | vehiclePosition.setDistanceDifference(distanceDifference); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | if (max1.equals(weightDistance)) { |
| | | for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) { |
| | | RouteAndFareDto routeAndFareDto = new RouteAndFareDto(); |
| | | LonLatDto lonLatDto = new LonLatDto(); |
| | | lonLatDto.setLongitude(vehiclePosition.getPoint().getX()); |
| | | lonLatDto.setLatitude(vehiclePosition.getPoint().getY()); |
| | | routeAndFareDto.setOrigin(lonLatDto); |
| | | LonLatDto lonLatDto1 = new LonLatDto(); |
| | | lonLatDto1.setLongitude(Double.parseDouble(split[0])); |
| | | lonLatDto1.setLatitude(Double.parseDouble(split[1])); |
| | | |
| | | routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule)); |
| | | routeAndFareDto.setDestination(lonLatDto1); |
| | | // 调用地图 获取时间 |
| | | R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto); |
| | | if (r.getCode() == 200) { |
| | | vehiclePosition.setDistance(Double.valueOf(r.getData().getDistance())); |
| | | } else { |
| | | vehiclePosition.setDistance(0.0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (max1.equals(weightTime)) { |
| | | for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) { |
| | | RouteAndFareDto routeAndFareDto = new RouteAndFareDto(); |
| | | LonLatDto lonLatDto = new LonLatDto(); |
| | | lonLatDto.setLongitude(vehiclePosition.getPoint().getX()); |
| | | lonLatDto.setLatitude(vehiclePosition.getPoint().getY()); |
| | | routeAndFareDto.setOrigin(lonLatDto); |
| | | LonLatDto lonLatDto1 = new LonLatDto(); |
| | | lonLatDto1.setLongitude(Double.parseDouble(split[0])); |
| | | lonLatDto1.setLatitude(Double.parseDouble(split[1])); |
| | | |
| | | routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule)); |
| | | routeAndFareDto.setDestination(lonLatDto1); |
| | | // 调用地图 获取时间 |
| | | R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto); |
| | | if (r.getCode() == 200) { |
| | | vehiclePosition.setSecond(r.getData().getDuration()); |
| | | } else { |
| | | vehiclePosition.setSecond(0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (max1.equals(weightElectricity)) { |
| | | // 计算车的分数 分数最大是车的size |
| | | availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList()); |
| | | int size1 = tendencyElectricity; |
| | | // 做比对的分数 |
| | | int temp1 = availableVehiclesNearby.get(0).getCurrentElectricity(); |
| | | for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) { |
| | | vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size1); |
| | | if (temp1 != vehiclePosition.getCurrentElectricity()) { |
| | | size1--; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 算出总分 再来排序计算 |
| | | for (VehiclePositionVo vehiclePositionVo : availableVehiclesNearby) { |
| | | vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference() + vehiclePositionVo.getTimeDifference()); |
| | | } |
| | | availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList()); |
| | | |
| | | |
| | | int size2 = tendencyOrderValue; |
| | | // 做比对的分数 |
| | | double temp2 = availableVehiclesNearby.get(0).getOrderValueTotal(); |
| | | for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) { |
| | | vehiclePosition.setValueScore(vehiclePosition.getValueScore() + size2); |
| | | if (temp2 != vehiclePosition.getOrderValueTotal()) { |
| | | size2--; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | |
| | | RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo.getVin()); |
| | | lock.lock(10, TimeUnit.SECONDS); |
| | | System.err.println("队列:"+quoteName+" 车辆:"+vehiclePositionVo.getVin()+"订单"+orderNo); |
| | | System.err.println("队列:" + quoteName + " 车辆:" + vehiclePositionVo.getVin() + "订单" + orderNo); |
| | | try { |
| | | // VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id()); |
| | | R<XpVehicle> vehiclePositionR = xpVehicleClient.findByVehicleVin(vehiclePositionVo.getVin()); |
| | |
| | | } |
| | | // 关闭巡游单子 TODO |
| | | |
| | | AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo(); |
| | | addTaxiPassengerVo.setVin(vehiclePosition.getVehicleVin()); |
| | | addTaxiPassengerVo.setUid(uid); |
| | | addTaxiPassengerVo.setOrderNo(orderNo); |
| | | // TODO appid |
| | | addTaxiPassengerVo.setAppId(""); |
| | | |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setOrderId(xpOrder.getId()); |
| | | pushOrderDto.setVin(vehiclePosition.getVehicleVin()); |
| | | |
| | | |
| | | BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo); |
| | | if (baseVehicleUserDto!=null && baseVehicleUserDto.getCode() == 200) { |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setOrderId(xpOrder.getId()); |
| | | pushOrderDto.setVin(vehiclePosition.getVehicleVin()); |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | |
| | | |
| | | return; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | |
| | | lock.lock(10, TimeUnit.SECONDS); |
| | | try { |
| | | // 查询车辆状态 |
| | | R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin); |
| | | if(vehicleR.getCode()!=200){ |
| | | continue; |
| | | } |
| | | XpVehicle vehicleId1 = vehicleR.getData(); |
| | | R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin); |
| | | if (vehicleR.getCode() != 200) { |
| | | continue; |
| | | } |
| | | XpVehicle vehicleId1 = vehicleR.getData(); |
| | | if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) { |
| | | lock.unlock(); |
| | | continue; |
| | |
| | | addTaxiPassengerVo.setOrderNo(orderNo); |
| | | // TODO appid |
| | | addTaxiPassengerVo.setAppId(""); |
| | | BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo); |
| | | if (baseVehicleUserDto.getCode() == 200) { |
| | | |
| | | redisService.popFirstElement(quoteName); |
| | | lock.unlock(); |
| | | return; |
| | | } |
| | | |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setOrderId(xpOrder.getId()); |
| | | pushOrderDto.setVin(vehiclePosition.getVin()); |
| | | |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | } finally { |
| | |
| | | @SneakyThrows |
| | | public void reassignPushOrder(int count, String uid, Double longitude, Double latitude, String orderNo) { |
| | | System.out.println("进入推单环环节"); |
| | | if(count==0){ |
| | | count=1; |
| | | if (count == 0) { |
| | | count = 1; |
| | | } |
| | | // 订单状态 |
| | | R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo); |
| | |
| | | if (xpOrderR.getData().getStatus() != 1) { |
| | | return; |
| | | } |
| | | XpOrder data = xpOrderR.getData(); |
| | | XpTradingStrategy xpTradingStrategy = xpTradingStrategyService.getOne(null); |
| | | for (int i = 0; i < count; i++) { |
| | | log.info("进入找车环节"); |
| | |
| | | lock.lock(10, TimeUnit.SECONDS); |
| | | try { |
| | | // 查询车辆状态 |
| | | R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin); |
| | | if(vehicleR.getCode()!=200){ |
| | | continue; |
| | | } |
| | | XpVehicle vehicleId1 = vehicleR.getData(); |
| | | R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin); |
| | | if (vehicleR.getCode() != 200) { |
| | | continue; |
| | | } |
| | | XpVehicle vehicleId1 = vehicleR.getData(); |
| | | if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) { |
| | | lock.unlock(); |
| | | continue; |
| | | } |
| | | if (vehiclePosition.getHasOrder() == 1) { |
| | | // 关闭巡游单子 TODO |
| | | } |
| | | AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo(); |
| | | addTaxiPassengerVo.setVin(vehiclePosition.getVin()); |
| | | addTaxiPassengerVo.setUid(uid); |
| | | addTaxiPassengerVo.setOrderNo(orderNo); |
| | | // TODO appid |
| | | addTaxiPassengerVo.setAppId(""); |
| | | BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo); |
| | | if (baseVehicleUserDto.getCode() == 200) { |
| | | lock.unlock(); |
| | | return; |
| | | } |
| | | // 关闭巡游单子 TODO |
| | | |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setOrderId(data.getId()); |
| | | pushOrderDto.setVin(vehiclePosition.getVin()); |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | } catch (Exception e) { |
| | | |
| | | } finally { |