Pu Zhibing
2025-08-01 67e37149354a618af26545de5fe26138e57c1c35
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -8,12 +8,13 @@
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
import com.stylefeng.guns.modular.system.model.Company;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.OrderAdditionalFee;
import com.stylefeng.guns.modular.system.model.OrderPosition;
import com.stylefeng.guns.modular.system.dao.UserInfoMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.CreateTravelItineraryRequest;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
@@ -68,6 +69,12 @@
    @Autowired
    private IOrderAdditionalFeeService orderAdditionalFeeService;
    @Resource
    private UserInfoMapper userInfoMapper;
    @Autowired
    private TDriverPromotionActivityService driverPromotionActivityService;
@@ -133,13 +140,13 @@
     * @throws Exception
     */
    @Override
    public synchronized ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
    public ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
        OrderPrivateCar orderPrivateCar1 = orderPrivateCarService.selectById(orderId);
        if(null != orderPrivateCar1 && orderPrivateCar1.getType() == 3 && orderPrivateCar1.getState() != 1){
        if(null != orderPrivateCar1 && orderPrivateCar1.getType() == 3 && orderPrivateCar1.getState() != 1&& orderPrivateCar1.getState() != 11){
            return ResultUtil.error("订单已被抢了");
        }
        OrderTaxi orderTaxi = null;
        if(null != orderPrivateCar1 && orderPrivateCar1.getType() == 3 && orderPrivateCar1.getState() == 1){
        if(null != orderPrivateCar1 && orderPrivateCar1.getType() == 3 && orderPrivateCar1.getState() == 1&& orderPrivateCar1.getState() == 11){
            orderPrivateCarService.deleteById(orderId);
            OrderTaxi orderTaxi1 = setOrderTaxi(orderPrivateCar1);
            this.insert(orderTaxi1);
@@ -179,8 +186,13 @@
        if(orderTaxi.getState() == 10){
            return ResultUtil.error("订单已取消");
        }
        if(orderTaxi.getState() != 1){
        if(orderTaxi.getState() != 1 && orderTaxi.getState() != 11 ){
            return ResultUtil.error("手速有点慢哦,订单已被抢啦!");
        }
        Integer oldDriverId = null;
        if(orderTaxi.getState()==11){
            oldDriverId= orderTaxi.getDriverId();
        }
        Driver driver = driverService.selectById(uid);
        orderTaxi.setDriverId(uid);
@@ -191,17 +203,58 @@
        orderTaxi.setSnatchOrderTime(new Date());
        //调用高德创建轨迹
        String s = gdFalconUtil.selectTerminal(driver.getPhone());
        String track = gdFalconUtil.createTrack(s);
        orderTaxi.setTrackId(track);
//        String s = gdFalconUtil.selectTerminal(driver.getPhone());
//        String track = gdFalconUtil.createTrack(s);
//        orderTaxi.setTrackId(track);
//
//        //调用移动的小号接口
//        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
//        if(String.valueOf(map.get("code")).equals("200")){
//            orderTaxi.setTelX(map.get("telX"));
//            orderTaxi.setBindId(map.get("bindId"));
//        }
        //调用移动的小号接口
        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
        if(String.valueOf(map.get("code")).equals("200")){
            orderTaxi.setTelX(map.get("telX"));
            orderTaxi.setBindId(map.get("bindId"));
        // 是否推广订单
        Integer promotion = isPromotion(orderTaxi.getUserId());
        if(promotion!=null){
            orderTaxi.setPromotion(2);
            Driver driver1 = driverService.selectById(promotion);
            orderTaxi.setPromotionUser(driver1.getName());
            orderTaxi.setPromotionPhone(driver1.getPhone());
            orderTaxi.setPromotionDriverId(promotion);
        }
        if(null == oldDriverId){
            UserInfo userInfo = userInfoMapper.selectById(orderTaxi.getUserId());
            Company company = companyService.selectById(driver.getCompanyId());
            //调三方订单中心创建行程单
            CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
            request.setOrderNo("TA" + orderTaxi.getId());
            request.setCustomerId(userInfo.getOnconUUID());
            request.setDriverId(driver.getEmpId().toString());
            request.setSupplierShopId(company.getEnterCode());
            if(2 == orderTaxi.getPromotion()){
                Driver driver1 = driverService.selectById(orderTaxi.getPromotionDriverId());
                request.setPromoterId(driver1.getEmpId().toString());
            }
            request.setServiceType(1);
            String travelItinerary = OrderUtil.createTravelItinerary(request);
            orderTaxi.setTravelId(travelItinerary);
        }else{
            //改派抢单
            Company company1 = companyService.selectById(driver.getCompanyId());
            //中台修改订单状态
            ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
            request1.setOrderId(orderTaxi.getTravelId());
            request1.setStatus(orderTaxi.getState());
            request1.setDriverId(driver.getEmpId().toString());
            if(2 == orderTaxi.getPromotion()){
                Driver driver1 = driverService.selectById(orderTaxi.getPromotionDriverId());
                request1.setPromoterId(driver1.getEmpId().toString());
            }
            request1.setSupplierShopId(company1.getEnterCode());
            OrderUtil.modifyTravelItinerary(request1);
        }
        this.updateById(orderTaxi);
        if(orderTaxi.getType() == 2){
@@ -240,15 +293,25 @@
        //推送相关代码------------------start----------------
        OrderTaxi finalOrderTaxi = orderTaxi;
        Integer finalOldDriverId = oldDriverId;
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushUtil.pushOrderState(1, finalOrderTaxi.getUserId(), finalOrderTaxi.getId(), 2, finalOrderTaxi.getState());
                pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 2, finalOrderTaxi.getState());
                if(finalOrderTaxi.getType() == 2){
                    pushUtil.pushFerryOrderState(1, finalOrderTaxi.getUserId(), finalOrderTaxi.getId(), 2, 2);
                    System.err.println("----------------------------------推送摆渡订单-----------------------------");
                if(finalOldDriverId !=null){
                    // 推送3个 1推送原司机 2推送新司机 3推送用户
                    pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 2, finalOrderTaxi.getState());
                    pushUtil.pushOrderReassign(finalOrderTaxi.getUserId(),1 , finalOrderTaxi.getId(), 2);
                    pushUtil.pushOrderReassign(finalOldDriverId,2, finalOrderTaxi.getId(), 2);
                }else {
                    pushUtil.pushOrderState(1, finalOrderTaxi.getUserId(), finalOrderTaxi.getId(), 2, finalOrderTaxi.getState());
                    pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 2, finalOrderTaxi.getState());
                    if(finalOrderTaxi.getType() == 2){
                        pushUtil.pushFerryOrderState(1, finalOrderTaxi.getUserId(), finalOrderTaxi.getId(), 2, 2);
                        System.err.println("----------------------------------推送摆渡订单-----------------------------");
                    }
                }
            }
        }).start();
@@ -264,7 +327,18 @@
        return ResultUtil.success(orderTaxi.getId());
    }
    private Integer isPromotion(Integer userId){
        UserInfo userInfo = userInfoMapper.selectById(userId);
        if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
            String registAreaCode = userInfo.getRegistAreaCode();
            TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
            if(tDriverPromotionActivity!=null){
                return userInfo.getBindDriverId();
            }
        }
        return null;
    }
    public OrderTaxi setOrderTaxi(OrderPrivateCar orderPrivateCar){
@@ -341,9 +415,9 @@
        }
    
        //调用高德创建轨迹
        String s = gdFalconUtil.selectTerminal(driver.getPhone());
        String track = gdFalconUtil.createTrack(s);
        orderTaxi.setTrackId(track);
