From 10a7d157e32b7257f850c09617a40a5ff4efa081 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 19 八月 2025 11:35:33 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/QYTDriving

---
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java |  215 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 113 insertions(+), 102 deletions(-)

diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
index 9d9dda7..1d8081f 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -433,114 +433,125 @@
      */
     @Override
     public ResultUtil travelOrder(Integer uid, TravelOrder travelOrder) throws Exception {
-        List<Integer> state = Arrays.asList(101, 102, 103, 104, 105, 106, 107, 201, 401);
-        Order order = this.selectOne(new EntityWrapper<Order>().eq("userId", uid).eq("status", 1).in("state", state));
-        if(null != order){
-            return ResultUtil.error("您还有正在进行的订单");
+        boolean lock = redisUtil.lock(uid + "_travelOrder");
+        if(!lock){
+            return ResultUtil.error("系统繁忙,请稍后重试");
         }
-        AppUser appUser = appUserService.selectById(uid);
-        order = this.selectOne(new EntityWrapper<Order>().eq("userPhone", appUser.getPhone()).eq("status", 1).in("state", state));
-        if(null != order){
-            return ResultUtil.error("您还有正在进行的订单");
-        }
-
-        String startAddress = travelOrder.getStartAddress();
-        startAddress = startAddress.replaceAll("& #40;", "(");
-        startAddress = startAddress.replaceAll("& #41;", ")");
-        travelOrder.setStartAddress(startAddress);
-        if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
-            String endAddress = travelOrder.getEndAddress();
-            endAddress = endAddress.replaceAll("& #40;", "(");
-            endAddress = endAddress.replaceAll("& #41;", ")");
-            travelOrder.setEndAddress(endAddress);
-        }
-
-        order = new Order();
-        BeanUtils.copyProperties(travelOrder, order);
-        if(ToolUtil.isEmpty(travelOrder.getUserPhone())){
-            order.setUserPhone(appUser.getPhone());
-            order.setUserName(appUser.getNickname());
-        }
-        order.setUserId(uid);
-        order.setSource(1);
-        order.setHallOrder(0);
-        order.setStatus(1);
-        order.setCreateTime(new Date());
-        order.setState(null != travelOrder.getDriverId() ? 102 : 101);
-        Double d = 0D;
-        if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
-            Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
-            if(null == distance){
-                return ResultUtil.error("获取预估距离出错");
+        try {
+            List<Integer> state = Arrays.asList(101, 102, 103, 104, 105, 106, 107, 201, 401);
+            Order order = this.selectOne(new EntityWrapper<Order>().eq("userId", uid).eq("status", 1).in("state", state));
+            if(null != order){
+                return ResultUtil.error("您还有正在进行的订单");
             }
-            d = Double.valueOf(distance.get("distance")) / 1000;
-            order.setEstimatedMileage(d);
-            order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
-        }
-        String city = "";
-        Integer branchOfficeId = null;
-        District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString());
-        if(null != geocode){
-            String districtCode = geocode.getDistrictCode();
-            BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("districtCode", districtCode));
-            if(null == branchOffice){
-                String cityCode = geocode.getCityCode();
-                branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("cityCode", cityCode));
+            AppUser appUser = appUserService.selectById(uid);
+            order = this.selectOne(new EntityWrapper<Order>().eq("userPhone", appUser.getPhone()).eq("status", 1).in("state", state));
+            if(null != order){
+                return ResultUtil.error("您还有正在进行的订单");
+            }
+
+            String startAddress = travelOrder.getStartAddress();
+            startAddress = startAddress.replaceAll("& #40;", "(");
+            startAddress = startAddress.replaceAll("& #41;", ")");
+            travelOrder.setStartAddress(startAddress);
+            if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
+                String endAddress = travelOrder.getEndAddress();
+                endAddress = endAddress.replaceAll("& #40;", "(");
+                endAddress = endAddress.replaceAll("& #41;", ")");
+                travelOrder.setEndAddress(endAddress);
+            }
+
+            order = new Order();
+            BeanUtils.copyProperties(travelOrder, order);
+            if(ToolUtil.isEmpty(travelOrder.getUserPhone())){
+                order.setUserPhone(appUser.getPhone());
+                order.setUserName(appUser.getNickname());
+            }
+            order.setUserId(uid);
+            order.setSource(1);
+            order.setHallOrder(0);
+            order.setStatus(1);
+            order.setCreateTime(new Date());
+            order.setState(null != travelOrder.getDriverId() ? 102 : 101);
+            Double d = 0D;
+            if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
+                Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
+                if(null == distance){
+                    return ResultUtil.error("获取预估距离出错");
+                }
+                d = Double.valueOf(distance.get("distance")) / 1000;
+                order.setEstimatedMileage(d);
+                order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
+            }
+            String city = "";
+            Integer branchOfficeId = null;
+            District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString());
+            if(null != geocode){
+                String districtCode = geocode.getDistrictCode();
+                BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("districtCode", districtCode));
                 if(null == branchOffice){
-                    String provinceCode = geocode.getProvinceCode();
-                    branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("provinceCode", provinceCode));
+                    String cityCode = geocode.getCityCode();
+                    branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("cityCode", cityCode));
+                    if(null == branchOffice){
+                        String provinceCode = geocode.getProvinceCode();
+                        branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("provinceCode", provinceCode));
+                    }
+                }
+                if(null == branchOffice){
+                    return ResultUtil.error("起点暂无企业服务");
+                }
+                branchOfficeId = branchOffice.getId();
+            }
+
+            order.setCreateTime(new Date());
+            order = getOrderPrice(1, d, 0, order, city, branchOfficeId);
+            if(null != travelOrder.getDriverId()){
+                DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1));
+                if(null == driverWork){
+                    return ResultUtil.error("司机还未上班");
+                }
+                Driver driver = driverService.selectById(travelOrder.getDriverId());
+                if(driver.getServerStatus() == 2){
+                    return ResultUtil.error("司机正在服务中");
+                }
+                order.setAgentId(driver.getAgentId());
+                order.setBranchOfficeId(driver.getBranchOfficeId());
+                order.setOrderTakingTime(new Date());
+                driver.setServerStatus(2);
+                driverService.updateById(driver);
+                appUser.setCancelCount(0);
+                appUser.setIsException(1);
+                appUserService.updateById(appUser);
+            }
+
+            for (Integer i = 0; i < travelOrder.getDriverNum(); i++) {
+                order.setId(null);
+                order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
+                boolean insert = this.insert(order);
+                if(insert){
+                    //推送状态
+                    pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState());
+                    if(null != order.getDriverId()){
+                        PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+                        pushOrderInfoWarpper.setId(order.getId());
+                        pushOrderInfoWarpper.setState(order.getState());
+                        pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
+                    }else{
+                        //推单
+                        Order finalOrder = order;
+                        new Thread(()->{
+                            pushOrder(finalOrder.getId());
+                        }).start();
+                    }
                 }
             }
