Pu Zhibing
2024-12-24 d09284975427910441eeaf59d34a4d50d2fd5fdc
UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -1349,7 +1349,7 @@
    public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
        OrderCrossCity orderCrossCity = this.selectById(orderId);
        //计算预计距离和剩余时间
        String value = redisUtil.getValue("DRIVER" + String.valueOf(orderCrossCity.getDriverId()));
        String value = redisUtil.getValue("DRIVER" + orderCrossCity.getDriverId());
        if(null == value || "".equals(value)){
            System.err.println("司机没有上传位置信息");
@@ -1655,74 +1655,11 @@
                    }
                    try {
                        if(orderType == 1){//专车
                            Thread.sleep(1000);
                            System.err.println("====="+orderId);
                            OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId);
                            System.err.println("====="+orderPrivateCar);
                            OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
                            Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
                            List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
                            for(int i = 1; i <= querys.size(); i++){
                                //订单被抢后的处理
                                Integer state = orderPrivateCarMapper.selectById(orderId).getState();
                                if(state != 1){
                                    //关闭其他推送线程
                                    Set<String> keySet = threadMap.keySet();
                                    for(String key : keySet){
                                        if(!key.equals(orderId + "_1")){
                                            Thread thread1 = threadMap.get(key);//中断线程
                                            if(null != thread1){
                                                thread1.interrupt();
                                            }
                                            threadMap.remove(key);
                                        }
                                    }
                                    //删除其他无效数据
                                    for(Map<String, Integer> map : datas){
                                        Integer orderType = map.get("orderType");
                                        Integer orderId1 = map.get("orderId");
                                        if(orderType == 1 && orderId != orderPrivateCar.getId()){
                                            orderPrivateCarMapper.deleteById(orderId1);
                                        }
                                        if(orderType == 2){
                                            orderTaxiMapper.deleteById(orderId1);
                                        }
                                    }
                                    break;
                                }
                                //开始进行推送的处理
                                PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
                                //获取空闲司机
                                List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
                                if(list.size() > 0){
                                    double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
                                    int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
                                    list = list.subList(0, lastIndex);//获取空闲司机中占比数据
                                    for(Driver driver : list){//开始进行推送
                                        boolean bo = false;
                                        for(Integer integer : integers){
                                            if(integer.compareTo(driver.getId()) == 0){
                                                bo = true;
                                                break;
                                            }
                                        }
                                        if(bo){
                                            continue;
                                        }
                                        pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime());
                                    }
                                }
                                //所有推送完后的处理
                                Boolean b = pushEndMap.get(orderPrivateCar.getCrossCityOrderId());
                                if(i == querys.size() && state == 1 && (null != b && !b.booleanValue())){
                                    pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
                                    OrderPrivateCarServiceImpl.orderIds.remove(orderPrivateCar.getId());
                                    pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识
                                    break;
                                }
                                Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间
                            //推单操作
                            if(orderPrivateCar.getState() == 1){
                                Integer id = orderPrivateCar.getId();
                                redisUtil.addListRight("push_order_ids", id.toString());
                            }
                        }