From 07f3f658025af654ecdda9005ebbaf9575569207 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 10 十月 2025 15:15:29 +0800
Subject: [PATCH] 添加订单日志记录

---
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  188 +++++++++++++++++++++++++++++++---------------
 1 files changed, 126 insertions(+), 62 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..9d5fbdb 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
@@ -195,6 +195,9 @@
     @Value("${pushMinistryOfTransport}")
     private boolean pushMinistryOfTransport;
 
+    @Autowired
+    private IAppOperationLogService appOperationLogService;
+
 
 
     /**
@@ -215,9 +218,9 @@
      * @throws Exception
      */
     @Override
-    public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat,
-                                          String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,
-                                                                    BigDecimal estimatedPrice,String cityCode,Integer carIndex) throws Exception {
+    public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat,
+                                                       String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,
+                                                       BigDecimal estimatedPrice, String cityCode, Integer carIndex) throws Exception {
         long timeMillis = System.currentTimeMillis();
         //如果出行时间大于当前10分钟则默认为预约单
         if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){
@@ -364,6 +367,9 @@
             orderPrivateCar.setEstimatedPrice(data.getAmount());
             orderPrivateCar.setPayMethod(0);
             this.insert(orderPrivateCar);
+
+            appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
+
             BaseWarpper baseWarpper = new BaseWarpper();
             baseWarpper.setId(orderPrivateCar.getId());
             baseWarpper.setState(orderPrivateCar.getState());
@@ -376,7 +382,7 @@
             orderPrivateCar.setIsDelete(1);
             orderPrivateCar.setPayMethod(1);
             this.insert(orderPrivateCar);
-
+            appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
             if(orderSource == 2){//扫码下单
                 new Thread(new Runnable() {
                     @Override
@@ -410,61 +416,102 @@
                         if(drivers.size() > 0) {//有司机,直接指派给司机
                             Driver dr = null;
                             if (drivers.size() > 1) {
-                                List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机
-                                for (int i = 0; i < assignOrder.getPeople(); i++) {
-                                    Driver driver = null;
-                                    int m = 0;
-                                    int index = 0;
-                                    // 查询预约单
-                                    List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
-                                    List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
-                                    for (int j = 0; j < drivers.size(); j++) {
-                                        Driver driver1 = drivers.get(j);
-                                        if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) {
-                                            continue;
-                                        }
-                                        // 判断该司机是否有30分钟内预约单
-                                        long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) &&
-                                                DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count();
-                                        if (count > 0) {
-                                            continue;
-                                        }
-                                        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();
-                                            if ((0 == m && null == driver) || (d < m)) {
-                                                driver = drivers.get(j);
-                                                m = d;
-                                                index = j;
-                                            }
+                                List<Driver> ds = new ArrayList<>();
+                                double dis = assignOrder.getDistance() * 1000;
+                                // 查询预约单
+                                List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
+                                List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
+                                for (int j = 0; j < drivers.size(); j++) {
+                                    Driver driver1 = drivers.get(j);
+                                    driver1.setDistance(0D);
+                                    if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver1.getId())) {
+                                        continue;
+                                    }
+                                    // 判断该司机是否有30分钟内预约单
+                                    long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) &&
+                                            DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count();
+                                    if (count > 0) {
+                                        continue;
+                                    }
+                                    String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
+                                    if (null != value) {
+                                        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);
+                                        double d = Double.parseDouble(distance.get("distance"));
+                                        if(dis >= d){
+                                            driver1.setDistance(d);
+                                            ds.add(driver1);
                                         }
                                     }
-                                    ds.add(driver);
-                                    drivers.remove(index);
                                 }
 
-                                //再根据直线距离最短的司机中找出行驶距离最短的司机
-                                Integer m = 0;
-                                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())) {
-                                            dr = driver;
-                                            m = wgs84.intValue();
+                                if(!ds.isEmpty()){
+                                    ds.sort(new Comparator<Driver>() {
+                                        @Override
+                                        public int compare(Driver o1, Driver o2) {
+                                            return o1.getDistance().compareTo(o2.getDistance());
                                         }
-                                    }
+                                    });
+                                    appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(ds) + "\"}");
+                                    dr = ds.get(0);
                                 }
