puzhibing
2023-06-30 f58cca364b731eac2d60a440ffaa804be3cd43fd
user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -554,6 +554,7 @@
     * 订单推送逻辑
     */
    public void pushOrder(Long orderId){
        try {
        Order order = this.selectById(orderId);
        /**
         * 1.先找最大推单范围内的优推司机 -》 距离最近
@@ -562,8 +563,28 @@
         *        合适司:积分 > 评分 > 距离
         *      3.司机没有接单直接将订单置入大厅
         */
            boolean lock = redisUtil.lock(5);
            if(!lock){
                int num1 = 1;
                while (num1 <= 10){
                    Thread.sleep(3000);//等待3秒
                    lock = redisUtil.lock(5);
                    if(lock){
                        break;
                    }else{
                        num1++;
                    }
                }
            }
            if(!lock){
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                redisUtil.unlock();
            }
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
        if(null == systemConfig){
                redisUtil.unlock();
            return;
        }
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
@@ -584,14 +605,12 @@
        Query query = Query.query(Criteria.where("location").withinSphere(circle));
        List<Location> locations = mongoTemplate.find(query, Location.class);
        List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
        logger.warn("范围内司机--》" + JSON.toJSONString(driverIds));
        Integer driver = null;
        YouTuiDriver youTuiDriver1 = null;
        if(driverIds.size() > 0){
            List<YouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<YouTuiDriver>().in("driverId", driverIds)
                    .eq("state", 2).last(" and (surplusQuantity > 0 or now() < endTime) and now() < failureTime"));
                        .eq("state", 2).last(" and surplusQuantity > 0 and now() < endTime and now() < failureTime"));
            Double d = null;
            logger.warn("优推司机--》" + JSON.toJSONString(youTuiDrivers));
            for (YouTuiDriver youTuiDriver : youTuiDrivers) {
                String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId());
                if(ToolUtil.isEmpty(value)){
@@ -611,7 +630,6 @@
                    d = wgs84;
                    driver = youTuiDriver.getDriverId();
                    youTuiDriver1 = youTuiDriver;
                    logger.warn("最优优推司机--》" + JSON.toJSONString(driver));
                }
            }
        }
@@ -636,11 +654,9 @@
                locations = mongoTemplate.find(query, Location.class);
                driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
                logger.warn("范围内司机--》" + JSON.toJSONString(driverIds));
                if(driverIds.size() > 0){
                    List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2)
                            .eq("serverStatus", 1).eq("openOrderQRCode", 0).eq("status", 1).in("id", driverIds));
                    logger.warn("范围内空闲司机--》" + JSON.toJSONString(drivers));
                    if(drivers.size() == 0){
                        continue;
                    }
@@ -657,6 +673,7 @@
                        if(null == driverWork){
                            continue;
                        }
                        if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                            integral = driver1.getIntegral();
                            score = driver1.getScore();
@@ -691,18 +708,31 @@
                }
            }
        }
        logger.warn("最终的司机--》" + JSON.toJSONString(driver));
        if(null != driver){
                //防止多笔订单推给一个司机
                Driver driver1 = driverService.selectById(driver);
                driver1.setServerStatus(2);
                driverService.updateById(driver1);
            pushUtil.pushGrabOrder(driver, 2, order.getId(), num4);
            //创建定时任务处理订单到大厅
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    Order order1 = OrderServiceImpl.this.selectById(order.getId());
                    if(order1.getState() == 101 || order1.getState() == 201){
                        if(order1.getState() != 101 && order1.getState() != 201 && order1.getState() != 301 && order1.getDriverId().compareTo(driver1.getId()) != 0){
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                        }
                        if(order1.getState() == 201 || order1.getState() == 301 || (order1.getState() == 101 && null == order1.getDriverId())){
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                        }
                        if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){
                        order1.setHallOrder(1);
                        OrderServiceImpl.this.updateById(order1);
                        ExtraPushOrder(order1);
                            ExtraPushOrder(order);
                    }
                }
            }, num4 * 1000);
@@ -711,6 +741,12 @@
            this.updateById(order);
            ExtraPushOrder(order);
        }
            redisUtil.unlock();
        }catch (Exception e){
            e.printStackTrace();
            redisUtil.unlock();
        }
    }
    public void ExtraPushOrder(Order order){