Pu Zhibing
2024-12-24 d09284975427910441eeaf59d34a4d50d2fd5fdc
UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -338,7 +338,8 @@
        //推单操作
        if(orderPrivateCar.getState() == 1){
            this.pushOrder(orderPrivateCar);
            Integer id = orderPrivateCar.getId();
            redisUtil.addListRight("push_order_ids", id.toString());
        }
        //添加消息
@@ -521,36 +522,8 @@
        if(orderPrivateCar.getState() != 1){
            return ResultUtil.error("订单已被司机接单,不能重复推送");
        }
        //处理摆渡订单的继续推单操作
        if(orderPrivateCar.getType() == 2){
            OrderCrossCityServiceImpl.pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), false);//还原标识数据
            List<OrderPrivateCar> list = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace()));
            List<Map<String, Integer>> orders = new ArrayList<>();
            for(OrderPrivateCar orderPrivateCar1 : list){
                if(orderPrivateCar1.getState() != 1){
                    return ResultUtil.error("订单已被司机接单,推单取消");
                }
                Map<String, Integer> map = new HashMap<>();
                map.put("orderType", 1);
                map.put("orderId", orderPrivateCar1.getId());
                orders.add(map);
            }
//            List<OrderTaxi> list1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace()));
//            for(OrderTaxi orderTaxi : list1){
//                if(orderTaxi.getState() != 1){
//                    return ResultUtil.error("订单已被司机接单,推单取消");
//                }
//                Map<String, Integer> map = new HashMap<>();
//                map.put("orderType", 2);
//                map.put("orderId", orderTaxi.getId());
//                orders.add(map);
//            }
            //开始重新推单
            orderCrossCityService.pushOrder(orders);
        }else{
            this.pushOrder(orderPrivateCar);
        }
        //继续将订单添加到推送列表中
        redisUtil.addListLeft("push_order_ids", id.toString());
        return ResultUtil.success();
    }
@@ -852,11 +825,23 @@
    public boolean pushOrder1(Integer id){
        try {
            OrderPrivateCar orderPrivateCar = this.selectById(id);
            if(1 != orderPrivateCar.getState()){
                return true;
            }
            long time = System.currentTimeMillis() - orderPrivateCar.getInsertTime().getTime();
            Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
            List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
            long pushTime = 0;
            if(null != querys && querys.size() > 0){
                pushTime = querys.stream().mapToInt(PushOrder::getPushTime).sum() * 1000;
            }
            if(time >= pushTime){
                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
                return true;
            }
            List<Driver> drivers = driverMapper.queryIdleDriver_(1, orderPrivateCar.getServerCarModelId(), query.getId());
            System.err.println("当前获取的司机:"+drivers);
            List<Driver> list = new ArrayList<>();
            System.err.println("当前获取的司机:"+ JSON.toJSONString(drivers));
        
            //找出距离最近且评分最高的司机
            Double dis = 100000D;
@@ -868,6 +853,7 @@
                    continue;
                }
                String value = redisUtil.getValue("DRIVER" + driver.getId());
                System.err.println("------" + value);
                if(null != value){
                    Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value);
                    double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
@@ -883,6 +869,7 @@
                    }
                }
            }
            System.err.println("------" + JSON.toJSONString(driver1));
            if(null != driver1){
                orderPrivateCar.setDriverId(driver1.getId());
                orderPrivateCar.setCarId(driver1.getCarId());
@@ -1394,28 +1381,33 @@
    @Override
    public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
        //计算预计距离和剩余时间
        String value = redisUtil.getValue("DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
        if(null == value || "".equals(value)){
            System.err.println("司机没有上传位置信息");
            //调用获取轨迹中的数据
            List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2);
            if(list.size() > 0){
                Map<String, Object> map = list.get(list.size() - 1);
                value = map.get("lon") + "," + map.get("lat");
            }
        }
        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
        String value = null;
        String d = "0";
        String t = "0";
        if(null == distance){
            System.err.println("查询距离出错了");
        }else{
            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
        if(null != orderPrivateCar.getDriverId()){
            //计算预计距离和剩余时间
            value = redisUtil.getValue("DRIVER" + orderPrivateCar.getDriverId());
            if(null == value || "".equals(value)){
                System.err.println("司机没有上传位置信息");
                //调用获取轨迹中的数据
                List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2);
                if(list.size() > 0){
                    Map<String, Object> map = list.get(list.size() - 1);
                    value = map.get("lon") + "," + map.get("lat");
                }
            }
            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
            if(null == distance){
                System.err.println("查询距离出错了");
            }else{
                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + "";
            }
        }
        OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
        orderServerWarpper.setOrderId(orderPrivateCar.getId());
        orderServerWarpper.setOrderType(1);
@@ -1432,7 +1424,7 @@
            orderServerWarpper.setLaveTime("0");
        }
        if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中
            distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
            if(null == distance){
                System.err.println("查询距离出错了");
            }else{