From 5367f2172a955113068d6c97cde0b78c6c85fdf8 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 05 八月 2025 14:00:02 +0800
Subject: [PATCH] 改派

---
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  178 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 150 insertions(+), 28 deletions(-)

diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index aee5467..b5f8ad0 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -12,9 +12,13 @@
 import com.stylefeng.guns.modular.system.dao.CarServiceMapper;
 import com.stylefeng.guns.modular.system.dao.RegionMapper;
 import com.stylefeng.guns.modular.system.dao.SystemPriceMapper;
+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.model.OrderTaxi;
 import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -89,6 +93,13 @@
     
     @Resource
     private CarServiceMapper carServiceMapper;
+
+    @Resource
+    private UserInfoMapper userInfoMapper;
+
+
+    @Autowired
+    private TDriverPromotionActivityService driverPromotionActivityService;
     
     @Resource
     private RedisTemplate<String, Object> redisTemplate;
@@ -141,7 +152,7 @@
      * @throws Exception
      */
     @Override
-    public synchronized ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
+    public ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
         OrderPrivateCar orderPrivateCar = this.selectById(orderId);
         if(null == orderPrivateCar){
             return ResultUtil.error("订单已被抢了");
@@ -161,7 +172,7 @@
                     new EntityWrapper<OrderTaxi>()
                             .eq("type", 2)
                             .eq("userId", orderPrivateCar.getUserId())
-                            .ne("state", 1)
+                            .notIn("state", 1,11)
                             .eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId())
                             .eq("place", orderPrivateCar.getPlace())
             );
@@ -173,9 +184,15 @@
         if(orderPrivateCar.getState() == 10){
             return ResultUtil.error("订单已取消");
         }
