From 9a66aa395b78b5df07058560eec181a66d6db2b9 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 30 九月 2025 11:41:51 +0800
Subject: [PATCH] 优化指派逻辑

---
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |   45 ++++++++++++++++++++++++---------------------
 1 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 8b8cff2..bc09638 100644
--- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -431,11 +431,8 @@
                                         }
                                         String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
                                         if (null != value) {
-//                                Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离
-//                                Integer d = Integer.valueOf(distance1.get("distance"));
-                                            String[] split = value.split(",");
-                                            double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]));
-                                            int d = Double.valueOf(distance).intValue();
+                                            Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLat() + "," + orderPrivateCar.getStartLon(), value);
+                                            int d = distance1.get("WGS84").intValue();
                                             if ((0 == m && null == driver) || (d < m)) {
                                                 driver = drivers.get(j);
                                                 m = d;
@@ -452,11 +449,11 @@
                                 for (Driver driver : ds) {
                                     String value = redisUtil.getValue("DRIVER" + driver.getId());
                                     if (null != value) {
-                                        Map<String, Double> distance = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value);
-                                        Double wgs84 = distance.get("WGS84");
-                                        if ((0 == m && null == dr) || (wgs84.intValue() < m.intValue())) {
+                                        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1);
+                                        int distance1 = Integer.parseInt(distance.get("distance"));
+                                        if ((0 == m && null == dr) || (distance1 < m.intValue())) {
                                             dr = driver;
-                                            m = wgs84.intValue();
+                                            m = distance1;
                                         }
                                     }
                                 }
@@ -480,6 +477,7 @@
                                     dr.setState(3);
                                 }
                                 driverService.updateById(dr);
+                                redisUtil.setStrValue("DRIVER_ORDER" + dr.getId(), orderPrivateCar.getId().toString(), 600);
                                 new Thread(new Runnable() {
                                     @Override
                                     public void run() {
@@ -1378,6 +1376,11 @@
         if(!lock){
             return ResultUtil.error("系统繁忙,请稍后重试");
         }
+        String key = orderId + "_during_payment";
+        if(redisUtil.hasKey(key)){
+            return ResultUtil.error("支付中,不能重复发起支付");
+        }
+        redisUtil.setStrValue(key, UUIDUtil.getRandomCode(), 10);
         try {
             OrderPrivateCar orderPrivateCar = this.selectById(orderId);
             if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){
@@ -1489,16 +1492,12 @@
                 resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                 if(resultUtil.getCode()==200){
                     paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, null, 1, code);//添加预支付数据
-                    long millis = System.currentTimeMillis();
                     new Thread(()->{
-                        long time = millis;
-                        try {
-                            Thread.sleep(5000);
-                        } catch (InterruptedException e) {
-                            throw new RuntimeException(e);
-                        }
-                        //订单创建后15分钟
-                        while ((System.currentTimeMillis() - time) <= 900000) {
+                        int num = 1;
+                        int wait = 0;
+                        while (num <= 13) {
+                            int min = 5000;
+                            wait += (min * num);
                             OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderId);
                             if(orderPrivateCar1.getState() != 7){
                                 break;
@@ -1528,12 +1527,17 @@
                                     if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
                                     }
                                 }
-                                Thread.sleep(5000);
                             }catch (Exception e){
                                 e.printStackTrace();
+                            }finally {
+                                try {
+                                    Thread.sleep(wait);
+                                } catch (InterruptedException e) {
+                                    e.printStackTrace();
+                                }
+                                num++;
                             }
                         }
-                
                         OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderId);
                         if(7 == orderPrivateCar1.getState()){
                             //关闭订单,不允许支付
@@ -1887,7 +1891,6 @@
         if(!lock){
             return;
         }
-
         try {
             PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, null);
             if(null != query){

--
Gitblit v1.7.1