From 7e7462d129b81ed8cba5d05e218ae71c38c5efe1 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 15 六月 2026 17:32:48 +0800
Subject: [PATCH] 添加支付方式字段并优化订单处理逻辑

---
 ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java |   97 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 95 insertions(+), 2 deletions(-)

diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
index aac7884..abd6ce7 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
@@ -55,6 +55,21 @@
 
     @Autowired
     private ITDriverService tDriverService;
+
+    @Autowired
+    private ITOrderTaxiService tOrderTaxiService;
+
+    @Autowired
+    private ITOrderCrossCityService tOrderCrossCityService;
+
+    @Autowired
+    private ITCompanyCityService tCompanyCityService;
+
+    @Autowired
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
+    @Autowired
+    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
     
     @Autowired
     private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
@@ -596,7 +611,10 @@
     public Object add(TOrderPrivateCar privateCar) {
         TUser user = userService.selectOne(new EntityWrapper<TUser>().eq("phone", privateCar.getPassengersPhone()));
         if (ToolUtil.isNotEmpty(user)) {///  用户是平台用户
-            privateCar.setOrderNum("PRIVATE" + String.valueOf(1000000 + privateCar.selectList(null).size() + 1).substring(1));
+            if (hasUnfinishedTravelOrder(user.getId())) {
+                return new ErrorTip(500, "该乘客有未完成的订单");
+            }
+            privateCar.setOrderNum(getPrivateCarOrderNum());
             privateCar.setUserId(user.getId());
             privateCar.setState(1);
             privateCar.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
@@ -619,6 +637,7 @@
             } else {
                 privateCar.setOrderType(1);
             }
+            fillDispatchPrivateCarOrder(privateCar);
             tOrderPrivateCarService.insert(privateCar);
         } else {///  用户不是平台用户时
             TUser tUser = new TUser();
@@ -629,7 +648,7 @@
             userService.insert(tUser);
 
             ///  存入订单信息
-            privateCar.setOrderNum("PRIVATE" + String.valueOf(1000000 + tOrderPrivateCarService.selectList(null).size() + 1).substring(1));
+            privateCar.setOrderNum(getPrivateCarOrderNum());
             privateCar.setUserId(tUser.getId());
             privateCar.setState(1);
             privateCar.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
@@ -653,6 +672,7 @@
             } else {
                 privateCar.setOrderType(1);
             }
+            fillDispatchPrivateCarOrder(privateCar);
             tOrderPrivateCarService.insert(privateCar);
         }
 
@@ -664,4 +684,77 @@
         System.out.println("添加订单推单调用结果:" + result);
         return SUCCESS_TIP;
     }
+
+    private String getPrivateCarOrderNum() {
+        return "PR" + new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + UUIDUtil.getRandomCode().substring(0, 5);
+    }
+
+    private boolean hasUnfinishedTravelOrder(Integer userId) {
+        if (userId == null) {
+            return false;
+        }
+        return tOrderPrivateCarService.selectCount(new EntityWrapper<TOrderPrivateCar>()
+                .eq("isDelete", 1)
+                .eq("userId", userId)
+                .notIn("state", 8, 9, 10, 12)) > 0
+                || tOrderTaxiService.selectCount(new EntityWrapper<TOrderTaxi>()
+                .eq("isDelete", 1)
+                .eq("userId", userId)
+                .notIn("state", 8, 9, 10, 12)) > 0
+                || tOrderCrossCityService.selectCount(new EntityWrapper<TOrderCrossCity>()
+                .eq("isDelete", 1)
+                .eq("userId", userId)
+                .notIn("state", 8, 9, 10, 12)) > 0;
+    }
+
+    private void fillDispatchPrivateCarOrder(TOrderPrivateCar privateCar) {
+        privateCar.setIsDelete(1);
+        privateCar.setTotalPeopleNum(1);
+        fillPlacementAndCompany(privateCar);
+        fillEstimateDistance(privateCar);
+    }
+
+    private void fillPlacementAndCompany(TOrderPrivateCar privateCar) {
+        if (privateCar.getStartLon() == null || privateCar.getStartLat() == null) {
+            return;
+        }
+        try {
+            Map<String, String> geocode = gdMapGeocodingUtil.geocode(privateCar.getStartLon().toString(), privateCar.getStartLat().toString());
+            if (ToolUtil.isNotEmpty(geocode.get("address"))) {
+                privateCar.setPlacementAddress(geocode.get("address"));
+            }
+            if (ToolUtil.isNotEmpty(geocode.get("districtCode"))) {
+                TCompanyCity companyCity = tCompanyCityService.selectOne(new EntityWrapper<TCompanyCity>()
+                        .eq("areaCode", Integer.valueOf(geocode.get("districtCode")))
+                        .eq("state", 1));
+                if (companyCity != null) {
+                    privateCar.setCompanyId(companyCity.getCompanyId());
+                }
+            }
+        } catch (Exception e) {
+            System.err.println("管理端添加快车单补充下单地/公司失败:" + e.getMessage());
+        }
+    }
+
+    private void fillEstimateDistance(TOrderPrivateCar privateCar) {
+        if (privateCar.getStartLon() == null || privateCar.getStartLat() == null
+                || privateCar.getEndLon() == null || privateCar.getEndLat() == null) {
+            return;
+        }
+        try {
+            Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(
+                    privateCar.getStartLon() + "," + privateCar.getStartLat(),
+                    privateCar.getEndLon() + "," + privateCar.getEndLat(), 1);
+            if (distanceMap != null) {
+                if (ToolUtil.isNotEmpty(distanceMap.get("distance"))) {
+                    privateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
+                }
+                if (ToolUtil.isNotEmpty(distanceMap.get("duration"))) {
+                    privateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+                }
+            }
+        } catch (Exception e) {
+            System.err.println("管理端添加快车单补充预估距离失败:" + e.getMessage());
+        }
+    }
 }

--
Gitblit v1.7.1