-            if(null == branchOffice){
-                return ResultUtil.error("起点暂无企业服务");
-            }
-            branchOfficeId = branchOffice.getId();
+            redisUtil.setStrValue("newOrder", "true");
+            return ResultUtil.success(order.getId());
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            redisUtil.unlock(uid + "_travelOrder");
         }
-
-        order.setCreateTime(new Date());
-        order = getOrderPrice(1, d, 0, order, city, branchOfficeId);
-        if(null != travelOrder.getDriverId()){
-            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1));
-            if(null == driverWork){
-                return ResultUtil.error("司机还未上班");
-            }
-            Driver driver = driverService.selectById(travelOrder.getDriverId());
-            if(driver.getServerStatus() == 2){
-                return ResultUtil.error("司机正在服务中");
-            }
-            order.setAgentId(driver.getAgentId());
-            order.setBranchOfficeId(driver.getBranchOfficeId());
-            order.setOrderTakingTime(new Date());
-            driver.setServerStatus(2);
-            driverService.updateById(driver);
-            appUser.setCancelCount(0);
-            appUser.setIsException(1);
-            appUserService.updateById(appUser);
-        }
-
-        for (Integer i = 0; i < travelOrder.getDriverNum(); i++) {
-            order.setId(null);
-            order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
-            boolean insert = this.insert(order);
-            if(insert){
-                //推送状态
-                pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState());
-                if(null != order.getDriverId()){
-                    PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
-                    pushOrderInfoWarpper.setId(order.getId());
-                    pushOrderInfoWarpper.setState(order.getState());
-                    pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
-                }else{
-                    //推单
-                    Order finalOrder = order;
-                    new Thread(()->{
-                        pushOrder(finalOrder.getId());
-                    }).start();
-                }
-            }
-        }
-        redisUtil.setStrValue("newOrder", "true");
-        return ResultUtil.success(order.getId());
+        return ResultUtil.error("系统异常");
     }
 
 

--
Gitblit v1.7.1