puzhibing
2 天以前 ba6b508a44cb1f0730c6a27a5d73b8d2ae8f1d4b
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -15,10 +15,10 @@
import com.supersavedriving.user.modular.system.util.MallBook.model.*;
import com.supersavedriving.user.modular.system.util.MallBook.util.Transfer;
import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest;
import com.supersavedriving.user.modular.system.util.juhe.WeatherUtil;
import com.supersavedriving.user.modular.system.util.mongodb.model.Location;
import com.supersavedriving.user.modular.system.warpper.*;
import io.swagger.models.auth.In;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -35,12 +35,11 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -77,6 +76,9 @@
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private RedissonClient redissonClient;
    @Autowired
    private MongoTemplate mongoTemplate;
@@ -433,8 +435,9 @@
     */
    @Override
    public ResultUtil travelOrder(Integer uid, TravelOrder travelOrder) throws Exception {
        boolean lock = redisUtil.lock(uid + "_travelOrder");
        if(!lock){
        RLock lock1 = redissonClient.getLock("travelOrder:" + uid);
        boolean lock2 = lock1.tryLock(5, 10, TimeUnit.SECONDS);
        if(!lock2){
            return ResultUtil.error("系统繁忙,请稍后重试");
        }
        try {
@@ -537,10 +540,7 @@
                        pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
                    }else{
                        //推单
                        Order finalOrder = order;
                        new Thread(()->{
                            pushOrder(finalOrder.getId());
                        }).start();
                        pushOrder(order.getId());
                    }
                }
            }
@@ -549,7 +549,7 @@
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            redisUtil.unlock(uid + "_travelOrder");
            lock1.unlock();
        }
        return ResultUtil.error("系统异常");
    }
@@ -561,6 +561,7 @@
     * 订单推送逻辑
     */
    public void pushOrder(Long orderId){
        RLock lock1 = redissonClient.getLock("pushOrder:" + orderId);
        try {
            Order order = this.selectById(orderId);
            /**
@@ -570,28 +571,14 @@
             *        合适司:积分 > 评分 > 距离
             *      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){
            boolean lock2 = lock1.tryLock(5, 10, TimeUnit.SECONDS);
            if(!lock2){
                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());
@@ -779,10 +766,10 @@
                ExtraPushOrder(order);
                redisUtil.setStrValue("lobbyOrder", "true");
            }
            redisUtil.unlock();
        }catch (Exception e){
            e.printStackTrace();
            redisUtil.unlock();
        }finally {
            lock1.unlock();
        }
    }