+
+
+
+
+
+
+//                                for (int i = 0; i < assignOrder.getPeople(); i++) {
+//                                    Driver driver = null;
+//                                    int m = 0;
+//                                    int index = 0;
+//                                    // 查询预约单
+//                                    List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
+//                                    List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
+//                                    for (int j = 0; j < drivers.size(); j++) {
+//                                        Driver driver1 = drivers.get(j);
+//                                        if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) {
+//                                            continue;
+//                                        }
+//                                        // 判断该司机是否有30分钟内预约单
+//                                        long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) &&
+//                                                DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count();
+//                                        if (count > 0) {
+//                                            continue;
+//                                        }
+//                                        String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
+//                                        if (null != value) {
+//                                            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);
+//                                            int d = Integer.parseInt(distance.get("distance"));
+//                                            if ((0 == m && null == driver) || (d < m)) {
+//                                                driver = drivers.get(j);
+//                                                m = d;
+//                                                index = j;
+//                                            }
+//                                        }
+//                                    }
+//                                    ds.add(driver);
+//                                    drivers.remove(index);
+//                                }
+//
+//                                //再根据直线距离最短的司机中找出行驶距离最短的司机
+//                                Integer m = 0;
+//                                for (Driver driver : ds) {
+//                                    String value = redisUtil.getValue("DRIVER" + driver.getId());
+//                                    if (null != value) {
+//                                        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 = distance1;
+//                                        }
+//                                    }
+//                                }
                             } else {
                                 List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
                                 if (orderPrivateCarss.size() == 0) {
                                     dr = drivers.get(0);
                                 }
+                                appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(dr) + "\"}");
                             }
 
                             if (Objects.nonNull(dr)) {
@@ -480,6 +527,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() {
@@ -987,6 +1035,7 @@
                         }
                     }
                 }
+                appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
                 this.deleteTask(id);//删除定时任务
 
                 new Thread(new Runnable() {
@@ -1222,6 +1271,8 @@
                             double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
                             int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
                             list = list.subList(0, lastIndex);//获取空闲司机中占比数据
+
+                            appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单,第" + i +"轮,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(list) + "\"}");
                             for(Driver driver : list){//开始进行推送
                                 // 判断该司机是否有30分钟内预约单
                                 long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId())
@@ -1254,9 +1305,12 @@
                             pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
                             orderIds.remove(orderPrivateCar.getId());
 
+
                             // 第三轮取消订单
                             orderPrivateCar.setState(10);
                             orderPrivateCarMapper.updateById(orderPrivateCar);
+
+                            appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单结束,无司机接单,自动取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
                             pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
                             // 添加站内信
                             systemNoticeService.addSystemNotice(1, "当前区域未能及时为您匹配到合适车辆。为避免耽误您的行程,系统已自动取消订单,建议您稍后重新尝试。", orderPrivateCar.getUserId(), 1);
@@ -1378,6 +1432,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 +1548,13 @@
                 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();
+                    appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户支付订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
                     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 +1584,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()){
                             //关闭订单,不允许支付
@@ -1692,7 +1753,8 @@
             }
     
             this.updateAllColumnById(orderPrivateCar);
-    
+            appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (payType == 1 ? "微信" : payType == 2 ? "支付宝" : "余额") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" +
+                    ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
             new Thread(new Runnable() {
                 @Override
                 public void run() {
@@ -1887,7 +1949,6 @@
         if(!lock){
             return;
         }
-
         try {
             PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, null);
             if(null != query){
@@ -1929,7 +1990,6 @@
 
                 // 判断先付还是后付
                 if(orderPrivateCar.getPayMethod() == 0){
-
                     if (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0 ) {
                         orderPrivateCar.setState(8);
                         orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+query.getAmount());
@@ -1998,6 +2058,10 @@
                         incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney());
                     }
                 }
+
+                appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (type == 1 ? "微信" : "支付宝") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" +
+                        ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
+
                 // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
                 new Thread(new Runnable() {
                     @Override

--
Gitblit v1.7.1