From ddba15cfd1d654dc41de5dfdc587e12d96d84f4f Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 04 八月 2025 17:44:54 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/QianYunTong

---
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java |  179 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 146 insertions(+), 33 deletions(-)

diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index 4035453..d1075d1 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/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,60 @@
         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);
+        }else{
+            orderTaxi.setPromotion(1);
         }
-
+        
+        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 +295,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 +329,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("state",1).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 +417,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 +521,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 +578,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 +631,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 +869,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 +880,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;
     }
 
 

--
Gitblit v1.7.1