//        String s = gdFalconUtil.selectTerminal(driver.getPhone());
//        String track = gdFalconUtil.createTrack(s);
//        orderTaxi.setTrackId(track);
        //调用移动的小号接口 TODO 车载端使用真实号码
//        Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
@@ -445,6 +519,20 @@
                break;
        }
        this.updateById(orderTaxi);
        Driver driver = driverService.selectById(orderTaxi.getDriverId());
        Company company = companyService.selectById(driver.getCompanyId());
        //中台修改订单状态
        ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
        request.setOrderId(orderTaxi.getTravelId());
        request.setStatus(orderTaxi.getState());
        request.setDriverId(driver.getEmpId().toString());
        if(2 == orderTaxi.getPromotion()){
            Driver driver1 = driverService.selectById(orderTaxi.getPromotionDriverId());
            request.setPromoterId(driver1.getEmpId().toString());
        }
        request.setSupplierShopId(company.getEnterCode());
        OrderUtil.modifyTravelItinerary(request);
        // TODO: 2020/6/5 推送状态
        new Thread(new Runnable() {
@@ -488,9 +576,22 @@
            orderTaxi.setState(7);
        }
        this.updateById(orderTaxi);
        Driver driver = driverService.selectById(orderTaxi.getDriverId());
        Company company = companyService.selectById(driver.getCompanyId());
        //中台修改订单状态
        ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
        request.setOrderId(orderTaxi.getTravelId());
        request.setStatus(orderTaxi.getState());
        request.setDriverId(driver.getEmpId().toString());
        if(2 == orderTaxi.getPromotion()){
            Driver driver1 = driverService.selectById(orderTaxi.getPromotionDriverId());
            request.setPromoterId(driver1.getEmpId().toString());
        }
        request.setSupplierShopId(company.getEnterCode());
        OrderUtil.modifyTravelItinerary(request);
        //回滚司机状态为空闲
        Driver driver = driverService.selectById(orderTaxi.getDriverId());
        driver.setState(2);
        driverService.updateById(driver);
@@ -528,9 +629,22 @@
            orderTaxi.setState(7);
        }
        this.updateById(orderTaxi);
        Driver driver = driverService.selectById(orderTaxi.getDriverId());
        Company company1 = companyService.selectById(driver.getCompanyId());
        //中台修改订单状态
        ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
        request1.setOrderId(orderTaxi.getTravelId());
        request1.setStatus(orderTaxi.getState());
        request1.setDriverId(driver.getEmpId().toString());
        if(2 == orderTaxi.getPromotion()){
            Driver driver1 = driverService.selectById(orderTaxi.getPromotionDriverId());
            request1.setPromoterId(driver1.getEmpId().toString());
        }
        request1.setSupplierShopId(company1.getEnterCode());
        OrderUtil.modifyTravelItinerary(request1);
        //回滚司机状态为空闲
        Driver driver = driverService.selectById(orderTaxi.getDriverId());
        driver.setState(2);
        driverService.updateById(driver);
@@ -753,7 +867,7 @@
        }else{
            orderTaxi.setMileage(0D);
            this.updateById(orderTaxi);
//            return true;//第一条数据不作处理,直接存储
            return true;//第一条数据不作处理,直接存储
        }
        Map<String, Double> distance = geodesyUtil.getDistance(now, old);
        if(null != distance){
@@ -764,13 +878,10 @@
            if(orderTaxi.getState() == 5){//大于50米表示在移动,且正在服务中的时候存入里程
                orderTaxi.setMileage(new BigDecimal(orderTaxi.getMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                this.updateById(orderTaxi);
//                return true;
                return true;
            }
//            return false;
        }else{
            System.err.println("调用高德计算距离出错");
        }
        return true;
        return false;
    }