-        if(orderPrivateCar.getState() != 1){
+        if(orderPrivateCar.getState() != 1 && orderPrivateCar.getState() != 11){
             return ResultUtil.error("手速有点慢哦,订单已被抢啦!");
         }
+
+        Integer oldDriverId = null;
+        if(orderPrivateCar.getState()==11){
+            oldDriverId= orderPrivateCar.getDriverId();
+        }
+
         Driver driver = driverService.selectById(uid);
         if(orderPrivateCar.getType() == 3){
             //批量订单
@@ -209,17 +226,63 @@
         orderPrivateCar.setSnatchOrderTime(new Date());
 
         //调用高德创建轨迹
-        String s = gdFalconUtil.selectTerminal(driver.getPhone());
-        String track = gdFalconUtil.createTrack(s);
-        orderPrivateCar.setTrackId(track);
+//        String s = gdFalconUtil.selectTerminal(driver.getPhone());
+//        String track = gdFalconUtil.createTrack(s);
+//        orderPrivateCar.setTrackId(track);
 
         //调用移动的小号接口
-        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
-            if(String.valueOf(map.get("code")).equals("200")){
-            orderPrivateCar.setTelX(map.get("telX"));
-            orderPrivateCar.setBindId(map.get("bindId"));
-        }
+//        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
+//            if(String.valueOf(map.get("code")).equals("200")){
+//            orderPrivateCar.setTelX(map.get("telX"));
+//            orderPrivateCar.setBindId(map.get("bindId"));
+//        }
 
+
+
+        // 是否推广订单
+        Integer promotion = isPromotion(orderPrivateCar.getUserId());
+        if(null != promotion){
+            orderPrivateCar.setPromotion(2);
+            Driver driver1 = driverService.selectById(promotion);
+            orderPrivateCar.setPromotionUser(driver1.getName());
+            orderPrivateCar.setPromotionPhone(driver1.getPhone());
+            orderPrivateCar.setPromotionDriverId(promotion);
+        }else{
+            orderPrivateCar.setPromotion(1);
+        }
+        
+        if(null == oldDriverId){
+            UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
+            Company company = companyService.selectById(driver.getCompanyId());
+            //调三方订单中心创建行程单
+            CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+            request.setOrderNo("PR" + orderPrivateCar.getId());
+            request.setCustomerId(userInfo.getOnconUUID());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            if(2 == orderPrivateCar.getPromotion()){
+                Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
+                request.setPromoterId(driver1.getEmpId().toString());
+            }
+            request.setServiceType(2);
+            String travelItinerary = OrderUtil.createTravelItinerary(request);
+            orderPrivateCar.setTravelId(travelItinerary);
+        }else{
+            //改派抢单
+            Company company1 = companyService.selectById(driver.getCompanyId());
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
+            request1.setOrderId(orderPrivateCar.getTravelId());
+            request1.setStatus(orderPrivateCar.getState());
+            request1.setDriverId(driver.getEmpId().toString());
+            if(2 == orderPrivateCar.getPromotion()){
+                Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
+                request1.setPromoterId(driver1.getEmpId().toString());
+            }
+            request1.setSupplierShopId(company1.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request1);
+        }
+        
         this.updateById(orderPrivateCar);
 
         //处理摆渡车的情况
@@ -259,14 +322,22 @@
         }
 
         //推送相关代码------------------start----------------
+        Integer finalOldDriverId = oldDriverId;
         new Thread(new Runnable() {
             @Override
             public void run() {
-                pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
-                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
-                if(orderPrivateCar.getType() == 2){
-                    pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
+                if(finalOldDriverId !=null){
+                    pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+                    pushUtil.pushOrderReassign(orderPrivateCar.getUserId(),1 , orderPrivateCar.getId(), 1);
+                    pushUtil.pushOrderReassign(finalOldDriverId,2, orderPrivateCar.getId(), 1);
+                }else {
+                    pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+                    pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+                    if(orderPrivateCar.getType() == 2){
+                        pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
+                    }
                 }
+
             }
         }).start();
 
@@ -279,23 +350,35 @@
 
         systemNoticeService.addSystemNotice(2, "您已成功抢得快车订单,请及时联系客户!", orderPrivateCar.getDriverId(), 1);
         systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderPrivateCar.getUserId(), 1);
-
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                if(pushMinistryOfTransport){
+    
+        if(pushMinistryOfTransport){
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
                     //上传数据
                     pushMinistryOfTransportUtil.orderCreate(orderId);
                     pushMinistryOfTransportUtil.orderMatch(orderId);
                 }
-            }
-        }).start();
-
+            }).start();
+        }
+        
+    
         return ResultUtil.success(orderPrivateCar.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;
 
+    }
     /**
      * 获取订单详情页(服务中的页面)
      * @param orderId
@@ -476,6 +559,20 @@
                 break;
         }
         this.updateById(orderPrivateCar);
+    
+        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+        Company company = companyService.selectById(driver.getCompanyId());
+        //中台修改订单状态
+        ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+        request.setOrderId(orderPrivateCar.getTravelId());
+        request.setStatus(orderPrivateCar.getState());
+        request.setDriverId(driver.getEmpId().toString());
+        if(2 == orderPrivateCar.getPromotion()){
+            Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
+            request.setPromoterId(driver1.getEmpId().toString());
+        }
+        request.setSupplierShopId(company.getEnterCode());
+        OrderUtil.modifyTravelItinerary(request);
 
         // TODO: 2020/6/5 推送状态
         OrderPrivateCar finalOrderPrivateCar = orderPrivateCar;
@@ -543,20 +640,33 @@
         orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney() + orderPrivateCar.getParkMoney() + orderPrivateCar.getRoadTollMoney());
         orderPrivateCar.setState(7);
         this.updateById(orderPrivateCar);
+        
+        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+        Company company = companyService.selectById(driver.getCompanyId());
+        //中台修改订单状态
+        ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+        request.setOrderId(orderPrivateCar.getTravelId());
+        request.setStatus(7);
+        request.setDriverId(driver.getEmpId().toString());
+        if(2 == orderPrivateCar.getPromotion()){
+            Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
+            request.setPromoterId(driver1.getEmpId().toString());
+        }
+        request.setSupplierShopId(company.getEnterCode());
+        OrderUtil.modifyTravelItinerary(request);
+        
 
         pushUtil.removeTask(orderId, 1);//删除定时任务,结束推送数据
         systemNoticeService.addSystemNotice(1, "司机已结束本次行程,谢谢使用", orderPrivateCar.getUserId(), 1);
 
         //回滚司机状态为空闲
         if(orderPrivateCar.getSpellSuccess()==0){
-            Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
             driver.setState(2);
             driverService.updateById(driver);
         }else{
             if(orderPrivateCar.getPid()==null){
                 Integer number = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6));
                 if(number<=0){
-                    Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                     driver.setState(2);
                     driverService.updateById(driver);
                 }
@@ -564,7 +674,6 @@
                 Integer number = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6));
                 Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar.getPid()).lt("state",6));
                 if(number<=0 && number1<=0){
-                    Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                     driver.setState(2);
                     driverService.updateById(driver);
                 }
@@ -725,12 +834,25 @@
         orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney() + orderPrivateCar.getParkMoney() + orderPrivateCar.getRoadTollMoney() + orderPrivateCar.getHolidayFee() + t);
         orderPrivateCar.setState(7);
         this.updateById(orderPrivateCar);
+    
+        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+        Company company1 = companyService.selectById(driver.getCompanyId());
+        //中台修改订单状态
+        ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
+        request1.setOrderId(orderPrivateCar.getTravelId());
+        request1.setStatus(orderPrivateCar.getState());
+        request1.setDriverId(driver.getEmpId().toString());
+        if(2 == orderPrivateCar.getPromotion()){
+            Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
+            request1.setPromoterId(driver1.getEmpId().toString());
+        }
+        request1.setSupplierShopId(company1.getEnterCode());
+        OrderUtil.modifyTravelItinerary(request1);
 
         pushUtil.removeTask(orderId, 1);//删除定时任务,结束推送数据
         systemNoticeService.addSystemNotice(1, "司机已结束本次行程,谢谢使用", orderPrivateCar.getUserId(), 1);
 
         //回滚司机状态为空闲
-        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
         driver.setState(2);
         driverService.updateById(driver);
 
@@ -774,7 +896,7 @@
         }
 
         Map<String, Object> map = new HashMap<>();
-        map.put("orderMoney", new BigDecimal(orderPrivateCar.getOrderMoney()).setScale(2,BigDecimal.ROUND_DOWN));//订单金额
+        map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:new BigDecimal(orderPrivateCar.getOrderMoney()).setScale(2,BigDecimal.ROUND_DOWN));//订单金额
         map.put("startMileage", orderPrivateCar.getStartMileage());//起步价
         map.put("startMoney", orderPrivateCar.getStartMoney());//起步价
         map.put("mileageKilometers", orderPrivateCar.getMileageKilometers());//里程费

--
Gitblit v1.7.1